diff --git a/llvm/include/llvm/Analysis/TargetTransformInfo.h b/llvm/include/llvm/Analysis/TargetTransformInfo.h --- a/llvm/include/llvm/Analysis/TargetTransformInfo.h +++ b/llvm/include/llvm/Analysis/TargetTransformInfo.h @@ -122,17 +122,17 @@ 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::max(); + InstructionCost ScalarizationCost = InstructionCost::getInvalid(); public: IntrinsicCostAttributes( Intrinsic::ID Id, const CallBase &CI, - unsigned ScalarizationCost = std::numeric_limits::max()); + InstructionCost ScalarCost = InstructionCost::getInvalid()); IntrinsicCostAttributes( Intrinsic::ID Id, Type *RTy, ArrayRef Tys, FastMathFlags Flags = FastMathFlags(), const IntrinsicInst *I = nullptr, - unsigned ScalarCost = std::numeric_limits::max()); + InstructionCost ScalarCost = InstructionCost::getInvalid()); IntrinsicCostAttributes(Intrinsic::ID Id, Type *RTy, ArrayRef Args); @@ -141,13 +141,13 @@ Intrinsic::ID Id, Type *RTy, ArrayRef Args, ArrayRef Tys, FastMathFlags Flags = FastMathFlags(), const IntrinsicInst *I = nullptr, - unsigned ScalarCost = std::numeric_limits::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 &getArgs() const { return Arguments; } const SmallVectorImpl &getArgTypes() const { return ParamTys; } @@ -155,9 +155,7 @@ return Arguments.empty(); } - bool skipScalarizationCost() const { - return ScalarizationCost != std::numeric_limits::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 --- a/llvm/include/llvm/CodeGen/BasicTTIImpl.h +++ b/llvm/include/llvm/CodeGen/BasicTTIImpl.h @@ -1376,7 +1376,7 @@ // Assume that we need to scalarize this intrinsic. // Compute the scalarization overhead based on Args for a vector // intrinsic. - unsigned ScalarizationCost = std::numeric_limits::max(); + InstructionCost ScalarizationCost = InstructionCost::getInvalid(); if (RetVF.isVector() && !RetVF.isScalable()) { ScalarizationCost = 0; if (!RetTy->isVoidTy()) @@ -1402,7 +1402,7 @@ Type *RetTy = ICA.getReturnType(); const SmallVectorImpl &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 @@ })) return InstructionCost::getInvalid(); - unsigned ScalarizationCost = SkipScalarizationCost ? - ScalarizationCostPassed : getScalarizationOverhead(RetVTy, true, false); + InstructionCost ScalarizationCost = + SkipScalarizationCost ? ScalarizationCostPassed + : getScalarizationOverhead(RetVTy, true, false); unsigned ScalarCalls = cast(RetVTy)->getNumElements(); SmallVector ScalarTys; diff --git a/llvm/lib/Analysis/TargetTransformInfo.cpp b/llvm/lib/Analysis/TargetTransformInfo.cpp --- a/llvm/lib/Analysis/TargetTransformInfo.cpp +++ b/llvm/lib/Analysis/TargetTransformInfo.cpp @@ -54,9 +54,8 @@ 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(&CI)), RetTy(CI.getType()), IID(Id), ScalarizationCost(ScalarizationCost) { @@ -72,7 +71,7 @@ ArrayRef 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 @@ ArrayRef 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 --- a/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp @@ -759,7 +759,7 @@ // 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::max(); + InstructionCost ScalarizationCost = InstructionCost::getInvalid(); if (RetVF > 1) { ScalarizationCost = 0; if (!RetTy->isVoidTy())