Skip to content

Commit 211e8ce

Browse files
VigneshwarJDDEle
authored andcommitted
Revert "[IndVarsSimplify] sinkUnusedInvariants is skipping instructions while sinking. (llvm#135205)"
This reverts commit 7f107c3.
1 parent 73d61d7 commit 211e8ce

File tree

12 files changed

+103
-91
lines changed

12 files changed

+103
-91
lines changed

llvm/lib/Transforms/Scalar/IndVarSimplify.cpp

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1090,12 +1090,10 @@ bool IndVarSimplify::sinkUnusedInvariants(Loop *L) {
10901090
if (!Preheader) return false;
10911091

10921092
bool MadeAnyChanges = false;
1093-
for (Instruction &I : llvm::make_early_inc_range(llvm::reverse(*Preheader))) {
1094-
1095-
// Skip BB Terminator.
1096-
if (Preheader->getTerminator() == &I)
1097-
continue;
1098-
1093+
BasicBlock::iterator InsertPt = ExitBlock->getFirstInsertionPt();
1094+
BasicBlock::iterator I(Preheader->getTerminator());
1095+
while (I != Preheader->begin()) {
1096+
--I;
10991097
// New instructions were inserted at the end of the preheader.
11001098
if (isa<PHINode>(I))
11011099
break;
@@ -1106,28 +1104,28 @@ bool IndVarSimplify::sinkUnusedInvariants(Loop *L) {
11061104
// memory. Note that it's okay if the instruction might have undefined
11071105
// behavior: LoopSimplify guarantees that the preheader dominates the exit
11081106
// block.
1109-
if (I.mayHaveSideEffects() || I.mayReadFromMemory())
1107+
if (I->mayHaveSideEffects() || I->mayReadFromMemory())
11101108
continue;
11111109

1112-
// Skip debug or pseudo instructions.
1113-
if (I.isDebugOrPseudoInst())
1110+
// Skip debug info intrinsics.
1111+
if (isa<DbgInfoIntrinsic>(I))
11141112
continue;
11151113

11161114
// Skip eh pad instructions.
1117-
if (I.isEHPad())
1115+
if (I->isEHPad())
11181116
continue;
11191117

11201118
// Don't sink alloca: we never want to sink static alloca's out of the
11211119
// entry block, and correctly sinking dynamic alloca's requires
11221120
// checks for stacksave/stackrestore intrinsics.
11231121
// FIXME: Refactor this check somehow?
1124-
if (isa<AllocaInst>(&I))
1122+
if (isa<AllocaInst>(I))
11251123
continue;
11261124

11271125
// Determine if there is a use in or before the loop (direct or
11281126
// otherwise).
11291127
bool UsedInLoop = false;
1130-
for (Use &U : I.uses()) {
1128+
for (Use &U : I->uses()) {
11311129
Instruction *User = cast<Instruction>(U.getUser());
11321130
BasicBlock *UseBB = User->getParent();
11331131
if (PHINode *P = dyn_cast<PHINode>(User)) {
@@ -1146,9 +1144,26 @@ bool IndVarSimplify::sinkUnusedInvariants(Loop *L) {
11461144
continue;
11471145

11481146
// Otherwise, sink it to the exit block.
1149-
I.moveBefore(ExitBlock->getFirstInsertionPt());
1150-
SE->forgetValue(&I);
1147+
Instruction *ToMove = &*I;
1148+
bool Done = false;
1149+
1150+
if (I != Preheader->begin()) {
1151+
// Skip debug info intrinsics.
1152+
do {
1153+
--I;
1154+
} while (I->isDebugOrPseudoInst() && I != Preheader->begin());
1155+
1156+
if (I->isDebugOrPseudoInst() && I == Preheader->begin())
1157+
Done = true;
1158+
} else {
1159+
Done = true;
1160+
}
1161+
11511162
MadeAnyChanges = true;
1163+
ToMove->moveBefore(*ExitBlock, InsertPt);
1164+
SE->forgetValue(ToMove);
1165+
if (Done) break;
1166+
InsertPt = ToMove->getIterator();
11521167
}
11531168

11541169
return MadeAnyChanges;

llvm/test/Transforms/IndVarSimplify/ARM/code-size.ll

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,32 +4,30 @@
44

55
define i32 @remove_loop(i32 %size) #0 {
66
; CHECK-V8M-LABEL: @remove_loop(
7-
; CHECK-V8M-SAME: i32 [[SIZE:%.*]]) #[[ATTR0:[0-9]+]] {
87
; CHECK-V8M-NEXT: entry:
9-
; CHECK-V8M-NEXT: br label %[[WHILE_COND:.*]]
10-
; CHECK-V8M: while.cond:
11-
; CHECK-V8M-NEXT: br i1 false, label %[[WHILE_COND]], label %[[WHILE_END:.*]]
12-
; CHECK-V8M: while.end:
13-
; CHECK-V8M-NEXT: [[TMP0:%.*]] = add i32 [[SIZE]], 31
8+
; CHECK-V8M-NEXT: [[TMP0:%.*]] = add i32 [[SIZE:%.*]], 31
149
; CHECK-V8M-NEXT: [[UMIN:%.*]] = call i32 @llvm.umin.i32(i32 [[SIZE]], i32 31)
1510
; CHECK-V8M-NEXT: [[TMP1:%.*]] = sub i32 [[TMP0]], [[UMIN]]
1611
; CHECK-V8M-NEXT: [[TMP2:%.*]] = lshr i32 [[TMP1]], 5
1712
; CHECK-V8M-NEXT: [[TMP3:%.*]] = shl nuw i32 [[TMP2]], 5
13+
; CHECK-V8M-NEXT: br label [[WHILE_COND:%.*]]
14+
; CHECK-V8M: while.cond:
15+
; CHECK-V8M-NEXT: br i1 false, label [[WHILE_COND]], label [[WHILE_END:%.*]]
16+
; CHECK-V8M: while.end:
1817
; CHECK-V8M-NEXT: [[TMP4:%.*]] = sub i32 [[SIZE]], [[TMP3]]
1918
; CHECK-V8M-NEXT: ret i32 [[TMP4]]
2019
;
2120
; CHECK-V8A-LABEL: @remove_loop(
22-
; CHECK-V8A-SAME: i32 [[SIZE:%.*]]) #[[ATTR0:[0-9]+]] {
2321
; CHECK-V8A-NEXT: entry:
24-
; CHECK-V8A-NEXT: br label %[[WHILE_COND:.*]]
25-
; CHECK-V8A: while.cond:
26-
; CHECK-V8A-NEXT: br i1 false, label %[[WHILE_COND]], label %[[WHILE_END:.*]]
27-
; CHECK-V8A: while.end:
28-
; CHECK-V8A-NEXT: [[TMP0:%.*]] = add i32 [[SIZE]], 31
22+
; CHECK-V8A-NEXT: [[TMP0:%.*]] = add i32 [[SIZE:%.*]], 31
2923
; CHECK-V8A-NEXT: [[UMIN:%.*]] = call i32 @llvm.umin.i32(i32 [[SIZE]], i32 31)
3024
; CHECK-V8A-NEXT: [[TMP1:%.*]] = sub i32 [[TMP0]], [[UMIN]]
3125
; CHECK-V8A-NEXT: [[TMP2:%.*]] = lshr i32 [[TMP1]], 5
3226
; CHECK-V8A-NEXT: [[TMP3:%.*]] = shl nuw i32 [[TMP2]], 5
27+
; CHECK-V8A-NEXT: br label [[WHILE_COND:%.*]]
28+
; CHECK-V8A: while.cond:
29+
; CHECK-V8A-NEXT: br i1 false, label [[WHILE_COND]], label [[WHILE_END:%.*]]
30+
; CHECK-V8A: while.end:
3331
; CHECK-V8A-NEXT: [[TMP4:%.*]] = sub i32 [[SIZE]], [[TMP3]]
3432
; CHECK-V8A-NEXT: ret i32 [[TMP4]]
3533
;

llvm/test/Transforms/IndVarSimplify/ARM/indvar-unroll-imm-cost.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ define dso_local arm_aapcscc void @test(ptr nocapture %pDest, ptr nocapture read
7777
; CHECK-NEXT: [[CMP2780:%.*]] = icmp ugt i32 [[ADD25]], [[J_0_LCSSA]]
7878
; CHECK-NEXT: br i1 [[CMP2780]], label [[FOR_BODY29_PREHEADER:%.*]], label [[FOR_END40]]
7979
; CHECK: for.body29.preheader:
80+
; CHECK-NEXT: [[TMP10:%.*]] = sub nsw i32 [[ADD25]], [[J_0_LCSSA]]
8081
; CHECK-NEXT: br label [[FOR_BODY29:%.*]]
8182
; CHECK: for.body29:
8283
; CHECK-NEXT: [[J_184:%.*]] = phi i32 [ [[INC:%.*]], [[FOR_BODY29]] ], [ [[J_0_LCSSA]], [[FOR_BODY29_PREHEADER]] ]
@@ -100,7 +101,6 @@ define dso_local arm_aapcscc void @test(ptr nocapture %pDest, ptr nocapture read
100101
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i32 [[INC]], [[ADD25]]
101102
; CHECK-NEXT: br i1 [[EXITCOND]], label [[FOR_END40_LOOPEXIT:%.*]], label [[FOR_BODY29]]
102103
; CHECK: for.end40.loopexit:
103-
; CHECK-NEXT: [[TMP10:%.*]] = sub nsw i32 [[ADD25]], [[J_0_LCSSA]]
104104
; CHECK-NEXT: [[SCEVGEP93:%.*]] = getelementptr i16, ptr [[PSRCB_ADDR_1_LCSSA]], i32 [[TMP10]]
105105
; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i16, ptr [[PSRCA_ADDR_1_LCSSA]], i32 [[TMP10]]
106106
; CHECK-NEXT: [[SCEVGEP94:%.*]] = getelementptr i32, ptr [[PDEST_ADDR_1_LCSSA]], i32 [[TMP10]]

llvm/test/Transforms/IndVarSimplify/exit-count-select.ll

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44
define i32 @logical_and_2ops(i32 %n, i32 %m) {
55
; CHECK-LABEL: @logical_and_2ops(
66
; CHECK-NEXT: entry:
7+
; CHECK-NEXT: [[TMP0:%.*]] = freeze i32 [[M:%.*]]
78
; CHECK-NEXT: br label [[LOOP:%.*]]
89
; CHECK: loop:
910
; CHECK-NEXT: br i1 false, label [[LOOP]], label [[EXIT:%.*]]
1011
; CHECK: exit:
11-
; CHECK-NEXT: [[TMP0:%.*]] = freeze i32 [[M:%.*]]
1212
; CHECK-NEXT: [[UMIN:%.*]] = call i32 @llvm.umin.i32(i32 [[TMP0]], i32 [[N:%.*]])
1313
; CHECK-NEXT: ret i32 [[UMIN]]
1414
;
@@ -28,11 +28,11 @@ exit:
2828
define i32 @logical_or_2ops(i32 %n, i32 %m) {
2929
; CHECK-LABEL: @logical_or_2ops(
3030
; CHECK-NEXT: entry:
31+
; CHECK-NEXT: [[TMP0:%.*]] = freeze i32 [[M:%.*]]
3132
; CHECK-NEXT: br label [[LOOP:%.*]]
3233
; CHECK: loop:
3334
; CHECK-NEXT: br i1 true, label [[EXIT:%.*]], label [[LOOP]]
3435
; CHECK: exit:
35-
; CHECK-NEXT: [[TMP0:%.*]] = freeze i32 [[M:%.*]]
3636
; CHECK-NEXT: [[UMIN:%.*]] = call i32 @llvm.umin.i32(i32 [[TMP0]], i32 [[N:%.*]])
3737
; CHECK-NEXT: ret i32 [[UMIN]]
3838
;
@@ -52,13 +52,13 @@ exit:
5252
define i32 @logical_and_3ops(i32 %n, i32 %m, i32 %k) {
5353
; CHECK-LABEL: @logical_and_3ops(
5454
; CHECK-NEXT: entry:
55+
; CHECK-NEXT: [[TMP0:%.*]] = freeze i32 [[K:%.*]]
56+
; CHECK-NEXT: [[TMP1:%.*]] = freeze i32 [[M:%.*]]
57+
; CHECK-NEXT: [[UMIN:%.*]] = call i32 @llvm.umin.i32(i32 [[TMP0]], i32 [[TMP1]])
5558
; CHECK-NEXT: br label [[LOOP:%.*]]
5659
; CHECK: loop:
5760
; CHECK-NEXT: br i1 false, label [[LOOP]], label [[EXIT:%.*]]
5861
; CHECK: exit:
59-
; CHECK-NEXT: [[TMP0:%.*]] = freeze i32 [[K:%.*]]
60-
; CHECK-NEXT: [[TMP1:%.*]] = freeze i32 [[M:%.*]]
61-
; CHECK-NEXT: [[UMIN:%.*]] = call i32 @llvm.umin.i32(i32 [[TMP0]], i32 [[TMP1]])
6262
; CHECK-NEXT: [[UMIN1:%.*]] = call i32 @llvm.umin.i32(i32 [[UMIN]], i32 [[N:%.*]])
6363
; CHECK-NEXT: ret i32 [[UMIN1]]
6464
;
@@ -80,13 +80,13 @@ exit:
8080
define i32 @logical_or_3ops(i32 %n, i32 %m, i32 %k) {
8181
; CHECK-LABEL: @logical_or_3ops(
8282
; CHECK-NEXT: entry:
83+
; CHECK-NEXT: [[TMP0:%.*]] = freeze i32 [[K:%.*]]
84+
; CHECK-NEXT: [[TMP1:%.*]] = freeze i32 [[M:%.*]]
85+
; CHECK-NEXT: [[UMIN:%.*]] = call i32 @llvm.umin.i32(i32 [[TMP0]], i32 [[TMP1]])
8386
; CHECK-NEXT: br label [[LOOP:%.*]]
8487
; CHECK: loop:
8588
; CHECK-NEXT: br i1 true, label [[EXIT:%.*]], label [[LOOP]]
8689
; CHECK: exit:
87-
; CHECK-NEXT: [[TMP0:%.*]] = freeze i32 [[K:%.*]]
88-
; CHECK-NEXT: [[TMP1:%.*]] = freeze i32 [[M:%.*]]
89-
; CHECK-NEXT: [[UMIN:%.*]] = call i32 @llvm.umin.i32(i32 [[TMP0]], i32 [[TMP1]])
9090
; CHECK-NEXT: [[UMIN1:%.*]] = call i32 @llvm.umin.i32(i32 [[UMIN]], i32 [[N:%.*]])
9191
; CHECK-NEXT: ret i32 [[UMIN1]]
9292
;

llvm/test/Transforms/IndVarSimplify/exit_value_test3.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
; is high because the loop can be deleted after the exit value rewrite.
55
;
66
; CHECK-LABEL: @_Z3fooPKcjj(
7+
; CHECK: udiv
78
; CHECK: [[LABEL:^[a-zA-Z0-9_.]+]]:
89
; CHECK-NOT: br {{.*}} [[LABEL]]
9-
; CHECK: udiv
1010

1111
define i32 @_Z3fooPKcjj(ptr nocapture readnone %s, i32 %len, i32 %c) #0 {
1212
entry:

llvm/test/Transforms/IndVarSimplify/finite-exit-comparisons.ll

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -932,17 +932,17 @@ for.end: ; preds = %for.body, %entry
932932
define i16 @ult_multiuse_profit(i16 %n.raw, i8 %start) mustprogress {
933933
; CHECK-LABEL: @ult_multiuse_profit(
934934
; CHECK-NEXT: entry:
935-
; CHECK-NEXT: [[TMP0:%.*]] = trunc i16 254 to i8
935+
; CHECK-NEXT: [[TMP0:%.*]] = add i8 [[START:%.*]], 1
936+
; CHECK-NEXT: [[TMP1:%.*]] = zext i8 [[TMP0]] to i16
937+
; CHECK-NEXT: [[TMP2:%.*]] = trunc i16 254 to i8
936938
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
937939
; CHECK: for.body:
938940
; CHECK-NEXT: [[IV:%.*]] = phi i8 [ [[IV_NEXT:%.*]], [[FOR_BODY]] ], [ [[START]], [[ENTRY:%.*]] ]
939941
; CHECK-NEXT: [[IV_NEXT]] = add i8 [[IV]], 1
940-
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[IV_NEXT]], [[TMP0]]
942+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[IV_NEXT]], [[TMP2]]
941943
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END:%.*]]
942944
; CHECK: for.end:
943-
; CHECK-NEXT: [[TMP1:%.*]] = add i8 [[START:%.*]], 1
944-
; CHECK-NEXT: [[TMP2:%.*]] = zext i8 [[TMP1]] to i16
945-
; CHECK-NEXT: [[UMAX:%.*]] = call i16 @llvm.umax.i16(i16 [[TMP2]], i16 254)
945+
; CHECK-NEXT: [[UMAX:%.*]] = call i16 @llvm.umax.i16(i16 [[TMP1]], i16 254)
946946
; CHECK-NEXT: ret i16 [[UMAX]]
947947
;
948948
entry:

llvm/test/Transforms/IndVarSimplify/pr116483.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44
define i32 @test() {
55
; CHECK-LABEL: define i32 @test() {
66
; CHECK-NEXT: [[ENTRY:.*:]]
7-
; CHECK-NEXT: br label %[[LOOP_BODY:.*]]
8-
; CHECK: [[LOOP_BODY]]:
9-
; CHECK-NEXT: br i1 true, label %[[EXIT:.*]], label %[[LOOP_BODY]]
10-
; CHECK: [[EXIT]]:
117
; CHECK-NEXT: [[XOR:%.*]] = xor i32 0, 3
128
; CHECK-NEXT: [[MUL:%.*]] = mul i32 [[XOR]], 329
139
; CHECK-NEXT: [[CONV:%.*]] = trunc i32 [[MUL]] to i16
1410
; CHECK-NEXT: [[SEXT:%.*]] = shl i16 [[CONV]], 8
1511
; CHECK-NEXT: [[CONV1:%.*]] = ashr i16 [[SEXT]], 8
12+
; CHECK-NEXT: br label %[[LOOP_BODY:.*]]
13+
; CHECK: [[LOOP_BODY]]:
14+
; CHECK-NEXT: br i1 true, label %[[EXIT:.*]], label %[[LOOP_BODY]]
15+
; CHECK: [[EXIT]]:
1616
; CHECK-NEXT: [[CONV3:%.*]] = zext i16 [[CONV1]] to i32
1717
; CHECK-NEXT: ret i32 [[CONV3]]
1818
;

llvm/test/Transforms/IndVarSimplify/pr63763.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@ define i32 @test(i1 %c) {
1616
; CHECK-NEXT: [[CONV2:%.*]] = ashr exact i32 [[SEXT]], 24
1717
; CHECK-NEXT: [[INVARIANT_OP:%.*]] = sub nsw i32 7, [[CONV2]]
1818
; CHECK-NEXT: call void @use(i32 [[INVARIANT_OP]])
19+
; CHECK-NEXT: [[SEXT_US:%.*]] = shl i32 [[SEL]], 24
20+
; CHECK-NEXT: [[CONV2_US:%.*]] = ashr exact i32 [[SEXT_US]], 24
1921
; CHECK-NEXT: br label [[LOOP:%.*]]
2022
; CHECK: loop:
2123
; CHECK-NEXT: br i1 true, label [[EXIT:%.*]], label [[LOOP]]
2224
; CHECK: exit:
23-
; CHECK-NEXT: [[SEXT_US:%.*]] = shl i32 [[SEL]], 24
24-
; CHECK-NEXT: [[CONV2_US:%.*]] = ashr exact i32 [[SEXT_US]], 24
2525
; CHECK-NEXT: [[INVARIANT_OP_US:%.*]] = sub nsw i32 7, [[CONV2_US]]
2626
; CHECK-NEXT: ret i32 [[INVARIANT_OP_US]]
2727
;

llvm/test/Transforms/IndVarSimplify/replace-loop-exit-folds.ll

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,20 @@
44
target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
55

66
define i32 @remove_loop(i32 %size) {
7-
; CHECK-LABEL: define i32 @remove_loop(
8-
; CHECK-SAME: i32 [[SIZE:%.*]]) {
9-
; CHECK-NEXT: [[ENTRY:.*]]:
10-
; CHECK-NEXT: br label %[[WHILE_COND:.*]]
11-
; CHECK: [[WHILE_COND]]:
12-
; CHECK-NEXT: [[SIZE_ADDR_0:%.*]] = phi i32 [ [[SIZE]], %[[ENTRY]] ], [ [[SUB:%.*]], %[[WHILE_COND]] ]
13-
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[SIZE_ADDR_0]], 31
14-
; CHECK-NEXT: [[SUB]] = add i32 [[SIZE_ADDR_0]], -32
15-
; CHECK-NEXT: br i1 [[CMP]], label %[[WHILE_COND]], label %[[WHILE_END:.*]]
16-
; CHECK: [[WHILE_END]]:
17-
; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[SIZE]], 31
7+
; CHECK-LABEL: @remove_loop(
8+
; CHECK-NEXT: entry:
9+
; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[SIZE:%.*]], 31
1810
; CHECK-NEXT: [[UMIN:%.*]] = call i32 @llvm.umin.i32(i32 [[SIZE]], i32 31)
1911
; CHECK-NEXT: [[TMP1:%.*]] = sub i32 [[TMP0]], [[UMIN]]
2012
; CHECK-NEXT: [[TMP2:%.*]] = lshr i32 [[TMP1]], 5
2113
; CHECK-NEXT: [[TMP3:%.*]] = shl nuw i32 [[TMP2]], 5
14+
; CHECK-NEXT: br label [[WHILE_COND:%.*]]
15+
; CHECK: while.cond:
16+
; CHECK-NEXT: [[SIZE_ADDR_0:%.*]] = phi i32 [ [[SIZE]], [[ENTRY:%.*]] ], [ [[SUB:%.*]], [[WHILE_COND]] ]
17+
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[SIZE_ADDR_0]], 31
18+
; CHECK-NEXT: [[SUB]] = add i32 [[SIZE_ADDR_0]], -32
19+
; CHECK-NEXT: br i1 [[CMP]], label [[WHILE_COND]], label [[WHILE_END:%.*]]
20+
; CHECK: while.end:
2221
; CHECK-NEXT: [[TMP4:%.*]] = sub i32 [[SIZE]], [[TMP3]]
2322
; CHECK-NEXT: ret i32 [[TMP4]]
2423
;

llvm/test/Transforms/IndVarSimplify/sentinel.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,18 @@ define void @test(i1 %arg) personality ptr @snork {
1010
; CHECK-NEXT: br label [[BB4:%.*]]
1111
; CHECK: bb1:
1212
; CHECK-NEXT: [[INDVARS_IV_NEXT:%.*]] = add i32 [[INDVARS_IV:%.*]], 1
13-
; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[TMP6:%.*]], [[INDVARS_IV]]
14-
; CHECK-NEXT: [[TMP1:%.*]] = sub i32 [[TMP0]], [[SMAX:%.*]]
13+
; CHECK-NEXT: [[TMP0:%.*]] = sub i32 [[TMP1:%.*]], [[SMAX:%.*]]
1514
; CHECK-NEXT: br i1 [[ARG:%.*]], label [[BB2:%.*]], label [[BB4]]
1615
; CHECK: bb2:
17-
; CHECK-NEXT: [[TMP3:%.*]] = phi i32 [ [[TMP1]], [[BB1:%.*]] ]
16+
; CHECK-NEXT: [[TMP3:%.*]] = phi i32 [ [[TMP0]], [[BB1:%.*]] ]
1817
; CHECK-NEXT: ret void
1918
; CHECK: bb4:
2019
; CHECK-NEXT: [[INDVARS_IV]] = phi i32 [ [[INDVARS_IV_NEXT]], [[BB1]] ], [ undef, [[BB:%.*]] ]
2120
; CHECK-NEXT: [[SMAX]] = call i32 @llvm.smax.i32(i32 [[INDVARS_IV]], i32 36)
22-
; CHECK-NEXT: [[TMP6]] = invoke i32 @quux() [ "deopt"(i32 0, i32 0, i32 0, i32 180, i32 0, i32 25, i32 0, i32 7, ptr null, i32 7, ptr null, i32 7, ptr null, i32 3, i32 [[INDVARS_IV]], i32 3, i32 undef, i32 7, ptr null, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 4, double undef, i32 7, ptr null, i32 4, i64 undef, i32 7, ptr null, i32 0, ptr addrspace(1) undef, i32 3, i32 undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 7, ptr null) ]
21+
; CHECK-NEXT: [[TMP6:%.*]] = invoke i32 @quux() [ "deopt"(i32 0, i32 0, i32 0, i32 180, i32 0, i32 25, i32 0, i32 7, ptr null, i32 7, ptr null, i32 7, ptr null, i32 3, i32 [[INDVARS_IV]], i32 3, i32 undef, i32 7, ptr null, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 4, double undef, i32 7, ptr null, i32 4, i64 undef, i32 7, ptr null, i32 0, ptr addrspace(1) undef, i32 3, i32 undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 7, ptr null) ]
2322
; CHECK-NEXT: to label [[BB7:%.*]] unwind label [[BB15:%.*]]
2423
; CHECK: bb7:
24+
; CHECK-NEXT: [[TMP1]] = add i32 [[TMP6]], [[INDVARS_IV]]
2525
; CHECK-NEXT: br label [[BB9:%.*]]
2626
; CHECK: bb9:
2727
; CHECK-NEXT: br i1 true, label [[BB1]], label [[BB9]]

0 commit comments

Comments
 (0)