mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-31 10:34:17 +00:00
TTI: Add getCallInstrCost.
Review: http://reviews.llvm.org/D8094 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@232524 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
06aab08788
commit
51b4d85c62
@ -452,6 +452,10 @@ public:
|
||||
unsigned getIntrinsicInstrCost(Intrinsic::ID ID, Type *RetTy,
|
||||
ArrayRef<Type *> Tys) const;
|
||||
|
||||
/// \returns The cost of Call instructions.
|
||||
unsigned getCallInstrCost(Function *F, Type *RetTy,
|
||||
ArrayRef<Type *> Tys) const;
|
||||
|
||||
/// \returns The number of pieces into which the provided type must be
|
||||
/// split during legalization. Zero is returned when the answer is unknown.
|
||||
unsigned getNumberOfParts(Type *Tp) const;
|
||||
@ -569,6 +573,8 @@ public:
|
||||
bool IsPairwiseForm) = 0;
|
||||
virtual unsigned getIntrinsicInstrCost(Intrinsic::ID ID, Type *RetTy,
|
||||
ArrayRef<Type *> Tys) = 0;
|
||||
virtual unsigned getCallInstrCost(Function *F, Type *RetTy,
|
||||
ArrayRef<Type *> Tys) = 0;
|
||||
virtual unsigned getNumberOfParts(Type *Tp) = 0;
|
||||
virtual unsigned getAddressComputationCost(Type *Ty, bool IsComplex) = 0;
|
||||
virtual unsigned getCostOfKeepingLiveOverCall(ArrayRef<Type *> Tys) = 0;
|
||||
@ -726,6 +732,10 @@ public:
|
||||
ArrayRef<Type *> Tys) override {
|
||||
return Impl.getIntrinsicInstrCost(ID, RetTy, Tys);
|
||||
}
|
||||
unsigned getCallInstrCost(Function *F, Type *RetTy,
|
||||
ArrayRef<Type *> Tys) override {
|
||||
return Impl.getCallInstrCost(F, RetTy, Tys);
|
||||
}
|
||||
unsigned getNumberOfParts(Type *Tp) override {
|
||||
return Impl.getNumberOfParts(Tp);
|
||||
}
|
||||
|
@ -303,6 +303,10 @@ public:
|
||||
return 1;
|
||||
}
|
||||
|
||||
unsigned getCallInstrCost(Function *F, Type *RetTy, ArrayRef<Type *> Tys) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
unsigned getNumberOfParts(Type *Tp) { return 0; }
|
||||
|
||||
unsigned getAddressComputationCost(Type *Tp, bool) { return 0; }
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
#include "llvm/Target/TargetLowering.h"
|
||||
#include "llvm/Target/TargetSubtargetInfo.h"
|
||||
#include "llvm/Analysis/TargetLibraryInfo.h"
|
||||
|
||||
namespace llvm {
|
||||
|
||||
@ -658,6 +659,20 @@ public:
|
||||
return 10;
|
||||
}
|
||||
|
||||
/// \brief Compute a cost of the given call instruction.
|
||||
///
|
||||
/// Compute the cost of calling function F with return type RetTy and
|
||||
/// argument types Tys. F might be nullptr, in this case the cost of an
|
||||
/// arbitrary call with the specified signature will be returned.
|
||||
/// This is used, for instance, when we estimate call of a vector
|
||||
/// counterpart of the given function.
|
||||
/// \param F Called function, might be nullptr.
|
||||
/// \param RetTy,Tys Return value and argument types.
|
||||
/// \returns The cost of Call instruction.
|
||||
unsigned getCallInstrCost(Function *F, Type *RetTy, ArrayRef<Type *> Tys) {
|
||||
return 10;
|
||||
}
|
||||
|
||||
unsigned getNumberOfParts(Type *Tp) {
|
||||
std::pair<unsigned, MVT> LT = getTLI()->getTypeLegalizationCost(Tp);
|
||||
return LT.first;
|
||||
|
@ -237,6 +237,11 @@ TargetTransformInfo::getIntrinsicInstrCost(Intrinsic::ID ID, Type *RetTy,
|
||||
return TTIImpl->getIntrinsicInstrCost(ID, RetTy, Tys);
|
||||
}
|
||||
|
||||
unsigned TargetTransformInfo::getCallInstrCost(Function *F, Type *RetTy,
|
||||
ArrayRef<Type *> Tys) const {
|
||||
return TTIImpl->getCallInstrCost(F, RetTy, Tys);
|
||||
}
|
||||
|
||||
unsigned TargetTransformInfo::getNumberOfParts(Type *Tp) const {
|
||||
return TTIImpl->getNumberOfParts(Tp);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user