forked from OSchip/llvm-project
[TTI] NFC: Change getCFInstrCost to return InstructionCost
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/D100313
This commit is contained in:
parent
596f669cfb
commit
14b934f8a6
|
@ -1109,9 +1109,10 @@ public:
|
|||
|
||||
/// \return The expected cost of control-flow related instructions such as
|
||||
/// Phi, Ret, Br, Switch.
|
||||
int getCFInstrCost(unsigned Opcode,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_SizeAndLatency,
|
||||
const Instruction *I = nullptr) const;
|
||||
InstructionCost
|
||||
getCFInstrCost(unsigned Opcode,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_SizeAndLatency,
|
||||
const Instruction *I = nullptr) const;
|
||||
|
||||
/// \returns The expected cost of compare and select instructions. If there
|
||||
/// is an existing instruction that holds Opcode, it may be passed in the
|
||||
|
@ -1583,8 +1584,9 @@ public:
|
|||
virtual InstructionCost getExtractWithExtendCost(unsigned Opcode, Type *Dst,
|
||||
VectorType *VecTy,
|
||||
unsigned Index) = 0;
|
||||
virtual int getCFInstrCost(unsigned Opcode, TTI::TargetCostKind CostKind,
|
||||
const Instruction *I = nullptr) = 0;
|
||||
virtual InstructionCost getCFInstrCost(unsigned Opcode,
|
||||
TTI::TargetCostKind CostKind,
|
||||
const Instruction *I = nullptr) = 0;
|
||||
virtual InstructionCost getCmpSelInstrCost(unsigned Opcode, Type *ValTy,
|
||||
Type *CondTy,
|
||||
CmpInst::Predicate VecPred,
|
||||
|
@ -2060,8 +2062,8 @@ public:
|
|||
unsigned Index) override {
|
||||
return Impl.getExtractWithExtendCost(Opcode, Dst, VecTy, Index);
|
||||
}
|
||||
int getCFInstrCost(unsigned Opcode, TTI::TargetCostKind CostKind,
|
||||
const Instruction *I = nullptr) override {
|
||||
InstructionCost getCFInstrCost(unsigned Opcode, TTI::TargetCostKind CostKind,
|
||||
const Instruction *I = nullptr) override {
|
||||
return Impl.getCFInstrCost(Opcode, CostKind, I);
|
||||
}
|
||||
InstructionCost getCmpSelInstrCost(unsigned Opcode, Type *ValTy, Type *CondTy,
|
||||
|
|
|
@ -516,8 +516,8 @@ public:
|
|||
return 1;
|
||||
}
|
||||
|
||||
unsigned getCFInstrCost(unsigned Opcode, TTI::TargetCostKind CostKind,
|
||||
const Instruction *I = nullptr) const {
|
||||
InstructionCost getCFInstrCost(unsigned Opcode, TTI::TargetCostKind CostKind,
|
||||
const Instruction *I = nullptr) const {
|
||||
// A phi would be free, unless we're costing the throughput because it
|
||||
// will require a register.
|
||||
if (Opcode == Instruction::PHI && CostKind != TTI::TCK_RecipThroughput)
|
||||
|
|
|
@ -918,8 +918,8 @@ public:
|
|||
TTI::CastContextHint::None, TTI::TCK_RecipThroughput);
|
||||
}
|
||||
|
||||
unsigned getCFInstrCost(unsigned Opcode, TTI::TargetCostKind CostKind,
|
||||
const Instruction *I = nullptr) {
|
||||
InstructionCost getCFInstrCost(unsigned Opcode, TTI::TargetCostKind CostKind,
|
||||
const Instruction *I = nullptr) {
|
||||
return BaseT::getCFInstrCost(Opcode, CostKind, I);
|
||||
}
|
||||
|
||||
|
@ -1044,7 +1044,7 @@ public:
|
|||
int PackingCost = getScalarizationOverhead(VT, Opcode != Instruction::Store,
|
||||
Opcode == Instruction::Store);
|
||||
|
||||
int ConditionalCost = 0;
|
||||
InstructionCost ConditionalCost = 0;
|
||||
if (VariableMask) {
|
||||
// Compute the cost of conditionally executing the memory operations with
|
||||
// variable masks. This includes extracting the individual conditions, a
|
||||
|
|
|
@ -787,12 +787,11 @@ InstructionCost TargetTransformInfo::getExtractWithExtendCost(
|
|||
return Cost;
|
||||
}
|
||||
|
||||
int TargetTransformInfo::getCFInstrCost(unsigned Opcode,
|
||||
TTI::TargetCostKind CostKind,
|
||||
const Instruction *I) const {
|
||||
InstructionCost TargetTransformInfo::getCFInstrCost(
|
||||
unsigned Opcode, TTI::TargetCostKind CostKind, const Instruction *I) const {
|
||||
assert((I == nullptr || I->getOpcode() == Opcode) &&
|
||||
"Opcode should reflect passed instruction.");
|
||||
int Cost = TTIImpl->getCFInstrCost(Opcode, CostKind, I);
|
||||
InstructionCost Cost = TTIImpl->getCFInstrCost(Opcode, CostKind, I);
|
||||
assert(Cost >= 0 && "TTI should not produce negative costs!");
|
||||
return Cost;
|
||||
}
|
||||
|
|
|
@ -655,9 +655,9 @@ InstructionCost AArch64TTIImpl::getExtractWithExtendCost(unsigned Opcode,
|
|||
CostKind);
|
||||
}
|
||||
|
||||
unsigned AArch64TTIImpl::getCFInstrCost(unsigned Opcode,
|
||||
TTI::TargetCostKind CostKind,
|
||||
const Instruction *I) {
|
||||
InstructionCost AArch64TTIImpl::getCFInstrCost(unsigned Opcode,
|
||||
TTI::TargetCostKind CostKind,
|
||||
const Instruction *I) {
|
||||
if (CostKind != TTI::TCK_RecipThroughput)
|
||||
return Opcode == Instruction::PHI ? 0 : 1;
|
||||
assert(CostKind == TTI::TCK_RecipThroughput && "unexpected CostKind");
|
||||
|
|
|
@ -141,8 +141,8 @@ public:
|
|||
InstructionCost getExtractWithExtendCost(unsigned Opcode, Type *Dst,
|
||||
VectorType *VecTy, unsigned Index);
|
||||
|
||||
unsigned getCFInstrCost(unsigned Opcode, TTI::TargetCostKind CostKind,
|
||||
const Instruction *I = nullptr);
|
||||
InstructionCost getCFInstrCost(unsigned Opcode, TTI::TargetCostKind CostKind,
|
||||
const Instruction *I = nullptr);
|
||||
|
||||
int getVectorInstrCost(unsigned Opcode, Type *Val, unsigned Index);
|
||||
|
||||
|
|
|
@ -812,9 +812,9 @@ GCNTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
|
|||
return LT.first * NElts * InstRate;
|
||||
}
|
||||
|
||||
unsigned GCNTTIImpl::getCFInstrCost(unsigned Opcode,
|
||||
TTI::TargetCostKind CostKind,
|
||||
const Instruction *I) {
|
||||
InstructionCost GCNTTIImpl::getCFInstrCost(unsigned Opcode,
|
||||
TTI::TargetCostKind CostKind,
|
||||
const Instruction *I) {
|
||||
assert((I == nullptr || I->getOpcode() == Opcode) &&
|
||||
"Opcode should reflect passed instruction.");
|
||||
const bool SCost =
|
||||
|
@ -1316,9 +1316,9 @@ unsigned R600TTIImpl::getMaxInterleaveFactor(unsigned VF) {
|
|||
return 8;
|
||||
}
|
||||
|
||||
unsigned R600TTIImpl::getCFInstrCost(unsigned Opcode,
|
||||
TTI::TargetCostKind CostKind,
|
||||
const Instruction *I) {
|
||||
InstructionCost R600TTIImpl::getCFInstrCost(unsigned Opcode,
|
||||
TTI::TargetCostKind CostKind,
|
||||
const Instruction *I) {
|
||||
if (CostKind == TTI::TCK_CodeSize || CostKind == TTI::TCK_SizeAndLatency)
|
||||
return Opcode == Instruction::PHI ? 0 : 1;
|
||||
|
||||
|
|
|
@ -163,8 +163,8 @@ public:
|
|||
ArrayRef<const Value *> Args = ArrayRef<const Value *>(),
|
||||
const Instruction *CxtI = nullptr);
|
||||
|
||||
unsigned getCFInstrCost(unsigned Opcode, TTI::TargetCostKind CostKind,
|
||||
const Instruction *I = nullptr);
|
||||
InstructionCost getCFInstrCost(unsigned Opcode, TTI::TargetCostKind CostKind,
|
||||
const Instruction *I = nullptr);
|
||||
|
||||
bool isInlineAsmSourceOfDivergence(const CallInst *CI,
|
||||
ArrayRef<unsigned> Indices = {}) const;
|
||||
|
@ -252,8 +252,8 @@ public:
|
|||
bool isLegalToVectorizeStoreChain(unsigned ChainSizeInBytes, Align Alignment,
|
||||
unsigned AddrSpace) const;
|
||||
unsigned getMaxInterleaveFactor(unsigned VF);
|
||||
unsigned getCFInstrCost(unsigned Opcode, TTI::TargetCostKind CostKind,
|
||||
const Instruction *I = nullptr);
|
||||
InstructionCost getCFInstrCost(unsigned Opcode, TTI::TargetCostKind CostKind,
|
||||
const Instruction *I = nullptr);
|
||||
int getVectorInstrCost(unsigned Opcode, Type *ValTy, unsigned Index);
|
||||
};
|
||||
|
||||
|
|
|
@ -379,8 +379,9 @@ int ARMTTIImpl::getIntImmCostInst(unsigned Opcode, unsigned Idx,
|
|||
return getIntImmCost(Imm, Ty, CostKind);
|
||||
}
|
||||
|
||||
int ARMTTIImpl::getCFInstrCost(unsigned Opcode, TTI::TargetCostKind CostKind,
|
||||
const Instruction *I) {
|
||||
InstructionCost ARMTTIImpl::getCFInstrCost(unsigned Opcode,
|
||||
TTI::TargetCostKind CostKind,
|
||||
const Instruction *I) {
|
||||
if (CostKind == TTI::TCK_RecipThroughput &&
|
||||
(ST->hasNEON() || ST->hasMVEIntegerOps())) {
|
||||
// FIXME: The vectorizer is highly sensistive to the cost of these
|
||||
|
|
|
@ -198,8 +198,8 @@ public:
|
|||
|
||||
bool shouldExpandReduction(const IntrinsicInst *II) const { return false; }
|
||||
|
||||
int getCFInstrCost(unsigned Opcode, TTI::TargetCostKind CostKind,
|
||||
const Instruction *I = nullptr);
|
||||
InstructionCost getCFInstrCost(unsigned Opcode, TTI::TargetCostKind CostKind,
|
||||
const Instruction *I = nullptr);
|
||||
|
||||
InstructionCost getCastInstrCost(unsigned Opcode, Type *Dst, Type *Src,
|
||||
TTI::CastContextHint CCH,
|
||||
|
|
|
@ -154,8 +154,8 @@ public:
|
|||
const Instruction *I = nullptr);
|
||||
unsigned getVectorInstrCost(unsigned Opcode, Type *Val, unsigned Index);
|
||||
|
||||
unsigned getCFInstrCost(unsigned Opcode, TTI::TargetCostKind CostKind,
|
||||
const Instruction *I = nullptr) {
|
||||
InstructionCost getCFInstrCost(unsigned Opcode, TTI::TargetCostKind CostKind,
|
||||
const Instruction *I = nullptr) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -1002,8 +1002,9 @@ int PPCTTIImpl::getShuffleCost(TTI::ShuffleKind Kind, Type *Tp,
|
|||
.getValue();
|
||||
}
|
||||
|
||||
int PPCTTIImpl::getCFInstrCost(unsigned Opcode, TTI::TargetCostKind CostKind,
|
||||
const Instruction *I) {
|
||||
InstructionCost PPCTTIImpl::getCFInstrCost(unsigned Opcode,
|
||||
TTI::TargetCostKind CostKind,
|
||||
const Instruction *I) {
|
||||
if (CostKind != TTI::TCK_RecipThroughput)
|
||||
return Opcode == Instruction::PHI ? 0 : 1;
|
||||
// Branches are assumed to be predicted.
|
||||
|
|
|
@ -114,8 +114,8 @@ public:
|
|||
TTI::CastContextHint CCH,
|
||||
TTI::TargetCostKind CostKind,
|
||||
const Instruction *I = nullptr);
|
||||
int getCFInstrCost(unsigned Opcode, TTI::TargetCostKind CostKind,
|
||||
const Instruction *I = nullptr);
|
||||
InstructionCost getCFInstrCost(unsigned Opcode, TTI::TargetCostKind CostKind,
|
||||
const Instruction *I = nullptr);
|
||||
InstructionCost getCmpSelInstrCost(unsigned Opcode, Type *ValTy, Type *CondTy,
|
||||
CmpInst::Predicate VecPred,
|
||||
TTI::TargetCostKind CostKind,
|
||||
|
|
|
@ -4086,9 +4086,9 @@ int X86TTIImpl::getIntImmCostIntrin(Intrinsic::ID IID, unsigned Idx,
|
|||
return X86TTIImpl::getIntImmCost(Imm, Ty, CostKind);
|
||||
}
|
||||
|
||||
unsigned X86TTIImpl::getCFInstrCost(unsigned Opcode,
|
||||
TTI::TargetCostKind CostKind,
|
||||
const Instruction *I) {
|
||||
InstructionCost X86TTIImpl::getCFInstrCost(unsigned Opcode,
|
||||
TTI::TargetCostKind CostKind,
|
||||
const Instruction *I) {
|
||||
if (CostKind != TTI::TCK_RecipThroughput)
|
||||
return Opcode == Instruction::PHI ? 0 : 1;
|
||||
// Branches are assumed to be predicted.
|
||||
|
@ -4207,7 +4207,7 @@ InstructionCost X86TTIImpl::getGSScalarCost(unsigned Opcode, Type *SrcVTy,
|
|||
InstructionCost ScalarCompareCost = getCmpSelInstrCost(
|
||||
Instruction::ICmp, Type::getInt1Ty(SrcVTy->getContext()), nullptr,
|
||||
CmpInst::BAD_ICMP_PREDICATE, CostKind);
|
||||
int BranchCost = getCFInstrCost(Instruction::Br, CostKind);
|
||||
InstructionCost BranchCost = getCFInstrCost(Instruction::Br, CostKind);
|
||||
MaskUnpackCost += VF * (BranchCost + ScalarCompareCost);
|
||||
}
|
||||
|
||||
|
|
|
@ -206,8 +206,8 @@ public:
|
|||
|
||||
int getIntImmCost(const APInt &Imm, Type *Ty, TTI::TargetCostKind CostKind);
|
||||
|
||||
unsigned getCFInstrCost(unsigned Opcode, TTI::TargetCostKind CostKind,
|
||||
const Instruction *I = nullptr);
|
||||
InstructionCost getCFInstrCost(unsigned Opcode, TTI::TargetCostKind CostKind,
|
||||
const Instruction *I = nullptr);
|
||||
|
||||
int getIntImmCostInst(unsigned Opcode, unsigned Idx, const APInt &Imm,
|
||||
Type *Ty, TTI::TargetCostKind CostKind,
|
||||
|
|
Loading…
Reference in New Issue