Skip to content

Commit 1ded2c5

Browse files
committed
[LV] Use createIterationCountCheck during epilogue skeleton creation.
Use helper already used for minimum trip count checks for the regular ILV skeleton creation also for epilogue skeleton creation.
1 parent f5df231 commit 1ded2c5

File tree

3 files changed

+6
-21
lines changed

3 files changed

+6
-21
lines changed

llvm/lib/Transforms/Vectorize/LoopVectorize.cpp

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7535,25 +7535,12 @@ BasicBlock *
75357535
EpilogueVectorizerMainLoop::emitIterationCountCheck(BasicBlock *Bypass,
75367536
bool ForEpilogue) {
75377537
assert(Bypass && "Expected valid bypass basic block.");
7538-
ElementCount VFactor = ForEpilogue ? EPI.EpilogueVF : VF;
7539-
unsigned UFactor = ForEpilogue ? EPI.EpilogueUF : UF;
75407538
Value *Count = getTripCount();
7541-
// Reuse existing vector loop preheader for TC checks.
7542-
// Note that new preheader block is generated for vector loop.
7543-
BasicBlock *const TCCheckBlock = LoopVectorPreHeader;
7544-
IRBuilder<> Builder(TCCheckBlock->getTerminator());
7545-
7546-
// Generate code to check if the loop's trip count is less than VF * UF of the
7547-
// main vector loop.
7548-
auto P = Cost->requiresScalarEpilogue(ForEpilogue ? EPI.EpilogueVF.isVector()
7549-
: VF.isVector())
7550-
? ICmpInst::ICMP_ULE
7551-
: ICmpInst::ICMP_ULT;
7552-
7553-
Value *CheckMinIters = Builder.CreateICmp(
7554-
P, Count, createStepForVF(Builder, Count->getType(), VFactor, UFactor),
7555-
"min.iters.check");
7539+
MinProfitableTripCount = ElementCount::getFixed(0);
7540+
Value *CheckMinIters = createIterationCountCheck(
7541+
ForEpilogue ? EPI.EpilogueVF : VF, ForEpilogue ? EPI.EpilogueUF : UF);
75567542

7543+
BasicBlock *const TCCheckBlock = LoopVectorPreHeader;
75577544
if (!ForEpilogue)
75587545
TCCheckBlock->setName("vector.main.loop.iter.check");
75597546

llvm/test/Transforms/LoopVectorize/AArch64/partial-reduce-dot-product-epilogue.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@ define i32 @dotp(ptr %a, ptr %b) #0 {
1010
; CHECK-NEXT: iter.check:
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 1024, [[TMP1]]
14-
; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label [[VEC_EPILOG_SCALAR_PH:%.*]], label [[VECTOR_MAIN_LOOP_ITER_CHECK:%.*]]
13+
; CHECK-NEXT: br i1 false, label [[VEC_EPILOG_SCALAR_PH:%.*]], label [[VECTOR_MAIN_LOOP_ITER_CHECK:%.*]]
1514
; CHECK: vector.main.loop.iter.check:
1615
; CHECK-NEXT: br i1 false, label [[VEC_EPILOG_PH:%.*]], label [[VECTOR_PH:%.*]]
1716
; CHECK: vector.ph:

llvm/test/Transforms/LoopVectorize/AArch64/vector-loop-backedge-elimination-epilogue.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@ define void @test_remove_vector_loop_region_epilogue(ptr %dst, i1 %c) {
1111
; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[TC]], 8
1212
; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[VEC_EPILOG_SCALAR_PH:.*]], label %[[VECTOR_MAIN_LOOP_ITER_CHECK:.*]]
1313
; CHECK: [[VECTOR_MAIN_LOOP_ITER_CHECK]]:
14-
; CHECK-NEXT: [[MIN_ITERS_CHECK1:%.*]] = icmp ult i64 [[TC]], 64
15-
; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK1]], label %[[VEC_EPILOG_PH:.*]], label %[[VECTOR_PH:.*]]
14+
; CHECK-NEXT: br i1 true, label %[[VEC_EPILOG_PH:.*]], label %[[VECTOR_PH:.*]]
1615
; CHECK: [[VECTOR_PH]]:
1716
; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i64 [[TC]], 64
1817
; CHECK-NEXT: [[N_VEC:%.*]] = sub i64 [[TC]], [[N_MOD_VF]]

0 commit comments

Comments
 (0)