brintos

brintos / llvm-project-archived public Read only

0
0
Text · 20.0 KiB · 680d9e0 Raw
512 lines · plain
1; RUN: llc -mtriple=thumbv8.1m.main -mattr=+lob -disable-arm-loloops=false -start-after=hardware-loops -stop-before=arm-low-overhead-loops %s -o - | FileCheck %s --check-prefix=CHECK-MID2 3; Test that the branch targets are correct after isel, even though the loop4; will sometimes be reverted anyway.5 6; CHECK-MID: name: check_loop_dec_brcond_combine7; CHECK-MID: bb.0.entry:8; CHECK-MID:   renamable $lr = t2DoLoopStart killed renamable $r39; CHECK-MID: bb.1.for.header:10; CHECK-MID:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.111; CHECK-MID: bb.2.for.cond.cleanup:12define void @check_loop_dec_brcond_combine(ptr nocapture %a, ptr nocapture readonly %b, ptr nocapture readonly %c, i32 %N) {13entry:14  %start = call i32 @llvm.start.loop.iterations.i32(i32 %N)15  br label %for.body.preheader16 17for.body.preheader:18  %scevgep = getelementptr i32, ptr %a, i32 -119  %scevgep4 = getelementptr i32, ptr %c, i32 -120  %scevgep8 = getelementptr i32, ptr %b, i32 -121  br label %for.header22 23for.body:24  %scevgep11 = getelementptr i32, ptr %lsr.iv9, i32 125  %ld1 = load i32, ptr %scevgep11, align 426  %scevgep7 = getelementptr i32, ptr %lsr.iv5, i32 127  %ld2 = load i32, ptr %scevgep7, align 428  %mul = mul nsw i32 %ld2, %ld129  %scevgep3 = getelementptr i32, ptr %lsr.iv1, i32 130  store i32 %mul, ptr %scevgep3, align 431  %scevgep2 = getelementptr i32, ptr %lsr.iv1, i32 132  %scevgep6 = getelementptr i32, ptr %lsr.iv5, i32 133  %scevgep10 = getelementptr i32, ptr %lsr.iv9, i32 134  %count.next = call i32 @llvm.loop.decrement.reg.i32(i32 %count, i32 1)35  %cmp = icmp ne i32 %count.next, 036  br i1 %cmp, label %for.header, label %for.cond.cleanup37 38for.header:39  %lsr.iv9 = phi ptr [ %scevgep8, %for.body.preheader ], [ %scevgep10, %for.body ]40  %lsr.iv5 = phi ptr [ %scevgep4, %for.body.preheader ], [ %scevgep6, %for.body ]41  %lsr.iv1 = phi ptr [ %scevgep, %for.body.preheader ], [ %scevgep2, %for.body ]42  %count = phi i32 [ %start, %for.body.preheader ], [ %count.next, %for.body ]43  br label %for.body44 45for.cond.cleanup:46  ret void47}48 49; CHECK-MID: name: check_loop_dec_ugt_brcond_combine50; CHECK-MID: bb.0.entry:51; CHECK-MID:   renamable $lr = t2DoLoopStart killed renamable $r352; CHECK-MID: bb.1.for.header:53; CHECK-MID:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.154; CHECK-MID:   tB %bb.2, 1455; CHECK-MID: bb.2.for.cond.cleanup:56define void @check_loop_dec_ugt_brcond_combine(ptr nocapture %a, ptr nocapture readonly %b, ptr nocapture readonly %c, i32 %N) {57entry:58  %start = call i32 @llvm.start.loop.iterations.i32(i32 %N)59  br label %for.body.preheader60 61for.body.preheader:62  %scevgep = getelementptr i32, ptr %a, i32 -163  %scevgep4 = getelementptr i32, ptr %c, i32 -164  %scevgep8 = getelementptr i32, ptr %b, i32 -165  br label %for.header66 67for.body:68  %scevgep11 = getelementptr i32, ptr %lsr.iv9, i32 169  %ld1 = load i32, ptr %scevgep11, align 470  %scevgep7 = getelementptr i32, ptr %lsr.iv5, i32 171  %ld2 = load i32, ptr %scevgep7, align 472  %mul = mul nsw i32 %ld2, %ld173  %scevgep3 = getelementptr i32, ptr %lsr.iv1, i32 174  store i32 %mul, ptr %scevgep3, align 475  %scevgep2 = getelementptr i32, ptr %lsr.iv1, i32 176  %scevgep6 = getelementptr i32, ptr %lsr.iv5, i32 177  %scevgep10 = getelementptr i32, ptr %lsr.iv9, i32 178  %count.next = call i32 @llvm.loop.decrement.reg.i32(i32 %count, i32 1)79  %cmp = icmp ugt i32 %count.next, 080  br i1 %cmp, label %for.header, label %for.cond.cleanup81 82for.header:83  %lsr.iv9 = phi ptr [ %scevgep8, %for.body.preheader ], [ %scevgep10, %for.body ]84  %lsr.iv5 = phi ptr [ %scevgep4, %for.body.preheader ], [ %scevgep6, %for.body ]85  %lsr.iv1 = phi ptr [ %scevgep, %for.body.preheader ], [ %scevgep2, %for.body ]86  %count = phi i32 [ %start, %for.body.preheader ], [ %count.next, %for.body ]87  br label %for.body88 89for.cond.cleanup:90  ret void91}92 93; CHECK-MID: name: check_loop_dec_ult_brcond_combine94; CHECK-MID: bb.0.entry:95; CHECK-MID:   renamable $lr = t2DoLoopStart killed renamable $r396; CHECK-MID: bb.1.for.header:97; CHECK-MID:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.198; CHECK-MID:   tB %bb.2, 1499; CHECK-MID: bb.2.for.cond.cleanup:100define void @check_loop_dec_ult_brcond_combine(ptr nocapture %a, ptr nocapture readonly %b, ptr nocapture readonly %c, i32 %N) {101entry:102  %start = call i32 @llvm.start.loop.iterations.i32(i32 %N)103  br label %for.body.preheader104 105for.body.preheader:106  %scevgep = getelementptr i32, ptr %a, i32 -1107  %scevgep4 = getelementptr i32, ptr %c, i32 -1108  %scevgep8 = getelementptr i32, ptr %b, i32 -1109  br label %for.header110 111for.body:112  %scevgep11 = getelementptr i32, ptr %lsr.iv9, i32 1113  %ld1 = load i32, ptr %scevgep11, align 4114  %scevgep7 = getelementptr i32, ptr %lsr.iv5, i32 1115  %ld2 = load i32, ptr %scevgep7, align 4116  %mul = mul nsw i32 %ld2, %ld1117  %scevgep3 = getelementptr i32, ptr %lsr.iv1, i32 1118  store i32 %mul, ptr %scevgep3, align 4119  %scevgep2 = getelementptr i32, ptr %lsr.iv1, i32 1120  %scevgep6 = getelementptr i32, ptr %lsr.iv5, i32 1121  %scevgep10 = getelementptr i32, ptr %lsr.iv9, i32 1122  %count.next = call i32 @llvm.loop.decrement.reg.i32(i32 %count, i32 1)123  %cmp = icmp ult i32 %count.next, 1124  br i1 %cmp, label %for.cond.cleanup, label %for.header125 126for.header:127  %lsr.iv9 = phi ptr [ %scevgep8, %for.body.preheader ], [ %scevgep10, %for.body ]128  %lsr.iv5 = phi ptr [ %scevgep4, %for.body.preheader ], [ %scevgep6, %for.body ]129  %lsr.iv1 = phi ptr [ %scevgep, %for.body.preheader ], [ %scevgep2, %for.body ]130  %count = phi i32 [ %start, %for.body.preheader ], [ %count.next, %for.body ]131  br label %for.body132 133for.cond.cleanup:134  ret void135}136 137; CHECK-MID: name: check_loop_dec_ult_xor_brcond_combine138; CHECK-MID: bb.0.entry:139; CHECK-MID:   renamable $lr = t2DoLoopStart killed renamable $r3140; CHECK-MID: bb.1.for.header:141; CHECK-MID:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.1142; CHECK-MID:   tB %bb.2, 14143; CHECK-MID: bb.2.for.cond.cleanup:144define void @check_loop_dec_ult_xor_brcond_combine(ptr nocapture %a, ptr nocapture readonly %b, ptr nocapture readonly %c, i32 %N) {145entry:146  %start = call i32 @llvm.start.loop.iterations.i32(i32 %N)147  br label %for.body.preheader148 149for.body.preheader:150  %scevgep = getelementptr i32, ptr %a, i32 -1151  %scevgep4 = getelementptr i32, ptr %c, i32 -1152  %scevgep8 = getelementptr i32, ptr %b, i32 -1153  br label %for.header154 155for.body:156  %scevgep11 = getelementptr i32, ptr %lsr.iv9, i32 1157  %ld1 = load i32, ptr %scevgep11, align 4158  %scevgep7 = getelementptr i32, ptr %lsr.iv5, i32 1159  %ld2 = load i32, ptr %scevgep7, align 4160  %mul = mul nsw i32 %ld2, %ld1161  %scevgep3 = getelementptr i32, ptr %lsr.iv1, i32 1162  store i32 %mul, ptr %scevgep3, align 4163  %scevgep2 = getelementptr i32, ptr %lsr.iv1, i32 1164  %scevgep6 = getelementptr i32, ptr %lsr.iv5, i32 1165  %scevgep10 = getelementptr i32, ptr %lsr.iv9, i32 1166  %count.next = call i32 @llvm.loop.decrement.reg.i32(i32 %count, i32 1)167  %cmp = icmp ult i32 %count.next, 1168  %negate = xor i1 %cmp, 1169  br i1 %negate, label %for.header, label %for.cond.cleanup170 171for.header:172  %lsr.iv9 = phi ptr [ %scevgep8, %for.body.preheader ], [ %scevgep10, %for.body ]173  %lsr.iv5 = phi ptr [ %scevgep4, %for.body.preheader ], [ %scevgep6, %for.body ]174  %lsr.iv1 = phi ptr [ %scevgep, %for.body.preheader ], [ %scevgep2, %for.body ]175  %count = phi i32 [ %start, %for.body.preheader ], [ %count.next, %for.body ]176  br label %for.body177 178for.cond.cleanup:179  ret void180}181 182; CHECK-MID: name: check_loop_dec_sgt_brcond_combine183; CHECK-MID: bb.0.entry:184; CHECK-MID:   renamable $lr = t2DoLoopStart killed renamable $r3185; CHECK-MID: bb.1.for.header:186; CHECK-MID:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.1187; CHECK-MID:   tB %bb.2, 14188; CHECK-MID: bb.2.for.cond.cleanup:189define void @check_loop_dec_sgt_brcond_combine(ptr nocapture %a, ptr nocapture readonly %b, ptr nocapture readonly %c, i32 %N) {190entry:191  %start = call i32 @llvm.start.loop.iterations.i32(i32 %N)192  br label %for.body.preheader193 194for.body.preheader:195  %scevgep = getelementptr i32, ptr %a, i32 -1196  %scevgep4 = getelementptr i32, ptr %c, i32 -1197  %scevgep8 = getelementptr i32, ptr %b, i32 -1198  br label %for.header199 200for.body:201  %scevgep11 = getelementptr i32, ptr %lsr.iv9, i32 1202  %ld1 = load i32, ptr %scevgep11, align 4203  %scevgep7 = getelementptr i32, ptr %lsr.iv5, i32 1204  %ld2 = load i32, ptr %scevgep7, align 4205  %mul = mul nsw i32 %ld2, %ld1206  %scevgep3 = getelementptr i32, ptr %lsr.iv1, i32 1207  store i32 %mul, ptr %scevgep3, align 4208  %scevgep2 = getelementptr i32, ptr %lsr.iv1, i32 1209  %scevgep6 = getelementptr i32, ptr %lsr.iv5, i32 1210  %scevgep10 = getelementptr i32, ptr %lsr.iv9, i32 1211  %count.next = call i32 @llvm.loop.decrement.reg.i32(i32 %count, i32 1)212  %cmp = icmp sgt i32 %count.next, 0213  br i1 %cmp, label %for.header, label %for.cond.cleanup214 215for.header:216  %lsr.iv9 = phi ptr [ %scevgep8, %for.body.preheader ], [ %scevgep10, %for.body ]217  %lsr.iv5 = phi ptr [ %scevgep4, %for.body.preheader ], [ %scevgep6, %for.body ]218  %lsr.iv1 = phi ptr [ %scevgep, %for.body.preheader ], [ %scevgep2, %for.body ]219  %count = phi i32 [ %start, %for.body.preheader ], [ %count.next, %for.body ]220  br label %for.body221 222for.cond.cleanup:223  ret void224}225 226; CHECK-MID: name: check_loop_dec_sge_brcond_combine227; CHECK-MID: bb.0.entry:228; CHECK-MID:   renamable $lr = t2DoLoopStart killed renamable $r3229; CHECK-MID: bb.1.for.header:230; CHECK-MID:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.1231; CHECK-MID:   tB %bb.2, 14232; CHECK-MID: bb.2.for.cond.cleanup:233define void @check_loop_dec_sge_brcond_combine(ptr nocapture %a, ptr nocapture readonly %b, ptr nocapture readonly %c, i32 %N) {234entry:235  %start = call i32 @llvm.start.loop.iterations.i32(i32 %N)236  br label %for.body.preheader237 238for.body.preheader:239  %scevgep = getelementptr i32, ptr %a, i32 -1240  %scevgep4 = getelementptr i32, ptr %c, i32 -1241  %scevgep8 = getelementptr i32, ptr %b, i32 -1242  br label %for.header243 244for.body:245  %scevgep11 = getelementptr i32, ptr %lsr.iv9, i32 1246  %ld1 = load i32, ptr %scevgep11, align 4247  %scevgep7 = getelementptr i32, ptr %lsr.iv5, i32 1248  %ld2 = load i32, ptr %scevgep7, align 4249  %mul = mul nsw i32 %ld2, %ld1250  %scevgep3 = getelementptr i32, ptr %lsr.iv1, i32 1251  store i32 %mul, ptr %scevgep3, align 4252  %scevgep2 = getelementptr i32, ptr %lsr.iv1, i32 1253  %scevgep6 = getelementptr i32, ptr %lsr.iv5, i32 1254  %scevgep10 = getelementptr i32, ptr %lsr.iv9, i32 1255  %count.next = call i32 @llvm.loop.decrement.reg.i32(i32 %count, i32 1)256  %cmp = icmp sge i32 %count.next, 1257  br i1 %cmp, label %for.header, label %for.cond.cleanup258 259for.header:260  %lsr.iv9 = phi ptr [ %scevgep8, %for.body.preheader ], [ %scevgep10, %for.body ]261  %lsr.iv5 = phi ptr [ %scevgep4, %for.body.preheader ], [ %scevgep6, %for.body ]262  %lsr.iv1 = phi ptr [ %scevgep, %for.body.preheader ], [ %scevgep2, %for.body ]263  %count = phi i32 [ %start, %for.body.preheader ], [ %count.next, %for.body ]264  br label %for.body265 266for.cond.cleanup:267  ret void268}269 270; CHECK-MID: name: check_loop_dec_sge_xor_brcond_combine271; CHECK-MID: bb.0.entry:272; CHECK-MID:   renamable $lr = t2DoLoopStart killed renamable $r3273; CHECK-MID: bb.1.for.header:274; CHECK-MID:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.1275; CHECK-MID:   tB %bb.2, 14276; CHECK-MID: bb.2.for.cond.cleanup:277define void @check_loop_dec_sge_xor_brcond_combine(ptr nocapture %a, ptr nocapture readonly %b, ptr nocapture readonly %c, i32 %N) {278entry:279  %start = call i32 @llvm.start.loop.iterations.i32(i32 %N)280  br label %for.body.preheader281 282for.body.preheader:283  %scevgep = getelementptr i32, ptr %a, i32 -1284  %scevgep4 = getelementptr i32, ptr %c, i32 -1285  %scevgep8 = getelementptr i32, ptr %b, i32 -1286  br label %for.header287 288for.body:289  %scevgep11 = getelementptr i32, ptr %lsr.iv9, i32 1290  %ld1 = load i32, ptr %scevgep11, align 4291  %scevgep7 = getelementptr i32, ptr %lsr.iv5, i32 1292  %ld2 = load i32, ptr %scevgep7, align 4293  %mul = mul nsw i32 %ld2, %ld1294  %scevgep3 = getelementptr i32, ptr %lsr.iv1, i32 1295  store i32 %mul, ptr %scevgep3, align 4296  %scevgep2 = getelementptr i32, ptr %lsr.iv1, i32 1297  %scevgep6 = getelementptr i32, ptr %lsr.iv5, i32 1298  %scevgep10 = getelementptr i32, ptr %lsr.iv9, i32 1299  %count.next = call i32 @llvm.loop.decrement.reg.i32(i32 %count, i32 1)300  %cmp = icmp sge i32 %count.next, 1301  %negated = xor i1 %cmp, 1302  br i1 %negated, label %for.cond.cleanup, label %for.header303 304for.header:305  %lsr.iv9 = phi ptr [ %scevgep8, %for.body.preheader ], [ %scevgep10, %for.body ]306  %lsr.iv5 = phi ptr [ %scevgep4, %for.body.preheader ], [ %scevgep6, %for.body ]307  %lsr.iv1 = phi ptr [ %scevgep, %for.body.preheader ], [ %scevgep2, %for.body ]308  %count = phi i32 [ %start, %for.body.preheader ], [ %count.next, %for.body ]309  br label %for.body310 311for.cond.cleanup:312  ret void313}314 315; CHECK-MID: name: check_loop_dec_uge_brcond_combine316; CHECK-MID: bb.0.entry:317; CHECK-MID:   renamable $lr = t2DoLoopStart killed renamable $r3318; CHECK-MID: bb.1.for.header:319; CHECK-MID:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.1320; CHECK-MID:   tB %bb.2, 14321; CHECK-MID: bb.2.for.cond.cleanup:322define void @check_loop_dec_uge_brcond_combine(ptr nocapture %a, ptr nocapture readonly %b, ptr nocapture readonly %c, i32 %N) {323entry:324  %start = call i32 @llvm.start.loop.iterations.i32(i32 %N)325  br label %for.body.preheader326 327for.body.preheader:328  %scevgep = getelementptr i32, ptr %a, i32 -1329  %scevgep4 = getelementptr i32, ptr %c, i32 -1330  %scevgep8 = getelementptr i32, ptr %b, i32 -1331  br label %for.header332 333for.body:334  %scevgep11 = getelementptr i32, ptr %lsr.iv9, i32 1335  %ld1 = load i32, ptr %scevgep11, align 4336  %scevgep7 = getelementptr i32, ptr %lsr.iv5, i32 1337  %ld2 = load i32, ptr %scevgep7, align 4338  %mul = mul nsw i32 %ld2, %ld1339  %scevgep3 = getelementptr i32, ptr %lsr.iv1, i32 1340  store i32 %mul, ptr %scevgep3, align 4341  %scevgep2 = getelementptr i32, ptr %lsr.iv1, i32 1342  %scevgep6 = getelementptr i32, ptr %lsr.iv5, i32 1343  %scevgep10 = getelementptr i32, ptr %lsr.iv9, i32 1344  %count.next = call i32 @llvm.loop.decrement.reg.i32(i32 %count, i32 1)345  %cmp = icmp uge i32 %count.next, 1346  br i1 %cmp, label %for.header, label %for.cond.cleanup347 348for.header:349  %lsr.iv9 = phi ptr [ %scevgep8, %for.body.preheader ], [ %scevgep10, %for.body ]350  %lsr.iv5 = phi ptr [ %scevgep4, %for.body.preheader ], [ %scevgep6, %for.body ]351  %lsr.iv1 = phi ptr [ %scevgep, %for.body.preheader ], [ %scevgep2, %for.body ]352  %count = phi i32 [ %start, %for.body.preheader ], [ %count.next, %for.body ]353  br label %for.body354 355for.cond.cleanup:356  ret void357}358 359; CHECK-MID: name: check_loop_dec_uge_xor_brcond_combine360; CHECK-MID: bb.0.entry:361; CHECK-MID:   renamable $lr = t2DoLoopStart killed renamable $r3362; CHECK-MID: bb.1.for.header:363; CHECK-MID:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.1364; CHECK-MID:   tB %bb.2, 14365; CHECK-MID: bb.2.for.cond.cleanup:366define void @check_loop_dec_uge_xor_brcond_combine(ptr nocapture %a, ptr nocapture readonly %b, ptr nocapture readonly %c, i32 %N) {367entry:368  %start = call i32 @llvm.start.loop.iterations.i32(i32 %N)369  br label %for.body.preheader370 371for.body.preheader:372  %scevgep = getelementptr i32, ptr %a, i32 -1373  %scevgep4 = getelementptr i32, ptr %c, i32 -1374  %scevgep8 = getelementptr i32, ptr %b, i32 -1375  br label %for.header376 377for.body:378  %scevgep11 = getelementptr i32, ptr %lsr.iv9, i32 1379  %ld1 = load i32, ptr %scevgep11, align 4380  %scevgep7 = getelementptr i32, ptr %lsr.iv5, i32 1381  %ld2 = load i32, ptr %scevgep7, align 4382  %mul = mul nsw i32 %ld2, %ld1383  %scevgep3 = getelementptr i32, ptr %lsr.iv1, i32 1384  store i32 %mul, ptr %scevgep3, align 4385  %scevgep2 = getelementptr i32, ptr %lsr.iv1, i32 1386  %scevgep6 = getelementptr i32, ptr %lsr.iv5, i32 1387  %scevgep10 = getelementptr i32, ptr %lsr.iv9, i32 1388  %count.next = call i32 @llvm.loop.decrement.reg.i32(i32 %count, i32 1)389  %cmp = icmp uge i32 %count.next, 1390  %negated = xor i1 %cmp, 1391  br i1 %negated, label %for.cond.cleanup, label %for.header392 393for.header:394  %lsr.iv9 = phi ptr [ %scevgep8, %for.body.preheader ], [ %scevgep10, %for.body ]395  %lsr.iv5 = phi ptr [ %scevgep4, %for.body.preheader ], [ %scevgep6, %for.body ]396  %lsr.iv1 = phi ptr [ %scevgep, %for.body.preheader ], [ %scevgep2, %for.body ]397  %count = phi i32 [ %start, %for.body.preheader ], [ %count.next, %for.body ]398  br label %for.body399 400for.cond.cleanup:401  ret void402}403 404; CHECK-MID: check_negated_xor_wls405; CHECK-MID:   $lr = t2WhileLoopStartLR killed renamable $r2406; CHECK-MID:   tB %bb.1407; CHECK-MID: bb.1.while.body:408; CHECK-MID:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.1409; CHECK-MID:   tB %bb.2410; CHECK-MID: bb.2.while.end:411define void @check_negated_xor_wls(ptr nocapture %a, ptr nocapture readonly %b, i32 %N) {412entry:413  %wls = call {i32, i1} @llvm.test.start.loop.iterations.i32(i32 %N)414  %wls0 = extractvalue {i32, i1} %wls, 0415  %wls1 = extractvalue {i32, i1} %wls, 1416  %xor = xor i1 %wls1, 1417  br i1 %xor, label %while.end, label %while.body.preheader418 419while.body.preheader:420  br label %while.body421 422while.body:423  %a.addr.06 = phi ptr [ %incdec.ptr1, %while.body ], [ %a, %while.body.preheader ]424  %b.addr.05 = phi ptr [ %incdec.ptr, %while.body ], [ %b, %while.body.preheader ]425  %count = phi i32 [ %wls0, %while.body.preheader ], [ %count.next, %while.body ]426  %incdec.ptr = getelementptr inbounds i16, ptr %b.addr.05, i32 1427  %ld.b = load i16, ptr %b.addr.05, align 2428  %incdec.ptr1 = getelementptr inbounds i16, ptr %a.addr.06, i32 1429  store i16 %ld.b, ptr %a.addr.06, align 2430  %count.next = call i32 @llvm.loop.decrement.reg.i32(i32 %count, i32 1)431  %cmp = icmp ne i32 %count.next, 0432  br i1 %cmp, label %while.body, label %while.end433 434while.end:435  ret void436}437 438; CHECK-MID: check_negated_cmp_wls439; CHECK-MID:   $lr = t2WhileLoopStartLR killed renamable $r2440; CHECK-MID:   tB %bb.1441; CHECK-MID: bb.1.while.body:442; CHECK-MID:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.1443; CHECK-MID:   tB %bb.2444; CHECK-MID: bb.2.while.end:445define void @check_negated_cmp_wls(ptr nocapture %a, ptr nocapture readonly %b, i32 %N) {446entry:447  %wls = call {i32, i1} @llvm.test.start.loop.iterations.i32(i32 %N)448  %wls0 = extractvalue {i32, i1} %wls, 0449  %wls1 = extractvalue {i32, i1} %wls, 1450  %cmp = icmp ne i1 %wls1, 1451  br i1 %cmp, label %while.end, label %while.body.preheader452 453while.body.preheader:454  br label %while.body455 456while.body:457  %a.addr.06 = phi ptr [ %incdec.ptr1, %while.body ], [ %a, %while.body.preheader ]458  %b.addr.05 = phi ptr [ %incdec.ptr, %while.body ], [ %b, %while.body.preheader ]459  %count = phi i32 [ %wls0, %while.body.preheader ], [ %count.next, %while.body ]460  %incdec.ptr = getelementptr inbounds i16, ptr %b.addr.05, i32 1461  %ld.b = load i16, ptr %b.addr.05, align 2462  %incdec.ptr1 = getelementptr inbounds i16, ptr %a.addr.06, i32 1463  store i16 %ld.b, ptr %a.addr.06, align 2464  %count.next = call i32 @llvm.loop.decrement.reg.i32(i32 %count, i32 1)465  %cmp.1 = icmp ne i32 %count.next, 0466  br i1 %cmp.1, label %while.body, label %while.end467 468while.end:469  ret void470}471 472; CHECK-MID: check_negated_reordered_wls473; CHECK-MID:   $lr = t2WhileLoopStartLR killed renamable $r2474; CHECK-MID:   tB %bb.1475; CHECK-MID: bb.1.while.body:476; CHECK-MID:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.1477; CHECK-MID:   tB %bb.2478; CHECK-MID: bb.2.while.end:479define void @check_negated_reordered_wls(ptr nocapture %a, ptr nocapture readonly %b, i32 %N) {480entry:481  br label %while482 483while.body.preheader:484  br label %while.body485 486while.body:487  %a.addr.06 = phi ptr [ %incdec.ptr1, %while.body ], [ %a, %while.body.preheader ]488  %b.addr.05 = phi ptr [ %incdec.ptr, %while.body ], [ %b, %while.body.preheader ]489  %count = phi i32 [ %wls0, %while.body.preheader ], [ %count.next, %while.body ]490  %incdec.ptr = getelementptr inbounds i16, ptr %b.addr.05, i32 1491  %ld.b = load i16, ptr %b.addr.05, align 2492  %incdec.ptr1 = getelementptr inbounds i16, ptr %a.addr.06, i32 1493  store i16 %ld.b, ptr %a.addr.06, align 2494  %count.next = call i32 @llvm.loop.decrement.reg.i32(i32 %count, i32 1)495  %cmp = icmp ne i32 %count.next, 0496  br i1 %cmp, label %while.body, label %while.end497 498while:499  %wls = call {i32, i1} @llvm.test.start.loop.iterations.i32(i32 %N)500  %wls0 = extractvalue {i32, i1} %wls, 0501  %wls1 = extractvalue {i32, i1} %wls, 1502  %xor = xor i1 %wls1, 1503  br i1 %xor, label %while.end, label %while.body.preheader504 505while.end:506  ret void507}508 509declare i32 @llvm.start.loop.iterations.i32(i32)510declare {i32, i1} @llvm.test.start.loop.iterations.i32(i32)511declare i32 @llvm.loop.decrement.reg.i32(i32, i32)512