Skip to content

Commit cb5331e

Browse files
committed
Revert "[LoopSimplifyCFG] Delete dead in-loop blocks"
This reverts commit r348457. The original commit causes clang to crash when doing an instrumented build with a new pass manager. Reverting to unbreak our integrate. llvm-svn: 348484
1 parent 8ba5ee5 commit cb5331e

File tree

2 files changed

+114
-58
lines changed

2 files changed

+114
-58
lines changed

llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp

Lines changed: 10 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,6 @@ static cl::opt<bool> EnableTermFolding("enable-loop-simplifycfg-term-folding",
4646

4747
STATISTIC(NumTerminatorsFolded,
4848
"Number of terminators folded to unconditional branches");
49-
STATISTIC(NumLoopBlocksDeleted,
50-
"Number of loop blocks deleted");
5149

5250
/// If \p BB is a switch or a conditional branch, but only one of its successors
5351
/// can be reached from this block in runtime, return this successor. Otherwise,
@@ -236,27 +234,6 @@ class ConstantTerminatorFoldingImpl {
236234
"All blocks that stay in loop should be live!");
237235
}
238236

239-
/// Delete loop blocks that have become unreachable after folding. Make all
240-
/// relevant updates to DT and LI.
241-
void deleteDeadLoopBlocks() {
242-
DomTreeUpdater DTU(DT, DomTreeUpdater::UpdateStrategy::Eager);
243-
if (MSSAU)
244-
MSSAU->removeBlocks(DeadLoopBlocks);
245-
for (auto *BB : DeadLoopBlocks) {
246-
assert(BB != L.getHeader() &&
247-
"Header of the current loop cannot be dead!");
248-
LLVM_DEBUG(dbgs() << "Deleting dead loop block " << BB->getName()
249-
<< "\n");
250-
if (LI.isLoopHeader(BB)) {
251-
assert(LI.getLoopFor(BB) != &L && "Attempt to remove current loop!");
252-
LI.erase(LI.getLoopFor(BB));
253-
}
254-
LI.removeBlock(BB);
255-
DeleteDeadBlock(BB, &DTU);
256-
++NumLoopBlocksDeleted;
257-
}
258-
}
259-
260237
/// Constant-fold terminators of blocks acculumated in FoldCandidates into the
261238
/// unconditional branches.
262239
void foldTerminators() {
@@ -341,6 +318,15 @@ class ConstantTerminatorFoldingImpl {
341318
return false;
342319
}
343320

321+
// TODO: Support deletion of dead loop blocks.
322+
if (!DeadLoopBlocks.empty()) {
323+
LLVM_DEBUG(dbgs() << "Give up constant terminator folding in loop "
324+
<< L.getHeader()->getName()
325+
<< ": we don't currently"
326+
" support deletion of dead in-loop blocks.\n");
327+
return false;
328+
}
329+
344330
// TODO: Support dead loop exits.
345331
if (!DeadExitBlocks.empty()) {
346332
LLVM_DEBUG(dbgs() << "Give up constant terminator folding in loop "
@@ -351,8 +337,7 @@ class ConstantTerminatorFoldingImpl {
351337

352338
// TODO: Support blocks that are not dead, but also not in loop after the
353339
// folding.
354-
if (BlocksInLoopAfterFolding.size() + DeadLoopBlocks.size() !=
355-
L.getNumBlocks()) {
340+
if (BlocksInLoopAfterFolding.size() != L.getNumBlocks()) {
356341
LLVM_DEBUG(
357342
dbgs() << "Give up constant terminator folding in loop "
358343
<< L.getHeader()->getName()
@@ -372,13 +357,6 @@ class ConstantTerminatorFoldingImpl {
372357
// Make the actual transforms.
373358
foldTerminators();
374359

375-
if (!DeadLoopBlocks.empty()) {
376-
LLVM_DEBUG(dbgs() << "Deleting " << DeadLoopBlocks.size()
377-
<< " dead blocks in loop " << L.getHeader()->getName()
378-
<< "\n");
379-
deleteDeadLoopBlocks();
380-
}
381-
382360
#ifndef NDEBUG
383361
// Make sure that we have preserved all data structures after the transform.
384362
DT.verify();

llvm/test/Transforms/LoopSimplifyCFG/constant-fold-branch.ll

Lines changed: 104 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,18 @@ define i32 @dead_block_test_branch_loop(i32 %end) {
8888
; CHECK-NEXT: preheader:
8989
; CHECK-NEXT: br label [[HEADER:%.*]]
9090
; CHECK: header:
91-
; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[PREHEADER:%.*]] ], [ [[I_INC:%.*]], [[HEADER]] ]
92-
; CHECK-NEXT: [[I_INC]] = add i32 [[I]], 1
91+
; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[PREHEADER:%.*]] ], [ [[I_INC:%.*]], [[BACKEDGE:%.*]] ]
92+
; CHECK-NEXT: br i1 true, label [[BACKEDGE]], label [[DEAD:%.*]]
93+
; CHECK: dead:
94+
; CHECK-NEXT: [[I_2:%.*]] = add i32 [[I]], 1
95+
; CHECK-NEXT: br label [[BACKEDGE]]
96+
; CHECK: backedge:
97+
; CHECK-NEXT: [[I_1:%.*]] = phi i32 [ [[I]], [[HEADER]] ], [ [[I_2]], [[DEAD]] ]
98+
; CHECK-NEXT: [[I_INC]] = add i32 [[I_1]], 1
9399
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[I_INC]], [[END:%.*]]
94100
; CHECK-NEXT: br i1 [[CMP]], label [[HEADER]], label [[EXIT:%.*]]
95101
; CHECK: exit:
96-
; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[HEADER]] ]
102+
; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[BACKEDGE]] ]
97103
; CHECK-NEXT: ret i32 [[I_INC_LCSSA]]
98104
;
99105
preheader:
@@ -123,12 +129,22 @@ define i32 @dead_block_test_switch_loop(i32 %end) {
123129
; CHECK-NEXT: preheader:
124130
; CHECK-NEXT: br label [[HEADER:%.*]]
125131
; CHECK: header:
126-
; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[PREHEADER:%.*]] ], [ [[I_INC:%.*]], [[HEADER]] ]
127-
; CHECK-NEXT: [[I_INC]] = add i32 [[I]], 1
132+
; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[PREHEADER:%.*]] ], [ [[I_INC:%.*]], [[BACKEDGE:%.*]] ]
133+
; CHECK-NEXT: switch i32 1, label [[DEAD:%.*]] [
134+
; CHECK-NEXT: i32 0, label [[DEAD]]
135+
; CHECK-NEXT: i32 1, label [[BACKEDGE]]
136+
; CHECK-NEXT: i32 2, label [[DEAD]]
137+
; CHECK-NEXT: ]
138+
; CHECK: dead:
139+
; CHECK-NEXT: [[I_2:%.*]] = add i32 [[I]], 1
140+
; CHECK-NEXT: br label [[BACKEDGE]]
141+
; CHECK: backedge:
142+
; CHECK-NEXT: [[I_1:%.*]] = phi i32 [ [[I]], [[HEADER]] ], [ [[I_2]], [[DEAD]] ]
143+
; CHECK-NEXT: [[I_INC]] = add i32 [[I_1]], 1
128144
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[I_INC]], [[END:%.*]]
129145
; CHECK-NEXT: br i1 [[CMP]], label [[HEADER]], label [[EXIT:%.*]]
130146
; CHECK: exit:
131-
; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[HEADER]] ]
147+
; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[BACKEDGE]] ]
132148
; CHECK-NEXT: ret i32 [[I_INC_LCSSA]]
133149
;
134150
preheader:
@@ -159,12 +175,18 @@ define i32 @dead_block_propogate_test_branch_loop(i32 %end) {
159175
; CHECK-NEXT: preheader:
160176
; CHECK-NEXT: br label [[HEADER:%.*]]
161177
; CHECK: header:
162-
; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[PREHEADER:%.*]] ], [ [[I_INC:%.*]], [[HEADER]] ]
163-
; CHECK-NEXT: [[I_INC]] = add i32 [[I]], 1
178+
; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[PREHEADER:%.*]] ], [ [[I_INC:%.*]], [[BACKEDGE:%.*]] ]
179+
; CHECK-NEXT: br i1 true, label [[BACKEDGE]], label [[DEAD:%.*]]
180+
; CHECK: dead:
181+
; CHECK-NEXT: [[I_2:%.*]] = add i32 [[I]], 1
182+
; CHECK-NEXT: br label [[BACKEDGE]]
183+
; CHECK: backedge:
184+
; CHECK-NEXT: [[I_1:%.*]] = phi i32 [ [[I]], [[HEADER]] ], [ [[I_2]], [[DEAD]] ]
185+
; CHECK-NEXT: [[I_INC]] = add i32 [[I_1]], 1
164186
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[I_INC]], [[END:%.*]]
165187
; CHECK-NEXT: br i1 [[CMP]], label [[HEADER]], label [[EXIT:%.*]]
166188
; CHECK: exit:
167-
; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[HEADER]] ]
189+
; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[BACKEDGE]] ]
168190
; CHECK-NEXT: ret i32 [[I_INC_LCSSA]]
169191
;
170192
preheader:
@@ -197,12 +219,22 @@ define i32 @dead_block_propogate_test_switch_loop(i32 %end) {
197219
; CHECK-NEXT: preheader:
198220
; CHECK-NEXT: br label [[HEADER:%.*]]
199221
; CHECK: header:
200-
; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[PREHEADER:%.*]] ], [ [[I_INC:%.*]], [[HEADER]] ]
201-
; CHECK-NEXT: [[I_INC]] = add i32 [[I]], 1
222+
; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[PREHEADER:%.*]] ], [ [[I_INC:%.*]], [[BACKEDGE:%.*]] ]
223+
; CHECK-NEXT: switch i32 1, label [[DEAD:%.*]] [
224+
; CHECK-NEXT: i32 0, label [[DEAD]]
225+
; CHECK-NEXT: i32 1, label [[BACKEDGE]]
226+
; CHECK-NEXT: i32 2, label [[DEAD]]
227+
; CHECK-NEXT: ]
228+
; CHECK: dead:
229+
; CHECK-NEXT: [[I_2:%.*]] = add i32 [[I]], 1
230+
; CHECK-NEXT: br label [[BACKEDGE]]
231+
; CHECK: backedge:
232+
; CHECK-NEXT: [[I_1:%.*]] = phi i32 [ [[I]], [[HEADER]] ], [ [[I_2]], [[DEAD]] ]
233+
; CHECK-NEXT: [[I_INC]] = add i32 [[I_1]], 1
202234
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[I_INC]], [[END:%.*]]
203235
; CHECK-NEXT: br i1 [[CMP]], label [[HEADER]], label [[EXIT:%.*]]
204236
; CHECK: exit:
205-
; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[HEADER]] ]
237+
; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[BACKEDGE]] ]
206238
; CHECK-NEXT: ret i32 [[I_INC_LCSSA]]
207239
;
208240
preheader:
@@ -431,19 +463,32 @@ define i32 @dead_sub_loop_test_branch_loop(i32 %end) {
431463
; CHECK-NEXT: preheader:
432464
; CHECK-NEXT: br label [[HEADER:%.*]]
433465
; CHECK: header:
434-
; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[PREHEADER:%.*]] ], [ [[I_INC:%.*]], [[EXIT_A:%.*]] ]
466+
; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[PREHEADER:%.*]] ], [ [[I_INC:%.*]], [[BACKEDGE:%.*]] ]
467+
; CHECK-NEXT: br i1 true, label [[LIVE_PREHEADER:%.*]], label [[DEAD_PREHEADER:%.*]]
468+
; CHECK: live_preheader:
435469
; CHECK-NEXT: br label [[LIVE_LOOP:%.*]]
436470
; CHECK: live_loop:
437-
; CHECK-NEXT: [[A:%.*]] = phi i32 [ 0, [[HEADER]] ], [ [[A_INC:%.*]], [[LIVE_LOOP]] ]
471+
; CHECK-NEXT: [[A:%.*]] = phi i32 [ 0, [[LIVE_PREHEADER]] ], [ [[A_INC:%.*]], [[LIVE_LOOP]] ]
438472
; CHECK-NEXT: [[A_INC]] = add i32 [[A]], 1
439473
; CHECK-NEXT: [[CMP_A:%.*]] = icmp slt i32 [[A_INC]], [[END:%.*]]
440-
; CHECK-NEXT: br i1 [[CMP_A]], label [[LIVE_LOOP]], label [[EXIT_A]]
474+
; CHECK-NEXT: br i1 [[CMP_A]], label [[LIVE_LOOP]], label [[EXIT_A:%.*]]
441475
; CHECK: exit.a:
476+
; CHECK-NEXT: br label [[BACKEDGE]]
477+
; CHECK: dead_preheader:
478+
; CHECK-NEXT: br label [[DEAD_LOOP:%.*]]
479+
; CHECK: dead_loop:
480+
; CHECK-NEXT: [[B:%.*]] = phi i32 [ 0, [[DEAD_PREHEADER]] ], [ [[B_INC:%.*]], [[DEAD_LOOP]] ]
481+
; CHECK-NEXT: [[B_INC]] = add i32 [[B]], 1
482+
; CHECK-NEXT: [[CMP_B:%.*]] = icmp slt i32 [[B_INC]], [[END]]
483+
; CHECK-NEXT: br i1 [[CMP_B]], label [[DEAD_LOOP]], label [[EXIT_B:%.*]]
484+
; CHECK: exit.b:
485+
; CHECK-NEXT: br label [[BACKEDGE]]
486+
; CHECK: backedge:
442487
; CHECK-NEXT: [[I_INC]] = add i32 [[I]], 1
443488
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[I_INC]], [[END]]
444489
; CHECK-NEXT: br i1 [[CMP]], label [[HEADER]], label [[EXIT:%.*]]
445490
; CHECK: exit:
446-
; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[EXIT_A]] ]
491+
; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[BACKEDGE]] ]
447492
; CHECK-NEXT: ret i32 [[I_INC_LCSSA]]
448493
;
449494
preheader:
@@ -491,19 +536,36 @@ define i32 @dead_sub_loop_test_switch_loop(i32 %end) {
491536
; CHECK-NEXT: preheader:
492537
; CHECK-NEXT: br label [[HEADER:%.*]]
493538
; CHECK: header:
494-
; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[PREHEADER:%.*]] ], [ [[I_INC:%.*]], [[EXIT_A:%.*]] ]
539+
; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[PREHEADER:%.*]] ], [ [[I_INC:%.*]], [[BACKEDGE:%.*]] ]
540+
; CHECK-NEXT: switch i32 1, label [[DEAD_PREHEADER:%.*]] [
541+
; CHECK-NEXT: i32 0, label [[DEAD_PREHEADER]]
542+
; CHECK-NEXT: i32 1, label [[LIVE_PREHEADER:%.*]]
543+
; CHECK-NEXT: i32 2, label [[DEAD_PREHEADER]]
544+
; CHECK-NEXT: ]
545+
; CHECK: live_preheader:
495546
; CHECK-NEXT: br label [[LIVE_LOOP:%.*]]
496547
; CHECK: live_loop:
497-
; CHECK-NEXT: [[A:%.*]] = phi i32 [ 0, [[HEADER]] ], [ [[A_INC:%.*]], [[LIVE_LOOP]] ]
548+
; CHECK-NEXT: [[A:%.*]] = phi i32 [ 0, [[LIVE_PREHEADER]] ], [ [[A_INC:%.*]], [[LIVE_LOOP]] ]
498549
; CHECK-NEXT: [[A_INC]] = add i32 [[A]], 1
499550
; CHECK-NEXT: [[CMP_A:%.*]] = icmp slt i32 [[A_INC]], [[END:%.*]]
500-
; CHECK-NEXT: br i1 [[CMP_A]], label [[LIVE_LOOP]], label [[EXIT_A]]
551+
; CHECK-NEXT: br i1 [[CMP_A]], label [[LIVE_LOOP]], label [[EXIT_A:%.*]]
501552
; CHECK: exit.a:
553+
; CHECK-NEXT: br label [[BACKEDGE]]
554+
; CHECK: dead_preheader:
555+
; CHECK-NEXT: br label [[DEAD_LOOP:%.*]]
556+
; CHECK: dead_loop:
557+
; CHECK-NEXT: [[B:%.*]] = phi i32 [ 0, [[DEAD_PREHEADER]] ], [ [[B_INC:%.*]], [[DEAD_LOOP]] ]
558+
; CHECK-NEXT: [[B_INC]] = add i32 [[B]], 1
559+
; CHECK-NEXT: [[CMP_B:%.*]] = icmp slt i32 [[B_INC]], [[END]]
560+
; CHECK-NEXT: br i1 [[CMP_B]], label [[DEAD_LOOP]], label [[EXIT_B:%.*]]
561+
; CHECK: exit.b:
562+
; CHECK-NEXT: br label [[BACKEDGE]]
563+
; CHECK: backedge:
502564
; CHECK-NEXT: [[I_INC]] = add i32 [[I]], 1
503565
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[I_INC]], [[END]]
504566
; CHECK-NEXT: br i1 [[CMP]], label [[HEADER]], label [[EXIT:%.*]]
505567
; CHECK: exit:
506-
; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[EXIT_A]] ]
568+
; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[BACKEDGE]] ]
507569
; CHECK-NEXT: ret i32 [[I_INC_LCSSA]]
508570
;
509571
preheader:
@@ -836,12 +898,18 @@ define i32 @partial_sub_loop_test_branch_loop(i32 %end) {
836898
; CHECK-NEXT: [[J:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[J_INC:%.*]], [[OUTER_BACKEDGE:%.*]] ]
837899
; CHECK-NEXT: br label [[HEADER:%.*]]
838900
; CHECK: header:
839-
; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[OUTER_HEADER]] ], [ [[I_INC:%.*]], [[HEADER]] ]
840-
; CHECK-NEXT: [[I_INC]] = add i32 [[I]], 1
901+
; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[OUTER_HEADER]] ], [ [[I_INC:%.*]], [[BACKEDGE:%.*]] ]
902+
; CHECK-NEXT: br i1 true, label [[BACKEDGE]], label [[DEAD:%.*]]
903+
; CHECK: dead:
904+
; CHECK-NEXT: [[I_2:%.*]] = add i32 [[I]], 1
905+
; CHECK-NEXT: br label [[BACKEDGE]]
906+
; CHECK: backedge:
907+
; CHECK-NEXT: [[I_1:%.*]] = phi i32 [ [[I]], [[HEADER]] ], [ [[I_2]], [[DEAD]] ]
908+
; CHECK-NEXT: [[I_INC]] = add i32 [[I_1]], 1
841909
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[I_INC]], [[END:%.*]]
842910
; CHECK-NEXT: br i1 [[CMP]], label [[HEADER]], label [[OUTER_BACKEDGE]]
843911
; CHECK: outer_backedge:
844-
; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[HEADER]] ]
912+
; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[BACKEDGE]] ]
845913
; CHECK-NEXT: [[J_INC]] = add i32 [[J]], 1
846914
; CHECK-NEXT: [[CMP_J:%.*]] = icmp slt i32 [[J_INC]], [[END]]
847915
; CHECK-NEXT: br i1 [[CMP_J]], label [[OUTER_HEADER]], label [[EXIT:%.*]]
@@ -890,12 +958,22 @@ define i32 @partial_sub_loop_test_switch_loop(i32 %end) {
890958
; CHECK-NEXT: [[J:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[J_INC:%.*]], [[OUTER_BACKEDGE:%.*]] ]
891959
; CHECK-NEXT: br label [[HEADER:%.*]]
892960
; CHECK: header:
893-
; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[OUTER_HEADER]] ], [ [[I_INC:%.*]], [[HEADER]] ]
894-
; CHECK-NEXT: [[I_INC]] = add i32 [[I]], 1
961+
; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[OUTER_HEADER]] ], [ [[I_INC:%.*]], [[BACKEDGE:%.*]] ]
962+
; CHECK-NEXT: switch i32 1, label [[DEAD:%.*]] [
963+
; CHECK-NEXT: i32 0, label [[DEAD]]
964+
; CHECK-NEXT: i32 1, label [[BACKEDGE]]
965+
; CHECK-NEXT: i32 2, label [[DEAD]]
966+
; CHECK-NEXT: ]
967+
; CHECK: dead:
968+
; CHECK-NEXT: [[I_2:%.*]] = add i32 [[I]], 1
969+
; CHECK-NEXT: br label [[BACKEDGE]]
970+
; CHECK: backedge:
971+
; CHECK-NEXT: [[I_1:%.*]] = phi i32 [ [[I]], [[HEADER]] ], [ [[I_2]], [[DEAD]] ]
972+
; CHECK-NEXT: [[I_INC]] = add i32 [[I_1]], 1
895973
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[I_INC]], [[END:%.*]]
896974
; CHECK-NEXT: br i1 [[CMP]], label [[HEADER]], label [[OUTER_BACKEDGE]]
897975
; CHECK: outer_backedge:
898-
; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[HEADER]] ]
976+
; CHECK-NEXT: [[I_INC_LCSSA:%.*]] = phi i32 [ [[I_INC]], [[BACKEDGE]] ]
899977
; CHECK-NEXT: [[J_INC]] = add i32 [[J]], 1
900978
; CHECK-NEXT: [[CMP_J:%.*]] = icmp slt i32 [[J_INC]], [[END]]
901979
; CHECK-NEXT: br i1 [[CMP_J]], label [[OUTER_HEADER]], label [[EXIT:%.*]]

0 commit comments

Comments
 (0)