brintos

brintos / llvm-project-archived public Read only

0
0
Text · 44.3 KiB · 7388855 Raw
1792 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=armv7a < %s | FileCheck %s --check-prefix=ARM3; RUN: llc -mtriple=armv6m < %s | FileCheck %s --check-prefix=THUMB4; RUN: llc -mtriple=armv7m < %s | FileCheck %s --check-prefix=THUMB25 6define i1 @cmp_ne_zero_and_rr(i32 %a, i32 %b) {7; ARM-LABEL: cmp_ne_zero_and_rr:8; ARM:       @ %bb.0:9; ARM-NEXT:    ands r0, r0, r110; ARM-NEXT:    movwne r0, #111; ARM-NEXT:    bx lr12;13; THUMB-LABEL: cmp_ne_zero_and_rr:14; THUMB:       @ %bb.0:15; THUMB-NEXT:    ands r0, r116; THUMB-NEXT:    subs r1, r0, #117; THUMB-NEXT:    sbcs r0, r118; THUMB-NEXT:    bx lr19;20; THUMB2-LABEL: cmp_ne_zero_and_rr:21; THUMB2:       @ %bb.0:22; THUMB2-NEXT:    ands r0, r123; THUMB2-NEXT:    it ne24; THUMB2-NEXT:    movne r0, #125; THUMB2-NEXT:    bx lr26  %and = and i32 %a, %b27  %res = icmp ne i32 %and, 028  ret i1 %res29}30 31define i1 @cmp_ne_zero_and_ri(i32 %a) {32; ARM-LABEL: cmp_ne_zero_and_ri:33; ARM:       @ %bb.0:34; ARM-NEXT:    ands r0, r0, #4235; ARM-NEXT:    movwne r0, #136; ARM-NEXT:    bx lr37;38; THUMB-LABEL: cmp_ne_zero_and_ri:39; THUMB:       @ %bb.0:40; THUMB-NEXT:    movs r1, #4241; THUMB-NEXT:    ands r0, r142; THUMB-NEXT:    subs r1, r0, #143; THUMB-NEXT:    sbcs r0, r144; THUMB-NEXT:    bx lr45;46; THUMB2-LABEL: cmp_ne_zero_and_ri:47; THUMB2:       @ %bb.0:48; THUMB2-NEXT:    ands r0, r0, #4249; THUMB2-NEXT:    it ne50; THUMB2-NEXT:    movne r0, #151; THUMB2-NEXT:    bx lr52  %and = and i32 %a, 4253  %res = icmp ne i32 %and, 054  ret i1 %res55}56 57define i1 @cmp_ne_zero_and_rsr(i32 %a, i32 %b, i32 %c) {58; ARM-LABEL: cmp_ne_zero_and_rsr:59; ARM:       @ %bb.0:60; ARM-NEXT:    ands r0, r0, r1, lsl r261; ARM-NEXT:    movwne r0, #162; ARM-NEXT:    bx lr63;64; THUMB-LABEL: cmp_ne_zero_and_rsr:65; THUMB:       @ %bb.0:66; THUMB-NEXT:    lsls r1, r267; THUMB-NEXT:    ands r0, r168; THUMB-NEXT:    subs r1, r0, #169; THUMB-NEXT:    sbcs r0, r170; THUMB-NEXT:    bx lr71;72; THUMB2-LABEL: cmp_ne_zero_and_rsr:73; THUMB2:       @ %bb.0:74; THUMB2-NEXT:    lsls r1, r275; THUMB2-NEXT:    ands r0, r176; THUMB2-NEXT:    it ne77; THUMB2-NEXT:    movne r0, #178; THUMB2-NEXT:    bx lr79  %sh = shl i32 %b, %c80  %and = and i32 %sh, %a81  %res = icmp ne i32 %and, 082  ret i1 %res83}84 85define i1 @cmp_ne_zero_and_rsi(i32 %a, i32 %b) {86; ARM-LABEL: cmp_ne_zero_and_rsi:87; ARM:       @ %bb.0:88; ARM-NEXT:    ands r0, r0, r1, lsr #1789; ARM-NEXT:    movwne r0, #190; ARM-NEXT:    bx lr91;92; THUMB-LABEL: cmp_ne_zero_and_rsi:93; THUMB:       @ %bb.0:94; THUMB-NEXT:    lsrs r1, r1, #1795; THUMB-NEXT:    ands r0, r196; THUMB-NEXT:    subs r1, r0, #197; THUMB-NEXT:    sbcs r0, r198; THUMB-NEXT:    bx lr99;100; THUMB2-LABEL: cmp_ne_zero_and_rsi:101; THUMB2:       @ %bb.0:102; THUMB2-NEXT:    ands.w r0, r0, r1, lsr #17103; THUMB2-NEXT:    it ne104; THUMB2-NEXT:    movne r0, #1105; THUMB2-NEXT:    bx lr106  %sh = lshr i32 %b, 17107  %and = and i32 %sh, %a108  %res = icmp ne i32 %and, 0109  ret i1 %res110}111 112define i1 @cmp_ne_zero_or_rr(i32 %a, i32 %b) {113; ARM-LABEL: cmp_ne_zero_or_rr:114; ARM:       @ %bb.0:115; ARM-NEXT:    orrs r0, r0, r1116; ARM-NEXT:    movwne r0, #1117; ARM-NEXT:    bx lr118;119; THUMB-LABEL: cmp_ne_zero_or_rr:120; THUMB:       @ %bb.0:121; THUMB-NEXT:    orrs r0, r1122; THUMB-NEXT:    subs r1, r0, #1123; THUMB-NEXT:    sbcs r0, r1124; THUMB-NEXT:    bx lr125;126; THUMB2-LABEL: cmp_ne_zero_or_rr:127; THUMB2:       @ %bb.0:128; THUMB2-NEXT:    orrs r0, r1129; THUMB2-NEXT:    it ne130; THUMB2-NEXT:    movne r0, #1131; THUMB2-NEXT:    bx lr132  %or = or i32 %a, %b133  %res = icmp ne i32 %or, 0134  ret i1 %res135}136 137define i1 @cmp_ne_zero_or_ri(i32 %a) {138; ARM-LABEL: cmp_ne_zero_or_ri:139; ARM:       @ %bb.0:140; ARM-NEXT:    orrs r0, r0, #42141; ARM-NEXT:    movwne r0, #1142; ARM-NEXT:    bx lr143;144; THUMB-LABEL: cmp_ne_zero_or_ri:145; THUMB:       @ %bb.0:146; THUMB-NEXT:    movs r1, #42147; THUMB-NEXT:    orrs r0, r1148; THUMB-NEXT:    subs r1, r0, #1149; THUMB-NEXT:    sbcs r0, r1150; THUMB-NEXT:    bx lr151;152; THUMB2-LABEL: cmp_ne_zero_or_ri:153; THUMB2:       @ %bb.0:154; THUMB2-NEXT:    orrs r0, r0, #42155; THUMB2-NEXT:    it ne156; THUMB2-NEXT:    movne r0, #1157; THUMB2-NEXT:    bx lr158  %or = or i32 %a, 42159  %res = icmp ne i32 %or, 0160  ret i1 %res161}162 163define i1 @cmp_ne_zero_or_rsr(i32 %a, i32 %b, i32 %c) {164; ARM-LABEL: cmp_ne_zero_or_rsr:165; ARM:       @ %bb.0:166; ARM-NEXT:    orrs r0, r0, r1, lsl r2167; ARM-NEXT:    movwne r0, #1168; ARM-NEXT:    bx lr169;170; THUMB-LABEL: cmp_ne_zero_or_rsr:171; THUMB:       @ %bb.0:172; THUMB-NEXT:    lsls r1, r2173; THUMB-NEXT:    orrs r0, r1174; THUMB-NEXT:    subs r1, r0, #1175; THUMB-NEXT:    sbcs r0, r1176; THUMB-NEXT:    bx lr177;178; THUMB2-LABEL: cmp_ne_zero_or_rsr:179; THUMB2:       @ %bb.0:180; THUMB2-NEXT:    lsls r1, r2181; THUMB2-NEXT:    orrs r0, r1182; THUMB2-NEXT:    it ne183; THUMB2-NEXT:    movne r0, #1184; THUMB2-NEXT:    bx lr185  %sh = shl i32 %b, %c186  %or = or i32 %sh, %a187  %res = icmp ne i32 %or, 0188  ret i1 %res189}190 191define i1 @cmp_ne_zero_or_rsi(i32 %a, i32 %b) {192; ARM-LABEL: cmp_ne_zero_or_rsi:193; ARM:       @ %bb.0:194; ARM-NEXT:    orrs r0, r0, r1, lsr #17195; ARM-NEXT:    movwne r0, #1196; ARM-NEXT:    bx lr197;198; THUMB-LABEL: cmp_ne_zero_or_rsi:199; THUMB:       @ %bb.0:200; THUMB-NEXT:    lsrs r1, r1, #17201; THUMB-NEXT:    orrs r0, r1202; THUMB-NEXT:    subs r1, r0, #1203; THUMB-NEXT:    sbcs r0, r1204; THUMB-NEXT:    bx lr205;206; THUMB2-LABEL: cmp_ne_zero_or_rsi:207; THUMB2:       @ %bb.0:208; THUMB2-NEXT:    orrs.w r0, r0, r1, lsr #17209; THUMB2-NEXT:    it ne210; THUMB2-NEXT:    movne r0, #1211; THUMB2-NEXT:    bx lr212  %sh = lshr i32 %b, 17213  %or = or i32 %sh, %a214  %res = icmp ne i32 %or, 0215  ret i1 %res216}217 218define i1 @cmp_ne_zero_xor_rr(i32 %a, i32 %b) {219; ARM-LABEL: cmp_ne_zero_xor_rr:220; ARM:       @ %bb.0:221; ARM-NEXT:    eors r0, r0, r1222; ARM-NEXT:    movwne r0, #1223; ARM-NEXT:    bx lr224;225; THUMB-LABEL: cmp_ne_zero_xor_rr:226; THUMB:       @ %bb.0:227; THUMB-NEXT:    eors r0, r1228; THUMB-NEXT:    subs r1, r0, #1229; THUMB-NEXT:    sbcs r0, r1230; THUMB-NEXT:    bx lr231;232; THUMB2-LABEL: cmp_ne_zero_xor_rr:233; THUMB2:       @ %bb.0:234; THUMB2-NEXT:    eors r0, r1235; THUMB2-NEXT:    it ne236; THUMB2-NEXT:    movne r0, #1237; THUMB2-NEXT:    bx lr238  %xor = xor i32 %a, %b239  %res = icmp ne i32 %xor, 0240  ret i1 %res241}242 243define i1 @cmp_ne_zero_xor_ri(i32 %a) {244; ARM-LABEL: cmp_ne_zero_xor_ri:245; ARM:       @ %bb.0:246; ARM-NEXT:    subs r0, r0, #42247; ARM-NEXT:    movwne r0, #1248; ARM-NEXT:    bx lr249;250; THUMB-LABEL: cmp_ne_zero_xor_ri:251; THUMB:       @ %bb.0:252; THUMB-NEXT:    subs r0, #42253; THUMB-NEXT:    subs r1, r0, #1254; THUMB-NEXT:    sbcs r0, r1255; THUMB-NEXT:    bx lr256;257; THUMB2-LABEL: cmp_ne_zero_xor_ri:258; THUMB2:       @ %bb.0:259; THUMB2-NEXT:    subs r0, #42260; THUMB2-NEXT:    it ne261; THUMB2-NEXT:    movne r0, #1262; THUMB2-NEXT:    bx lr263  %xor = xor i32 %a, 42264  %res = icmp ne i32 %xor, 0265  ret i1 %res266}267 268define i1 @cmp_ne_zero_xor_rsr(i32 %a, i32 %b, i32 %c) {269; ARM-LABEL: cmp_ne_zero_xor_rsr:270; ARM:       @ %bb.0:271; ARM-NEXT:    eors r0, r0, r1, lsl r2272; ARM-NEXT:    movwne r0, #1273; ARM-NEXT:    bx lr274;275; THUMB-LABEL: cmp_ne_zero_xor_rsr:276; THUMB:       @ %bb.0:277; THUMB-NEXT:    lsls r1, r2278; THUMB-NEXT:    eors r0, r1279; THUMB-NEXT:    subs r1, r0, #1280; THUMB-NEXT:    sbcs r0, r1281; THUMB-NEXT:    bx lr282;283; THUMB2-LABEL: cmp_ne_zero_xor_rsr:284; THUMB2:       @ %bb.0:285; THUMB2-NEXT:    lsls r1, r2286; THUMB2-NEXT:    eors r0, r1287; THUMB2-NEXT:    it ne288; THUMB2-NEXT:    movne r0, #1289; THUMB2-NEXT:    bx lr290  %sh = shl i32 %b, %c291  %xor = xor i32 %sh, %a292  %res = icmp ne i32 %xor, 0293  ret i1 %res294}295 296define i1 @cmp_ne_zero_xor_rsi(i32 %a, i32 %b) {297; ARM-LABEL: cmp_ne_zero_xor_rsi:298; ARM:       @ %bb.0:299; ARM-NEXT:    eors r0, r0, r1, lsr #17300; ARM-NEXT:    movwne r0, #1301; ARM-NEXT:    bx lr302;303; THUMB-LABEL: cmp_ne_zero_xor_rsi:304; THUMB:       @ %bb.0:305; THUMB-NEXT:    lsrs r1, r1, #17306; THUMB-NEXT:    eors r0, r1307; THUMB-NEXT:    subs r1, r0, #1308; THUMB-NEXT:    sbcs r0, r1309; THUMB-NEXT:    bx lr310;311; THUMB2-LABEL: cmp_ne_zero_xor_rsi:312; THUMB2:       @ %bb.0:313; THUMB2-NEXT:    eors.w r0, r0, r1, lsr #17314; THUMB2-NEXT:    it ne315; THUMB2-NEXT:    movne r0, #1316; THUMB2-NEXT:    bx lr317  %sh = lshr i32 %b, 17318  %xor = xor i32 %sh, %a319  %res = icmp ne i32 %xor, 0320  ret i1 %res321}322 323define i1 @cmp_ne_zero_and_not_rr(i32 %a, i32 %b) {324; ARM-LABEL: cmp_ne_zero_and_not_rr:325; ARM:       @ %bb.0:326; ARM-NEXT:    bics r0, r0, r1327; ARM-NEXT:    movwne r0, #1328; ARM-NEXT:    bx lr329;330; THUMB-LABEL: cmp_ne_zero_and_not_rr:331; THUMB:       @ %bb.0:332; THUMB-NEXT:    bics r0, r1333; THUMB-NEXT:    subs r1, r0, #1334; THUMB-NEXT:    sbcs r0, r1335; THUMB-NEXT:    bx lr336;337; THUMB2-LABEL: cmp_ne_zero_and_not_rr:338; THUMB2:       @ %bb.0:339; THUMB2-NEXT:    bics r0, r1340; THUMB2-NEXT:    it ne341; THUMB2-NEXT:    movne r0, #1342; THUMB2-NEXT:    bx lr343  %not = xor i32 %b, -1344  %and = and i32 %a, %not345  %res = icmp ne i32 %and, 0346  ret i1 %res347}348 349define i1 @cmp_ne_zero_and_not_ri(i32 %a) {350; ARM-LABEL: cmp_ne_zero_and_not_ri:351; ARM:       @ %bb.0:352; ARM-NEXT:    bics r0, r0, #42353; ARM-NEXT:    movwne r0, #1354; ARM-NEXT:    bx lr355;356; THUMB-LABEL: cmp_ne_zero_and_not_ri:357; THUMB:       @ %bb.0:358; THUMB-NEXT:    movs r1, #42359; THUMB-NEXT:    bics r0, r1360; THUMB-NEXT:    subs r1, r0, #1361; THUMB-NEXT:    sbcs r0, r1362; THUMB-NEXT:    bx lr363;364; THUMB2-LABEL: cmp_ne_zero_and_not_ri:365; THUMB2:       @ %bb.0:366; THUMB2-NEXT:    bics r0, r0, #42367; THUMB2-NEXT:    it ne368; THUMB2-NEXT:    movne r0, #1369; THUMB2-NEXT:    bx lr370  %not = xor i32 42, -1371  %and = and i32 %a, %not372  %res = icmp ne i32 %and, 0373  ret i1 %res374}375 376define i1 @cmp_ne_zero_and_not_rsr(i32 %a, i32 %b, i32 %c) {377; ARM-LABEL: cmp_ne_zero_and_not_rsr:378; ARM:       @ %bb.0:379; ARM-NEXT:    bics r0, r0, r1, lsl r2380; ARM-NEXT:    movwne r0, #1381; ARM-NEXT:    bx lr382;383; THUMB-LABEL: cmp_ne_zero_and_not_rsr:384; THUMB:       @ %bb.0:385; THUMB-NEXT:    lsls r1, r2386; THUMB-NEXT:    bics r0, r1387; THUMB-NEXT:    subs r1, r0, #1388; THUMB-NEXT:    sbcs r0, r1389; THUMB-NEXT:    bx lr390;391; THUMB2-LABEL: cmp_ne_zero_and_not_rsr:392; THUMB2:       @ %bb.0:393; THUMB2-NEXT:    lsls r1, r2394; THUMB2-NEXT:    bics r0, r1395; THUMB2-NEXT:    it ne396; THUMB2-NEXT:    movne r0, #1397; THUMB2-NEXT:    bx lr398  %sh = shl i32 %b, %c399  %not = xor i32 %sh, -1400  %and = and i32 %not, %a401  %res = icmp ne i32 %and, 0402  ret i1 %res403}404 405define i1 @cmp_ne_zero_and_not_rsi(i32 %a, i32 %b) {406; ARM-LABEL: cmp_ne_zero_and_not_rsi:407; ARM:       @ %bb.0:408; ARM-NEXT:    bics r0, r0, r1, lsr #17409; ARM-NEXT:    movwne r0, #1410; ARM-NEXT:    bx lr411;412; THUMB-LABEL: cmp_ne_zero_and_not_rsi:413; THUMB:       @ %bb.0:414; THUMB-NEXT:    lsrs r1, r1, #17415; THUMB-NEXT:    bics r0, r1416; THUMB-NEXT:    subs r1, r0, #1417; THUMB-NEXT:    sbcs r0, r1418; THUMB-NEXT:    bx lr419;420; THUMB2-LABEL: cmp_ne_zero_and_not_rsi:421; THUMB2:       @ %bb.0:422; THUMB2-NEXT:    bics.w r0, r0, r1, lsr #17423; THUMB2-NEXT:    it ne424; THUMB2-NEXT:    movne r0, #1425; THUMB2-NEXT:    bx lr426  %sh = lshr i32 %b, 17427  %not = xor i32 %sh, -1428  %and = and i32 %not, %a429  %res = icmp ne i32 %and, 0430  ret i1 %res431}432 433define i1 @cmp_ne_zero_shl_rr(i32 %a, i32 %b) {434; ARM-LABEL: cmp_ne_zero_shl_rr:435; ARM:       @ %bb.0:436; ARM-NEXT:    lsls r0, r0, r1437; ARM-NEXT:    movwne r0, #1438; ARM-NEXT:    bx lr439;440; THUMB-LABEL: cmp_ne_zero_shl_rr:441; THUMB:       @ %bb.0:442; THUMB-NEXT:    lsls r0, r1443; THUMB-NEXT:    subs r1, r0, #1444; THUMB-NEXT:    sbcs r0, r1445; THUMB-NEXT:    bx lr446;447; THUMB2-LABEL: cmp_ne_zero_shl_rr:448; THUMB2:       @ %bb.0:449; THUMB2-NEXT:    lsls r0, r1450; THUMB2-NEXT:    it ne451; THUMB2-NEXT:    movne r0, #1452; THUMB2-NEXT:    bx lr453    %sh = shl i32 %a, %b454    %cmp = icmp ne i32 %sh, 0455    ret i1 %cmp456}457 458define i1 @cmp_ne_zero_shl_ri(i32 %a) {459; ARM-LABEL: cmp_ne_zero_shl_ri:460; ARM:       @ %bb.0:461; ARM-NEXT:    lsls r0, r0, #7462; ARM-NEXT:    movwne r0, #1463; ARM-NEXT:    bx lr464;465; THUMB-LABEL: cmp_ne_zero_shl_ri:466; THUMB:       @ %bb.0:467; THUMB-NEXT:    lsls r0, r0, #7468; THUMB-NEXT:    subs r1, r0, #1469; THUMB-NEXT:    sbcs r0, r1470; THUMB-NEXT:    bx lr471;472; THUMB2-LABEL: cmp_ne_zero_shl_ri:473; THUMB2:       @ %bb.0:474; THUMB2-NEXT:    lsls r0, r0, #7475; THUMB2-NEXT:    it ne476; THUMB2-NEXT:    movne r0, #1477; THUMB2-NEXT:    bx lr478    %sh = shl i32 %a, 7479    %cmp = icmp ne i32 %sh, 0480    ret i1 %cmp481}482 483define i1 @cmp_ne_zero_lshr_rr(i32 %a, i32 %b) {484; ARM-LABEL: cmp_ne_zero_lshr_rr:485; ARM:       @ %bb.0:486; ARM-NEXT:    lsrs r0, r0, r1487; ARM-NEXT:    movwne r0, #1488; ARM-NEXT:    bx lr489;490; THUMB-LABEL: cmp_ne_zero_lshr_rr:491; THUMB:       @ %bb.0:492; THUMB-NEXT:    lsrs r0, r1493; THUMB-NEXT:    subs r1, r0, #1494; THUMB-NEXT:    sbcs r0, r1495; THUMB-NEXT:    bx lr496;497; THUMB2-LABEL: cmp_ne_zero_lshr_rr:498; THUMB2:       @ %bb.0:499; THUMB2-NEXT:    lsrs r0, r1500; THUMB2-NEXT:    it ne501; THUMB2-NEXT:    movne r0, #1502; THUMB2-NEXT:    bx lr503    %sh = lshr i32 %a, %b504    %cmp = icmp ne i32 %sh, 0505    ret i1 %cmp506}507 508define i1 @cmp_ne_zero_lshr_ri(i32 %a) {509; ARM-LABEL: cmp_ne_zero_lshr_ri:510; ARM:       @ %bb.0:511; ARM-NEXT:    lsrs r0, r0, #7512; ARM-NEXT:    movwne r0, #1513; ARM-NEXT:    bx lr514;515; THUMB-LABEL: cmp_ne_zero_lshr_ri:516; THUMB:       @ %bb.0:517; THUMB-NEXT:    lsrs r0, r0, #7518; THUMB-NEXT:    subs r1, r0, #1519; THUMB-NEXT:    sbcs r0, r1520; THUMB-NEXT:    bx lr521;522; THUMB2-LABEL: cmp_ne_zero_lshr_ri:523; THUMB2:       @ %bb.0:524; THUMB2-NEXT:    lsrs r0, r0, #7525; THUMB2-NEXT:    it ne526; THUMB2-NEXT:    movne r0, #1527; THUMB2-NEXT:    bx lr528    %sh = lshr i32 %a, 7529    %cmp = icmp ne i32 %sh, 0530    ret i1 %cmp531}532 533define i1 @cmp_ne_zero_ashr_rr(i32 %a, i32 %b) {534; ARM-LABEL: cmp_ne_zero_ashr_rr:535; ARM:       @ %bb.0:536; ARM-NEXT:    asrs r0, r0, r1537; ARM-NEXT:    movwne r0, #1538; ARM-NEXT:    bx lr539;540; THUMB-LABEL: cmp_ne_zero_ashr_rr:541; THUMB:       @ %bb.0:542; THUMB-NEXT:    asrs r0, r1543; THUMB-NEXT:    subs r1, r0, #1544; THUMB-NEXT:    sbcs r0, r1545; THUMB-NEXT:    bx lr546;547; THUMB2-LABEL: cmp_ne_zero_ashr_rr:548; THUMB2:       @ %bb.0:549; THUMB2-NEXT:    asrs r0, r1550; THUMB2-NEXT:    cmp r0, #0551; THUMB2-NEXT:    it ne552; THUMB2-NEXT:    movne r0, #1553; THUMB2-NEXT:    bx lr554    %sh = ashr i32 %a, %b555    %cmp = icmp ne i32 %sh, 0556    ret i1 %cmp557}558 559define i1 @cmp_ne_zero_ashr_ri(i32 %a) {560; ARM-LABEL: cmp_ne_zero_ashr_ri:561; ARM:       @ %bb.0:562; ARM-NEXT:    asrs r0, r0, #7563; ARM-NEXT:    movwne r0, #1564; ARM-NEXT:    bx lr565;566; THUMB-LABEL: cmp_ne_zero_ashr_ri:567; THUMB:       @ %bb.0:568; THUMB-NEXT:    asrs r0, r0, #7569; THUMB-NEXT:    subs r1, r0, #1570; THUMB-NEXT:    sbcs r0, r1571; THUMB-NEXT:    bx lr572;573; THUMB2-LABEL: cmp_ne_zero_ashr_ri:574; THUMB2:       @ %bb.0:575; THUMB2-NEXT:    asrs r0, r0, #7576; THUMB2-NEXT:    cmp r0, #0577; THUMB2-NEXT:    it ne578; THUMB2-NEXT:    movne r0, #1579; THUMB2-NEXT:    bx lr580    %sh = ashr i32 %a, 7581    %cmp = icmp ne i32 %sh, 0582    ret i1 %cmp583}584 585define i1 @cmp_eq_zero_and_rr(i32 %a, i32 %b) {586; ARM-LABEL: cmp_eq_zero_and_rr:587; ARM:       @ %bb.0:588; ARM-NEXT:    and r0, r0, r1589; ARM-NEXT:    clz r0, r0590; ARM-NEXT:    lsr r0, r0, #5591; ARM-NEXT:    bx lr592;593; THUMB-LABEL: cmp_eq_zero_and_rr:594; THUMB:       @ %bb.0:595; THUMB-NEXT:    ands r0, r1596; THUMB-NEXT:    rsbs r1, r0, #0597; THUMB-NEXT:    adcs r0, r1598; THUMB-NEXT:    bx lr599;600; THUMB2-LABEL: cmp_eq_zero_and_rr:601; THUMB2:       @ %bb.0:602; THUMB2-NEXT:    ands r0, r1603; THUMB2-NEXT:    clz r0, r0604; THUMB2-NEXT:    lsrs r0, r0, #5605; THUMB2-NEXT:    bx lr606  %and = and i32 %a, %b607  %res = icmp eq i32 %and, 0608  ret i1 %res609}610 611define i1 @cmp_eq_zero_and_ri(i32 %a) {612; ARM-LABEL: cmp_eq_zero_and_ri:613; ARM:       @ %bb.0:614; ARM-NEXT:    and r0, r0, #42615; ARM-NEXT:    clz r0, r0616; ARM-NEXT:    lsr r0, r0, #5617; ARM-NEXT:    bx lr618;619; THUMB-LABEL: cmp_eq_zero_and_ri:620; THUMB:       @ %bb.0:621; THUMB-NEXT:    movs r1, #42622; THUMB-NEXT:    ands r0, r1623; THUMB-NEXT:    rsbs r1, r0, #0624; THUMB-NEXT:    adcs r0, r1625; THUMB-NEXT:    bx lr626;627; THUMB2-LABEL: cmp_eq_zero_and_ri:628; THUMB2:       @ %bb.0:629; THUMB2-NEXT:    and r0, r0, #42630; THUMB2-NEXT:    clz r0, r0631; THUMB2-NEXT:    lsrs r0, r0, #5632; THUMB2-NEXT:    bx lr633  %and = and i32 %a, 42634  %res = icmp eq i32 %and, 0635  ret i1 %res636}637 638define i1 @cmp_eq_zero_and_rsr(i32 %a, i32 %b, i32 %c) {639; ARM-LABEL: cmp_eq_zero_and_rsr:640; ARM:       @ %bb.0:641; ARM-NEXT:    and r0, r0, r1, lsl r2642; ARM-NEXT:    clz r0, r0643; ARM-NEXT:    lsr r0, r0, #5644; ARM-NEXT:    bx lr645;646; THUMB-LABEL: cmp_eq_zero_and_rsr:647; THUMB:       @ %bb.0:648; THUMB-NEXT:    lsls r1, r2649; THUMB-NEXT:    ands r0, r1650; THUMB-NEXT:    rsbs r1, r0, #0651; THUMB-NEXT:    adcs r0, r1652; THUMB-NEXT:    bx lr653;654; THUMB2-LABEL: cmp_eq_zero_and_rsr:655; THUMB2:       @ %bb.0:656; THUMB2-NEXT:    lsls r1, r2657; THUMB2-NEXT:    ands r0, r1658; THUMB2-NEXT:    clz r0, r0659; THUMB2-NEXT:    lsrs r0, r0, #5660; THUMB2-NEXT:    bx lr661  %sh = shl i32 %b, %c662  %and = and i32 %sh, %a663  %res = icmp eq i32 %and, 0664  ret i1 %res665}666 667define i1 @cmp_eq_zero_and_rsi(i32 %a, i32 %b) {668; ARM-LABEL: cmp_eq_zero_and_rsi:669; ARM:       @ %bb.0:670; ARM-NEXT:    and r0, r0, r1, lsr #17671; ARM-NEXT:    clz r0, r0672; ARM-NEXT:    lsr r0, r0, #5673; ARM-NEXT:    bx lr674;675; THUMB-LABEL: cmp_eq_zero_and_rsi:676; THUMB:       @ %bb.0:677; THUMB-NEXT:    lsrs r1, r1, #17678; THUMB-NEXT:    ands r0, r1679; THUMB-NEXT:    rsbs r1, r0, #0680; THUMB-NEXT:    adcs r0, r1681; THUMB-NEXT:    bx lr682;683; THUMB2-LABEL: cmp_eq_zero_and_rsi:684; THUMB2:       @ %bb.0:685; THUMB2-NEXT:    and.w r0, r0, r1, lsr #17686; THUMB2-NEXT:    clz r0, r0687; THUMB2-NEXT:    lsrs r0, r0, #5688; THUMB2-NEXT:    bx lr689  %sh = lshr i32 %b, 17690  %and = and i32 %sh, %a691  %res = icmp eq i32 %and, 0692  ret i1 %res693}694 695define i1 @cmp_eq_zero_or_rr(i32 %a, i32 %b) {696; ARM-LABEL: cmp_eq_zero_or_rr:697; ARM:       @ %bb.0:698; ARM-NEXT:    orr r0, r0, r1699; ARM-NEXT:    clz r0, r0700; ARM-NEXT:    lsr r0, r0, #5701; ARM-NEXT:    bx lr702;703; THUMB-LABEL: cmp_eq_zero_or_rr:704; THUMB:       @ %bb.0:705; THUMB-NEXT:    orrs r0, r1706; THUMB-NEXT:    rsbs r1, r0, #0707; THUMB-NEXT:    adcs r0, r1708; THUMB-NEXT:    bx lr709;710; THUMB2-LABEL: cmp_eq_zero_or_rr:711; THUMB2:       @ %bb.0:712; THUMB2-NEXT:    orrs r0, r1713; THUMB2-NEXT:    clz r0, r0714; THUMB2-NEXT:    lsrs r0, r0, #5715; THUMB2-NEXT:    bx lr716  %or = or i32 %a, %b717  %res = icmp eq i32 %or, 0718  ret i1 %res719}720 721define i1 @cmp_eq_zero_or_ri(i32 %a) {722; ARM-LABEL: cmp_eq_zero_or_ri:723; ARM:       @ %bb.0:724; ARM-NEXT:    mov r0, #0725; ARM-NEXT:    bx lr726;727; THUMB-LABEL: cmp_eq_zero_or_ri:728; THUMB:       @ %bb.0:729; THUMB-NEXT:    movs r1, #42730; THUMB-NEXT:    orrs r0, r1731; THUMB-NEXT:    rsbs r1, r0, #0732; THUMB-NEXT:    adcs r0, r1733; THUMB-NEXT:    bx lr734;735; THUMB2-LABEL: cmp_eq_zero_or_ri:736; THUMB2:       @ %bb.0:737; THUMB2-NEXT:    movs r0, #0738; THUMB2-NEXT:    bx lr739  %or = or i32 %a, 42740  %res = icmp eq i32 %or, 0741  ret i1 %res742}743 744define i1 @cmp_eq_zero_or_rsr(i32 %a, i32 %b, i32 %c) {745; ARM-LABEL: cmp_eq_zero_or_rsr:746; ARM:       @ %bb.0:747; ARM-NEXT:    orr r0, r0, r1, lsl r2748; ARM-NEXT:    clz r0, r0749; ARM-NEXT:    lsr r0, r0, #5750; ARM-NEXT:    bx lr751;752; THUMB-LABEL: cmp_eq_zero_or_rsr:753; THUMB:       @ %bb.0:754; THUMB-NEXT:    lsls r1, r2755; THUMB-NEXT:    orrs r0, r1756; THUMB-NEXT:    rsbs r1, r0, #0757; THUMB-NEXT:    adcs r0, r1758; THUMB-NEXT:    bx lr759;760; THUMB2-LABEL: cmp_eq_zero_or_rsr:761; THUMB2:       @ %bb.0:762; THUMB2-NEXT:    lsls r1, r2763; THUMB2-NEXT:    orrs r0, r1764; THUMB2-NEXT:    clz r0, r0765; THUMB2-NEXT:    lsrs r0, r0, #5766; THUMB2-NEXT:    bx lr767  %sh = shl i32 %b, %c768  %or = or i32 %sh, %a769  %res = icmp eq i32 %or, 0770  ret i1 %res771}772 773define i1 @cmp_eq_zero_or_rsi(i32 %a, i32 %b) {774; ARM-LABEL: cmp_eq_zero_or_rsi:775; ARM:       @ %bb.0:776; ARM-NEXT:    orr r0, r0, r1, lsr #17777; ARM-NEXT:    clz r0, r0778; ARM-NEXT:    lsr r0, r0, #5779; ARM-NEXT:    bx lr780;781; THUMB-LABEL: cmp_eq_zero_or_rsi:782; THUMB:       @ %bb.0:783; THUMB-NEXT:    lsrs r1, r1, #17784; THUMB-NEXT:    orrs r0, r1785; THUMB-NEXT:    rsbs r1, r0, #0786; THUMB-NEXT:    adcs r0, r1787; THUMB-NEXT:    bx lr788;789; THUMB2-LABEL: cmp_eq_zero_or_rsi:790; THUMB2:       @ %bb.0:791; THUMB2-NEXT:    orr.w r0, r0, r1, lsr #17792; THUMB2-NEXT:    clz r0, r0793; THUMB2-NEXT:    lsrs r0, r0, #5794; THUMB2-NEXT:    bx lr795  %sh = lshr i32 %b, 17796  %or = or i32 %sh, %a797  %res = icmp eq i32 %or, 0798  ret i1 %res799}800 801define i1 @cmp_eq_zero_xor_rr(i32 %a, i32 %b) {802; ARM-LABEL: cmp_eq_zero_xor_rr:803; ARM:       @ %bb.0:804; ARM-NEXT:    eor r0, r0, r1805; ARM-NEXT:    clz r0, r0806; ARM-NEXT:    lsr r0, r0, #5807; ARM-NEXT:    bx lr808;809; THUMB-LABEL: cmp_eq_zero_xor_rr:810; THUMB:       @ %bb.0:811; THUMB-NEXT:    eors r0, r1812; THUMB-NEXT:    rsbs r1, r0, #0813; THUMB-NEXT:    adcs r0, r1814; THUMB-NEXT:    bx lr815;816; THUMB2-LABEL: cmp_eq_zero_xor_rr:817; THUMB2:       @ %bb.0:818; THUMB2-NEXT:    eors r0, r1819; THUMB2-NEXT:    clz r0, r0820; THUMB2-NEXT:    lsrs r0, r0, #5821; THUMB2-NEXT:    bx lr822  %xor = xor i32 %a, %b823  %res = icmp eq i32 %xor, 0824  ret i1 %res825}826 827define i1 @cmp_eq_zero_xor_ri(i32 %a) {828; ARM-LABEL: cmp_eq_zero_xor_ri:829; ARM:       @ %bb.0:830; ARM-NEXT:    sub r0, r0, #42831; ARM-NEXT:    clz r0, r0832; ARM-NEXT:    lsr r0, r0, #5833; ARM-NEXT:    bx lr834;835; THUMB-LABEL: cmp_eq_zero_xor_ri:836; THUMB:       @ %bb.0:837; THUMB-NEXT:    subs r0, #42838; THUMB-NEXT:    rsbs r1, r0, #0839; THUMB-NEXT:    adcs r0, r1840; THUMB-NEXT:    bx lr841;842; THUMB2-LABEL: cmp_eq_zero_xor_ri:843; THUMB2:       @ %bb.0:844; THUMB2-NEXT:    subs r0, #42845; THUMB2-NEXT:    clz r0, r0846; THUMB2-NEXT:    lsrs r0, r0, #5847; THUMB2-NEXT:    bx lr848  %xor = xor i32 %a, 42849  %res = icmp eq i32 %xor, 0850  ret i1 %res851}852 853define i1 @cmp_eq_zero_xor_rsr(i32 %a, i32 %b, i32 %c) {854; ARM-LABEL: cmp_eq_zero_xor_rsr:855; ARM:       @ %bb.0:856; ARM-NEXT:    eor r0, r0, r1, lsl r2857; ARM-NEXT:    clz r0, r0858; ARM-NEXT:    lsr r0, r0, #5859; ARM-NEXT:    bx lr860;861; THUMB-LABEL: cmp_eq_zero_xor_rsr:862; THUMB:       @ %bb.0:863; THUMB-NEXT:    lsls r1, r2864; THUMB-NEXT:    eors r0, r1865; THUMB-NEXT:    rsbs r1, r0, #0866; THUMB-NEXT:    adcs r0, r1867; THUMB-NEXT:    bx lr868;869; THUMB2-LABEL: cmp_eq_zero_xor_rsr:870; THUMB2:       @ %bb.0:871; THUMB2-NEXT:    lsls r1, r2872; THUMB2-NEXT:    eors r0, r1873; THUMB2-NEXT:    clz r0, r0874; THUMB2-NEXT:    lsrs r0, r0, #5875; THUMB2-NEXT:    bx lr876  %sh = shl i32 %b, %c877  %xor = xor i32 %sh, %a878  %res = icmp eq i32 %xor, 0879  ret i1 %res880}881 882define i1 @cmp_eq_zero_xor_rsi(i32 %a, i32 %b) {883; ARM-LABEL: cmp_eq_zero_xor_rsi:884; ARM:       @ %bb.0:885; ARM-NEXT:    eor r0, r0, r1, lsr #17886; ARM-NEXT:    clz r0, r0887; ARM-NEXT:    lsr r0, r0, #5888; ARM-NEXT:    bx lr889;890; THUMB-LABEL: cmp_eq_zero_xor_rsi:891; THUMB:       @ %bb.0:892; THUMB-NEXT:    lsrs r1, r1, #17893; THUMB-NEXT:    eors r0, r1894; THUMB-NEXT:    rsbs r1, r0, #0895; THUMB-NEXT:    adcs r0, r1896; THUMB-NEXT:    bx lr897;898; THUMB2-LABEL: cmp_eq_zero_xor_rsi:899; THUMB2:       @ %bb.0:900; THUMB2-NEXT:    eor.w r0, r0, r1, lsr #17901; THUMB2-NEXT:    clz r0, r0902; THUMB2-NEXT:    lsrs r0, r0, #5903; THUMB2-NEXT:    bx lr904  %sh = lshr i32 %b, 17905  %xor = xor i32 %sh, %a906  %res = icmp eq i32 %xor, 0907  ret i1 %res908}909 910define i1 @cmp_eq_zero_and_not_rr(i32 %a, i32 %b) {911; ARM-LABEL: cmp_eq_zero_and_not_rr:912; ARM:       @ %bb.0:913; ARM-NEXT:    bic r0, r0, r1914; ARM-NEXT:    clz r0, r0915; ARM-NEXT:    lsr r0, r0, #5916; ARM-NEXT:    bx lr917;918; THUMB-LABEL: cmp_eq_zero_and_not_rr:919; THUMB:       @ %bb.0:920; THUMB-NEXT:    bics r0, r1921; THUMB-NEXT:    rsbs r1, r0, #0922; THUMB-NEXT:    adcs r0, r1923; THUMB-NEXT:    bx lr924;925; THUMB2-LABEL: cmp_eq_zero_and_not_rr:926; THUMB2:       @ %bb.0:927; THUMB2-NEXT:    bics r0, r1928; THUMB2-NEXT:    clz r0, r0929; THUMB2-NEXT:    lsrs r0, r0, #5930; THUMB2-NEXT:    bx lr931  %not = xor i32 %b, -1932  %and = and i32 %a, %not933  %res = icmp eq i32 %and, 0934  ret i1 %res935}936 937define i1 @cmp_eq_zero_and_not_ri(i32 %a) {938; ARM-LABEL: cmp_eq_zero_and_not_ri:939; ARM:       @ %bb.0:940; ARM-NEXT:    bic r0, r0, #42941; ARM-NEXT:    clz r0, r0942; ARM-NEXT:    lsr r0, r0, #5943; ARM-NEXT:    bx lr944;945; THUMB-LABEL: cmp_eq_zero_and_not_ri:946; THUMB:       @ %bb.0:947; THUMB-NEXT:    movs r1, #42948; THUMB-NEXT:    bics r0, r1949; THUMB-NEXT:    rsbs r1, r0, #0950; THUMB-NEXT:    adcs r0, r1951; THUMB-NEXT:    bx lr952;953; THUMB2-LABEL: cmp_eq_zero_and_not_ri:954; THUMB2:       @ %bb.0:955; THUMB2-NEXT:    bic r0, r0, #42956; THUMB2-NEXT:    clz r0, r0957; THUMB2-NEXT:    lsrs r0, r0, #5958; THUMB2-NEXT:    bx lr959  %not = xor i32 42, -1960  %and = and i32 %a, %not961  %res = icmp eq i32 %and, 0962  ret i1 %res963}964 965define i1 @cmp_eq_zero_and_not_rsr(i32 %a, i32 %b, i32 %c) {966; ARM-LABEL: cmp_eq_zero_and_not_rsr:967; ARM:       @ %bb.0:968; ARM-NEXT:    bic r0, r0, r1, lsl r2969; ARM-NEXT:    clz r0, r0970; ARM-NEXT:    lsr r0, r0, #5971; ARM-NEXT:    bx lr972;973; THUMB-LABEL: cmp_eq_zero_and_not_rsr:974; THUMB:       @ %bb.0:975; THUMB-NEXT:    lsls r1, r2976; THUMB-NEXT:    bics r0, r1977; THUMB-NEXT:    rsbs r1, r0, #0978; THUMB-NEXT:    adcs r0, r1979; THUMB-NEXT:    bx lr980;981; THUMB2-LABEL: cmp_eq_zero_and_not_rsr:982; THUMB2:       @ %bb.0:983; THUMB2-NEXT:    lsls r1, r2984; THUMB2-NEXT:    bics r0, r1985; THUMB2-NEXT:    clz r0, r0986; THUMB2-NEXT:    lsrs r0, r0, #5987; THUMB2-NEXT:    bx lr988  %sh = shl i32 %b, %c989  %not = xor i32 %sh, -1990  %and = and i32 %not, %a991  %res = icmp eq i32 %and, 0992  ret i1 %res993}994 995define i1 @cmp_eq_zero_and_not_rsi(i32 %a, i32 %b) {996; ARM-LABEL: cmp_eq_zero_and_not_rsi:997; ARM:       @ %bb.0:998; ARM-NEXT:    bic r0, r0, r1, lsr #17999; ARM-NEXT:    clz r0, r01000; ARM-NEXT:    lsr r0, r0, #51001; ARM-NEXT:    bx lr1002;1003; THUMB-LABEL: cmp_eq_zero_and_not_rsi:1004; THUMB:       @ %bb.0:1005; THUMB-NEXT:    lsrs r1, r1, #171006; THUMB-NEXT:    bics r0, r11007; THUMB-NEXT:    rsbs r1, r0, #01008; THUMB-NEXT:    adcs r0, r11009; THUMB-NEXT:    bx lr1010;1011; THUMB2-LABEL: cmp_eq_zero_and_not_rsi:1012; THUMB2:       @ %bb.0:1013; THUMB2-NEXT:    bic.w r0, r0, r1, lsr #171014; THUMB2-NEXT:    clz r0, r01015; THUMB2-NEXT:    lsrs r0, r0, #51016; THUMB2-NEXT:    bx lr1017  %sh = lshr i32 %b, 171018  %not = xor i32 %sh, -11019  %and = and i32 %not, %a1020  %res = icmp eq i32 %and, 01021  ret i1 %res1022}1023 1024define i1 @cmp_eq_zero_shl_rr(i32 %a, i32 %b) {1025; ARM-LABEL: cmp_eq_zero_shl_rr:1026; ARM:       @ %bb.0:1027; ARM-NEXT:    lsl r0, r0, r11028; ARM-NEXT:    clz r0, r01029; ARM-NEXT:    lsr r0, r0, #51030; ARM-NEXT:    bx lr1031;1032; THUMB-LABEL: cmp_eq_zero_shl_rr:1033; THUMB:       @ %bb.0:1034; THUMB-NEXT:    lsls r0, r11035; THUMB-NEXT:    rsbs r1, r0, #01036; THUMB-NEXT:    adcs r0, r11037; THUMB-NEXT:    bx lr1038;1039; THUMB2-LABEL: cmp_eq_zero_shl_rr:1040; THUMB2:       @ %bb.0:1041; THUMB2-NEXT:    lsls r0, r11042; THUMB2-NEXT:    clz r0, r01043; THUMB2-NEXT:    lsrs r0, r0, #51044; THUMB2-NEXT:    bx lr1045    %sh = shl i32 %a, %b1046    %cmp = icmp eq i32 %sh, 01047    ret i1 %cmp1048}1049 1050define i1 @cmp_eq_zero_shl_ri(i32 %a) {1051; ARM-LABEL: cmp_eq_zero_shl_ri:1052; ARM:       @ %bb.0:1053; ARM-NEXT:    lsl r0, r0, #71054; ARM-NEXT:    clz r0, r01055; ARM-NEXT:    lsr r0, r0, #51056; ARM-NEXT:    bx lr1057;1058; THUMB-LABEL: cmp_eq_zero_shl_ri:1059; THUMB:       @ %bb.0:1060; THUMB-NEXT:    lsls r1, r0, #71061; THUMB-NEXT:    rsbs r0, r1, #01062; THUMB-NEXT:    adcs r0, r11063; THUMB-NEXT:    bx lr1064;1065; THUMB2-LABEL: cmp_eq_zero_shl_ri:1066; THUMB2:       @ %bb.0:1067; THUMB2-NEXT:    lsls r0, r0, #71068; THUMB2-NEXT:    clz r0, r01069; THUMB2-NEXT:    lsrs r0, r0, #51070; THUMB2-NEXT:    bx lr1071    %sh = shl i32 %a, 71072    %cmp = icmp eq i32 %sh, 01073    ret i1 %cmp1074}1075 1076define i1 @cmp_eq_zero_lshr_rr(i32 %a, i32 %b) {1077; ARM-LABEL: cmp_eq_zero_lshr_rr:1078; ARM:       @ %bb.0:1079; ARM-NEXT:    lsr r0, r0, r11080; ARM-NEXT:    clz r0, r01081; ARM-NEXT:    lsr r0, r0, #51082; ARM-NEXT:    bx lr1083;1084; THUMB-LABEL: cmp_eq_zero_lshr_rr:1085; THUMB:       @ %bb.0:1086; THUMB-NEXT:    lsrs r0, r11087; THUMB-NEXT:    rsbs r1, r0, #01088; THUMB-NEXT:    adcs r0, r11089; THUMB-NEXT:    bx lr1090;1091; THUMB2-LABEL: cmp_eq_zero_lshr_rr:1092; THUMB2:       @ %bb.0:1093; THUMB2-NEXT:    lsrs r0, r11094; THUMB2-NEXT:    clz r0, r01095; THUMB2-NEXT:    lsrs r0, r0, #51096; THUMB2-NEXT:    bx lr1097    %sh = lshr i32 %a, %b1098    %cmp = icmp eq i32 %sh, 01099    ret i1 %cmp1100}1101 1102define i1 @cmp_eq_zero_lshr_ri(i32 %a) {1103; ARM-LABEL: cmp_eq_zero_lshr_ri:1104; ARM:       @ %bb.0:1105; ARM-NEXT:    lsr r0, r0, #71106; ARM-NEXT:    clz r0, r01107; ARM-NEXT:    lsr r0, r0, #51108; ARM-NEXT:    bx lr1109;1110; THUMB-LABEL: cmp_eq_zero_lshr_ri:1111; THUMB:       @ %bb.0:1112; THUMB-NEXT:    lsrs r1, r0, #71113; THUMB-NEXT:    rsbs r0, r1, #01114; THUMB-NEXT:    adcs r0, r11115; THUMB-NEXT:    bx lr1116;1117; THUMB2-LABEL: cmp_eq_zero_lshr_ri:1118; THUMB2:       @ %bb.0:1119; THUMB2-NEXT:    lsrs r0, r0, #71120; THUMB2-NEXT:    clz r0, r01121; THUMB2-NEXT:    lsrs r0, r0, #51122; THUMB2-NEXT:    bx lr1123    %sh = lshr i32 %a, 71124    %cmp = icmp eq i32 %sh, 01125    ret i1 %cmp1126}1127 1128define i1 @cmp_eq_zero_ashr_rr(i32 %a, i32 %b) {1129; ARM-LABEL: cmp_eq_zero_ashr_rr:1130; ARM:       @ %bb.0:1131; ARM-NEXT:    asr r0, r0, r11132; ARM-NEXT:    clz r0, r01133; ARM-NEXT:    lsr r0, r0, #51134; ARM-NEXT:    bx lr1135;1136; THUMB-LABEL: cmp_eq_zero_ashr_rr:1137; THUMB:       @ %bb.0:1138; THUMB-NEXT:    asrs r0, r11139; THUMB-NEXT:    rsbs r1, r0, #01140; THUMB-NEXT:    adcs r0, r11141; THUMB-NEXT:    bx lr1142;1143; THUMB2-LABEL: cmp_eq_zero_ashr_rr:1144; THUMB2:       @ %bb.0:1145; THUMB2-NEXT:    asrs r0, r11146; THUMB2-NEXT:    clz r0, r01147; THUMB2-NEXT:    lsrs r0, r0, #51148; THUMB2-NEXT:    bx lr1149    %sh = ashr i32 %a, %b1150    %cmp = icmp eq i32 %sh, 01151    ret i1 %cmp1152}1153 1154define i1 @cmp_eq_zero_ashr_ri(i32 %a) {1155; ARM-LABEL: cmp_eq_zero_ashr_ri:1156; ARM:       @ %bb.0:1157; ARM-NEXT:    asr r0, r0, #71158; ARM-NEXT:    clz r0, r01159; ARM-NEXT:    lsr r0, r0, #51160; ARM-NEXT:    bx lr1161;1162; THUMB-LABEL: cmp_eq_zero_ashr_ri:1163; THUMB:       @ %bb.0:1164; THUMB-NEXT:    asrs r1, r0, #71165; THUMB-NEXT:    rsbs r0, r1, #01166; THUMB-NEXT:    adcs r0, r11167; THUMB-NEXT:    bx lr1168;1169; THUMB2-LABEL: cmp_eq_zero_ashr_ri:1170; THUMB2:       @ %bb.0:1171; THUMB2-NEXT:    asrs r0, r0, #71172; THUMB2-NEXT:    clz r0, r01173; THUMB2-NEXT:    lsrs r0, r0, #51174; THUMB2-NEXT:    bx lr1175    %sh = ashr i32 %a, 71176    %cmp = icmp eq i32 %sh, 01177    ret i1 %cmp1178}1179 1180declare void @consume(i32 %0);1181 1182define void @br_on_binop_eq_zero(i32 %a, i32 %b) {1183; ARM-LABEL: br_on_binop_eq_zero:1184; ARM:       @ %bb.0:1185; ARM-NEXT:    orrs r1, r0, r11186; ARM-NEXT:    bxne lr1187; ARM-NEXT:  .LBB44_1: @ %true_br1188; ARM-NEXT:    push {r11, lr}1189; ARM-NEXT:    bl consume1190; ARM-NEXT:    pop {r11, lr}1191; ARM-NEXT:    bx lr1192;1193; THUMB-LABEL: br_on_binop_eq_zero:1194; THUMB:       @ %bb.0:1195; THUMB-NEXT:    push {r7, lr}1196; THUMB-NEXT:    orrs r1, r01197; THUMB-NEXT:    beq .LBB44_21198; THUMB-NEXT:  @ %bb.1: @ %exit1199; THUMB-NEXT:    pop {r7, pc}1200; THUMB-NEXT:  .LBB44_2: @ %true_br1201; THUMB-NEXT:    bl consume1202; THUMB-NEXT:    pop {r7, pc}1203;1204; THUMB2-LABEL: br_on_binop_eq_zero:1205; THUMB2:       @ %bb.0:1206; THUMB2-NEXT:    orrs r1, r01207; THUMB2-NEXT:    it ne1208; THUMB2-NEXT:    bxne lr1209; THUMB2-NEXT:  .LBB44_1: @ %true_br1210; THUMB2-NEXT:    push {r7, lr}1211; THUMB2-NEXT:    bl consume1212; THUMB2-NEXT:    pop.w {r7, lr}1213; THUMB2-NEXT:    bx lr1214    %or = or i32 %a, %b1215    %cmp = icmp eq i32 %or, 01216    br i1 %cmp, label %true_br, label %exit1217true_br:1218    call void @consume(i32 %a)1219    br label %exit1220exit:1221    ret void1222}1223 1224define void @br_on_binop_ne_zero(i32 %a, i32 %b) {1225; ARM-LABEL: br_on_binop_ne_zero:1226; ARM:       @ %bb.0:1227; ARM-NEXT:    orrs r1, r0, r11228; ARM-NEXT:    bxeq lr1229; ARM-NEXT:  .LBB45_1: @ %true_br1230; ARM-NEXT:    push {r11, lr}1231; ARM-NEXT:    bl consume1232; ARM-NEXT:    pop {r11, lr}1233; ARM-NEXT:    bx lr1234;1235; THUMB-LABEL: br_on_binop_ne_zero:1236; THUMB:       @ %bb.0:1237; THUMB-NEXT:    push {r7, lr}1238; THUMB-NEXT:    orrs r1, r01239; THUMB-NEXT:    beq .LBB45_21240; THUMB-NEXT:  @ %bb.1: @ %true_br1241; THUMB-NEXT:    bl consume1242; THUMB-NEXT:  .LBB45_2: @ %exit1243; THUMB-NEXT:    pop {r7, pc}1244;1245; THUMB2-LABEL: br_on_binop_ne_zero:1246; THUMB2:       @ %bb.0:1247; THUMB2-NEXT:    orrs r1, r01248; THUMB2-NEXT:    it eq1249; THUMB2-NEXT:    bxeq lr1250; THUMB2-NEXT:  .LBB45_1: @ %true_br1251; THUMB2-NEXT:    push {r7, lr}1252; THUMB2-NEXT:    bl consume1253; THUMB2-NEXT:    pop.w {r7, lr}1254; THUMB2-NEXT:    bx lr1255    %or = or i32 %a, %b1256    %cmp = icmp ne i32 %or, 01257    br i1 %cmp, label %true_br, label %exit1258true_br:1259    call void @consume(i32 %a)1260    br label %exit1261exit:1262    ret void1263}1264 1265define void @br_on_binop_lt_zero(i32 %a, i32 %b) {1266; ARM-LABEL: br_on_binop_lt_zero:1267; ARM:       @ %bb.0:1268; ARM-NEXT:    orr r1, r0, r11269; ARM-NEXT:    cmp r1, #01270; ARM-NEXT:    bxhs lr1271; ARM-NEXT:  .LBB46_1: @ %true_br1272; ARM-NEXT:    push {r11, lr}1273; ARM-NEXT:    bl consume1274; ARM-NEXT:    pop {r11, lr}1275; ARM-NEXT:    bx lr1276;1277; THUMB-LABEL: br_on_binop_lt_zero:1278; THUMB:       @ %bb.0:1279; THUMB-NEXT:    push {r7, lr}1280; THUMB-NEXT:    orrs r1, r01281; THUMB-NEXT:    cmp r1, #01282; THUMB-NEXT:    bhs .LBB46_21283; THUMB-NEXT:  @ %bb.1: @ %true_br1284; THUMB-NEXT:    bl consume1285; THUMB-NEXT:  .LBB46_2: @ %exit1286; THUMB-NEXT:    pop {r7, pc}1287;1288; THUMB2-LABEL: br_on_binop_lt_zero:1289; THUMB2:       @ %bb.0:1290; THUMB2-NEXT:    orrs r1, r01291; THUMB2-NEXT:    cmp r1, #01292; THUMB2-NEXT:    it hs1293; THUMB2-NEXT:    bxhs lr1294; THUMB2-NEXT:  .LBB46_1: @ %true_br1295; THUMB2-NEXT:    push {r7, lr}1296; THUMB2-NEXT:    bl consume1297; THUMB2-NEXT:    pop.w {r7, lr}1298; THUMB2-NEXT:    bx lr1299    %or = or i32 %a, %b1300    %cmp = icmp ult i32 %or, 01301    br i1 %cmp, label %true_br, label %exit1302true_br:1303    call void @consume(i32 %a)1304    br label %exit1305exit:1306    ret void1307}1308 1309define void @br_on_binop_eq_imm(i32 %a, i32 %b) {1310; ARM-LABEL: br_on_binop_eq_imm:1311; ARM:       @ %bb.0:1312; ARM-NEXT:    orr r1, r0, r11313; ARM-NEXT:    cmp r1, #421314; ARM-NEXT:    bxne lr1315; ARM-NEXT:  .LBB47_1: @ %true_br1316; ARM-NEXT:    push {r11, lr}1317; ARM-NEXT:    bl consume1318; ARM-NEXT:    pop {r11, lr}1319; ARM-NEXT:    bx lr1320;1321; THUMB-LABEL: br_on_binop_eq_imm:1322; THUMB:       @ %bb.0:1323; THUMB-NEXT:    push {r7, lr}1324; THUMB-NEXT:    orrs r1, r01325; THUMB-NEXT:    cmp r1, #421326; THUMB-NEXT:    bne .LBB47_21327; THUMB-NEXT:  @ %bb.1: @ %true_br1328; THUMB-NEXT:    bl consume1329; THUMB-NEXT:  .LBB47_2: @ %exit1330; THUMB-NEXT:    pop {r7, pc}1331;1332; THUMB2-LABEL: br_on_binop_eq_imm:1333; THUMB2:       @ %bb.0:1334; THUMB2-NEXT:    orrs r1, r01335; THUMB2-NEXT:    cmp r1, #421336; THUMB2-NEXT:    it ne1337; THUMB2-NEXT:    bxne lr1338; THUMB2-NEXT:  .LBB47_1: @ %true_br1339; THUMB2-NEXT:    push {r7, lr}1340; THUMB2-NEXT:    bl consume1341; THUMB2-NEXT:    pop.w {r7, lr}1342; THUMB2-NEXT:    bx lr1343    %or = or i32 %a, %b1344    %cmp = icmp eq i32 %or, 421345    br i1 %cmp, label %true_br, label %exit1346true_br:1347    call void @consume(i32 %a)1348    br label %exit1349exit:1350    ret void1351}1352 1353define void @br_on_binop_ne_imm(i32 %a, i32 %b) {1354; ARM-LABEL: br_on_binop_ne_imm:1355; ARM:       @ %bb.0:1356; ARM-NEXT:    orr r1, r0, r11357; ARM-NEXT:    cmp r1, #421358; ARM-NEXT:    bxeq lr1359; ARM-NEXT:  .LBB48_1: @ %true_br1360; ARM-NEXT:    push {r11, lr}1361; ARM-NEXT:    bl consume1362; ARM-NEXT:    pop {r11, lr}1363; ARM-NEXT:    bx lr1364;1365; THUMB-LABEL: br_on_binop_ne_imm:1366; THUMB:       @ %bb.0:1367; THUMB-NEXT:    push {r7, lr}1368; THUMB-NEXT:    orrs r1, r01369; THUMB-NEXT:    cmp r1, #421370; THUMB-NEXT:    beq .LBB48_21371; THUMB-NEXT:  @ %bb.1: @ %true_br1372; THUMB-NEXT:    bl consume1373; THUMB-NEXT:  .LBB48_2: @ %exit1374; THUMB-NEXT:    pop {r7, pc}1375;1376; THUMB2-LABEL: br_on_binop_ne_imm:1377; THUMB2:       @ %bb.0:1378; THUMB2-NEXT:    orrs r1, r01379; THUMB2-NEXT:    cmp r1, #421380; THUMB2-NEXT:    it eq1381; THUMB2-NEXT:    bxeq lr1382; THUMB2-NEXT:  .LBB48_1: @ %true_br1383; THUMB2-NEXT:    push {r7, lr}1384; THUMB2-NEXT:    bl consume1385; THUMB2-NEXT:    pop.w {r7, lr}1386; THUMB2-NEXT:    bx lr1387    %or = or i32 %a, %b1388    %cmp = icmp ne i32 %or, 421389    br i1 %cmp, label %true_br, label %exit1390true_br:1391    call void @consume(i32 %a)1392    br label %exit1393exit:1394    ret void1395}1396 1397define void @br_on_binop_eq_reg(i32 %a, i32 %b, i32 %c) {1398; ARM-LABEL: br_on_binop_eq_reg:1399; ARM:       @ %bb.0:1400; ARM-NEXT:    eor r1, r0, r11401; ARM-NEXT:    cmp r1, r21402; ARM-NEXT:    bxne lr1403; ARM-NEXT:  .LBB49_1: @ %true_br1404; ARM-NEXT:    push {r11, lr}1405; ARM-NEXT:    bl consume1406; ARM-NEXT:    pop {r11, lr}1407; ARM-NEXT:    bx lr1408;1409; THUMB-LABEL: br_on_binop_eq_reg:1410; THUMB:       @ %bb.0:1411; THUMB-NEXT:    push {r7, lr}1412; THUMB-NEXT:    eors r1, r01413; THUMB-NEXT:    cmp r1, r21414; THUMB-NEXT:    bne .LBB49_21415; THUMB-NEXT:  @ %bb.1: @ %true_br1416; THUMB-NEXT:    bl consume1417; THUMB-NEXT:  .LBB49_2: @ %exit1418; THUMB-NEXT:    pop {r7, pc}1419;1420; THUMB2-LABEL: br_on_binop_eq_reg:1421; THUMB2:       @ %bb.0:1422; THUMB2-NEXT:    eors r1, r01423; THUMB2-NEXT:    cmp r1, r21424; THUMB2-NEXT:    it ne1425; THUMB2-NEXT:    bxne lr1426; THUMB2-NEXT:  .LBB49_1: @ %true_br1427; THUMB2-NEXT:    push {r7, lr}1428; THUMB2-NEXT:    bl consume1429; THUMB2-NEXT:    pop.w {r7, lr}1430; THUMB2-NEXT:    bx lr1431    %xor = xor i32 %a, %b1432    %cmp = icmp eq i32 %xor, %c1433    br i1 %cmp, label %true_br, label %exit1434true_br:1435    call void @consume(i32 %a)1436    br label %exit1437exit:1438    ret void1439}1440 1441define void @br_on_binop_ne_reg(i32 %a, i32 %b, i32 %c) {1442; ARM-LABEL: br_on_binop_ne_reg:1443; ARM:       @ %bb.0:1444; ARM-NEXT:    and r1, r0, r11445; ARM-NEXT:    cmp r1, r21446; ARM-NEXT:    bxeq lr1447; ARM-NEXT:  .LBB50_1: @ %true_br1448; ARM-NEXT:    push {r11, lr}1449; ARM-NEXT:    bl consume1450; ARM-NEXT:    pop {r11, lr}1451; ARM-NEXT:    bx lr1452;1453; THUMB-LABEL: br_on_binop_ne_reg:1454; THUMB:       @ %bb.0:1455; THUMB-NEXT:    push {r7, lr}1456; THUMB-NEXT:    ands r1, r01457; THUMB-NEXT:    cmp r1, r21458; THUMB-NEXT:    beq .LBB50_21459; THUMB-NEXT:  @ %bb.1: @ %true_br1460; THUMB-NEXT:    bl consume1461; THUMB-NEXT:  .LBB50_2: @ %exit1462; THUMB-NEXT:    pop {r7, pc}1463;1464; THUMB2-LABEL: br_on_binop_ne_reg:1465; THUMB2:       @ %bb.0:1466; THUMB2-NEXT:    ands r1, r01467; THUMB2-NEXT:    cmp r1, r21468; THUMB2-NEXT:    it eq1469; THUMB2-NEXT:    bxeq lr1470; THUMB2-NEXT:  .LBB50_1: @ %true_br1471; THUMB2-NEXT:    push {r7, lr}1472; THUMB2-NEXT:    bl consume1473; THUMB2-NEXT:    pop.w {r7, lr}1474; THUMB2-NEXT:    bx lr1475    %and = and i32 %a, %b1476    %cmp = icmp ne i32 %and, %c1477    br i1 %cmp, label %true_br, label %exit1478true_br:1479    call void @consume(i32 %a)1480    br label %exit1481exit:1482    ret void1483}1484 1485define void @br_on_shift_eq_zero(i32 %a, i32 %b) {1486; ARM-LABEL: br_on_shift_eq_zero:1487; ARM:       @ %bb.0:1488; ARM-NEXT:    lsls r1, r0, r11489; ARM-NEXT:    bxne lr1490; ARM-NEXT:  .LBB51_1: @ %true_br1491; ARM-NEXT:    push {r11, lr}1492; ARM-NEXT:    bl consume1493; ARM-NEXT:    pop {r11, lr}1494; ARM-NEXT:    bx lr1495;1496; THUMB-LABEL: br_on_shift_eq_zero:1497; THUMB:       @ %bb.0:1498; THUMB-NEXT:    push {r7, lr}1499; THUMB-NEXT:    mov r2, r01500; THUMB-NEXT:    lsls r2, r11501; THUMB-NEXT:    beq .LBB51_21502; THUMB-NEXT:  @ %bb.1: @ %exit1503; THUMB-NEXT:    pop {r7, pc}1504; THUMB-NEXT:  .LBB51_2: @ %true_br1505; THUMB-NEXT:    bl consume1506; THUMB-NEXT:    pop {r7, pc}1507;1508; THUMB2-LABEL: br_on_shift_eq_zero:1509; THUMB2:       @ %bb.0:1510; THUMB2-NEXT:    lsls.w r1, r0, r11511; THUMB2-NEXT:    it ne1512; THUMB2-NEXT:    bxne lr1513; THUMB2-NEXT:  .LBB51_1: @ %true_br1514; THUMB2-NEXT:    push {r7, lr}1515; THUMB2-NEXT:    bl consume1516; THUMB2-NEXT:    pop.w {r7, lr}1517; THUMB2-NEXT:    bx lr1518    %sh = shl i32 %a, %b1519    %cmp = icmp eq i32 %sh, 01520    br i1 %cmp, label %true_br, label %exit1521true_br:1522    call void @consume(i32 %a)1523    br label %exit1524exit:1525    ret void1526}1527 1528define void @br_on_shift_ne_zero(i32 %a, i32 %b) {1529; ARM-LABEL: br_on_shift_ne_zero:1530; ARM:       @ %bb.0:1531; ARM-NEXT:    lsrs r1, r0, r11532; ARM-NEXT:    bxeq lr1533; ARM-NEXT:  .LBB52_1: @ %true_br1534; ARM-NEXT:    push {r11, lr}1535; ARM-NEXT:    bl consume1536; ARM-NEXT:    pop {r11, lr}1537; ARM-NEXT:    bx lr1538;1539; THUMB-LABEL: br_on_shift_ne_zero:1540; THUMB:       @ %bb.0:1541; THUMB-NEXT:    push {r7, lr}1542; THUMB-NEXT:    mov r2, r01543; THUMB-NEXT:    lsrs r2, r11544; THUMB-NEXT:    beq .LBB52_21545; THUMB-NEXT:  @ %bb.1: @ %true_br1546; THUMB-NEXT:    bl consume1547; THUMB-NEXT:  .LBB52_2: @ %exit1548; THUMB-NEXT:    pop {r7, pc}1549;1550; THUMB2-LABEL: br_on_shift_ne_zero:1551; THUMB2:       @ %bb.0:1552; THUMB2-NEXT:    lsrs.w r1, r0, r11553; THUMB2-NEXT:    it eq1554; THUMB2-NEXT:    bxeq lr1555; THUMB2-NEXT:  .LBB52_1: @ %true_br1556; THUMB2-NEXT:    push {r7, lr}1557; THUMB2-NEXT:    bl consume1558; THUMB2-NEXT:    pop.w {r7, lr}1559; THUMB2-NEXT:    bx lr1560    %sh = lshr i32 %a, %b1561    %cmp = icmp ne i32 %sh, 01562    br i1 %cmp, label %true_br, label %exit1563true_br:1564    call void @consume(i32 %a)1565    br label %exit1566exit:1567    ret void1568}1569 1570define void @br_on_shift_lt_zero(i32 %a, i32 %b) {1571; ARM-LABEL: br_on_shift_lt_zero:1572; ARM:       @ %bb.0:1573; ARM-NEXT:    asr r1, r0, r11574; ARM-NEXT:    cmp r1, #01575; ARM-NEXT:    bxhs lr1576; ARM-NEXT:  .LBB53_1: @ %true_br1577; ARM-NEXT:    push {r11, lr}1578; ARM-NEXT:    bl consume1579; ARM-NEXT:    pop {r11, lr}1580; ARM-NEXT:    bx lr1581;1582; THUMB-LABEL: br_on_shift_lt_zero:1583; THUMB:       @ %bb.0:1584; THUMB-NEXT:    push {r7, lr}1585; THUMB-NEXT:    mov r2, r01586; THUMB-NEXT:    asrs r2, r11587; THUMB-NEXT:    cmp r2, #01588; THUMB-NEXT:    bhs .LBB53_21589; THUMB-NEXT:  @ %bb.1: @ %true_br1590; THUMB-NEXT:    bl consume1591; THUMB-NEXT:  .LBB53_2: @ %exit1592; THUMB-NEXT:    pop {r7, pc}1593;1594; THUMB2-LABEL: br_on_shift_lt_zero:1595; THUMB2:       @ %bb.0:1596; THUMB2-NEXT:    asr.w r1, r0, r11597; THUMB2-NEXT:    cmp r1, #01598; THUMB2-NEXT:    it hs1599; THUMB2-NEXT:    bxhs lr1600; THUMB2-NEXT:  .LBB53_1: @ %true_br1601; THUMB2-NEXT:    push {r7, lr}1602; THUMB2-NEXT:    bl consume1603; THUMB2-NEXT:    pop.w {r7, lr}1604; THUMB2-NEXT:    bx lr1605    %sh = ashr i32 %a, %b1606    %cmp = icmp ult i32 %sh, 01607    br i1 %cmp, label %true_br, label %exit1608true_br:1609    call void @consume(i32 %a)1610    br label %exit1611exit:1612    ret void1613}1614 1615define void @br_on_shift_eq_imm(i32 %a, i32 %b) {1616; ARM-LABEL: br_on_shift_eq_imm:1617; ARM:       @ %bb.0:1618; ARM-NEXT:    mov r2, #421619; ARM-NEXT:    cmp r2, r0, lsl r11620; ARM-NEXT:    bxne lr1621; ARM-NEXT:  .LBB54_1: @ %true_br1622; ARM-NEXT:    push {r11, lr}1623; ARM-NEXT:    bl consume1624; ARM-NEXT:    pop {r11, lr}1625; ARM-NEXT:    bx lr1626;1627; THUMB-LABEL: br_on_shift_eq_imm:1628; THUMB:       @ %bb.0:1629; THUMB-NEXT:    push {r7, lr}1630; THUMB-NEXT:    mov r2, r01631; THUMB-NEXT:    lsls r2, r11632; THUMB-NEXT:    cmp r2, #421633; THUMB-NEXT:    bne .LBB54_21634; THUMB-NEXT:  @ %bb.1: @ %true_br1635; THUMB-NEXT:    bl consume1636; THUMB-NEXT:  .LBB54_2: @ %exit1637; THUMB-NEXT:    pop {r7, pc}1638;1639; THUMB2-LABEL: br_on_shift_eq_imm:1640; THUMB2:       @ %bb.0:1641; THUMB2-NEXT:    lsl.w r1, r0, r11642; THUMB2-NEXT:    cmp r1, #421643; THUMB2-NEXT:    it ne1644; THUMB2-NEXT:    bxne lr1645; THUMB2-NEXT:  .LBB54_1: @ %true_br1646; THUMB2-NEXT:    push {r7, lr}1647; THUMB2-NEXT:    bl consume1648; THUMB2-NEXT:    pop.w {r7, lr}1649; THUMB2-NEXT:    bx lr1650    %sh = shl i32 %a, %b1651    %cmp = icmp eq i32 %sh, 421652    br i1 %cmp, label %true_br, label %exit1653true_br:1654    call void @consume(i32 %a)1655    br label %exit1656exit:1657    ret void1658}1659 1660define void @br_on_shift_ne_imm(i32 %a, i32 %b) {1661; ARM-LABEL: br_on_shift_ne_imm:1662; ARM:       @ %bb.0:1663; ARM-NEXT:    mov r2, #421664; ARM-NEXT:    cmp r2, r0, lsr r11665; ARM-NEXT:    bxeq lr1666; ARM-NEXT:  .LBB55_1: @ %true_br1667; ARM-NEXT:    push {r11, lr}1668; ARM-NEXT:    bl consume1669; ARM-NEXT:    pop {r11, lr}1670; ARM-NEXT:    bx lr1671;1672; THUMB-LABEL: br_on_shift_ne_imm:1673; THUMB:       @ %bb.0:1674; THUMB-NEXT:    push {r7, lr}1675; THUMB-NEXT:    mov r2, r01676; THUMB-NEXT:    lsrs r2, r11677; THUMB-NEXT:    cmp r2, #421678; THUMB-NEXT:    beq .LBB55_21679; THUMB-NEXT:  @ %bb.1: @ %true_br1680; THUMB-NEXT:    bl consume1681; THUMB-NEXT:  .LBB55_2: @ %exit1682; THUMB-NEXT:    pop {r7, pc}1683;1684; THUMB2-LABEL: br_on_shift_ne_imm:1685; THUMB2:       @ %bb.0:1686; THUMB2-NEXT:    lsr.w r1, r0, r11687; THUMB2-NEXT:    cmp r1, #421688; THUMB2-NEXT:    it eq1689; THUMB2-NEXT:    bxeq lr1690; THUMB2-NEXT:  .LBB55_1: @ %true_br1691; THUMB2-NEXT:    push {r7, lr}1692; THUMB2-NEXT:    bl consume1693; THUMB2-NEXT:    pop.w {r7, lr}1694; THUMB2-NEXT:    bx lr1695    %sh = lshr i32 %a, %b1696    %cmp = icmp ne i32 %sh, 421697    br i1 %cmp, label %true_br, label %exit1698true_br:1699    call void @consume(i32 %a)1700    br label %exit1701exit:1702    ret void1703}1704 1705define void @br_on_shift_eq_reg(i32 %a, i32 %b, i32 %c) {1706; ARM-LABEL: br_on_shift_eq_reg:1707; ARM:       @ %bb.0:1708; ARM-NEXT:    cmp r2, r0, asr r11709; ARM-NEXT:    bxne lr1710; ARM-NEXT:  .LBB56_1: @ %true_br1711; ARM-NEXT:    push {r11, lr}1712; ARM-NEXT:    bl consume1713; ARM-NEXT:    pop {r11, lr}1714; ARM-NEXT:    bx lr1715;1716; THUMB-LABEL: br_on_shift_eq_reg:1717; THUMB:       @ %bb.0:1718; THUMB-NEXT:    push {r7, lr}1719; THUMB-NEXT:    mov r3, r01720; THUMB-NEXT:    asrs r3, r11721; THUMB-NEXT:    cmp r2, r31722; THUMB-NEXT:    bne .LBB56_21723; THUMB-NEXT:  @ %bb.1: @ %true_br1724; THUMB-NEXT:    bl consume1725; THUMB-NEXT:  .LBB56_2: @ %exit1726; THUMB-NEXT:    pop {r7, pc}1727;1728; THUMB2-LABEL: br_on_shift_eq_reg:1729; THUMB2:       @ %bb.0:1730; THUMB2-NEXT:    asr.w r1, r0, r11731; THUMB2-NEXT:    cmp r2, r11732; THUMB2-NEXT:    it ne1733; THUMB2-NEXT:    bxne lr1734; THUMB2-NEXT:  .LBB56_1: @ %true_br1735; THUMB2-NEXT:    push {r7, lr}1736; THUMB2-NEXT:    bl consume1737; THUMB2-NEXT:    pop.w {r7, lr}1738; THUMB2-NEXT:    bx lr1739    %sh = ashr i32 %a, %b1740    %cmp = icmp eq i32 %sh, %c1741    br i1 %cmp, label %true_br, label %exit1742true_br:1743    call void @consume(i32 %a)1744    br label %exit1745exit:1746    ret void1747}1748 1749define void @br_on_shift_ne_reg(i32 %a, i32 %b, i32 %c) {1750; ARM-LABEL: br_on_shift_ne_reg:1751; ARM:       @ %bb.0:1752; ARM-NEXT:    cmp r2, r0, lsl r11753; ARM-NEXT:    bxeq lr1754; ARM-NEXT:  .LBB57_1: @ %true_br1755; ARM-NEXT:    push {r11, lr}1756; ARM-NEXT:    bl consume1757; ARM-NEXT:    pop {r11, lr}1758; ARM-NEXT:    bx lr1759;1760; THUMB-LABEL: br_on_shift_ne_reg:1761; THUMB:       @ %bb.0:1762; THUMB-NEXT:    push {r7, lr}1763; THUMB-NEXT:    mov r3, r01764; THUMB-NEXT:    lsls r3, r11765; THUMB-NEXT:    cmp r2, r31766; THUMB-NEXT:    beq .LBB57_21767; THUMB-NEXT:  @ %bb.1: @ %true_br1768; THUMB-NEXT:    bl consume1769; THUMB-NEXT:  .LBB57_2: @ %exit1770; THUMB-NEXT:    pop {r7, pc}1771;1772; THUMB2-LABEL: br_on_shift_ne_reg:1773; THUMB2:       @ %bb.0:1774; THUMB2-NEXT:    lsl.w r1, r0, r11775; THUMB2-NEXT:    cmp r2, r11776; THUMB2-NEXT:    it eq1777; THUMB2-NEXT:    bxeq lr1778; THUMB2-NEXT:  .LBB57_1: @ %true_br1779; THUMB2-NEXT:    push {r7, lr}1780; THUMB2-NEXT:    bl consume1781; THUMB2-NEXT:    pop.w {r7, lr}1782; THUMB2-NEXT:    bx lr1783    %sh = shl i32 %a, %b1784    %cmp = icmp ne i32 %sh, %c1785    br i1 %cmp, label %true_br, label %exit1786true_br:1787    call void @consume(i32 %a)1788    br label %exit1789exit:1790    ret void1791}1792