[llvm] [VPlan] Compute induction end values in VPlan. (PR #112145)

Florian Hahn via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 19 06:56:23 PST 2024


================
@@ -8919,13 +8836,63 @@ static void addCanonicalIVRecipes(VPlan &Plan, Type *IdxTy, bool HasNUW,
                        {CanonicalIVIncrement, &Plan.getVectorTripCount()}, DL);
 }
 
-/// Create resume phis in the scalar preheader for first-order recurrences and
-/// reductions and update the VPIRInstructions wrapping the original phis in the
-/// scalar header.
-static void addScalarResumePhis(VPRecipeBuilder &Builder, VPlan &Plan) {
+/// Create a ResumePhi for \p PhiR, if it is wide induction recipe. If the
+/// induction recipe is not canonical, creates a VPDerivedIVRecipe to compute
+/// the end value of the induction.
+static VPValue *addResumeValuesForInduction(VPHeaderPHIRecipe *PhiR,
+                                            VPBuilder &VectorPHBuilder,
+                                            VPBuilder &ScalarPHBuilder,
+                                            VPTypeAnalysis &TypeInfo,
+                                            VPValue *VectorTC) {
+  auto *WideIV = dyn_cast<VPWidenInductionRecipe>(PhiR);
+  if (!WideIV)
+    return nullptr;
+
+  VPValue *Start = WideIV->getStartValue();
+  VPValue *Step = WideIV->getStepValue();
+  const InductionDescriptor &ID = WideIV->getInductionDescriptor();
+  Type *ScalarTy = TypeInfo.inferScalarType(WideIV);
+  bool IsCanonical = false;
+  if (auto *WideIV = dyn_cast<VPWidenIntOrFpInductionRecipe>(PhiR)) {
+    // Truncated wide inductions resume from the last lane of their vector value
+    // in the last vector iteration.
+    if (ScalarTy != TypeInfo.inferScalarType(Step))
+      return nullptr;
+    IsCanonical = WideIV->isCanonical();
+  }
+
+  VPValue *EndValue = VectorTC;
+  if (!IsCanonical) {
----------------
fhahn wrote:

I don't think it can be moved, we need to compute the end value for all cases except wide canonical IVs

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


More information about the llvm-commits mailing list