brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.3 KiB · b02788a Raw
398 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=aarch64-- | FileCheck %s --check-prefixes=ALL3 4define void @lshr_4bytes(ptr %src.ptr, ptr %byteOff.ptr, ptr %dst) nounwind {5; ALL-LABEL: lshr_4bytes:6; ALL:       // %bb.0:7; ALL-NEXT:    ldr w8, [x1]8; ALL-NEXT:    ldr w9, [x0]9; ALL-NEXT:    lsl w8, w8, #310; ALL-NEXT:    lsr w8, w9, w811; ALL-NEXT:    str w8, [x2]12; ALL-NEXT:    ret13  %src = load i32, ptr %src.ptr, align 114  %byteOff = load i32, ptr %byteOff.ptr, align 115  %bitOff = shl i32 %byteOff, 316  %res = lshr i32 %src, %bitOff17  store i32 %res, ptr %dst, align 118  ret void19}20define void @shl_4bytes(ptr %src.ptr, ptr %byteOff.ptr, ptr %dst) nounwind {21; ALL-LABEL: shl_4bytes:22; ALL:       // %bb.0:23; ALL-NEXT:    ldr w8, [x1]24; ALL-NEXT:    ldr w9, [x0]25; ALL-NEXT:    lsl w8, w8, #326; ALL-NEXT:    lsl w8, w9, w827; ALL-NEXT:    str w8, [x2]28; ALL-NEXT:    ret29  %src = load i32, ptr %src.ptr, align 130  %byteOff = load i32, ptr %byteOff.ptr, align 131  %bitOff = shl i32 %byteOff, 332  %res = shl i32 %src, %bitOff33  store i32 %res, ptr %dst, align 134  ret void35}36define void @ashr_4bytes(ptr %src.ptr, ptr %byteOff.ptr, ptr %dst) nounwind {37; ALL-LABEL: ashr_4bytes:38; ALL:       // %bb.0:39; ALL-NEXT:    ldr w8, [x1]40; ALL-NEXT:    ldr w9, [x0]41; ALL-NEXT:    lsl w8, w8, #342; ALL-NEXT:    asr w8, w9, w843; ALL-NEXT:    str w8, [x2]44; ALL-NEXT:    ret45  %src = load i32, ptr %src.ptr, align 146  %byteOff = load i32, ptr %byteOff.ptr, align 147  %bitOff = shl i32 %byteOff, 348  %res = ashr i32 %src, %bitOff49  store i32 %res, ptr %dst, align 150  ret void51}52 53define void @lshr_8bytes(ptr %src.ptr, ptr %byteOff.ptr, ptr %dst) nounwind {54; ALL-LABEL: lshr_8bytes:55; ALL:       // %bb.0:56; ALL-NEXT:    ldr x8, [x1]57; ALL-NEXT:    ldr x9, [x0]58; ALL-NEXT:    lsl x8, x8, #359; ALL-NEXT:    lsr x8, x9, x860; ALL-NEXT:    str x8, [x2]61; ALL-NEXT:    ret62  %src = load i64, ptr %src.ptr, align 163  %byteOff = load i64, ptr %byteOff.ptr, align 164  %bitOff = shl i64 %byteOff, 365  %res = lshr i64 %src, %bitOff66  store i64 %res, ptr %dst, align 167  ret void68}69define void @shl_8bytes(ptr %src.ptr, ptr %byteOff.ptr, ptr %dst) nounwind {70; ALL-LABEL: shl_8bytes:71; ALL:       // %bb.0:72; ALL-NEXT:    ldr x8, [x1]73; ALL-NEXT:    ldr x9, [x0]74; ALL-NEXT:    lsl x8, x8, #375; ALL-NEXT:    lsl x8, x9, x876; ALL-NEXT:    str x8, [x2]77; ALL-NEXT:    ret78  %src = load i64, ptr %src.ptr, align 179  %byteOff = load i64, ptr %byteOff.ptr, align 180  %bitOff = shl i64 %byteOff, 381  %res = shl i64 %src, %bitOff82  store i64 %res, ptr %dst, align 183  ret void84}85define void @ashr_8bytes(ptr %src.ptr, ptr %byteOff.ptr, ptr %dst) nounwind {86; ALL-LABEL: ashr_8bytes:87; ALL:       // %bb.0:88; ALL-NEXT:    ldr x8, [x1]89; ALL-NEXT:    ldr x9, [x0]90; ALL-NEXT:    lsl x8, x8, #391; ALL-NEXT:    asr x8, x9, x892; ALL-NEXT:    str x8, [x2]93; ALL-NEXT:    ret94  %src = load i64, ptr %src.ptr, align 195  %byteOff = load i64, ptr %byteOff.ptr, align 196  %bitOff = shl i64 %byteOff, 397  %res = ashr i64 %src, %bitOff98  store i64 %res, ptr %dst, align 199  ret void100}101 102define void @lshr_16bytes(ptr %src.ptr, ptr %byteOff.ptr, ptr %dst) nounwind {103; ALL-LABEL: lshr_16bytes:104; ALL:       // %bb.0:105; ALL-NEXT:    ldr x8, [x1]106; ALL-NEXT:    ldp x10, x9, [x0]107; ALL-NEXT:    lsl x8, x8, #3108; ALL-NEXT:    lsl x11, x9, #1109; ALL-NEXT:    and x12, x8, #0x38110; ALL-NEXT:    mvn w13, w8111; ALL-NEXT:    tst x8, #0x40112; ALL-NEXT:    lsr x10, x10, x12113; ALL-NEXT:    lsl x11, x11, x13114; ALL-NEXT:    lsr x9, x9, x12115; ALL-NEXT:    orr x8, x11, x10116; ALL-NEXT:    csel x10, xzr, x9, ne117; ALL-NEXT:    csel x8, x9, x8, ne118; ALL-NEXT:    stp x8, x10, [x2]119; ALL-NEXT:    ret120  %src = load i128, ptr %src.ptr, align 1121  %byteOff = load i128, ptr %byteOff.ptr, align 1122  %bitOff = shl i128 %byteOff, 3123  %res = lshr i128 %src, %bitOff124  store i128 %res, ptr %dst, align 1125  ret void126}127define void @shl_16bytes(ptr %src.ptr, ptr %byteOff.ptr, ptr %dst) nounwind {128; ALL-LABEL: shl_16bytes:129; ALL:       // %bb.0:130; ALL-NEXT:    ldr x8, [x1]131; ALL-NEXT:    ldp x9, x10, [x0]132; ALL-NEXT:    lsl x8, x8, #3133; ALL-NEXT:    lsr x11, x9, #1134; ALL-NEXT:    and x12, x8, #0x38135; ALL-NEXT:    mvn w13, w8136; ALL-NEXT:    tst x8, #0x40137; ALL-NEXT:    lsl x10, x10, x12138; ALL-NEXT:    lsr x11, x11, x13139; ALL-NEXT:    lsl x9, x9, x12140; ALL-NEXT:    orr x8, x10, x11141; ALL-NEXT:    csel x10, xzr, x9, ne142; ALL-NEXT:    csel x8, x9, x8, ne143; ALL-NEXT:    stp x10, x8, [x2]144; ALL-NEXT:    ret145  %src = load i128, ptr %src.ptr, align 1146  %byteOff = load i128, ptr %byteOff.ptr, align 1147  %bitOff = shl i128 %byteOff, 3148  %res = shl i128 %src, %bitOff149  store i128 %res, ptr %dst, align 1150  ret void151}152define void @ashr_16bytes(ptr %src.ptr, ptr %byteOff.ptr, ptr %dst) nounwind {153; ALL-LABEL: ashr_16bytes:154; ALL:       // %bb.0:155; ALL-NEXT:    ldr x8, [x1]156; ALL-NEXT:    ldp x10, x9, [x0]157; ALL-NEXT:    lsl x8, x8, #3158; ALL-NEXT:    lsl x11, x9, #1159; ALL-NEXT:    and x12, x8, #0x38160; ALL-NEXT:    mvn w13, w8161; ALL-NEXT:    tst x8, #0x40162; ALL-NEXT:    lsr x10, x10, x12163; ALL-NEXT:    lsl x11, x11, x13164; ALL-NEXT:    asr x12, x9, x12165; ALL-NEXT:    asr x9, x9, #63166; ALL-NEXT:    orr x8, x11, x10167; ALL-NEXT:    csel x9, x9, x12, ne168; ALL-NEXT:    csel x8, x12, x8, ne169; ALL-NEXT:    stp x8, x9, [x2]170; ALL-NEXT:    ret171  %src = load i128, ptr %src.ptr, align 1172  %byteOff = load i128, ptr %byteOff.ptr, align 1173  %bitOff = shl i128 %byteOff, 3174  %res = ashr i128 %src, %bitOff175  store i128 %res, ptr %dst, align 1176  ret void177}178 179define void @lshr_32bytes(ptr %src.ptr, ptr %byteOff.ptr, ptr %dst) nounwind {180; ALL-LABEL: lshr_32bytes:181; ALL:       // %bb.0:182; ALL-NEXT:    sub sp, sp, #64183; ALL-NEXT:    ldp x9, x8, [x0, #16]184; ALL-NEXT:    movi v0.2d, #0000000000000000185; ALL-NEXT:    ldr x10, [x1]186; ALL-NEXT:    ldr q1, [x0]187; ALL-NEXT:    stp x9, x8, [sp, #16]188; ALL-NEXT:    mov x8, sp189; ALL-NEXT:    and x9, x10, #0x18190; ALL-NEXT:    str q1, [sp]191; ALL-NEXT:    add x8, x8, x9192; ALL-NEXT:    lsl x9, x10, #3193; ALL-NEXT:    stp q0, q0, [sp, #32]194; ALL-NEXT:    ldp x11, x10, [x8, #16]195; ALL-NEXT:    mvn w13, w9196; ALL-NEXT:    ldp x8, x12, [x8]197; ALL-NEXT:    and x9, x9, #0x38198; ALL-NEXT:    lsl x14, x10, #1199; ALL-NEXT:    lsl x15, x11, #1200; ALL-NEXT:    lsr x11, x11, x9201; ALL-NEXT:    lsl x16, x12, #1202; ALL-NEXT:    lsr x10, x10, x9203; ALL-NEXT:    lsr x12, x12, x9204; ALL-NEXT:    lsl x14, x14, x13205; ALL-NEXT:    lsr x8, x8, x9206; ALL-NEXT:    lsl x9, x16, x13207; ALL-NEXT:    lsl x13, x15, x13208; ALL-NEXT:    orr x11, x14, x11209; ALL-NEXT:    orr x8, x9, x8210; ALL-NEXT:    orr x9, x12, x13211; ALL-NEXT:    stp x11, x10, [x2, #16]212; ALL-NEXT:    stp x8, x9, [x2]213; ALL-NEXT:    add sp, sp, #64214; ALL-NEXT:    ret215  %src = load i256, ptr %src.ptr, align 1216  %byteOff = load i256, ptr %byteOff.ptr, align 1217  %bitOff = shl i256 %byteOff, 3218  %res = lshr i256 %src, %bitOff219  store i256 %res, ptr %dst, align 1220  ret void221}222 223define void @lshr_32bytes_dwordOff(ptr %src.ptr, ptr %dwordOff.ptr, ptr %dst) nounwind {224; ALL-LABEL: lshr_32bytes_dwordOff:225; ALL:       // %bb.0:226; ALL-NEXT:    sub sp, sp, #64227; ALL-NEXT:    ldp x9, x8, [x0, #16]228; ALL-NEXT:    movi v0.2d, #0000000000000000229; ALL-NEXT:    ldr x10, [x1]230; ALL-NEXT:    ldr q1, [x0]231; ALL-NEXT:    stp x9, x8, [sp, #16]232; ALL-NEXT:    ubfiz x8, x10, #3, #2233; ALL-NEXT:    mov x9, sp234; ALL-NEXT:    str q1, [sp]235; ALL-NEXT:    stp q0, q0, [sp, #32]236; ALL-NEXT:    add x8, x9, x8237; ALL-NEXT:    ldp x10, x9, [x8, #16]238; ALL-NEXT:    ldr q0, [x8]239; ALL-NEXT:    str q0, [x2]240; ALL-NEXT:    stp x10, x9, [x2, #16]241; ALL-NEXT:    add sp, sp, #64242; ALL-NEXT:    ret243  %src = load i256, ptr %src.ptr, align 1244  %dwordOff = load i256, ptr %dwordOff.ptr, align 1245  %bitOff = shl i256 %dwordOff, 6246  %res = lshr i256 %src, %bitOff247  store i256 %res, ptr %dst, align 1248  ret void249}250 251define void @shl_32bytes(ptr %src.ptr, ptr %byteOff.ptr, ptr %dst) nounwind {252; ALL-LABEL: shl_32bytes:253; ALL:       // %bb.0:254; ALL-NEXT:    sub sp, sp, #64255; ALL-NEXT:    ldp x9, x8, [x0, #16]256; ALL-NEXT:    movi v0.2d, #0000000000000000257; ALL-NEXT:    ldr x10, [x1]258; ALL-NEXT:    ldr q1, [x0]259; ALL-NEXT:    stp x9, x8, [sp, #48]260; ALL-NEXT:    mov x8, sp261; ALL-NEXT:    and x9, x10, #0x18262; ALL-NEXT:    add x8, x8, #32263; ALL-NEXT:    stp q0, q0, [sp]264; ALL-NEXT:    str q1, [sp, #32]265; ALL-NEXT:    sub x8, x8, x9266; ALL-NEXT:    lsl x9, x10, #3267; ALL-NEXT:    ldp x10, x11, [x8]268; ALL-NEXT:    ldp x12, x8, [x8, #16]269; ALL-NEXT:    mvn w13, w9270; ALL-NEXT:    and x9, x9, #0x38271; ALL-NEXT:    lsr x14, x10, #1272; ALL-NEXT:    lsr x15, x11, #1273; ALL-NEXT:    lsl x11, x11, x9274; ALL-NEXT:    lsr x16, x12, #1275; ALL-NEXT:    lsl x10, x10, x9276; ALL-NEXT:    lsl x12, x12, x9277; ALL-NEXT:    lsr x14, x14, x13278; ALL-NEXT:    lsl x8, x8, x9279; ALL-NEXT:    lsr x9, x16, x13280; ALL-NEXT:    lsr x13, x15, x13281; ALL-NEXT:    orr x11, x11, x14282; ALL-NEXT:    orr x8, x8, x9283; ALL-NEXT:    orr x9, x12, x13284; ALL-NEXT:    stp x10, x11, [x2]285; ALL-NEXT:    stp x9, x8, [x2, #16]286; ALL-NEXT:    add sp, sp, #64287; ALL-NEXT:    ret288  %src = load i256, ptr %src.ptr, align 1289  %byteOff = load i256, ptr %byteOff.ptr, align 1290  %bitOff = shl i256 %byteOff, 3291  %res = shl i256 %src, %bitOff292  store i256 %res, ptr %dst, align 1293  ret void294}295 296define void @shl_32bytes_dwordOff(ptr %src.ptr, ptr %dwordOff.ptr, ptr %dst) nounwind {297; ALL-LABEL: shl_32bytes_dwordOff:298; ALL:       // %bb.0:299; ALL-NEXT:    sub sp, sp, #64300; ALL-NEXT:    ldp x9, x8, [x0, #16]301; ALL-NEXT:    movi v0.2d, #0000000000000000302; ALL-NEXT:    ldr x10, [x1]303; ALL-NEXT:    ldr q1, [x0]304; ALL-NEXT:    stp x9, x8, [sp, #48]305; ALL-NEXT:    mov x8, sp306; ALL-NEXT:    ubfiz x9, x10, #3, #2307; ALL-NEXT:    add x8, x8, #32308; ALL-NEXT:    stp q0, q1, [sp, #16]309; ALL-NEXT:    str q0, [sp]310; ALL-NEXT:    sub x8, x8, x9311; ALL-NEXT:    ldp x9, x10, [x8, #16]312; ALL-NEXT:    ldr q0, [x8]313; ALL-NEXT:    str q0, [x2]314; ALL-NEXT:    stp x9, x10, [x2, #16]315; ALL-NEXT:    add sp, sp, #64316; ALL-NEXT:    ret317  %src = load i256, ptr %src.ptr, align 1318  %dwordOff = load i256, ptr %dwordOff.ptr, align 1319  %bitOff = shl i256 %dwordOff, 6320  %res = shl i256 %src, %bitOff321  store i256 %res, ptr %dst, align 1322  ret void323}324 325define void @ashr_32bytes(ptr %src.ptr, ptr %byteOff.ptr, ptr %dst) nounwind {326; ALL-LABEL: ashr_32bytes:327; ALL:       // %bb.0:328; ALL-NEXT:    sub sp, sp, #64329; ALL-NEXT:    ldp x9, x8, [x0, #16]330; ALL-NEXT:    ldr x10, [x1]331; ALL-NEXT:    ldr q0, [x0]332; ALL-NEXT:    and x11, x10, #0x18333; ALL-NEXT:    stp x9, x8, [sp, #16]334; ALL-NEXT:    asr x8, x8, #63335; ALL-NEXT:    mov x9, sp336; ALL-NEXT:    str q0, [sp]337; ALL-NEXT:    add x9, x9, x11338; ALL-NEXT:    stp x8, x8, [sp, #48]339; ALL-NEXT:    stp x8, x8, [sp, #32]340; ALL-NEXT:    lsl x8, x10, #3341; ALL-NEXT:    ldp x11, x10, [x9, #16]342; ALL-NEXT:    ldp x9, x12, [x9]343; ALL-NEXT:    mvn w13, w8344; ALL-NEXT:    and x8, x8, #0x38345; ALL-NEXT:    lsl x14, x10, #1346; ALL-NEXT:    lsl x15, x11, #1347; ALL-NEXT:    lsr x11, x11, x8348; ALL-NEXT:    lsl x16, x12, #1349; ALL-NEXT:    asr x10, x10, x8350; ALL-NEXT:    lsr x12, x12, x8351; ALL-NEXT:    lsl x14, x14, x13352; ALL-NEXT:    lsr x8, x9, x8353; ALL-NEXT:    lsl x9, x16, x13354; ALL-NEXT:    lsl x13, x15, x13355; ALL-NEXT:    orr x11, x14, x11356; ALL-NEXT:    orr x8, x9, x8357; ALL-NEXT:    orr x9, x12, x13358; ALL-NEXT:    stp x11, x10, [x2, #16]359; ALL-NEXT:    stp x8, x9, [x2]360; ALL-NEXT:    add sp, sp, #64361; ALL-NEXT:    ret362  %src = load i256, ptr %src.ptr, align 1363  %byteOff = load i256, ptr %byteOff.ptr, align 1364  %bitOff = shl i256 %byteOff, 3365  %res = ashr i256 %src, %bitOff366  store i256 %res, ptr %dst, align 1367  ret void368}369 370define void @ashr_32bytes_dwordOff(ptr %src.ptr, ptr %dwordOff.ptr, ptr %dst) nounwind {371; ALL-LABEL: ashr_32bytes_dwordOff:372; ALL:       // %bb.0:373; ALL-NEXT:    sub sp, sp, #64374; ALL-NEXT:    ldp x9, x8, [x0, #16]375; ALL-NEXT:    ldr x10, [x1]376; ALL-NEXT:    ldr q0, [x0]377; ALL-NEXT:    stp x9, x8, [sp, #16]378; ALL-NEXT:    asr x8, x8, #63379; ALL-NEXT:    ubfiz x9, x10, #3, #2380; ALL-NEXT:    mov x10, sp381; ALL-NEXT:    str q0, [sp]382; ALL-NEXT:    stp x8, x8, [sp, #48]383; ALL-NEXT:    stp x8, x8, [sp, #32]384; ALL-NEXT:    add x8, x10, x9385; ALL-NEXT:    ldp x10, x9, [x8, #16]386; ALL-NEXT:    ldr q0, [x8]387; ALL-NEXT:    str q0, [x2]388; ALL-NEXT:    stp x10, x9, [x2, #16]389; ALL-NEXT:    add sp, sp, #64390; ALL-NEXT:    ret391  %src = load i256, ptr %src.ptr, align 1392  %dwordOff = load i256, ptr %dwordOff.ptr, align 1393  %bitOff = shl i256 %dwordOff, 6394  %res = ashr i256 %src, %bitOff395  store i256 %res, ptr %dst, align 1396  ret void397}398