From 1fae5890e2e28a89045c1970a320943e33df59e8 Mon Sep 17 00:00:00 2001 From: Ramkumar Ramachandra Date: Mon, 15 Sep 2025 13:44:25 +0100 Subject: [PATCH] [LV] Return optz VPlan when trying to build (NFC) --- .../Transforms/Vectorize/LoopVectorize.cpp | 20 +++++++------------ .../Transforms/Vectorize/VPlanTransforms.cpp | 6 ++++++ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp index 640a98c622f80..975b21a773c18 100644 --- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp +++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp @@ -8229,20 +8229,8 @@ void LoopVectorizationPlanner::buildVPlansWithVPRecipes(ElementCount MinVF, for (ElementCount VF = MinVF; ElementCount::isKnownLT(VF, MaxVFTimes2);) { VFRange SubRange = {VF, MaxVFTimes2}; if (auto Plan = tryToBuildVPlanWithVPRecipes( - std::unique_ptr(VPlan0->duplicate()), SubRange, &LVer)) { - bool HasScalarVF = Plan->hasScalarVFOnly(); - // Now optimize the initial VPlan. - if (!HasScalarVF) - VPlanTransforms::runPass(VPlanTransforms::truncateToMinimalBitwidths, - *Plan, CM.getMinimalBitwidths()); - VPlanTransforms::runPass(VPlanTransforms::optimize, *Plan); - // TODO: try to put it close to addActiveLaneMask(). - if (CM.foldTailWithEVL() && !HasScalarVF) - VPlanTransforms::runPass(VPlanTransforms::addExplicitVectorLength, - *Plan, CM.getMaxSafeElements()); - assert(verifyVPlanIsValid(*Plan) && "VPlan is invalid"); + std::unique_ptr(VPlan0->duplicate()), SubRange, &LVer)) VPlans.push_back(std::move(Plan)); - } VF = SubRange.End; } } @@ -8709,6 +8697,12 @@ VPlanPtr LoopVectorizationPlanner::tryToBuildVPlanWithVPRecipes( WithoutRuntimeCheck); } VPlanTransforms::optimizeInductionExitUsers(*Plan, IVEndValues, *PSE.getSE()); + VPlanTransforms::runPass(VPlanTransforms::truncateToMinimalBitwidths, *Plan, + CM.getMinimalBitwidths()); + VPlanTransforms::runPass(VPlanTransforms::optimize, *Plan); + if (CM.foldTailWithEVL()) + VPlanTransforms::runPass(VPlanTransforms::addExplicitVectorLength, *Plan, + CM.getMaxSafeElements()); assert(verifyVPlanIsValid(*Plan) && "VPlan is invalid"); return Plan; diff --git a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp index 503140213c116..59978f276db03 100644 --- a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp +++ b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp @@ -2104,6 +2104,9 @@ static void licm(VPlan &Plan) { void VPlanTransforms::truncateToMinimalBitwidths( VPlan &Plan, const MapVector &MinBWs) { + if (Plan.hasScalarVFOnly()) + return; + // Keep track of created truncates, so they can be re-used. Note that we // cannot use RAUW after creating a new truncate, as this would could make // other uses have different types for their operands, making them invalidly @@ -2681,6 +2684,9 @@ static void transformRecipestoEVLRecipes(VPlan &Plan, VPValue &EVL) { /// void VPlanTransforms::addExplicitVectorLength( VPlan &Plan, const std::optional &MaxSafeElements) { + if (Plan.hasScalarVFOnly()) + return; + VPBasicBlock *Header = Plan.getVectorLoopRegion()->getEntryBasicBlock(); auto *CanonicalIVPHI = Plan.getCanonicalIV();