[llvm] 9ab17a6 - [TTI] NFC: Use InstructionCost to store ScalarizationCost in IntrinsicCostAttributes.
Daniil Fukalov via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 23 08:02:14 PDT 2021
Author: dfukalov
Date: 2021-04-23T18:02:00+03:00
New Revision: 9ab17a60ebf7145bd02578024b76a6191a4fdec5
URL: https://github.com/llvm/llvm-project/commit/9ab17a60ebf7145bd02578024b76a6191a4fdec5
DIFF: https://github.com/llvm/llvm-project/commit/9ab17a60ebf7145bd02578024b76a6191a4fdec5.diff
LOG: [TTI] NFC: Use InstructionCost to store ScalarizationCost in IntrinsicCostAttributes.
This patch migrates the TTI cost interfaces to return an InstructionCost.
See this patch for the introduction of the type: https://reviews.llvm.org/D91174
See this thread for context: http://lists.llvm.org/pipermail/llvm-dev/2020-November/146408.html
Reviewed By: samparker
Differential Revision: https://reviews.llvm.org/D101151
Added:
Modified:
llvm/include/llvm/Analysis/TargetTransformInfo.h
llvm/include/llvm/CodeGen/BasicTTIImpl.h
llvm/lib/Analysis/TargetTransformInfo.cpp
llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/Analysis/TargetTransformInfo.h b/llvm/include/llvm/Analysis/TargetTransformInfo.h
index db07ace497050..23254d92d1c91 100644
--- a/llvm/include/llvm/Analysis/TargetTransformInfo.h
+++ b/llvm/include/llvm/Analysis/TargetTransformInfo.h
@@ -122,17 +122,17 @@ class IntrinsicCostAttributes {
FastMathFlags FMF;
// If ScalarizationCost is UINT_MAX, the cost of scalarizing the
// arguments and the return value will be computed based on types.
- unsigned ScalarizationCost = std::numeric_limits<unsigned>::max();
+ InstructionCost ScalarizationCost = InstructionCost::getInvalid();
public:
IntrinsicCostAttributes(
Intrinsic::ID Id, const CallBase &CI,
- unsigned ScalarizationCost = std::numeric_limits<unsigned>::max());
+ InstructionCost ScalarCost = InstructionCost::getInvalid());
IntrinsicCostAttributes(
Intrinsic::ID Id, Type *RTy, ArrayRef<Type *> Tys,
FastMathFlags Flags = FastMathFlags(), const IntrinsicInst *I = nullptr,
- unsigned ScalarCost = std::numeric_limits<unsigned>::max());
+ InstructionCost ScalarCost = InstructionCost::getInvalid());
IntrinsicCostAttributes(Intrinsic::ID Id, Type *RTy,
ArrayRef<const Value *> Args);
@@ -141,13 +141,13 @@ class IntrinsicCostAttributes {
Intrinsic::ID Id, Type *RTy, ArrayRef<const Value *> Args,
ArrayRef<Type *> Tys, FastMathFlags Flags = FastMathFlags(),
const IntrinsicInst *I = nullptr,
- unsigned ScalarCost = std::numeric_limits<unsigned>::max());
+ InstructionCost ScalarCost = InstructionCost::getInvalid());
Intrinsic::ID getID() const { return IID; }
const IntrinsicInst *getInst() const { return II; }
Type *getReturnType() const { return RetTy; }
FastMathFlags getFlags() const { return FMF; }
- unsigned getScalarizationCost() const { return ScalarizationCost; }
+ InstructionCost getScalarizationCost() const { return ScalarizationCost; }
const SmallVectorImpl<const Value *> &getArgs() const { return Arguments; }
const SmallVectorImpl<Type *> &getArgTypes() const { return ParamTys; }
@@ -155,9 +155,7 @@ class IntrinsicCostAttributes {
return Arguments.empty();
}
- bool skipScalarizationCost() const {
- return ScalarizationCost != std::numeric_limits<unsigned>::max();
- }
+ bool skipScalarizationCost() const { return ScalarizationCost.isValid(); }
};
class TargetTransformInfo;
diff --git a/llvm/include/llvm/CodeGen/BasicTTIImpl.h b/llvm/include/llvm/CodeGen/BasicTTIImpl.h
index 5f76708479035..a52ed344fec06 100644
--- a/llvm/include/llvm/CodeGen/BasicTTIImpl.h
+++ b/llvm/include/llvm/CodeGen/BasicTTIImpl.h
@@ -1376,7 +1376,7 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
// Assume that we need to scalarize this intrinsic.
// Compute the scalarization overhead based on Args for a vector
// intrinsic.
- unsigned ScalarizationCost = std::numeric_limits<unsigned>::max();
+ InstructionCost ScalarizationCost = InstructionCost::getInvalid();
if (RetVF.isVector() && !RetVF.isScalable()) {
ScalarizationCost = 0;
if (!RetTy->isVoidTy())
@@ -1402,7 +1402,7 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
Type *RetTy = ICA.getReturnType();
const SmallVectorImpl<Type *> &Tys = ICA.getArgTypes();
FastMathFlags FMF = ICA.getFlags();
- unsigned ScalarizationCostPassed = ICA.getScalarizationCost();
+ InstructionCost ScalarizationCostPassed = ICA.getScalarizationCost();
bool SkipScalarizationCost = ICA.skipScalarizationCost();
VectorType *VecOpTy = nullptr;
@@ -1846,8 +1846,9 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
}))
return InstructionCost::getInvalid();
- unsigned ScalarizationCost = SkipScalarizationCost ?
- ScalarizationCostPassed : getScalarizationOverhead(RetVTy, true, false);
+ InstructionCost ScalarizationCost =
+ SkipScalarizationCost ? ScalarizationCostPassed
+ : getScalarizationOverhead(RetVTy, true, false);
unsigned ScalarCalls = cast<FixedVectorType>(RetVTy)->getNumElements();
SmallVector<Type *, 4> ScalarTys;
diff --git a/llvm/lib/Analysis/TargetTransformInfo.cpp b/llvm/lib/Analysis/TargetTransformInfo.cpp
index 1183446c8f42d..331863ce20435 100644
--- a/llvm/lib/Analysis/TargetTransformInfo.cpp
+++ b/llvm/lib/Analysis/TargetTransformInfo.cpp
@@ -54,9 +54,8 @@ bool HardwareLoopInfo::canAnalyze(LoopInfo &LI) {
return true;
}
-IntrinsicCostAttributes::IntrinsicCostAttributes(Intrinsic::ID Id,
- const CallBase &CI,
- unsigned ScalarizationCost)
+IntrinsicCostAttributes::IntrinsicCostAttributes(
+ Intrinsic::ID Id, const CallBase &CI, InstructionCost ScalarizationCost)
: II(dyn_cast<IntrinsicInst>(&CI)), RetTy(CI.getType()), IID(Id),
ScalarizationCost(ScalarizationCost) {
@@ -72,7 +71,7 @@ IntrinsicCostAttributes::IntrinsicCostAttributes(Intrinsic::ID Id, Type *RTy,
ArrayRef<Type *> Tys,
FastMathFlags Flags,
const IntrinsicInst *I,
- unsigned ScalarCost)
+ InstructionCost ScalarCost)
: II(I), RetTy(RTy), IID(Id), FMF(Flags), ScalarizationCost(ScalarCost) {
ParamTys.insert(ParamTys.begin(), Tys.begin(), Tys.end());
}
@@ -92,7 +91,7 @@ IntrinsicCostAttributes::IntrinsicCostAttributes(Intrinsic::ID Id, Type *RTy,
ArrayRef<Type *> Tys,
FastMathFlags Flags,
const IntrinsicInst *I,
- unsigned ScalarCost)
+ InstructionCost ScalarCost)
: II(I), RetTy(RTy), IID(Id), FMF(Flags), ScalarizationCost(ScalarCost) {
ParamTys.insert(ParamTys.begin(), Tys.begin(), Tys.end());
Arguments.insert(Arguments.begin(), Args.begin(), Args.end());
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp b/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
index 125731ae1d67d..f59979dd7c45a 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
@@ -759,7 +759,7 @@ GCNTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
// Compute the scalarization overhead based on Args for a vector
// intrinsic. A vectorizer will pass a scalar RetTy and VF > 1, while
// CostModel will pass a vector RetTy and VF is 1.
- unsigned ScalarizationCost = std::numeric_limits<unsigned>::max();
+ InstructionCost ScalarizationCost = InstructionCost::getInvalid();
if (RetVF > 1) {
ScalarizationCost = 0;
if (!RetTy->isVoidTy())
More information about the llvm-commits
mailing list