[llvm-branch-commits] [llvm] [LV] Only create partial reductions when profitable. (PR #181706)
Florian Hahn via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Mar 12 03:58:59 PDT 2026
================
@@ -4405,37 +4401,24 @@ tryToMatchAndCreateMulAccumulateReduction(VPReductionRecipe *Red,
Ext0 ? Ctx.Types.inferScalarType(Ext0->getOperand(0)) : RedTy;
InstructionCost MulAccCost;
- if (Red->isPartialReduction()) {
- Type *SrcTy2 =
- Ext1 ? Ctx.Types.inferScalarType(Ext1->getOperand(0)) : nullptr;
- // FIXME: Move partial reduction creation, costing and clamping
- // here from LoopVectorize.cpp.
- MulAccCost = Ctx.TTI.getPartialReductionCost(
- Opcode, SrcTy, SrcTy2, RedTy, VF,
- Ext0 ? TargetTransformInfo::getPartialReductionExtendKind(
- Ext0->getOpcode())
- : TargetTransformInfo::PR_None,
- Ext1 ? TargetTransformInfo::getPartialReductionExtendKind(
- Ext1->getOpcode())
- : TargetTransformInfo::PR_None,
- Mul->getOpcode(), CostKind,
- RedTy->isFloatingPointTy()
- ? std::optional{Red->getFastMathFlags()}
- : std::nullopt);
- } else {
- // Only partial reductions support mixed or floating-point extends
- // at the moment.
- if (Ext0 && Ext1 &&
- (Ext0->getOpcode() != Ext1->getOpcode() ||
- Ext0->getOpcode() == Instruction::CastOps::FPExt))
- return false;
+ // For partial reductions, the decision has already been
+ // made at the point of transforming reductions -> partial
+ // reductions for a given plan, based on the cost-model.
+ if (Red->isPartialReduction())
----------------
fhahn wrote:
should also be able to move up
https://github.com/llvm/llvm-project/pull/181706
More information about the llvm-branch-commits
mailing list