================
@@ -5039,10 +5039,25 @@ calculateRegisterUsage(VPlan &Plan, 
ArrayRef<ElementCount> VFs,
             // even in the scalar case.
             RegUsage[ClassID] += 1;
           } else {
+            // The output from scaled phis and scaled reductions actually have
+            // fewer lanes than the VF.
+            ElementCount VF = VFs[J];
+            if (auto *ReductionR = dyn_cast<VPReductionPHIRecipe>(R))
----------------
david-arm wrote:

I realise it may be less efficient, but perhaps it's better to commonise these 
into the same block? If for some reason we need to update this logic in future 
it's easier to fix it only once, i.e.

```
  if (isa<VPReductionPHIRecipe, VPPartialReductionRecipe>(R)) {
    auto *ReductionR = dyn_cast<VPReductionPHIRecipe>(R);
    auto *PartialReductionR = dyn_cast<VPPartialReductionRecipe>(R);
    unsigned ScaleFactor = ReductionR ? ReductionR->getVFScaleFactor() : 
PartialReductionR->getVFScaleFactor();
    VF = VF.divideCoefficientBy(ScaleFactor);
  }
```

If `getVFScaleFactor` becomes available to a common base class then it should 
simplify further. What do you think?

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