[llvm] [AArch64][CostModel] Model sve costs for ctpop (PR #192428)
David Green via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 17 00:56:32 PDT 2026
================
@@ -807,14 +807,37 @@ AArch64TTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
{ISD::CTPOP, MVT::v4i32, 3},
{ISD::CTPOP, MVT::v8i16, 2},
{ISD::CTPOP, MVT::v16i8, 1},
- {ISD::CTPOP, MVT::i64, 4},
+ {ISD::CTPOP, MVT::i64, 4},
{ISD::CTPOP, MVT::v2i32, 3},
{ISD::CTPOP, MVT::v4i16, 2},
- {ISD::CTPOP, MVT::v8i8, 1},
- {ISD::CTPOP, MVT::i32, 5},
+ {ISD::CTPOP, MVT::v8i8, 1},
+ {ISD::CTPOP, MVT::i32, 5},
+ // SVE types (For targets that override NEON for fixed length vectors)
+ {ISD::CTPOP, MVT::nxv2i64, 2},
+ {ISD::CTPOP, MVT::nxv4i32, 2},
+ {ISD::CTPOP, MVT::nxv8i16, 1},
+ {ISD::CTPOP, MVT::nxv16i8, 1},
+ {ISD::CTPOP, MVT::nxv2i32, 2},
+ {ISD::CTPOP, MVT::nxv4i16, 2},
+ {ISD::CTPOP, MVT::nxv8i8, 1},
};
auto LT = getTypeLegalizationCost(RetTy);
MVT MTy = LT.second;
+
+ // When SVE is available, fixed-length vector ctpop is lowered using SVE
+ // (useSVEForFixedLengthVectorVT with OverrideNEON=true), so look up the
+ // scalable equivalent type for accurate costing.
+ if (ST->isSVEorStreamingSVEAvailable() && MTy.isFixedLengthVector()) {
+ EVT ScalableVT = MVT::getScalableVectorVT(
+ MTy.getVectorElementType(),
+ MTy.is128BitVector()
+ ? 128 / MTy.getVectorElementType().getSizeInBits()
+ : 64 / MTy.getVectorElementType().getSizeInBits());
----------------
davemgreen wrote:
Why does this need to change the number of elements?
https://github.com/llvm/llvm-project/pull/192428
More information about the llvm-commits
mailing list