Skip to content

Commit c7496ce

Browse files
authored
[LV] Use SCEV to check if minimum iteration check is known. (#111310)
Use SCEV to check if the minimum iteration check (TC < Step) is known to be false. This is a first step towards addressing #111098. To catch the exact case from the issue, we need to do extra work to make sure the wrap flags on the shl are preserved and used by SCEV. Note that skeleton creation will be gradually moved to VPlan and this simplification should be done as VPlan transform eventually. The current plan is to move skeleton creation to VPlan starting from parts closest to the parts already created by VPlan, starting with induction resume value creation (started with #110577), then memory and SCEV checks and finally minimum iteration checks. PR: #111310
1 parent e261519 commit c7496ce

8 files changed

+49
-58
lines changed

llvm/lib/Transforms/Vectorize/LoopVectorize.cpp

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2447,12 +2447,26 @@ void InnerLoopVectorizer::emitIterationCountCheck(BasicBlock *Bypass) {
24472447
};
24482448

24492449
TailFoldingStyle Style = Cost->getTailFoldingStyle();
2450-
if (Style == TailFoldingStyle::None)
2451-
CheckMinIters =
2452-
Builder.CreateICmp(P, Count, CreateStep(), "min.iters.check");
2453-
else if (VF.isScalable() &&
2454-
!isIndvarOverflowCheckKnownFalse(Cost, VF, UF) &&
2455-
Style != TailFoldingStyle::DataAndControlFlowWithoutRuntimeCheck) {
2450+
if (Style == TailFoldingStyle::None) {
2451+
Value *Step = CreateStep();
2452+
ScalarEvolution &SE = *PSE.getSE();
2453+
// TODO: Emit unconditional branch to vector preheader instead of
2454+
// conditional branch with known condition.
2455+
const SCEV *TripCountSCEV = SE.applyLoopGuards(SE.getSCEV(Count), OrigLoop);
2456+
// Check if the trip count is < the step.
2457+
if (SE.isKnownPredicate(P, TripCountSCEV, SE.getSCEV(Step))) {
2458+
// TODO: Ensure step is at most the trip count when determining max VF and
2459+
// UF, w/o tail folding.
2460+
CheckMinIters = Builder.getTrue();
2461+
} else if (!SE.isKnownPredicate(CmpInst::getInversePredicate(P),
2462+
TripCountSCEV, SE.getSCEV(Step))) {
2463+
// Generate the minimum iteration check only if we cannot prove the
2464+
// check is known to be true, or known to be false.
2465+
CheckMinIters = Builder.CreateICmp(P, Count, Step, "min.iters.check");
2466+
} // else step known to be < trip count, use CheckMinIters preset to false.
2467+
} else if (VF.isScalable() &&
2468+
!isIndvarOverflowCheckKnownFalse(Cost, VF, UF) &&
2469+
Style != TailFoldingStyle::DataAndControlFlowWithoutRuntimeCheck) {
24562470
// vscale is not necessarily a power-of-2, which means we cannot guarantee
24572471
// an overflow to zero when updating induction variables and so an
24582472
// additional overflow check is required before entering the vector loop.
@@ -2462,8 +2476,18 @@ void InnerLoopVectorizer::emitIterationCountCheck(BasicBlock *Bypass) {
24622476
ConstantInt::get(CountTy, cast<IntegerType>(CountTy)->getMask());
24632477
Value *LHS = Builder.CreateSub(MaxUIntTripCount, Count);
24642478

2479+
Value *Step = CreateStep();
2480+
#ifndef NDEBUG
2481+
ScalarEvolution &SE = *PSE.getSE();
2482+
const SCEV *TC2OverflowSCEV = SE.applyLoopGuards(SE.getSCEV(LHS), OrigLoop);
2483+
assert(
2484+
!isIndvarOverflowCheckKnownFalse(Cost, VF * UF) &&
2485+
!SE.isKnownPredicate(CmpInst::getInversePredicate(ICmpInst::ICMP_ULT),
2486+
TC2OverflowSCEV, SE.getSCEV(Step)) &&
2487+
"unexpectedly proved overflow check to be known");
2488+
#endif
24652489
// Don't execute the vector loop if (UMax - n) < (VF * UF).
2466-
CheckMinIters = Builder.CreateICmp(ICmpInst::ICMP_ULT, LHS, CreateStep());
2490+
CheckMinIters = Builder.CreateICmp(ICmpInst::ICMP_ULT, LHS, Step);
24672491
}
24682492

24692493
// Create new preheader for vector loop.

llvm/test/Transforms/LoopVectorize/AArch64/eliminate-tail-predication.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@ define void @f1(ptr %A) #0 {
1111
; CHECK-NEXT: entry:
1212
; CHECK-NEXT: [[TMP0:%.*]] = call i64 @llvm.vscale.i64()
1313
; CHECK-NEXT: [[TMP1:%.*]] = mul i64 [[TMP0]], 4
14-
; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 1024, [[TMP1]]
15-
; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
14+
; CHECK-NEXT: br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
1615
; CHECK: vector.ph:
1716
; CHECK-NEXT: [[TMP2:%.*]] = call i64 @llvm.vscale.i64()
1817
; CHECK-NEXT: [[TMP3:%.*]] = mul i64 [[TMP2]], 4

llvm/test/Transforms/LoopVectorize/AArch64/masked-call.ll

Lines changed: 9 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,7 @@ target triple = "aarch64-unknown-linux-gnu"
1111
define void @test_widen(ptr noalias %a, ptr readnone %b) #4 {
1212
; TFNONE-LABEL: @test_widen(
1313
; TFNONE-NEXT: entry:
14-
; TFNONE-NEXT: [[TMP0:%.*]] = call i64 @llvm.vscale.i64()
15-
; TFNONE-NEXT: [[TMP1:%.*]] = mul i64 [[TMP0]], 2
16-
; TFNONE-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 1025, [[TMP1]]
17-
; TFNONE-NEXT: br i1 [[MIN_ITERS_CHECK]], label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
14+
; TFNONE-NEXT: br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
1815
; TFNONE: vector.ph:
1916
; TFNONE-NEXT: [[TMP2:%.*]] = call i64 @llvm.vscale.i64()
2017
; TFNONE-NEXT: [[TMP3:%.*]] = mul i64 [[TMP2]], 2
@@ -146,10 +143,7 @@ for.cond.cleanup:
146143
define void @test_if_then(ptr noalias %a, ptr readnone %b) #4 {
147144
; TFNONE-LABEL: @test_if_then(
148145
; TFNONE-NEXT: entry:
149-
; TFNONE-NEXT: [[TMP0:%.*]] = call i64 @llvm.vscale.i64()
150-
; TFNONE-NEXT: [[TMP1:%.*]] = mul i64 [[TMP0]], 2
151-
; TFNONE-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 1025, [[TMP1]]
152-
; TFNONE-NEXT: br i1 [[MIN_ITERS_CHECK]], label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
146+
; TFNONE-NEXT: br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
153147
; TFNONE: vector.ph:
154148
; TFNONE-NEXT: [[TMP2:%.*]] = call i64 @llvm.vscale.i64()
155149
; TFNONE-NEXT: [[TMP3:%.*]] = mul i64 [[TMP2]], 2
@@ -310,10 +304,7 @@ for.cond.cleanup:
310304
define void @test_widen_if_then_else(ptr noalias %a, ptr readnone %b) #4 {
311305
; TFNONE-LABEL: @test_widen_if_then_else(
312306
; TFNONE-NEXT: entry:
313-
; TFNONE-NEXT: [[TMP0:%.*]] = call i64 @llvm.vscale.i64()
314-
; TFNONE-NEXT: [[TMP1:%.*]] = mul i64 [[TMP0]], 2
315-
; TFNONE-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 1025, [[TMP1]]
316-
; TFNONE-NEXT: br i1 [[MIN_ITERS_CHECK]], label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
307+
; TFNONE-NEXT: br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
317308
; TFNONE: vector.ph:
318309
; TFNONE-NEXT: [[TMP2:%.*]] = call i64 @llvm.vscale.i64()
319310
; TFNONE-NEXT: [[TMP3:%.*]] = mul i64 [[TMP2]], 2
@@ -490,10 +481,7 @@ for.cond.cleanup:
490481
define void @test_widen_nomask(ptr noalias %a, ptr readnone %b) #4 {
491482
; TFNONE-LABEL: @test_widen_nomask(
492483
; TFNONE-NEXT: entry:
493-
; TFNONE-NEXT: [[TMP0:%.*]] = call i64 @llvm.vscale.i64()
494-
; TFNONE-NEXT: [[TMP1:%.*]] = mul i64 [[TMP0]], 2
495-
; TFNONE-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 1025, [[TMP1]]
496-
; TFNONE-NEXT: br i1 [[MIN_ITERS_CHECK]], label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
484+
; TFNONE-NEXT: br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
497485
; TFNONE: vector.ph:
498486
; TFNONE-NEXT: [[TMP2:%.*]] = call i64 @llvm.vscale.i64()
499487
; TFNONE-NEXT: [[TMP3:%.*]] = mul i64 [[TMP2]], 2
@@ -548,11 +536,6 @@ define void @test_widen_nomask(ptr noalias %a, ptr readnone %b) #4 {
548536
;
549537
; TFFALLBACK-LABEL: @test_widen_nomask(
550538
; TFFALLBACK-NEXT: entry:
551-
; TFFALLBACK-NEXT: [[TMP0:%.*]] = call i64 @llvm.vscale.i64()
552-
; TFFALLBACK-NEXT: [[TMP1:%.*]] = mul i64 [[TMP0]], 2
553-
; TFFALLBACK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 1025, [[TMP1]]
554-
; TFFALLBACK-NEXT: br i1 [[MIN_ITERS_CHECK]], label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
555-
; TFFALLBACK: vector.ph:
556539
; TFFALLBACK-NEXT: [[TMP2:%.*]] = call i64 @llvm.vscale.i64()
557540
; TFFALLBACK-NEXT: [[TMP3:%.*]] = mul i64 [[TMP2]], 2
558541
; TFFALLBACK-NEXT: [[N_MOD_VF:%.*]] = urem i64 1025, [[TMP3]]
@@ -561,20 +544,17 @@ define void @test_widen_nomask(ptr noalias %a, ptr readnone %b) #4 {
561544
; TFFALLBACK-NEXT: [[TMP5:%.*]] = mul i64 [[TMP4]], 2
562545
; TFFALLBACK-NEXT: br label [[VECTOR_BODY:%.*]]
563546
; TFFALLBACK: vector.body:
564-
; TFFALLBACK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
547+
; TFFALLBACK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH:%.*]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
565548
; TFFALLBACK-NEXT: [[TMP6:%.*]] = getelementptr i64, ptr [[B:%.*]], i64 [[INDEX]]
566549
; TFFALLBACK-NEXT: [[WIDE_LOAD:%.*]] = load <vscale x 2 x i64>, ptr [[TMP6]], align 8
567550
; TFFALLBACK-NEXT: [[TMP7:%.*]] = call <vscale x 2 x i64> @foo_vector_nomask(<vscale x 2 x i64> [[WIDE_LOAD]])
568551
; TFFALLBACK-NEXT: [[TMP8:%.*]] = getelementptr inbounds i64, ptr [[A:%.*]], i64 [[INDEX]]
569552
; TFFALLBACK-NEXT: store <vscale x 2 x i64> [[TMP7]], ptr [[TMP8]], align 8
570553
; TFFALLBACK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], [[TMP5]]
571554
; TFFALLBACK-NEXT: [[TMP9:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
572-
; TFFALLBACK-NEXT: br i1 [[TMP9]], label [[SCALAR_PH]], label [[VECTOR_BODY]], !llvm.loop [[LOOP5:![0-9]+]]
573-
; TFFALLBACK: scalar.ph:
574-
; TFFALLBACK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[N_VEC]], [[VECTOR_BODY]] ]
575-
; TFFALLBACK-NEXT: br label [[FOR_BODY:%.*]]
555+
; TFFALLBACK-NEXT: br i1 [[TMP9]], label [[FOR_BODY:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP5:![0-9]+]]
576556
; TFFALLBACK: for.body:
577-
; TFFALLBACK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[BC_RESUME_VAL]], [[SCALAR_PH]] ], [ [[INDVARS_IV_NEXT:%.*]], [[FOR_BODY]] ]
557+
; TFFALLBACK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_BODY]] ], [ [[N_VEC]], [[VECTOR_BODY]] ]
578558
; TFFALLBACK-NEXT: [[GEP:%.*]] = getelementptr i64, ptr [[B]], i64 [[INDVARS_IV]]
579559
; TFFALLBACK-NEXT: [[LOAD:%.*]] = load i64, ptr [[GEP]], align 8
580560
; TFFALLBACK-NEXT: [[CALL:%.*]] = call i64 @foo(i64 [[LOAD]]) #[[ATTR5:[0-9]+]]
@@ -626,10 +606,7 @@ for.cond.cleanup:
626606
define void @test_widen_optmask(ptr noalias %a, ptr readnone %b) #4 {
627607
; TFNONE-LABEL: @test_widen_optmask(
628608
; TFNONE-NEXT: entry:
629-
; TFNONE-NEXT: [[TMP0:%.*]] = call i64 @llvm.vscale.i64()
630-
; TFNONE-NEXT: [[TMP1:%.*]] = mul i64 [[TMP0]], 2
631-
; TFNONE-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 1025, [[TMP1]]
632-
; TFNONE-NEXT: br i1 [[MIN_ITERS_CHECK]], label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
609+
; TFNONE-NEXT: br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
633610
; TFNONE: vector.ph:
634611
; TFNONE-NEXT: [[TMP2:%.*]] = call i64 @llvm.vscale.i64()
635612
; TFNONE-NEXT: [[TMP3:%.*]] = mul i64 [[TMP2]], 2
@@ -791,10 +768,7 @@ for.cond.cleanup:
791768
define double @test_widen_fmuladd_and_call(ptr noalias %a, ptr readnone %b, double %m) #4 {
792769
; TFNONE-LABEL: @test_widen_fmuladd_and_call(
793770
; TFNONE-NEXT: entry:
794-
; TFNONE-NEXT: [[TMP0:%.*]] = call i64 @llvm.vscale.i64()
795-
; TFNONE-NEXT: [[TMP1:%.*]] = mul i64 [[TMP0]], 2
796-
; TFNONE-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 1025, [[TMP1]]
797-
; TFNONE-NEXT: br i1 [[MIN_ITERS_CHECK]], label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
771+
; TFNONE-NEXT: br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
798772
; TFNONE: vector.ph:
799773
; TFNONE-NEXT: [[TMP2:%.*]] = call i64 @llvm.vscale.i64()
800774
; TFNONE-NEXT: [[TMP3:%.*]] = mul i64 [[TMP2]], 2

llvm/test/Transforms/LoopVectorize/AArch64/pr60831-sve-inv-store-crash.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@ define void @test_invar_gep(ptr %dst) #0 {
1010
; CHECK-NEXT: entry:
1111
; CHECK-NEXT: [[TMP0:%.*]] = call i64 @llvm.vscale.i64()
1212
; CHECK-NEXT: [[TMP1:%.*]] = mul i64 [[TMP0]], 4
13-
; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 100, [[TMP1]]
14-
; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
13+
; CHECK-NEXT: br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
1514
; CHECK: vector.ph:
1615
; CHECK-NEXT: [[TMP2:%.*]] = call i64 @llvm.vscale.i64()
1716
; CHECK-NEXT: [[TMP3:%.*]] = mul i64 [[TMP2]], 4

llvm/test/Transforms/LoopVectorize/AArch64/sve-tail-folding.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -757,8 +757,7 @@ define void @simple_memset_trip1024(i32 %val, ptr %ptr, i64 %n) #0 {
757757
; CHECK-NEXT: entry:
758758
; CHECK-NEXT: [[TMP0:%.*]] = call i64 @llvm.vscale.i64()
759759
; CHECK-NEXT: [[TMP1:%.*]] = mul i64 [[TMP0]], 4
760-
; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 1024, [[TMP1]]
761-
; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
760+
; CHECK-NEXT: br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
762761
; CHECK: vector.ph:
763762
; CHECK-NEXT: [[TMP2:%.*]] = call i64 @llvm.vscale.i64()
764763
; CHECK-NEXT: [[TMP3:%.*]] = mul i64 [[TMP2]], 4

llvm/test/Transforms/LoopVectorize/AArch64/wider-VF-for-callinst.ll

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,7 @@ target triple = "aarch64-unknown-linux-gnu"
77
define void @test_widen(ptr noalias %a, ptr readnone %b) #1 {
88
; WIDE-LABEL: @test_widen(
99
; WIDE-NEXT: entry:
10-
; WIDE-NEXT: [[TMP0:%.*]] = call i64 @llvm.vscale.i64()
11-
; WIDE-NEXT: [[TMP1:%.*]] = mul i64 [[TMP0]], 4
12-
; WIDE-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 1025, [[TMP1]]
13-
; WIDE-NEXT: br i1 [[MIN_ITERS_CHECK]], label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
10+
; WIDE-NEXT: br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
1411
; WIDE: vector.ph:
1512
; WIDE-NEXT: [[TMP2:%.*]] = call i64 @llvm.vscale.i64()
1613
; WIDE-NEXT: [[TMP3:%.*]] = mul i64 [[TMP2]], 4

llvm/test/Transforms/LoopVectorize/if-reduction.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1659,6 +1659,7 @@ for.end: ; preds = %for.body, %entry
16591659
ret i64 %1
16601660
}
16611661

1662+
; FIXME: %indvars.iv.next is poison on first iteration due to sub nuw 0, 1.
16621663
define i32 @fcmp_0_sub_select1(ptr noalias %x, i32 %N) nounwind readonly {
16631664
; CHECK-LABEL: define i32 @fcmp_0_sub_select1(
16641665
; CHECK-SAME: ptr noalias [[X:%.*]], i32 [[N:%.*]]) #[[ATTR0]] {
@@ -1668,8 +1669,7 @@ define i32 @fcmp_0_sub_select1(ptr noalias %x, i32 %N) nounwind readonly {
16681669
; CHECK: [[FOR_HEADER]]:
16691670
; CHECK-NEXT: [[ZEXT:%.*]] = zext i32 [[N]] to i64
16701671
; CHECK-NEXT: [[TMP0:%.*]] = sub i64 0, [[ZEXT]]
1671-
; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[TMP0]], 4
1672-
; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]]
1672+
; CHECK-NEXT: br i1 false, label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]]
16731673
; CHECK: [[VECTOR_PH]]:
16741674
; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i64 [[TMP0]], 4
16751675
; CHECK-NEXT: [[N_VEC:%.*]] = sub i64 [[TMP0]], [[N_MOD_VF]]

llvm/test/Transforms/LoopVectorize/version-stride-with-integer-casts.ll

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,7 @@ exit:
415415

416416
; Test case to make sure that uses of versioned strides of type i1 are properly
417417
; extended. From https://github.com/llvm/llvm-project/issues/91369.
418+
; TODO: Better check (udiv i64 15, %g.64) after checking if %g == 1.
418419
define void @zext_of_i1_stride(i1 %g, ptr %dst) mustprogress {
419420
; CHECK-LABEL: define void @zext_of_i1_stride(
420421
; CHECK-SAME: i1 [[G:%.*]], ptr [[DST:%.*]]) #[[ATTR0:[0-9]+]] {
@@ -423,8 +424,7 @@ define void @zext_of_i1_stride(i1 %g, ptr %dst) mustprogress {
423424
; CHECK-NEXT: [[G_64:%.*]] = zext i1 [[G]] to i64
424425
; CHECK-NEXT: [[TMP0:%.*]] = udiv i64 15, [[G_64]]
425426
; CHECK-NEXT: [[TMP1:%.*]] = add nuw nsw i64 [[TMP0]], 1
426-
; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[TMP1]], 4
427-
; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label [[SCALAR_PH:%.*]], label [[VECTOR_SCEVCHECK:%.*]]
427+
; CHECK-NEXT: br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_SCEVCHECK:%.*]]
428428
; CHECK: vector.scevcheck:
429429
; CHECK-NEXT: [[IDENT_CHECK:%.*]] = icmp ne i1 [[G]], true
430430
; CHECK-NEXT: br i1 [[IDENT_CHECK]], label [[SCALAR_PH]], label [[VECTOR_PH:%.*]]
@@ -489,8 +489,7 @@ define void @sext_of_i1_stride(i1 %g, ptr %dst) mustprogress {
489489
; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[UMAX]], -1
490490
; CHECK-NEXT: [[TMP1:%.*]] = udiv i64 [[TMP0]], [[G_64]]
491491
; CHECK-NEXT: [[TMP2:%.*]] = add nuw nsw i64 [[TMP1]], 1
492-
; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[TMP2]], 4
493-
; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label [[SCALAR_PH:%.*]], label [[VECTOR_SCEVCHECK:%.*]]
492+
; CHECK-NEXT: br i1 true, label [[SCALAR_PH:%.*]], label [[VECTOR_SCEVCHECK:%.*]]
494493
; CHECK: vector.scevcheck:
495494
; CHECK-NEXT: [[IDENT_CHECK:%.*]] = icmp ne i1 [[G]], true
496495
; CHECK-NEXT: br i1 [[IDENT_CHECK]], label [[SCALAR_PH]], label [[VECTOR_PH:%.*]]

0 commit comments

Comments
 (0)