[llvm] [VPlan] Materialize constant vector trip counts before final opts. (PR #142309)
David Sherwood via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 9 05:21:10 PDT 2025
================
@@ -10536,6 +10537,25 @@ bool LoopVectorizePass::processLoop(Loop *L) {
InnerLoopVectorizer LB(L, PSE, LI, DT, TLI, TTI, AC, ORE, VF.Width,
VF.MinProfitableTripCount, IC, &CM, BFI, PSI,
Checks, BestPlan);
+
+ // Materialize vector trip counts for constants early if it can simply
+ // be computed as (Original TC / VF * UF) * VF * UF.
+ if (BestPlan.hasScalarTail() &&
+ !CM.requiresScalarEpilogue(VF.Width.isVector())) {
+ VPValue *TC = BestPlan.getTripCount();
+ if (TC->isLiveIn()) {
+ ScalarEvolution &SE = *PSE.getSE();
+ auto *TCScev = SE.getSCEV(TC->getLiveInIRValue());
+ const SCEV *VFxUF =
+ SE.getElementCount(TCScev->getType(), VF.Width * IC);
+ auto VecTCScev =
----------------
david-arm wrote:
I'm a bit confused - even before this patch surely the vector trip count must have already been set to (OriginalTC / (VF * VF)) * (VF * UF), otherwise the vectorised code wouldn't even work? I just wonder if you can simply check that the existing vector trip count is already a constant.
https://github.com/llvm/llvm-project/pull/142309
More information about the llvm-commits
mailing list