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,
|
unsigned getIntrinsicInstrCost(Intrinsic::ID ID, Type *RetTy,
|
||||||
ArrayRef<Type *> Tys) const;
|
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
|
/// \returns The number of pieces into which the provided type must be
|
||||||
/// split during legalization. Zero is returned when the answer is unknown.
|
/// split during legalization. Zero is returned when the answer is unknown.
|
||||||
unsigned getNumberOfParts(Type *Tp) const;
|
unsigned getNumberOfParts(Type *Tp) const;
|
||||||
@ -569,6 +573,8 @@ public:
|
|||||||
bool IsPairwiseForm) = 0;
|
bool IsPairwiseForm) = 0;
|
||||||
virtual unsigned getIntrinsicInstrCost(Intrinsic::ID ID, Type *RetTy,
|
virtual unsigned getIntrinsicInstrCost(Intrinsic::ID ID, Type *RetTy,
|
||||||
ArrayRef<Type *> Tys) = 0;
|
ArrayRef<Type *> Tys) = 0;
|
||||||
|
virtual unsigned getCallInstrCost(Function *F, Type *RetTy,
|
||||||
|
ArrayRef<Type *> Tys) = 0;
|
||||||
virtual unsigned getNumberOfParts(Type *Tp) = 0;
|
virtual unsigned getNumberOfParts(Type *Tp) = 0;
|
||||||
virtual unsigned getAddressComputationCost(Type *Ty, bool IsComplex) = 0;
|
virtual unsigned getAddressComputationCost(Type *Ty, bool IsComplex) = 0;
|
||||||
virtual unsigned getCostOfKeepingLiveOverCall(ArrayRef<Type *> Tys) = 0;
|
virtual unsigned getCostOfKeepingLiveOverCall(ArrayRef<Type *> Tys) = 0;
|
||||||
@ -726,6 +732,10 @@ public:
|
|||||||
ArrayRef<Type *> Tys) override {
|
ArrayRef<Type *> Tys) override {
|
||||||
return Impl.getIntrinsicInstrCost(ID, RetTy, Tys);
|
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 {
|
unsigned getNumberOfParts(Type *Tp) override {
|
||||||
return Impl.getNumberOfParts(Tp);
|
return Impl.getNumberOfParts(Tp);
|
||||||
}
|
}
|
||||||
|
@ -303,6 +303,10 @@ public:
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned getCallInstrCost(Function *F, Type *RetTy, ArrayRef<Type *> Tys) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
unsigned getNumberOfParts(Type *Tp) { return 0; }
|
unsigned getNumberOfParts(Type *Tp) { return 0; }
|
||||||
|
|
||||||
unsigned getAddressComputationCost(Type *Tp, bool) { return 0; }
|
unsigned getAddressComputationCost(Type *Tp, bool) { return 0; }
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#include "llvm/Support/CommandLine.h"
|
#include "llvm/Support/CommandLine.h"
|
||||||
#include "llvm/Target/TargetLowering.h"
|
#include "llvm/Target/TargetLowering.h"
|
||||||
#include "llvm/Target/TargetSubtargetInfo.h"
|
#include "llvm/Target/TargetSubtargetInfo.h"
|
||||||
|
#include "llvm/Analysis/TargetLibraryInfo.h"
|
||||||
|
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
|
|
||||||
@ -658,6 +659,20 @@ public:
|
|||||||
return 10;
|
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) {
|
unsigned getNumberOfParts(Type *Tp) {
|
||||||
std::pair<unsigned, MVT> LT = getTLI()->getTypeLegalizationCost(Tp);
|
std::pair<unsigned, MVT> LT = getTLI()->getTypeLegalizationCost(Tp);
|
||||||
return LT.first;
|
return LT.first;
|
||||||
|
@ -237,6 +237,11 @@ TargetTransformInfo::getIntrinsicInstrCost(Intrinsic::ID ID, Type *RetTy,
|
|||||||
return TTIImpl->getIntrinsicInstrCost(ID, RetTy, Tys);
|
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 {
|
unsigned TargetTransformInfo::getNumberOfParts(Type *Tp) const {
|
||||||
return TTIImpl->getNumberOfParts(Tp);
|
return TTIImpl->getNumberOfParts(Tp);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user