[llvm] 1b4c37f - [TTI][X86] getGSVectorCost/getGSScalarCost - add CostKind to the function arguments.
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 5 03:16:00 PDT 2024
Author: Simon Pilgrim
Date: 2024-04-05T11:15:46+01:00
New Revision: 1b4c37fec236f39a1ec530ecf07b6aa162518a6b
URL: https://github.com/llvm/llvm-project/commit/1b4c37fec236f39a1ec530ecf07b6aa162518a6b
DIFF: https://github.com/llvm/llvm-project/commit/1b4c37fec236f39a1ec530ecf07b6aa162518a6b.diff
LOG: [TTI][X86] getGSVectorCost/getGSScalarCost - add CostKind to the function arguments.
Initial refactor - only getGSScalarCost can actually use CostKind so far, and currently both are only ever set to TCK_RecipThroughput.
Added:
Modified:
llvm/lib/Target/X86/X86TargetTransformInfo.cpp
llvm/lib/Target/X86/X86TargetTransformInfo.h
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/X86TargetTransformInfo.cpp b/llvm/lib/Target/X86/X86TargetTransformInfo.cpp
index cd6102914cc38c..099abbec3e6e4c 100644
--- a/llvm/lib/Target/X86/X86TargetTransformInfo.cpp
+++ b/llvm/lib/Target/X86/X86TargetTransformInfo.cpp
@@ -5698,8 +5698,10 @@ int X86TTIImpl::getScatterOverhead() const {
// Return an average cost of Gather / Scatter instruction, maybe improved later.
// FIXME: Add TargetCostKind support.
-InstructionCost X86TTIImpl::getGSVectorCost(unsigned Opcode, Type *SrcVTy,
- const Value *Ptr, Align Alignment,
+InstructionCost X86TTIImpl::getGSVectorCost(unsigned Opcode,
+ TTI::TargetCostKind CostKind,
+ Type *SrcVTy, const Value *Ptr,
+ Align Alignment,
unsigned AddressSpace) {
assert(isa<VectorType>(SrcVTy) && "Unexpected type in getGSVectorCost");
@@ -5750,8 +5752,8 @@ InstructionCost X86TTIImpl::getGSVectorCost(unsigned Opcode, Type *SrcVTy,
// Handle splitting of vector of pointers
auto *SplitSrcTy =
FixedVectorType::get(SrcVTy->getScalarType(), VF / SplitFactor);
- return SplitFactor * getGSVectorCost(Opcode, SplitSrcTy, Ptr, Alignment,
- AddressSpace);
+ return SplitFactor * getGSVectorCost(Opcode, CostKind, SplitSrcTy, Ptr,
+ Alignment, AddressSpace);
}
// The gather / scatter cost is given by Intel architects. It is a rough
@@ -5771,15 +5773,14 @@ InstructionCost X86TTIImpl::getGSVectorCost(unsigned Opcode, Type *SrcVTy,
/// VariableMask - The mask is non-constant at compile time.
/// Alignment - Alignment for one element.
/// AddressSpace - pointer[s] address space.
-///
-/// FIXME: Add TargetCostKind support.
-InstructionCost X86TTIImpl::getGSScalarCost(unsigned Opcode, Type *SrcVTy,
- bool VariableMask, Align Alignment,
+InstructionCost X86TTIImpl::getGSScalarCost(unsigned Opcode,
+ TTI::TargetCostKind CostKind,
+ Type *SrcVTy, bool VariableMask,
+ Align Alignment,
unsigned AddressSpace) {
Type *ScalarTy = SrcVTy->getScalarType();
unsigned VF = cast<FixedVectorType>(SrcVTy)->getNumElements();
APInt DemandedElts = APInt::getAllOnes(VF);
- TTI::TargetCostKind CostKind = TTI::TCK_RecipThroughput;
InstructionCost MaskUnpackCost = 0;
if (VariableMask) {
@@ -5848,10 +5849,11 @@ InstructionCost X86TTIImpl::getGatherScatterOpCost(
(!isLegalMaskedScatter(SrcVTy, Align(Alignment)) ||
forceScalarizeMaskedScatter(cast<VectorType>(SrcVTy),
Align(Alignment)))))
- return getGSScalarCost(Opcode, SrcVTy, VariableMask, Alignment,
+ return getGSScalarCost(Opcode, CostKind, SrcVTy, VariableMask, Alignment,
AddressSpace);
- return getGSVectorCost(Opcode, SrcVTy, Ptr, Alignment, AddressSpace);
+ return getGSVectorCost(Opcode, CostKind, SrcVTy, Ptr, Alignment,
+ AddressSpace);
}
bool X86TTIImpl::isLSRCostLess(const TargetTransformInfo::LSRCost &C1,
diff --git a/llvm/lib/Target/X86/X86TargetTransformInfo.h b/llvm/lib/Target/X86/X86TargetTransformInfo.h
index 23035f655098a7..985b00438ce878 100644
--- a/llvm/lib/Target/X86/X86TargetTransformInfo.h
+++ b/llvm/lib/Target/X86/X86TargetTransformInfo.h
@@ -294,12 +294,12 @@ class X86TTIImpl : public BasicTTIImplBase<X86TTIImpl> {
private:
bool supportsGather() const;
- InstructionCost getGSScalarCost(unsigned Opcode, Type *DataTy,
- bool VariableMask, Align Alignment,
- unsigned AddressSpace);
- InstructionCost getGSVectorCost(unsigned Opcode, Type *DataTy,
- const Value *Ptr, Align Alignment,
- unsigned AddressSpace);
+ InstructionCost getGSScalarCost(unsigned Opcode, TTI::TargetCostKind CostKind,
+ Type *DataTy, bool VariableMask,
+ Align Alignment, unsigned AddressSpace);
+ InstructionCost getGSVectorCost(unsigned Opcode, TTI::TargetCostKind CostKind,
+ Type *DataTy, const Value *Ptr,
+ Align Alignment, unsigned AddressSpace);
int getGatherOverhead() const;
int getScatterOverhead() const;
More information about the llvm-commits
mailing list