[llvm] [VPlan] Rename vars and add TODO in redundant-iv optz (NFC) (PR #194336)
Ramkumar Ramachandra via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 27 03:27:50 PDT 2026
https://github.com/artagnon created https://github.com/llvm/llvm-project/pull/194336
None
>From f4067e2e53bbbd6e1e9d379c509777e923ec75ab Mon Sep 17 00:00:00 2001
From: Ramkumar Ramachandra <artagnon at tenstorrent.com>
Date: Mon, 27 Apr 2026 11:24:31 +0100
Subject: [PATCH] [VPlan] Rename vars and add TODO in redundant-iv optz (NFC)
---
.../Transforms/Vectorize/VPlanTransforms.cpp | 27 ++++++++-----------
1 file changed, 11 insertions(+), 16 deletions(-)
diff --git a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
index 5e6d1bbcd5a7c..2c20c4c49dfe8 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
@@ -660,32 +660,27 @@ static void removeRedundantInductionCasts(VPlan &Plan) {
static void removeRedundantCanonicalIVs(VPlan &Plan) {
VPRegionBlock *LoopRegion = Plan.getVectorLoopRegion();
VPValue *CanonicalIV = LoopRegion->getCanonicalIV();
- auto *WidenNewIV = vputils::findUserOf<VPWidenCanonicalIVRecipe>(CanonicalIV);
-
- if (!WidenNewIV)
+ auto *WideCanIV = vputils::findUserOf<VPWidenCanonicalIVRecipe>(CanonicalIV);
+ if (!WideCanIV)
return;
VPBasicBlock *HeaderVPBB = LoopRegion->getEntryBasicBlock();
for (VPRecipeBase &Phi : HeaderVPBB->phis()) {
- auto *WidenOriginalIV = dyn_cast<VPWidenIntOrFpInductionRecipe>(&Phi);
-
- if (!WidenOriginalIV || !WidenOriginalIV->isCanonical())
+ auto *WideInd = dyn_cast<VPWidenIntOrFpInductionRecipe>(&Phi);
+ if (!WideInd || !WideInd->isCanonical())
continue;
- // Replace WidenNewIV with WidenOriginalIV if WidenOriginalIV provides
- // everything WidenNewIV's users need. That is, WidenOriginalIV will
- // generate a vector phi or all users of WidenNewIV demand the first lane
- // only.
- if (Plan.hasScalarVFOnly() ||
- !vputils::onlyScalarValuesUsed(WidenOriginalIV) ||
- vputils::onlyFirstLaneUsed(WidenNewIV)) {
+ // TODO: This check is not required for correctness, but we cannot strip it
+ // yet, due to minor regressions.
+ if (Plan.hasScalarVFOnly() || !vputils::onlyScalarValuesUsed(WideInd) ||
+ vputils::onlyFirstLaneUsed(WideCanIV)) {
// We are replacing a wide canonical iv with a suitable wide induction.
// This is used to compute header mask, hence all lanes will be used and
// we need to drop wrap flags only applying to lanes guranteed to execute
// in the original scalar loop.
- WidenOriginalIV->dropPoisonGeneratingFlags();
- WidenNewIV->replaceAllUsesWith(WidenOriginalIV);
- WidenNewIV->eraseFromParent();
+ WideInd->dropPoisonGeneratingFlags();
+ WideCanIV->replaceAllUsesWith(WideInd);
+ WideCanIV->eraseFromParent();
return;
}
}
More information about the llvm-commits
mailing list