================
@@ -5039,10 +5039,26 @@ calculateRegisterUsage(VPlan &Plan, 
ArrayRef<ElementCount> VFs,
             // even in the scalar case.
             RegUsage[ClassID] += 1;
           } else {
+            ElementCount VF = VFs[J];
+            // The output from scaled phis and scaled reductions actually has
+            // fewer lanes than the VF.
+            if (isa<VPPartialReductionRecipe, VPReductionPHIRecipe>(R)) {
+              auto *ReductionR = dyn_cast<VPReductionPHIRecipe>(R);
+              auto *PartialReductionR = ReductionR ? nullptr : 
dyn_cast<VPPartialReductionRecipe>(R);
+              unsigned ScaleFactor = ReductionR ? 
ReductionR->getVFScaleFactor() : PartialReductionR->getVFScaleFactor();
+              VF = VF.divideCoefficientBy(ScaleFactor);
+            }
----------------
sdesmalen-arm wrote:

Maybe create a utility function that returns the scaling factor a `Recipe`, 
which returns `1` for any recipe other than the 
`VPPartialReductionRecipe/VPReductionPHIRecipe`.

Also, please run clang-format on your code.

https://github.com/llvm/llvm-project/pull/133090
_______________________________________________
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to