[llvm] [LoopVectorizer] Add support for partial reductions (PR #92418)
Graham Hunter via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 13 03:25:48 PDT 2024
================
@@ -341,6 +341,43 @@ class AArch64TTIImpl : public BasicTTIImplBase<AArch64TTIImpl> {
return BaseT::isLegalNTLoad(DataType, Alignment);
}
+ InstructionCost getPartialReductionCost(unsigned Opcode, Type *InputType,
+ Type *AccumType, ElementCount VF,
+ PartialReductionExtendKind OpAExtend,
+ PartialReductionExtendKind OpBExtend,
+ std::optional<unsigned> BinOp) const {
+ InstructionCost Cost = InstructionCost::getInvalid();
+
+ if (Opcode != Instruction::Add)
+ return Cost;
+
+ EVT InputEVT = EVT::getEVT(InputType);
+ EVT AccumEVT = EVT::getEVT(AccumType);
+
+ if (AccumEVT.isScalableVector() && !ST->isSVEorStreamingSVEAvailable())
+ return Cost;
+ if (!AccumEVT.isScalableVector() && !ST->isNeonAvailable() &&
+ !ST->hasDotProd())
+ return Cost;
+
+ if (InputEVT == MVT::i8) {
+ if (AccumEVT != MVT::i32)
----------------
huntergr-arm wrote:
If you're potentially handing vector EVTs as above, then you'll need to check the scalar EVT here.
https://github.com/llvm/llvm-project/pull/92418
More information about the llvm-commits
mailing list