[llvm] [LV] Use VPReductionRecipe for partial reductions (PR #144908)
Benjamin Maxwell via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 20 05:32:36 PDT 2025
================
@@ -2408,23 +2414,32 @@ class VPInterleaveRecipe : public VPRecipeBase {
Instruction *getInsertPos() const { return IG->getInsertPos(); }
};
-/// A recipe to represent inloop reduction operations, performing a reduction on
-/// a vector operand into a scalar value, and adding the result to a chain.
-/// The Operands are {ChainOp, VecOp, [Condition]}.
+/// A recipe to represent inloop, ordered or partial reduction operations. It
+/// performs a reduction on a vector operand into a scalar (vector in the case
+/// of a partial reduction) value, and adds the result to a chain. The Operands
+/// are {ChainOp, VecOp, [Condition]}.
class VPReductionRecipe : public VPRecipeWithIRFlags {
/// The recurrence kind for the reduction in question.
RecurKind RdxKind;
bool IsOrdered;
/// Whether the reduction is conditional.
bool IsConditional = false;
+ /// The scaling factor, relative to the VF, that this recipe's output is
+ /// divided by.
+ /// For outer-loop reductions this is equal to 1.
+ /// For in-loop reductions this is equal to 0, to specify that this is equal
+ /// to the VF (which may not be known yet). For partial-reductions this is
+ /// equal to another scalar value.
+ ElementCount VFScaleFactor;
----------------
MacDue wrote:
There's several places (including the vplan printing) that call `.getFixedValue()` (which asserts that the value is not scalable), so it seemed like an oversight in this PR.
https://github.com/llvm/llvm-project/pull/144908
More information about the llvm-commits
mailing list