[llvm] [VPlan] Add transform to replace VPWidenCanonicalIV with wide IV. (PR #194267)

Ramkumar Ramachandra via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 28 03:11:18 PDT 2026


================
@@ -691,6 +691,60 @@ static void removeRedundantCanonicalIVs(VPlan &Plan) {
   }
 }
 
+void VPlanTransforms::replaceWidenCanonicalIVWithWidenIV(
+    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)
+    return;
+
+  if (vputils::onlyFirstLaneUsed(WideCanIV) ||
+      vputils::onlyScalarValuesUsed(WideCanIV))
+    return;
----------------
artagnon wrote:

```suggestion
  if (!WideCanIV || vputils::onlyFirstLaneUsed(WideCanIV) ||
      vputils::onlyScalarValuesUsed(WideCanIV))
    return;
```

https://github.com/llvm/llvm-project/pull/194267


More information about the llvm-commits mailing list