[llvm] [CostModel] Provide a default model for histogram intrinsics (PR #149348)
Graham Hunter via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 6 05:42:37 PDT 2025
================
@@ -2458,6 +2462,51 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
thisT()->getArithmeticInstrCost(BinaryOperator::And, RetTy, CostKind);
return Cost;
}
+ case Intrinsic::experimental_vector_histogram_add:
+ case Intrinsic::experimental_vector_histogram_uadd_sat:
+ case Intrinsic::experimental_vector_histogram_umax:
+ case Intrinsic::experimental_vector_histogram_umin: {
+ FixedVectorType *PtrsTy = dyn_cast<FixedVectorType>(ICA.getArgTypes()[0]);
+ Type *EltTy = ICA.getArgTypes()[1];
+
+ // Targets with scalable vectors must handle this on their own.
+ if (!PtrsTy)
+ return InstructionCost::getInvalid();
+
+ Align Alignment = thisT()->DL.getABITypeAlign(EltTy);
+ InstructionCost Cost = 0;
+ Cost += thisT()->getVectorInstrCost(Instruction::ExtractElement, PtrsTy,
+ CostKind, 1, nullptr, nullptr);
+ Cost += thisT()->getMemoryOpCost(Instruction::Load, EltTy, Alignment, 0,
+ CostKind);
+ switch (IID) {
+ default:
+ llvm_unreachable("Unhandled histogram update operation.");
+ case Intrinsic::experimental_vector_histogram_add:
+ Cost +=
+ thisT()->getArithmeticInstrCost(Instruction::Add, EltTy, CostKind);
+ break;
+ case Intrinsic::experimental_vector_histogram_uadd_sat: {
+ IntrinsicCostAttributes UAddSat(Intrinsic::uadd_sat, EltTy, {EltTy});
+ Cost += thisT()->getIntrinsicInstrCost(UAddSat, CostKind);
+ break;
+ }
+ case Intrinsic::experimental_vector_histogram_umax: {
+ IntrinsicCostAttributes UMax(Intrinsic::umax, EltTy, {EltTy});
+ Cost += thisT()->getIntrinsicInstrCost(UMax, CostKind);
+ break;
+ }
+ case Intrinsic::experimental_vector_histogram_umin: {
+ IntrinsicCostAttributes UMin(Intrinsic::umin, EltTy, {EltTy});
+ Cost += thisT()->getIntrinsicInstrCost(UMin, CostKind);
+ break;
+ }
+ }
+ Cost += thisT()->getMemoryOpCost(Instruction::Store, EltTy, Alignment, 0,
+ CostKind);
+ Cost *= PtrsTy->getNumElements();
+ return Cost;
----------------
huntergr-arm wrote:
No; that should be costed separately by VPlan, as it's not part of the intrinsic.
https://github.com/llvm/llvm-project/pull/149348
More information about the llvm-commits
mailing list