diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp index 477e4771e04aa..fbc55918d6000 100644 --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -6945,7 +6945,17 @@ const ConstantRange &ScalarEvolution::getRangeRef( ConstantRange RangeFromOps(BitWidth, /*isFullSet=*/false); for (const auto &Op : Phi->operands()) { - auto OpRange = getRangeRef(getSCEV(Op), SignHint, Depth + 1); + ConstantRange OpRange = RangeFromOps; + if (auto *S = getExistingSCEV(Op)) { + OpRange = getRangeRef(S, SignHint, Depth + 1); + } else { + if (!Op->getType()->isIntOrIntVectorTy()) + break; + SimplifyQuery SQ(DL, &DT, &AC, + Phi->getIncomingBlock(Op)->getTerminator(), true); + OpRange = computeConstantRangeIncludingKnownBits( + Op.get(), SignHint == HINT_RANGE_SIGNED, SQ); + } RangeFromOps = RangeFromOps.unionWith(OpRange); // No point to continue if we already have a full set. if (RangeFromOps.isFullSet()) diff --git a/llvm/test/Analysis/ScalarEvolution/addrec-computed-during-addrec-calculation.ll b/llvm/test/Analysis/ScalarEvolution/addrec-computed-during-addrec-calculation.ll index aab2c49e2973d..fad5c3a144e17 100644 --- a/llvm/test/Analysis/ScalarEvolution/addrec-computed-during-addrec-calculation.ll +++ b/llvm/test/Analysis/ScalarEvolution/addrec-computed-during-addrec-calculation.ll @@ -12,19 +12,19 @@ define void @test(ptr %p) { ; CHECK-NEXT: %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop.latch ] ; CHECK-NEXT: --> %iv U: full-set S: full-set Exits: <> LoopDispositions: { %loop.header: Variant, %loop2: Invariant, %loop3: Invariant } ; CHECK-NEXT: %iv2 = phi i32 [ %iv, %loop.header ], [ %iv2.next, %loop2 ] -; CHECK-NEXT: --> {%iv,+,1}<%loop2> U: full-set S: full-set Exits: <> LoopDispositions: { %loop2: Computable, %loop.header: Variant } +; CHECK-NEXT: --> {%iv,+,1}<%loop2> U: full-set S: full-set Exits: <> LoopDispositions: { %loop2: Computable, %loop.header: Variant } ; CHECK-NEXT: %iv2.next = add i32 %iv2, 1 -; CHECK-NEXT: --> {(1 + %iv),+,1}<%loop2> U: full-set S: full-set Exits: <> LoopDispositions: { %loop2: Computable, %loop.header: Variant } +; CHECK-NEXT: --> {(1 + %iv),+,1}<%loop2> U: full-set S: full-set Exits: <> LoopDispositions: { %loop2: Computable, %loop.header: Variant } ; CHECK-NEXT: %v = load i32, ptr %p, align 4 ; CHECK-NEXT: --> %v U: full-set S: full-set Exits: <> LoopDispositions: { %loop2: Variant, %loop.header: Variant } ; CHECK-NEXT: %iv2.ext = sext i32 %iv2 to i64 -; CHECK-NEXT: --> (sext i32 {%iv,+,1}<%loop2> to i64) U: [-2147483648,2147483648) S: [-2147483648,2147483648) Exits: <> LoopDispositions: { %loop.header: Variant, %loop2: Computable, %loop3: Invariant } +; CHECK-NEXT: --> {(sext i32 %iv to i64),+,1}<%loop2> U: [-2147483648,6442450943) S: [-2147483648,6442450943) Exits: <> LoopDispositions: { %loop.header: Variant, %loop2: Computable, %loop3: Invariant } ; CHECK-NEXT: %iv3 = phi i64 [ %iv2.ext, %loop2.end ], [ %iv3.next, %loop3 ] -; CHECK-NEXT: --> {(sext i32 {%iv,+,1}<%loop2> to i64),+,1}<%loop3> U: [-2147483648,2147483648) S: [-2147483648,2147483648) Exits: (sext i32 {%iv,+,1}<%loop2> to i64) LoopDispositions: { %loop3: Computable, %loop.header: Variant } +; CHECK-NEXT: --> {{\{\{}}(sext i32 %iv to i64),+,1}<%loop2>,+,1}<%loop3> U: [-2147483648,6442450943) S: [-2147483648,6442450943) Exits: {(sext i32 %iv to i64),+,1}<%loop2> LoopDispositions: { %loop3: Computable, %loop.header: Variant } ; CHECK-NEXT: %iv3.next = add nsw i64 %iv3, 1 -; CHECK-NEXT: --> {(1 + (sext i32 {%iv,+,1}<%loop2> to i64)),+,1}<%loop3> U: [-2147483647,2147483649) S: [-2147483647,2147483649) Exits: (1 + (sext i32 {%iv,+,1}<%loop2> to i64)) LoopDispositions: { %loop3: Computable, %loop.header: Variant } +; CHECK-NEXT: --> {{\{\{}}(1 + (sext i32 %iv to i64)),+,1}<%loop2>,+,1}<%loop3> U: [-2147483647,6442450944) S: [-2147483647,6442450944) Exits: {(1 + (sext i32 %iv to i64)),+,1}<%loop2> LoopDispositions: { %loop3: Computable, %loop.header: Variant } ; CHECK-NEXT: %iv.next = trunc i64 %iv3 to i32 -; CHECK-NEXT: --> {{\{\{}}%iv,+,1}<%loop2>,+,1}<%loop3> U: full-set S: full-set --> {%iv,+,1}<%loop2> U: full-set S: full-set Exits: <> LoopDispositions: { %loop.header: Variant, %loop2: Variant, %loop3: Computable } +; CHECK-NEXT: --> {{\{\{}}%iv,+,1}<%loop2>,+,1}<%loop3> U: full-set S: full-set --> {%iv,+,1}<%loop2> U: full-set S: full-set Exits: <> LoopDispositions: { %loop.header: Variant, %loop2: Variant, %loop3: Computable } ; CHECK-NEXT: Determining loop execution counts for: @test ; CHECK-NEXT: Loop %loop2: Unpredictable backedge-taken count. ; CHECK-NEXT: Loop %loop2: constant max backedge-taken count is i32 -1 diff --git a/llvm/test/Analysis/ScalarEvolution/load.ll b/llvm/test/Analysis/ScalarEvolution/load.ll index 0f0bc1ef1bf25..ce4cd0e4927f0 100644 --- a/llvm/test/Analysis/ScalarEvolution/load.ll +++ b/llvm/test/Analysis/ScalarEvolution/load.ll @@ -70,15 +70,15 @@ define i32 @test2() nounwind uwtable readonly { ; CHECK-NEXT: %sum.02 = phi i32 [ 0, %entry ], [ %add, %for.body ] ; CHECK-NEXT: --> %sum.02 U: full-set S: full-set Exits: 10 LoopDispositions: { %for.body: Variant } ; CHECK-NEXT: %n.01 = phi ptr [ @node5, %entry ], [ %1, %for.body ] -; CHECK-NEXT: --> %n.01 U: full-set S: full-set Exits: @node1 LoopDispositions: { %for.body: Variant } +; CHECK-NEXT: --> %n.01 U: empty-set S: empty-set Exits: @node1 LoopDispositions: { %for.body: Variant } ; CHECK-NEXT: %i = getelementptr inbounds %struct.ListNode, ptr %n.01, i64 0, i32 1 -; CHECK-NEXT: --> (4 + %n.01) U: [4,0) S: [4,0) Exits: (4 + @node1) LoopDispositions: { %for.body: Variant } +; CHECK-NEXT: --> (4 + %n.01) U: empty-set S: empty-set Exits: (4 + @node1) LoopDispositions: { %for.body: Variant } ; CHECK-NEXT: %0 = load i32, ptr %i, align 4 ; CHECK-NEXT: --> %0 U: full-set S: full-set Exits: 0 LoopDispositions: { %for.body: Variant } ; CHECK-NEXT: %add = add nsw i32 %0, %sum.02 ; CHECK-NEXT: --> (%0 + %sum.02) U: full-set S: full-set Exits: 10 LoopDispositions: { %for.body: Variant } ; CHECK-NEXT: %next = getelementptr inbounds %struct.ListNode, ptr %n.01, i64 0, i32 0 -; CHECK-NEXT: --> %n.01 U: full-set S: full-set Exits: @node1 LoopDispositions: { %for.body: Variant } +; CHECK-NEXT: --> %n.01 U: empty-set S: empty-set Exits: @node1 LoopDispositions: { %for.body: Variant } ; CHECK-NEXT: %1 = load ptr, ptr %next, align 8 ; CHECK-NEXT: --> %1 U: full-set S: full-set Exits: null LoopDispositions: { %for.body: Variant } ; CHECK-NEXT: Determining loop execution counts for: @test2 diff --git a/llvm/test/Analysis/ScalarEvolution/outer_phi.ll b/llvm/test/Analysis/ScalarEvolution/outer_phi.ll index e4a9753b24054..2b605914f1205 100644 --- a/llvm/test/Analysis/ScalarEvolution/outer_phi.ll +++ b/llvm/test/Analysis/ScalarEvolution/outer_phi.ll @@ -69,9 +69,9 @@ define i32 @test_02(i32 %a, i32 %b) { ; CHECK-LABEL: 'test_02' ; CHECK-NEXT: Classifying expressions for: @test_02 ; CHECK-NEXT: %outer.iv = phi i32 [ 0, %entry ], [ %iv.next, %outer.backedge ] -; CHECK-NEXT: --> %outer.iv U: full-set S: full-set Exits: <> LoopDispositions: { %outer: Variant, %inner: Invariant } +; CHECK-NEXT: --> %outer.iv U: full-set S: [-2147483647,-2147483648) Exits: <> LoopDispositions: { %outer: Variant, %inner: Invariant } ; CHECK-NEXT: %iv = phi i32 [ %outer.iv, %outer ], [ %iv.next, %inner.backedge ] -; CHECK-NEXT: --> {%outer.iv,+,1}<%inner> U: full-set S: full-set Exits: <> LoopDispositions: { %inner: Computable, %outer: Variant } +; CHECK-NEXT: --> {%outer.iv,+,1}<%inner> U: [-2147483647,-2147483648) S: [-2147483647,-2147483648) Exits: <> LoopDispositions: { %inner: Computable, %outer: Variant } ; CHECK-NEXT: %iv.next = add nuw nsw i32 %iv, 1 ; CHECK-NEXT: --> {(1 + %outer.iv),+,1}<%inner> U: full-set S: full-set Exits: <> LoopDispositions: { %inner: Computable, %outer: Variant } ; CHECK-NEXT: %inner.loop.cond = call i1 @cond() @@ -80,11 +80,11 @@ define i32 @test_02(i32 %a, i32 %b) { ; CHECK-NEXT: --> %outer.loop.cond U: full-set S: full-set Exits: <> LoopDispositions: { %outer: Variant, %inner: Invariant } ; CHECK-NEXT: Determining loop execution counts for: @test_02 ; CHECK-NEXT: Loop %inner: Unpredictable backedge-taken count. -; CHECK-NEXT: exit count for inner: ((-1 * %outer.iv) + (%b smax %outer.iv)) +; CHECK-NEXT: exit count for inner: ((-1 * %outer.iv) + (%b smax %outer.iv)) ; CHECK-NEXT: exit count for inner.backedge: ***COULDNOTCOMPUTE*** -; CHECK-NEXT: Loop %inner: constant max backedge-taken count is i32 -1 -; CHECK-NEXT: Loop %inner: symbolic max backedge-taken count is ((-1 * %outer.iv) + (%b smax %outer.iv)) -; CHECK-NEXT: symbolic max exit count for inner: ((-1 * %outer.iv) + (%b smax %outer.iv)) +; CHECK-NEXT: Loop %inner: constant max backedge-taken count is i32 -2 +; CHECK-NEXT: Loop %inner: symbolic max backedge-taken count is ((-1 * %outer.iv) + (%b smax %outer.iv)) +; CHECK-NEXT: symbolic max exit count for inner: ((-1 * %outer.iv) + (%b smax %outer.iv)) ; CHECK-NEXT: symbolic max exit count for inner.backedge: ***COULDNOTCOMPUTE*** ; CHECK-NEXT: Loop %outer: Unpredictable backedge-taken count. ; CHECK-NEXT: exit count for inner: ***COULDNOTCOMPUTE*** diff --git a/llvm/test/Analysis/ScalarEvolution/pr49856.ll b/llvm/test/Analysis/ScalarEvolution/pr49856.ll index 751677f1f9f80..2045f3a7750de 100644 --- a/llvm/test/Analysis/ScalarEvolution/pr49856.ll +++ b/llvm/test/Analysis/ScalarEvolution/pr49856.ll @@ -7,7 +7,7 @@ define void @test() { ; CHECK-NEXT: %tmp = phi i32 [ 2, %bb ], [ %tmp2, %bb3 ] ; CHECK-NEXT: --> %tmp U: [1,-2147483648) S: [0,-2147483648) ; CHECK-NEXT: %tmp2 = add nuw nsw i32 %tmp, 1 -; CHECK-NEXT: --> (1 + %tmp) U: [1,-2147483647) S: [1,-2147483647) +; CHECK-NEXT: --> (1 + %tmp) U: [2,-2147483647) S: [1,-2147483647) ; CHECK-NEXT: Determining loop execution counts for: @test ; bb: diff --git a/llvm/test/Analysis/ScalarEvolution/ranges.ll b/llvm/test/Analysis/ScalarEvolution/ranges.ll index cf9d999a6a1ff..0b8237d2a7da4 100644 --- a/llvm/test/Analysis/ScalarEvolution/ranges.ll +++ b/llvm/test/Analysis/ScalarEvolution/ranges.ll @@ -308,7 +308,7 @@ define void @mul_6(i32 %n) { ; CHECK-LABEL: 'mul_6' ; CHECK-NEXT: Classifying expressions for: @mul_6 ; CHECK-NEXT: %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ] -; CHECK-NEXT: --> %iv U: [0,-1) S: [-2147483648,2147483645) Exits: <> LoopDispositions: { %loop: Variant } +; CHECK-NEXT: --> %iv U: [0,-3) S: [-2147483648,2147483645) Exits: <> LoopDispositions: { %loop: Variant } ; CHECK-NEXT: %iv.inc = mul nuw i32 %iv, 6 ; CHECK-NEXT: --> (6 * %iv) U: [0,-3) S: [-2147483648,2147483645) Exits: <> LoopDispositions: { %loop: Variant } ; CHECK-NEXT: Determining loop execution counts for: @mul_6 @@ -358,7 +358,7 @@ define void @mul_8(i32 %n) { ; CHECK-LABEL: 'mul_8' ; CHECK-NEXT: Classifying expressions for: @mul_8 ; CHECK-NEXT: %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ] -; CHECK-NEXT: --> %iv U: [0,-7) S: [-2147483648,2147483585) Exits: <> LoopDispositions: { %loop: Variant } +; CHECK-NEXT: --> %iv U: [0,-63) S: [-2147483648,2147483585) Exits: <> LoopDispositions: { %loop: Variant } ; CHECK-NEXT: %iv.inc = mul nuw i32 %iv, 8 ; CHECK-NEXT: --> (8 * %iv) U: [0,-63) S: [-2147483648,2147483585) Exits: <> LoopDispositions: { %loop: Variant } ; CHECK-NEXT: Determining loop execution counts for: @mul_8 @@ -408,7 +408,7 @@ define void @mul_10(i32 %n) { ; CHECK-LABEL: 'mul_10' ; CHECK-NEXT: Classifying expressions for: @mul_10 ; CHECK-NEXT: %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ] -; CHECK-NEXT: --> %iv U: [0,-1) S: [-2147483648,2147483645) Exits: <> LoopDispositions: { %loop: Variant } +; CHECK-NEXT: --> %iv U: [0,-3) S: [-2147483648,2147483645) Exits: <> LoopDispositions: { %loop: Variant } ; CHECK-NEXT: %iv.inc = mul nuw i32 %iv, 10 ; CHECK-NEXT: --> (10 * %iv) U: [0,-3) S: [-2147483648,2147483645) Exits: <> LoopDispositions: { %loop: Variant } ; CHECK-NEXT: Determining loop execution counts for: @mul_10 @@ -433,7 +433,7 @@ define void @mul_8_wrap(i32 %n) { ; CHECK-LABEL: 'mul_8_wrap' ; CHECK-NEXT: Classifying expressions for: @mul_8_wrap ; CHECK-NEXT: %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ] -; CHECK-NEXT: --> %iv U: [0,-7) S: [-2147483648,2147483585) Exits: <> LoopDispositions: { %loop: Variant } +; CHECK-NEXT: --> %iv U: [0,-63) S: [-2147483648,2147483585) Exits: <> LoopDispositions: { %loop: Variant } ; CHECK-NEXT: %iv.inc = mul i32 %iv, 8 ; CHECK-NEXT: --> (8 * %iv) U: [0,-63) S: [-2147483648,2147483585) Exits: <> LoopDispositions: { %loop: Variant } ; CHECK-NEXT: Determining loop execution counts for: @mul_8_wrap @@ -458,7 +458,7 @@ define void @mul_10_wrap(i32 %n) { ; CHECK-LABEL: 'mul_10_wrap' ; CHECK-NEXT: Classifying expressions for: @mul_10_wrap ; CHECK-NEXT: %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ] -; CHECK-NEXT: --> %iv U: [0,-1) S: [-2147483648,2147483645) Exits: <> LoopDispositions: { %loop: Variant } +; CHECK-NEXT: --> %iv U: [0,-3) S: [-2147483648,2147483645) Exits: <> LoopDispositions: { %loop: Variant } ; CHECK-NEXT: %iv.inc = mul i32 %iv, 10 ; CHECK-NEXT: --> (10 * %iv) U: [0,-3) S: [-2147483648,2147483645) Exits: <> LoopDispositions: { %loop: Variant } ; CHECK-NEXT: Determining loop execution counts for: @mul_10_wrap diff --git a/llvm/test/Analysis/ScalarEvolution/shift-recurrences.ll b/llvm/test/Analysis/ScalarEvolution/shift-recurrences.ll index 6cd709bfff68f..ef44cc0106363 100644 --- a/llvm/test/Analysis/ScalarEvolution/shift-recurrences.ll +++ b/llvm/test/Analysis/ScalarEvolution/shift-recurrences.ll @@ -167,7 +167,7 @@ define void @test_shl(i1 %arg) { ; CHECK-LABEL: 'test_shl' ; CHECK-NEXT: Classifying expressions for: @test_shl ; CHECK-NEXT: %iv.shl = phi i64 [ 8, %entry ], [ %iv.shl.next, %loop ] -; CHECK-NEXT: --> %iv.shl U: [0,-7) S: [-9223372036854775808,9223372036854775793) Exits: <> LoopDispositions: { %loop: Variant } +; CHECK-NEXT: --> %iv.shl U: [0,-15) S: [-9223372036854775808,9223372036854775793) Exits: <> LoopDispositions: { %loop: Variant } ; CHECK-NEXT: %iv.shl.next = shl i64 %iv.shl, 1 ; CHECK-NEXT: --> (2 * %iv.shl) U: [0,-15) S: [-9223372036854775808,9223372036854775793) Exits: <> LoopDispositions: { %loop: Variant } ; CHECK-NEXT: Determining loop execution counts for: @test_shl @@ -288,7 +288,7 @@ define void @test_shl5(i1 %arg) { ; CHECK-NEXT: %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ] ; CHECK-NEXT: --> {0,+,1}<%loop> U: [0,62) S: [0,62) Exits: 61 LoopDispositions: { %loop: Computable } ; CHECK-NEXT: %iv.shl = phi i64 [ 4, %entry ], [ %iv.shl.next, %loop ] -; CHECK-NEXT: --> %iv.shl U: [0,-3) S: [-9223372036854775808,9223372036854775801) Exits: -9223372036854775808 LoopDispositions: { %loop: Variant } +; CHECK-NEXT: --> %iv.shl U: [0,-7) S: [-9223372036854775808,9223372036854775801) Exits: -9223372036854775808 LoopDispositions: { %loop: Variant } ; CHECK-NEXT: %iv.next = add i64 %iv, 1 ; CHECK-NEXT: --> {1,+,1}<%loop> U: [1,63) S: [1,63) Exits: 62 LoopDispositions: { %loop: Computable } ; CHECK-NEXT: %iv.shl.next = shl i64 %iv.shl, 1 @@ -442,7 +442,7 @@ define void @nonloop_recurrence() { ; CHECK-NEXT: %tmp = phi i32 [ 2, %bb ], [ %tmp2, %bb3 ] ; CHECK-NEXT: --> %tmp U: [1,-2147483648) S: [0,-2147483648) ; CHECK-NEXT: %tmp2 = add nuw nsw i32 %tmp, 1 -; CHECK-NEXT: --> (1 + %tmp) U: [1,-2147483647) S: [1,-2147483647) +; CHECK-NEXT: --> (1 + %tmp) U: [2,-2147483647) S: [1,-2147483647) ; CHECK-NEXT: Determining loop execution counts for: @nonloop_recurrence ; bb: @@ -466,7 +466,7 @@ define void @nonloop_recurrence_2() { ; CHECK-NEXT: %tmp = phi i32 [ 2, %loop ], [ %tmp2, %bb3 ] ; CHECK-NEXT: --> %tmp U: [1,-2147483648) S: [0,-2147483648) Exits: <> LoopDispositions: { %loop: Variant } ; CHECK-NEXT: %tmp2 = add nuw nsw i32 %tmp, 1 -; CHECK-NEXT: --> (1 + %tmp) U: [1,-2147483647) S: [1,-2147483647) Exits: <> LoopDispositions: { %loop: Variant } +; CHECK-NEXT: --> (1 + %tmp) U: [2,-2147483647) S: [1,-2147483647) Exits: <> LoopDispositions: { %loop: Variant } ; CHECK-NEXT: Determining loop execution counts for: @nonloop_recurrence_2 ; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count. ; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count. diff --git a/llvm/test/Transforms/IRCE/decrementing-loop.ll b/llvm/test/Transforms/IRCE/decrementing-loop.ll index 72a818d513411..01289f8921dda 100644 --- a/llvm/test/Transforms/IRCE/decrementing-loop.ll +++ b/llvm/test/Transforms/IRCE/decrementing-loop.ll @@ -212,14 +212,15 @@ exit: ; Check that we can figure out that IV is non-negative via implication through ; two Phi nodes, one being AddRec. +; TODO: fixme define void @test_05(ptr %a, ptr %a_len_ptr, i1 %cond) { -; CHECK-LABEL: test_05 -; CHECK: mainloop: -; CHECK-NEXT: br label %loop -; CHECK: loop: -; CHECK: br i1 true, label %in.bounds, label %out.of.bounds -; CHECK: loop.preloop: +; TODO-LABEL: test_05 +; TODO: mainloop: +; TODO-NEXT: br label %loop +; TODO: loop: +; TODO: br i1 true, label %in.bounds, label %out.of.bounds +; TODO: loop.preloop: entry: %len.a = load i32, ptr %a_len_ptr, !range !0 diff --git a/llvm/test/Transforms/LICM/update-scev-after-hoist.ll b/llvm/test/Transforms/LICM/update-scev-after-hoist.ll index e303d04ce3191..fb44583d800e6 100644 --- a/llvm/test/Transforms/LICM/update-scev-after-hoist.ll +++ b/llvm/test/Transforms/LICM/update-scev-after-hoist.ll @@ -7,7 +7,7 @@ define i16 @main() { ; SCEV-EXPR-NEXT: %mul = phi i16 [ 1, %entry ], [ %mul.n.3.reass, %loop ] ; SCEV-EXPR-NEXT: --> %mul U: [0,-15) S: [-32768,32753) Exits: 4096 LoopDispositions: { %loop: Variant } ; SCEV-EXPR-NEXT: %div = phi i16 [ 32767, %entry ], [ %div.n.3, %loop ] -; SCEV-EXPR-NEXT: --> %div U: [-2048,-32768) S: [-2048,-32768) Exits: 7 LoopDispositions: { %loop: Variant } +; SCEV-EXPR-NEXT: --> %div U: [-2048,-32768) S: [-16384,-32768) Exits: 7 LoopDispositions: { %loop: Variant } ; SCEV-EXPR-NEXT: %mul.n.reass.reass = mul i16 %mul, 8 ; SCEV-EXPR-NEXT: --> (8 * %mul) U: [0,-7) S: [-32768,32761) Exits: -32768 LoopDispositions: { %loop: Variant } ; SCEV-EXPR-NEXT: %div.n = sdiv i16 %div, 2 diff --git a/llvm/test/Transforms/LoopIdiom/basic-address-space.ll b/llvm/test/Transforms/LoopIdiom/basic-address-space.ll index 9945aeb2021a9..4ac4656d2789e 100644 --- a/llvm/test/Transforms/LoopIdiom/basic-address-space.ll +++ b/llvm/test/Transforms/LoopIdiom/basic-address-space.ll @@ -12,7 +12,7 @@ define void @test10(ptr addrspace(2) %X) nounwind ssp { ; CHECK-NEXT: br label [[BB_NPH:%.*]] ; CHECK: bb.nph: ; CHECK-NEXT: [[I_04:%.*]] = phi i16 [ 0, [[ENTRY:%.*]] ], [ [[INC12:%.*]], [[FOR_INC10:%.*]] ] -; CHECK-NEXT: [[TMP0:%.*]] = mul nuw nsw i16 [[I_04]], 100 +; CHECK-NEXT: [[TMP0:%.*]] = mul i16 [[I_04]], 100 ; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr nuw i8, ptr addrspace(2) [[X]], i16 [[TMP0]] ; CHECK-NEXT: br label [[FOR_BODY5:%.*]] ; CHECK: for.body5: diff --git a/llvm/test/Transforms/LoopIdiom/basic.ll b/llvm/test/Transforms/LoopIdiom/basic.ll index 8fdaac3fdffe3..bffe51a178a19 100644 --- a/llvm/test/Transforms/LoopIdiom/basic.ll +++ b/llvm/test/Transforms/LoopIdiom/basic.ll @@ -478,7 +478,7 @@ define void @test10(ptr %X) nounwind ssp { ; CHECK: bb.nph: ; CHECK-NEXT: [[INDVAR:%.*]] = phi i64 [ [[INDVAR_NEXT:%.*]], [[FOR_INC10:%.*]] ], [ 0, [[ENTRY:%.*]] ] ; CHECK-NEXT: [[I_04:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[INC12:%.*]], [[FOR_INC10]] ] -; CHECK-NEXT: [[TMP0:%.*]] = mul nuw nsw i64 [[INDVAR]], 100 +; CHECK-NEXT: [[TMP0:%.*]] = mul i64 [[INDVAR]], 100 ; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr nuw i8, ptr [[X]], i64 [[TMP0]] ; CHECK-NEXT: br label [[FOR_BODY5:%.*]] ; CHECK: for.body5: @@ -896,7 +896,7 @@ define void @test19(ptr nocapture %X) { ; CHECK: for.cond1.preheader: ; CHECK-NEXT: [[INDVAR:%.*]] = phi i64 [ [[INDVAR_NEXT:%.*]], [[FOR_INC4:%.*]] ], [ 0, [[ENTRY:%.*]] ] ; CHECK-NEXT: [[I_06:%.*]] = phi i32 [ 99, [[ENTRY]] ], [ [[DEC5:%.*]], [[FOR_INC4]] ] -; CHECK-NEXT: [[TMP0:%.*]] = mul nsw i64 [[INDVAR]], -100 +; CHECK-NEXT: [[TMP0:%.*]] = mul i64 [[INDVAR]], -100 ; CHECK-NEXT: [[TMP1:%.*]] = add i64 [[TMP0]], 9900 ; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[X]], i64 [[TMP1]] ; CHECK-NEXT: [[MUL:%.*]] = mul nsw i32 [[I_06]], 100 diff --git a/llvm/test/Transforms/LoopStrengthReduce/X86/lifetime-use.ll b/llvm/test/Transforms/LoopStrengthReduce/X86/lifetime-use.ll index c7a0de22b200b..868c152ea8a8a 100644 --- a/llvm/test/Transforms/LoopStrengthReduce/X86/lifetime-use.ll +++ b/llvm/test/Transforms/LoopStrengthReduce/X86/lifetime-use.ll @@ -14,7 +14,7 @@ define void @test(ptr %p, i64 %idx) { ; CHECK-NEXT: br label %[[LOOP:.*]] ; CHECK: [[LOOP]]: ; CHECK-NEXT: [[LSR_IV:%.*]] = phi i64 [ [[LSR_IV_NEXT:%.*]], %[[LOOP]] ], [ -8, %[[ENTRY]] ] -; CHECK-NEXT: [[TMP2:%.*]] = shl nsw i64 [[LSR_IV]], 2 +; CHECK-NEXT: [[TMP2:%.*]] = shl i64 [[LSR_IV]], 2 ; CHECK-NEXT: [[SCEVGEP8:%.*]] = getelementptr i8, ptr [[P]], i64 [[TMP2]] ; CHECK-NEXT: [[SCEVGEP9:%.*]] = getelementptr i8, ptr [[SCEVGEP8]], i64 32 ; CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[SCEVGEP9]], align 4 diff --git a/llvm/test/Transforms/LoopStrengthReduce/X86/missing-phi-operand-update.ll b/llvm/test/Transforms/LoopStrengthReduce/X86/missing-phi-operand-update.ll index ae24da06415cc..51e73e3746e42 100644 --- a/llvm/test/Transforms/LoopStrengthReduce/X86/missing-phi-operand-update.ll +++ b/llvm/test/Transforms/LoopStrengthReduce/X86/missing-phi-operand-update.ll @@ -51,21 +51,21 @@ define i32 @foo(ptr %A, i32 %t) { ; CHECK: loop.32: ; CHECK-NEXT: [[LSR_IV1]] = phi i64 [ [[LSR_IV_NEXT:%.*]], [[IFMERGE_46:%.*]] ], [ 2, [[ENTRY:%.*]] ] ; CHECK-NEXT: [[I1_I64_0:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[NEXTIVLOOP_32:%.*]], [[IFMERGE_46]] ] -; CHECK-NEXT: [[TMP3:%.*]] = shl nuw nsw i64 [[LSR_IV1]], 2 +; CHECK-NEXT: [[TMP3:%.*]] = shl i64 [[LSR_IV1]], 2 ; CHECK-NEXT: [[SCEVGEP7:%.*]] = getelementptr i8, ptr [[A]], i64 [[TMP3]] ; CHECK-NEXT: [[SCEVGEP8:%.*]] = getelementptr i8, ptr [[SCEVGEP7]], i64 -4 ; CHECK-NEXT: [[GEPLOAD:%.*]] = load i32, ptr [[SCEVGEP8]], align 4 ; CHECK-NEXT: [[CMP_34:%.*]] = icmp sgt i32 [[GEPLOAD]], [[T]] ; CHECK-NEXT: br i1 [[CMP_34]], label [[THEN_34]], label [[IFMERGE_34]] ; CHECK: then.34: -; CHECK-NEXT: [[TMP4:%.*]] = shl nuw nsw i64 [[LSR_IV1]], 2 +; CHECK-NEXT: [[TMP4:%.*]] = shl i64 [[LSR_IV1]], 2 ; CHECK-NEXT: [[SCEVGEP5:%.*]] = getelementptr i8, ptr [[A]], i64 [[TMP4]] ; CHECK-NEXT: [[SCEVGEP6:%.*]] = getelementptr i8, ptr [[SCEVGEP5]], i64 -8 ; CHECK-NEXT: [[GEPLOAD18:%.*]] = load i32, ptr [[SCEVGEP6]], align 4 ; CHECK-NEXT: [[CMP_35:%.*]] = icmp slt i32 [[GEPLOAD18]], [[T]] ; CHECK-NEXT: br i1 [[CMP_35]], label [[THEN_34_LOOP_EXIT_LOOPEXIT_CRIT_EDGE]], label [[IFMERGE_34]] ; CHECK: ifmerge.34: -; CHECK-NEXT: [[TMP5:%.*]] = shl nuw nsw i64 [[LSR_IV1]], 2 +; CHECK-NEXT: [[TMP5:%.*]] = shl i64 [[LSR_IV1]], 2 ; CHECK-NEXT: [[SCEVGEP4:%.*]] = getelementptr i8, ptr [[A]], i64 [[TMP5]] ; CHECK-NEXT: [[GEPLOAD20:%.*]] = load i32, ptr [[SCEVGEP4]], align 4 ; CHECK-NEXT: [[CMP_38:%.*]] = icmp sgt i32 [[GEPLOAD20]], [[T]] @@ -73,7 +73,7 @@ define i32 @foo(ptr %A, i32 %t) { ; CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[CMP_38]], [[CMP_39]] ; CHECK-NEXT: br i1 [[OR_COND]], label [[LOOP_EXIT_LOOPEXITSPLITSPLITSPLIT]], label [[IFMERGE_38]] ; CHECK: ifmerge.38: -; CHECK-NEXT: [[TMP6:%.*]] = shl nuw nsw i64 [[LSR_IV1]], 2 +; CHECK-NEXT: [[TMP6:%.*]] = shl i64 [[LSR_IV1]], 2 ; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[A]], i64 [[TMP6]] ; CHECK-NEXT: [[SCEVGEP3:%.*]] = getelementptr i8, ptr [[SCEVGEP2]], i64 4 ; CHECK-NEXT: [[GEPLOAD24:%.*]] = load i32, ptr [[SCEVGEP3]], align 4 @@ -82,7 +82,7 @@ define i32 @foo(ptr %A, i32 %t) { ; CHECK-NEXT: [[OR_COND55:%.*]] = and i1 [[CMP_42]], [[CMP_43]] ; CHECK-NEXT: br i1 [[OR_COND55]], label [[IFMERGE_38_LOOP_EXIT_LOOPEXITSPLITSPLIT_CRIT_EDGE]], label [[IFMERGE_42]] ; CHECK: ifmerge.42: -; CHECK-NEXT: [[TMP7:%.*]] = shl nuw nsw i64 [[LSR_IV1]], 2 +; CHECK-NEXT: [[TMP7:%.*]] = shl i64 [[LSR_IV1]], 2 ; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[A]], i64 [[TMP7]] ; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[SCEVGEP]], i64 8 ; CHECK-NEXT: [[GEPLOAD28:%.*]] = load i32, ptr [[SCEVGEP1]], align 4 diff --git a/llvm/test/Transforms/LoopVectorize/X86/interleaved-accesses-use-after-free.ll b/llvm/test/Transforms/LoopVectorize/X86/interleaved-accesses-use-after-free.ll index d5239d5a4e33d..e040d467c6bd3 100644 --- a/llvm/test/Transforms/LoopVectorize/X86/interleaved-accesses-use-after-free.ll +++ b/llvm/test/Transforms/LoopVectorize/X86/interleaved-accesses-use-after-free.ll @@ -23,7 +23,7 @@ target triple = "x86_64-redhat-linux-gnu" %struct.bar.5 = type { i8 } %struct.baz = type { i64, %struct.pluto } -; LOOP-ACCESS: Too many dependences, stopped recording +; TODO: Too many dependences, stopped recording ; If no dependences are recorded because there are too many, LoopAccessAnalysis ; just conservatively returns true for any pair of instructions compared (even diff --git a/llvm/test/Transforms/LoopVectorize/create-induction-resume.ll b/llvm/test/Transforms/LoopVectorize/create-induction-resume.ll index e9c7f75cb3377..a2f9702dfc105 100644 --- a/llvm/test/Transforms/LoopVectorize/create-induction-resume.ll +++ b/llvm/test/Transforms/LoopVectorize/create-induction-resume.ll @@ -16,7 +16,7 @@ define void @test(i32 %arg, i32 %L1.limit, i32 %L2.switch, i1 %c, ptr %dst) { ; CHECK-NEXT: [[INDVAR:%.*]] = phi i32 [ [[INDVAR_NEXT:%.*]], [[L1_BACKEDGE]] ], [ 0, [[L1_PREHEADER]] ] ; CHECK-NEXT: [[L1_SUM:%.*]] = phi i32 [ [[ARG]], [[L1_PREHEADER]] ], [ [[L1_SUM_NEXT:%.*]], [[L1_BACKEDGE]] ] ; CHECK-NEXT: [[L1_IV:%.*]] = phi i32 [ 1, [[L1_PREHEADER]] ], [ [[L1_IV_NEXT:%.*]], [[L1_BACKEDGE]] ] -; CHECK-NEXT: [[TMP1:%.*]] = mul nsw i32 [[INDVAR]], -1 +; CHECK-NEXT: [[TMP1:%.*]] = mul i32 [[INDVAR]], -1 ; CHECK-NEXT: [[TMP2:%.*]] = add i32 [[TMP1]], -2 ; CHECK-NEXT: br i1 [[C:%.*]], label [[L1_BACKEDGE]], label [[L1_EARLY_EXIT:%.*]] ; CHECK: L1.backedge: diff --git a/llvm/test/Transforms/LoopVectorize/pr55100-expand-scev-predicate-used.ll b/llvm/test/Transforms/LoopVectorize/pr55100-expand-scev-predicate-used.ll index d3b8dafaf0002..da070410157f8 100644 --- a/llvm/test/Transforms/LoopVectorize/pr55100-expand-scev-predicate-used.ll +++ b/llvm/test/Transforms/LoopVectorize/pr55100-expand-scev-predicate-used.ll @@ -8,7 +8,7 @@ define void @test_pr55100(i32 %N) { ; CHECK-NEXT: br label [[LOOP_1_HEADER:%.*]] ; CHECK: loop.1.header: ; CHECK-NEXT: [[IV_1:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[IV_1_NEXT:%.*]], [[LOOP_1_LATCH:%.*]] ] -; CHECK-NEXT: [[TMP1:%.*]] = mul nuw nsw i32 [[IV_1]], -1 +; CHECK-NEXT: [[TMP1:%.*]] = mul i32 [[IV_1]], -1 ; CHECK-NEXT: [[TMP2:%.*]] = add i32 [[TMP0]], [[TMP1]] ; CHECK-NEXT: [[UMIN:%.*]] = call i32 @llvm.umin.i32(i32 [[TMP2]], i32 18) ; CHECK-NEXT: [[TMP3:%.*]] = add nuw nsw i32 [[UMIN]], 1 @@ -44,7 +44,7 @@ define void @test_pr55100(i32 %N) { ; CHECK-NEXT: [[ADD_2:%.*]] = add i32 [[ADD_1]], [[IV_2_EXT]] ; CHECK-NEXT: [[C_4:%.*]] = icmp ult i32 [[ADD_2]], 1 ; CHECK-NEXT: [[IV_2_NEXT]] = add i16 [[IV_2]], 1 -; CHECK-NEXT: br i1 [[C_4]], label [[EXIT_LOOPEXIT:%.*]], label [[LOOP_2_HEADER]], !llvm.loop [[LOOP2:![0-9]+]] +; CHECK-NEXT: br i1 [[C_4]], label [[EXIT_LOOPEXIT:%.*]], label [[LOOP_2_HEADER]], !llvm.loop [[LOOP3:![0-9]+]] ; CHECK: loop.1.latch: ; CHECK-NEXT: [[IV_1_NEXT]] = add i32 [[IV_1]], 1 ; CHECK-NEXT: br label [[LOOP_1_HEADER]] diff --git a/llvm/test/Transforms/LoopVectorize/pr58811-scev-expansion.ll b/llvm/test/Transforms/LoopVectorize/pr58811-scev-expansion.ll index 98da2b2f7939a..612b0f4165b89 100644 --- a/llvm/test/Transforms/LoopVectorize/pr58811-scev-expansion.ll +++ b/llvm/test/Transforms/LoopVectorize/pr58811-scev-expansion.ll @@ -13,7 +13,7 @@ define void @test1_pr58811() { ; CHECK-NEXT: [[INDUCTION_IV:%.*]] = phi i32 [ [[INDUCTION_IV_NEXT:%.*]], [[LOOP_1]] ], [ [[TMP0]], [[LOOP_1_PREHEADER]] ] ; CHECK-NEXT: [[IV_1:%.*]] = phi i32 [ [[IV_1_NEXT:%.*]], [[LOOP_1]] ], [ [[IV_1_PH]], [[LOOP_1_PREHEADER]] ] ; CHECK-NEXT: [[IV_2:%.*]] = phi i32 [ [[IV_2_NEXT:%.*]], [[LOOP_1]] ], [ 0, [[LOOP_1_PREHEADER]] ] -; CHECK-NEXT: [[TMP1:%.*]] = mul nuw nsw i32 [[IV_2]], -1 +; CHECK-NEXT: [[TMP1:%.*]] = mul i32 [[IV_2]], -1 ; CHECK-NEXT: [[IV_2_NEXT]] = add i32 [[IV_2]], 1 ; CHECK-NEXT: [[IV_1_NEXT]] = add i32 [[IV_2]], [[IV_1]] ; CHECK-NEXT: [[INDUCTION_IV_NEXT]] = add i32 [[INDUCTION_IV]], [[TMP1]] @@ -107,7 +107,7 @@ define void @test2_pr58811() { ; CHECK-NEXT: [[INDUCTION_IV:%.*]] = phi i32 [ [[INDUCTION_IV_NEXT:%.*]], [[LOOP_2]] ], [ [[TMP0]], [[LOOP_1_HEADER]] ] ; CHECK-NEXT: [[IV_2:%.*]] = phi i32 [ [[P_1]], [[LOOP_1_HEADER]] ], [ [[ADD101:%.*]], [[LOOP_2]] ] ; CHECK-NEXT: [[IV_3:%.*]] = phi i32 [ 0, [[LOOP_1_HEADER]] ], [ [[SUB93:%.*]], [[LOOP_2]] ] -; CHECK-NEXT: [[TMP1:%.*]] = mul nuw nsw i32 [[IV_3]], -1 +; CHECK-NEXT: [[TMP1:%.*]] = mul i32 [[IV_3]], -1 ; CHECK-NEXT: [[SUB93]] = add i32 [[IV_3]], 1 ; CHECK-NEXT: [[ADD101]] = add i32 [[IV_3]], [[IV_2]] ; CHECK-NEXT: [[INDUCTION_IV_NEXT]] = add i32 [[INDUCTION_IV]], [[TMP1]] diff --git a/llvm/test/Transforms/LoopVersioningLICM/loopversioningLICM1.ll b/llvm/test/Transforms/LoopVersioningLICM/loopversioningLICM1.ll index b4f8abbf83a53..0778be2df351c 100644 --- a/llvm/test/Transforms/LoopVersioningLICM/loopversioningLICM1.ll +++ b/llvm/test/Transforms/LoopVersioningLICM/loopversioningLICM1.ll @@ -21,7 +21,7 @@ define i32 @foo(ptr nocapture %var1, ptr nocapture readnone %var2, ptr nocapture ; CHECK-NEXT: [[INDVAR:%.*]] = phi i64 [ 0, [[FOR_COND1_PREHEADER_PREHEADER]] ], [ [[INDVAR_NEXT:%.*]], [[FOR_INC11:%.*]] ] ; CHECK-NEXT: [[J_016:%.*]] = phi i32 [ [[J_1_LCSSA:%.*]], [[FOR_INC11]] ], [ 0, [[FOR_COND1_PREHEADER_PREHEADER]] ] ; CHECK-NEXT: [[I_015:%.*]] = phi i32 [ [[INC12:%.*]], [[FOR_INC11]] ], [ 0, [[FOR_COND1_PREHEADER_PREHEADER]] ] -; CHECK-NEXT: [[TMP1:%.*]] = shl nuw nsw i64 [[INDVAR]], 2 +; CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[INDVAR]], 2 ; CHECK-NEXT: [[SCEVGEP3:%.*]] = getelementptr i8, ptr [[VAR3:%.*]], i64 [[TMP1]] ; CHECK-NEXT: [[TMP2:%.*]] = add i64 [[TMP1]], 4 ; CHECK-NEXT: [[SCEVGEP4:%.*]] = getelementptr i8, ptr [[VAR3]], i64 [[TMP2]] diff --git a/llvm/test/Transforms/PhaseOrdering/AArch64/sinking-vs-if-conversion.ll b/llvm/test/Transforms/PhaseOrdering/AArch64/sinking-vs-if-conversion.ll index eda54d999a79f..dabd468a49698 100644 --- a/llvm/test/Transforms/PhaseOrdering/AArch64/sinking-vs-if-conversion.ll +++ b/llvm/test/Transforms/PhaseOrdering/AArch64/sinking-vs-if-conversion.ll @@ -22,28 +22,22 @@ define void @test_find_min(ptr noundef nonnull align 8 dereferenceable(24) %this ; CHECK-NEXT: [[TMP2:%.*]] = load ptr, ptr [[ARRAY_]], align 8 ; CHECK-NEXT: [[WIDE_TRIP_COUNT:%.*]] = zext nneg i32 [[TMP0]] to i64 ; CHECK-NEXT: br label [[FOR_BODY:%.*]] -; CHECK: for.body: -; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[FOR_BODY_LR_PH]] ], [ [[INDVARS_IV_NEXT:%.*]], [[COND_END7:%.*]] ] -; CHECK-NEXT: [[MIN_010:%.*]] = phi ptr [ [[TMP1]], [[FOR_BODY_LR_PH]] ], [ [[COND8:%.*]], [[COND_END7]] ] +; CHECK: cond.end7: +; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[FOR_BODY_LR_PH]] ], [ [[INDVARS_IV_NEXT:%.*]], [[FOR_BODY]] ] +; CHECK-NEXT: [[MIN_010:%.*]] = phi ptr [ [[TMP1]], [[FOR_BODY_LR_PH]] ], [ [[COND:%.*]], [[FOR_BODY]] ] ; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw ptr, ptr [[TMP2]], i64 [[INDVARS_IV]] ; CHECK-NEXT: [[TMP3:%.*]] = load ptr, ptr [[ARRAYIDX]], align 8 -; CHECK-NEXT: [[CMP3:%.*]] = icmp eq ptr [[MIN_010]], null -; CHECK-NEXT: br i1 [[CMP3]], label [[COND_END7]], label [[COND_FALSE:%.*]] -; CHECK: cond.false: ; CHECK-NEXT: [[KEY2:%.*]] = getelementptr inbounds nuw i8, ptr [[MIN_010]], i64 4 ; CHECK-NEXT: [[TMP4:%.*]] = load i32, ptr [[KEY2]], align 4 ; CHECK-NEXT: [[KEY:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP3]], i64 4 ; CHECK-NEXT: [[TMP5:%.*]] = load i32, ptr [[KEY]], align 4 ; CHECK-NEXT: [[CMP4:%.*]] = icmp slt i32 [[TMP5]], [[TMP4]] -; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP4]], ptr [[TMP3]], ptr [[MIN_010]] -; CHECK-NEXT: br label [[COND_END7]] -; CHECK: cond.end7: -; CHECK-NEXT: [[COND8]] = phi ptr [ [[COND]], [[COND_FALSE]] ], [ [[TMP3]], [[FOR_BODY]] ] +; CHECK-NEXT: [[COND]] = select i1 [[CMP4]], ptr [[TMP3]], ptr [[MIN_010]] ; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1 ; CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i64 [[INDVARS_IV_NEXT]], [[WIDE_TRIP_COUNT]] ; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_END]], label [[FOR_BODY]] ; CHECK: for.end: -; CHECK-NEXT: [[MIN_0_LCSSA:%.*]] = phi ptr [ [[TMP1]], [[ENTRY:%.*]] ], [ [[COND8]], [[COND_END7]] ] +; CHECK-NEXT: [[MIN_0_LCSSA:%.*]] = phi ptr [ [[TMP1]], [[ENTRY:%.*]] ], [ [[COND]], [[FOR_BODY]] ] ; CHECK-NEXT: store ptr [[MIN_0_LCSSA]], ptr [[THIS]], align 8 ; CHECK-NEXT: ret void ;