[llvm] [LV] Bundle (partial) reductions with a mul of a constant (PR #162503)

Sam Tebbs via llvm-commits llvm-commits at lists.llvm.org
Fri Oct 24 02:14:47 PDT 2025


================
@@ -3589,6 +3596,42 @@ tryToMatchAndCreateMulAccumulateReduction(VPReductionRecipe *Red,
     Sub = VecOp->getDefiningRecipe();
     VecOp = Tmp;
   }
+
+  // If ValB is a constant and can be safely extended, truncate it to the same
+  // type as ExtA's operand, then extend it to the same type as ExtA. This
+  // creates two uniform extends that can more easily be matched by the rest of
+  // the bundling code. The ExtB reference, ValB and operand 1 of Mul are all
+  // replaced with the new extend of the constant.
+  auto ExtendAndReplaceConstantOp = [&Ctx](VPWidenCastRecipe *ExtA,
+                                           VPWidenCastRecipe *&ExtB,
+                                           VPValue *&ValB, VPWidenRecipe *Mul) {
+    if (ExtA && !ExtB && ValB->isLiveIn()) {
----------------
SamTebbs33 wrote:

Ah sorry, missed the `here` in your comment. Done!

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


More information about the llvm-commits mailing list