[llvm] [VPlan] Implement VPExtendedReduction, VPMulAccumulateReductionRecipe and correspond vplan transformations. (PR #137746)
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 30 13:11:41 PDT 2025
================
@@ -2474,6 +2544,181 @@ class VPReductionEVLRecipe : public VPReductionRecipe {
}
};
+/// A recipe to represent inloop extended reduction operations, performing a
+/// reduction on a extended vector operand into a scalar value, and adding the
+/// result to a chain. This recipe is abstract and needs to be lowered to
+/// concrete recipes before codegen. The operands are {ChainOp, VecOp,
+/// [Condition]}.
+class VPExtendedReductionRecipe : public VPReductionRecipe {
+ /// Opcode of the extend recipe will be lowered to.
+ Instruction::CastOps ExtOp;
+
+ Type *ResultTy;
+
+ /// For cloning VPExtendedReductionRecipe.
+ VPExtendedReductionRecipe(VPExtendedReductionRecipe *ExtRed)
+ : VPReductionRecipe(
+ VPDef::VPExtendedReductionSC, ExtRed->getRecurrenceKind(),
+ {ExtRed->getChainOp(), ExtRed->getVecOp()}, ExtRed->getCondOp(),
+ ExtRed->isOrdered(), ExtRed->getDebugLoc()),
+ ExtOp(ExtRed->getExtOpcode()), ResultTy(ExtRed->getResultType()) {
----------------
fhahn wrote:
Supported extends are ZExt and SExt at the moment, right? Can we assert?
Same for `VPMulAccumulateReductionRecipe`
https://github.com/llvm/llvm-project/pull/137746
More information about the llvm-commits
mailing list