brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.7 KiB · 5aeb996 Raw
443 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=arm -mattr=+v6t2 | FileCheck %s3 4%struct.F = type { [3 x i8], i8 }5 6@X = common global %struct.F zeroinitializer, align 4 ; <ptr> [#uses=1]7 8define void @f1([1 x i32] %f.coerce0) nounwind {9; CHECK-LABEL: f1:10; CHECK:       @ %bb.0: @ %entry11; CHECK-NEXT:    movw r0, :lower16:X12; CHECK-NEXT:    mov r2, #1013; CHECK-NEXT:    movt r0, :upper16:X14; CHECK-NEXT:    ldr r1, [r0]15; CHECK-NEXT:    bfi r1, r2, #22, #416; CHECK-NEXT:    str r1, [r0]17; CHECK-NEXT:    bx lr18entry:19  %0 = load i32, ptr @X, align 4 ; <i32> [#uses=1]20  %1 = and i32 %0, -62914561                      ; <i32> [#uses=1]21  %2 = or i32 %1, 41943040                        ; <i32> [#uses=1]22  store i32 %2, ptr @X, align 423  ret void24}25 26define i32 @f2(i32 %A, i32 %B) nounwind {27; CHECK-LABEL: f2:28; CHECK:       @ %bb.0: @ %entry29; CHECK-NEXT:    lsr r1, r1, #730; CHECK-NEXT:    bfi r0, r1, #7, #1631; CHECK-NEXT:    bx lr32entry:33  %and = and i32 %A, -8388481                     ; <i32> [#uses=1]34  %and2 = and i32 %B, 8388480                     ; <i32> [#uses=1]35  %or = or i32 %and2, %and                        ; <i32> [#uses=1]36  ret i32 %or37}38 39define i32 @f3(i32 %A, i32 %B) nounwind {40; CHECK-LABEL: f3:41; CHECK:       @ %bb.0: @ %entry42; CHECK-NEXT:    lsr r0, r0, #743; CHECK-NEXT:    bfi r1, r0, #7, #1644; CHECK-NEXT:    mov r0, r145; CHECK-NEXT:    bx lr46entry:47  %and = and i32 %A, 8388480                      ; <i32> [#uses=1]48  %and2 = and i32 %B, -8388481                    ; <i32> [#uses=1]49  %or = or i32 %and2, %and                        ; <i32> [#uses=1]50  ret i32 %or51}52 53; rdar://875205654define i32 @f4(i32 %a) nounwind {55; CHECK-LABEL: f4:56; CHECK:       @ %bb.0:57; CHECK-NEXT:    movw r1, #313758; CHECK-NEXT:    bfi r1, r0, #15, #559; CHECK-NEXT:    mov r0, r160; CHECK-NEXT:    bx lr61  %1 = shl i32 %a, 1562  %ins7 = and i32 %1, 101580863  %ins12 = or i32 %ins7, 313764  ret i32 %ins1265}66 67; rdar://845866368define i32 @f5(i32 %a, i32 %b) nounwind {69; CHECK-LABEL: f5:70; CHECK:       @ %bb.0: @ %entry71; CHECK-NEXT:    bfi r0, r1, #20, #472; CHECK-NEXT:    bx lr73entry:74  %0 = and i32 %a, -1572864175  %1 = shl i32 %b, 2076  %2 = and i32 %1, 1572864077  %3 = or i32 %2, %078  ret i32 %379}80 81; rdar://960903082define i32 @f6(i32 %a, i32 %b) nounwind readnone {83; CHECK-LABEL: f6:84; CHECK:       @ %bb.0: @ %entry85; CHECK-NEXT:    bfi r0, r1, #8, #986; CHECK-NEXT:    bx lr87entry:88  %and = and i32 %a, -13081789  %and2 = shl i32 %b, 890  %shl = and i32 %and2, 13081691  %or = or i32 %shl, %and92  ret i32 %or93}94 95define i32 @f7(i32 %x, i32 %y) {96; CHECK-LABEL: f7:97; CHECK:       @ %bb.0:98; CHECK-NEXT:    lsr r2, r0, #299; CHECK-NEXT:    bic r0, r1, #255100; CHECK-NEXT:    bfi r0, r2, #4, #1101; CHECK-NEXT:    bx lr102  %y2 = and i32 %y, 4294967040 ; 0xFFFFFF00103  %and = and i32 %x, 4104  %or = or i32 %y2, 16105  %cmp = icmp ne i32 %and, 0106  %sel = select i1 %cmp, i32 %or, i32 %y2107  ret i32 %sel108}109 110define i32 @f8(i32 %x, i32 %y) {111; CHECK-LABEL: f8:112; CHECK:       @ %bb.0:113; CHECK-NEXT:    lsr r2, r0, #2114; CHECK-NEXT:    bic r0, r1, #255115; CHECK-NEXT:    bfi r0, r2, #4, #1116; CHECK-NEXT:    bfi r0, r2, #5, #1117; CHECK-NEXT:    bx lr118  %y2 = and i32 %y, 4294967040 ; 0xFFFFFF00119  %and = and i32 %x, 4120  %or = or i32 %y2, 48121  %cmp = icmp ne i32 %and, 0122  %sel = select i1 %cmp, i32 %or, i32 %y2123  ret i32 %sel124}125 126define i32 @f9(i32 %x, i32 %y) {127; CHECK-LABEL: f9:128; CHECK:       @ %bb.0:129; CHECK-NEXT:    bic r1, r1, #255130; CHECK-NEXT:    tst r0, #4131; CHECK-NEXT:    orreq r1, r1, #48132; CHECK-NEXT:    mov r0, r1133; CHECK-NEXT:    bx lr134  %y2 = and i32 %y, 4294967040 ; 0xFFFFFF00135  %and = and i32 %x, 4136  %or = or i32 %y2, 48137  %cmp = icmp ne i32 %and, 0138  %sel = select i1 %cmp, i32 %y2, i32 %or139  ret i32 %sel140}141 142define i32 @f10(i32 %x, i32 %y) {143; CHECK-LABEL: f10:144; CHECK:       @ %bb.0:145; CHECK-NEXT:    lsr r2, r0, #1146; CHECK-NEXT:    bic r0, r1, #255147; CHECK-NEXT:    bfi r0, r2, #4, #2148; CHECK-NEXT:    bx lr149  %y2 = and i32 %y, 4294967040 ; 0xFFFFFF00150  %and = and i32 %x, 4151  %or = or i32 %y2, 32152  %cmp = icmp ne i32 %and, 0153  %sel = select i1 %cmp, i32 %or, i32 %y2154 155  %aand = and i32 %x, 2156  %aor = or i32 %sel, 16157  %acmp = icmp ne i32 %aand, 0158  %asel = select i1 %acmp, i32 %aor, i32 %sel159 160  ret i32 %asel161}162 163define i32 @f11(i32 %x, i32 %y) {164; CHECK-LABEL: f11:165; CHECK:       @ %bb.0:166; CHECK-NEXT:    lsr r2, r0, #1167; CHECK-NEXT:    bic r0, r1, #255168; CHECK-NEXT:    bfi r0, r2, #4, #3169; CHECK-NEXT:    bx lr170  %y2 = and i32 %y, 4294967040 ; 0xFFFFFF00171  %and = and i32 %x, 4172  %or = or i32 %y2, 32173  %cmp = icmp ne i32 %and, 0174  %sel = select i1 %cmp, i32 %or, i32 %y2175 176  %aand = and i32 %x, 2177  %aor = or i32 %sel, 16178  %acmp = icmp ne i32 %aand, 0179  %asel = select i1 %acmp, i32 %aor, i32 %sel180 181  %band = and i32 %x, 8182  %bor = or i32 %asel, 64183  %bcmp = icmp ne i32 %band, 0184  %bsel = select i1 %bcmp, i32 %bor, i32 %asel185 186  ret i32 %bsel187}188 189define i32 @f12(i32 %x, i32 %y) {190; CHECK-LABEL: f12:191; CHECK:       @ %bb.0:192; CHECK-NEXT:    lsr r2, r0, #2193; CHECK-NEXT:    bic r0, r1, #255194; CHECK-NEXT:    bfi r0, r2, #4, #1195; CHECK-NEXT:    bx lr196  %y2 = and i32 %y, 4294967040 ; 0xFFFFFF00197  %and = and i32 %x, 4198  %or = or i32 %y2, 16199  %cmp = icmp eq i32 %and, 0200  %sel = select i1 %cmp, i32 %y2, i32 %or201  ret i32 %sel202}203 204define i32 @f13(i32 %x, i32 %y) {205; CHECK-LABEL: f13:206; CHECK:       @ %bb.0:207; CHECK-NEXT:    and r0, r0, #4208; CHECK-NEXT:    bic r1, r1, #255209; CHECK-NEXT:    cmp r0, #42210; CHECK-NEXT:    orrne r1, r1, #16211; CHECK-NEXT:    mov r0, r1212; CHECK-NEXT:    bx lr213  %y2 = and i32 %y, 4294967040 ; 0xFFFFFF00214  %and = and i32 %x, 4215  %or = or i32 %y2, 16216  %cmp = icmp eq i32 %and, 42 ; Not comparing against zero!217  %sel = select i1 %cmp, i32 %y2, i32 %or218  ret i32 %sel219}220 221define i32 @bfi1(i32 %a, i32 %b) {222; CHECK-LABEL: bfi1:223; CHECK:       @ %bb.0:224; CHECK-NEXT:    and r2, r0, #1225; CHECK-NEXT:    bic r1, r1, #19226; CHECK-NEXT:    orr r1, r1, r2227; CHECK-NEXT:    and r2, r0, #16228; CHECK-NEXT:    orr r1, r1, r2229; CHECK-NEXT:    and r0, r0, #2230; CHECK-NEXT:    orr r0, r1, r0231; CHECK-NEXT:    bx lr232  %x1 = and i32 %a, 1233  %y1 = and i32 %b, 4294967294234  %z1 = or i32 %y1, %x1235  %x2 = and i32 %a, 16236  %y2 = and i32 %z1, 4294967279237  %z2 = or i32 %y2, %x2238  %x3 = and i32 %a, 2239  %y3 = and i32 %z2, 4294967293240  %z3 = or i32 %y3, %x3241  ret i32 %z3242}243 244define void @bfi1_use(i32 %a, i32 %b) {245; CHECK-LABEL: bfi1_use:246; CHECK:       @ %bb.0:247; CHECK-NEXT:    push {r11, lr}248; CHECK-NEXT:    mov r2, r1249; CHECK-NEXT:    lsr r3, r0, #4250; CHECK-NEXT:    bfi r2, r0, #0, #1251; CHECK-NEXT:    lsr r0, r0, #1252; CHECK-NEXT:    mov r1, r2253; CHECK-NEXT:    bfi r1, r3, #4, #1254; CHECK-NEXT:    mov r3, r1255; CHECK-NEXT:    bfi r3, r0, #1, #1256; CHECK-NEXT:    mov r0, r2257; CHECK-NEXT:    mov r2, r3258; CHECK-NEXT:    bl use259; CHECK-NEXT:    pop {r11, pc}260  %x1 = and i32 %a, 1261  %y1 = and i32 %b, 4294967294262  %z1 = or i32 %y1, %x1263  %x2 = and i32 %a, 16264  %y2 = and i32 %z1, 4294967279265  %z2 = or i32 %y2, %x2266  %x3 = and i32 %a, 2267  %y3 = and i32 %z2, 4294967293268  %z3 = or i32 %y3, %x3269  call void @use(i32 %z1, i32 %z2, i32 %z3, i32 %z3)270  ret void271}272 273define i32 @bfi2(i32 %a, i32 %b) {274; CHECK-LABEL: bfi2:275; CHECK:       @ %bb.0:276; CHECK-NEXT:    movw r2, #65148277; CHECK-NEXT:    movt r2, #65535278; CHECK-NEXT:    and r1, r1, r2279; CHECK-NEXT:    and r2, r0, #1280; CHECK-NEXT:    orr r1, r1, r2281; CHECK-NEXT:    and r2, r0, #2282; CHECK-NEXT:    orr r1, r1, r2283; CHECK-NEXT:    and r2, r0, #128284; CHECK-NEXT:    orr r1, r1, r2285; CHECK-NEXT:    and r0, r0, #256286; CHECK-NEXT:    orr r0, r1, r0287; CHECK-NEXT:    bx lr288  %x1 = and i32 %a, 1289  %y1 = and i32 %b, 4294967294290  %z1 = or i32 %y1, %x1291  %x2 = and i32 %a, 2292  %y2 = and i32 %z1, 4294967293293  %z2 = or i32 %y2, %x2294  %x3 = and i32 %a, 128295  %y3 = and i32 %z2, 4294967167296  %z3 = or i32 %y3, %x3297  %x4 = and i32 %a, 256298  %y4 = and i32 %z3, 4294967039299  %z4 = or i32 %y4, %x4300  ret i32 %z4301}302 303define void @bfi2_uses(i32 %a, i32 %b) {304; CHECK-LABEL: bfi2_uses:305; CHECK:       @ %bb.0:306; CHECK-NEXT:    push {r11, lr}307; CHECK-NEXT:    mov r12, r1308; CHECK-NEXT:    bfi r1, r0, #0, #2309; CHECK-NEXT:    bfi r12, r0, #0, #1310; CHECK-NEXT:    lsr r0, r0, #7311; CHECK-NEXT:    mov r2, r1312; CHECK-NEXT:    mov r3, r1313; CHECK-NEXT:    bfi r2, r0, #7, #1314; CHECK-NEXT:    bfi r3, r0, #7, #2315; CHECK-NEXT:    mov r0, r12316; CHECK-NEXT:    bl use317; CHECK-NEXT:    pop {r11, pc}318  %x1 = and i32 %a, 1319  %y1 = and i32 %b, 4294967294320  %z1 = or i32 %y1, %x1321  %x2 = and i32 %a, 2322  %y2 = and i32 %z1, 4294967293323  %z2 = or i32 %y2, %x2324  %x3 = and i32 %a, 128325  %y3 = and i32 %z2, 4294967167326  %z3 = or i32 %y3, %x3327  %x4 = and i32 %a, 256328  %y4 = and i32 %z3, 4294967039329  %z4 = or i32 %y4, %x4330  call void @use(i32 %z1, i32 %z2, i32 %z3, i32 %z4)331  ret void332}333 334define i32 @bfi3(i32 %a, i32 %b) {335; CHECK-LABEL: bfi3:336; CHECK:       @ %bb.0:337; CHECK-NEXT:    movw r2, #65148338; CHECK-NEXT:    movt r2, #65535339; CHECK-NEXT:    and r1, r1, r2340; CHECK-NEXT:    and r2, r0, #1341; CHECK-NEXT:    orr r1, r1, r2342; CHECK-NEXT:    and r2, r0, #128343; CHECK-NEXT:    orr r1, r1, r2344; CHECK-NEXT:    and r2, r0, #2345; CHECK-NEXT:    orr r1, r1, r2346; CHECK-NEXT:    and r0, r0, #256347; CHECK-NEXT:    orr r0, r1, r0348; CHECK-NEXT:    bx lr349  %x1 = and i32 %a, 1350  %y1 = and i32 %b, 4294967294351  %z1 = or i32 %y1, %x1352  %x2 = and i32 %a, 128353  %y2 = and i32 %z1, 4294967167354  %z2 = or i32 %y2, %x2355  %x3 = and i32 %a, 2356  %y3 = and i32 %z2, 4294967293357  %z3 = or i32 %y3, %x3358  %x4 = and i32 %a, 256359  %y4 = and i32 %z3, 4294967039360  %z4 = or i32 %y4, %x4361  ret i32 %z4362}363 364define void @bfi3_uses(i32 %a, i32 %b) {365; CHECK-LABEL: bfi3_uses:366; CHECK:       @ %bb.0:367; CHECK-NEXT:    push {r11, lr}368; CHECK-NEXT:    mov r12, r1369; CHECK-NEXT:    lsr r2, r0, #7370; CHECK-NEXT:    bfi r12, r0, #0, #1371; CHECK-NEXT:    lsr r3, r0, #1372; CHECK-NEXT:    lsr r0, r0, #8373; CHECK-NEXT:    mov r1, r12374; CHECK-NEXT:    bfi r1, r2, #7, #1375; CHECK-NEXT:    mov r2, r1376; CHECK-NEXT:    bfi r2, r3, #1, #1377; CHECK-NEXT:    mov r3, r2378; CHECK-NEXT:    bfi r3, r0, #8, #1379; CHECK-NEXT:    mov r0, r12380; CHECK-NEXT:    bl use381; CHECK-NEXT:    pop {r11, pc}382  %x1 = and i32 %a, 1383  %y1 = and i32 %b, 4294967294384  %z1 = or i32 %y1, %x1385  %x2 = and i32 %a, 128386  %y2 = and i32 %z1, 4294967167387  %z2 = or i32 %y2, %x2388  %x3 = and i32 %a, 2389  %y3 = and i32 %z2, 4294967293390  %z3 = or i32 %y3, %x3391  %x4 = and i32 %a, 256392  %y4 = and i32 %z3, 4294967039393  %z4 = or i32 %y4, %x4394  call void @use(i32 %z1, i32 %z2, i32 %z3, i32 %z4)395  ret void396}397 398define i32 @bfi4(i32 %A, i2 zeroext %BB, ptr %d) {399; CHECK-LABEL: bfi4:400; CHECK:       @ %bb.0: @ %entry401; CHECK-NEXT:    push {r11, lr}402; CHECK-NEXT:    lsr r12, r0, #1403; CHECK-NEXT:    and r3, r0, #8404; CHECK-NEXT:    bfi r1, r12, #2, #2405; CHECK-NEXT:    mov lr, #96406; CHECK-NEXT:    tst r0, #32407; CHECK-NEXT:    bfi r1, r12, #9, #2408; CHECK-NEXT:    movweq lr, #32409; CHECK-NEXT:    orr r1, r1, r3, lsl #8410; CHECK-NEXT:    and r3, r0, #64411; CHECK-NEXT:    and r0, r0, #128412; CHECK-NEXT:    orr r1, r1, lr413; CHECK-NEXT:    orr r1, r1, r3, lsl #1414; CHECK-NEXT:    str r1, [r2]415; CHECK-NEXT:    pop {r11, pc}416entry:417  %B = zext i2 %BB to i32418  %and = and i32 %A, 2419  %tobool12.not = icmp eq i32 %and, 0420  %or17 = or i32 %B, 516421  %spec.select112 = select i1 %tobool12.not, i32 %B, i32 %or17422  %and20 = and i32 %A, 4423  %tobool21.not = icmp eq i32 %and20, 0424  %or26 = or i32 %spec.select112, 1032425  %spec.select114 = select i1 %tobool21.not, i32 %spec.select112, i32 %or26426  store i32 %spec.select114, ptr %d, align 4427  %and29 = shl i32 %A, 8428  %l2 = and i32 %and29, 2048429  %l3 = or i32 %l2, %spec.select114430  %and38 = and i32 %A, 32431  %tobool39.not = icmp eq i32 %and38, 0432  %spec.select.v = select i1 %tobool39.not, i32 32, i32 96433  %spec.select = or i32 %l3, %spec.select.v434  %and45 = shl i32 %A, 1435  %l4 = and i32 %and45, 128436  %l5 = or i32 %l4, %spec.select437  store i32 %l5, ptr %d, align 4438  %and52 = and i32 %A, 128439  ret i32 %and52440}441 442declare void @use(i32, i32, i32, i32)443