[llvm] [VPlan] Add transform to replace VPWidenCanonicalIV with wide IV. (PR #194267)
Ramkumar Ramachandra via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 29 03:19:59 PDT 2026
================
@@ -749,6 +749,56 @@ static void removeRedundantCanonicalIVs(VPlan &Plan) {
WidenNewIV->eraseFromParent();
}
+void VPlanTransforms::replaceWideCanonicalIVWithWideIV(
+ VPlan &Plan, ScalarEvolution &SE, const TargetTransformInfo &TTI,
+ TargetTransformInfo::TargetCostKind CostKind, ElementCount VF, unsigned UF,
+ const SmallPtrSetImpl<const Value *> &ValuesToIgnore) {
+ VPRegionBlock *LoopRegion = Plan.getVectorLoopRegion();
+ if (!LoopRegion || Plan.hasScalarVFOnly())
+ return;
+
+ VPValue *CanonicalIV = LoopRegion->getCanonicalIV();
+ auto *WideCanIV = vputils::findUserOf<VPWidenCanonicalIVRecipe>(CanonicalIV);
+ if (!WideCanIV || vputils::onlyFirstLaneUsed(WideCanIV) ||
+ vputils::onlyScalarValuesUsed(WideCanIV))
----------------
artagnon wrote:
```suggestion
if (!WideCanIV ||
vputils::onlyScalarValuesUsed(WideCanIV))
```
Isn't onlyScalarValuesUsed a strict superset of onlyFirstLaneUsed?
https://github.com/llvm/llvm-project/pull/194267
More information about the llvm-commits
mailing list