forked from OSchip/llvm-project
[System Model] [TTI] Move default cache/prefetch implementations
Move the default implementations of cache and prefetch queries to TargetTransformInfoImplBase and delete them from NoTIIImpl. This brings these interfaces in line with how other TTI interfaces work. Differential Revision: https://reviews.llvm.org/D68804 llvm-svn: 374446
This commit is contained in:
parent
366ada1d06
commit
7c562f1286
|
@ -371,6 +371,34 @@ public:
|
|||
return false;
|
||||
}
|
||||
|
||||
unsigned getCacheLineSize() const { return 0; }
|
||||
|
||||
llvm::Optional<unsigned> getCacheSize(TargetTransformInfo::CacheLevel Level) const {
|
||||
switch (Level) {
|
||||
case TargetTransformInfo::CacheLevel::L1D:
|
||||
LLVM_FALLTHROUGH;
|
||||
case TargetTransformInfo::CacheLevel::L2D:
|
||||
return llvm::Optional<unsigned>();
|
||||
}
|
||||
llvm_unreachable("Unknown TargetTransformInfo::CacheLevel");
|
||||
}
|
||||
|
||||
llvm::Optional<unsigned> getCacheAssociativity(
|
||||
TargetTransformInfo::CacheLevel Level) const {
|
||||
switch (Level) {
|
||||
case TargetTransformInfo::CacheLevel::L1D:
|
||||
LLVM_FALLTHROUGH;
|
||||
case TargetTransformInfo::CacheLevel::L2D:
|
||||
return llvm::Optional<unsigned>();
|
||||
}
|
||||
|
||||
llvm_unreachable("Unknown TargetTransformInfo::CacheLevel");
|
||||
}
|
||||
|
||||
unsigned getPrefetchDistance() const { return 0; }
|
||||
unsigned getMinPrefetchStride() const { return 1; }
|
||||
unsigned getMaxPrefetchIterationsAhead() const { return UINT_MAX; }
|
||||
|
||||
unsigned getMaxInterleaveFactor(unsigned VF) { return 1; }
|
||||
|
||||
unsigned getArithmeticInstrCost(unsigned Opcode, Type *Ty,
|
||||
|
|
|
@ -523,8 +523,13 @@ public:
|
|||
|
||||
virtual Optional<unsigned>
|
||||
getCacheAssociativity(TargetTransformInfo::CacheLevel Level) const {
|
||||
return Optional<unsigned>(
|
||||
getST()->getCacheAssociativity(static_cast<unsigned>(Level)));
|
||||
Optional<unsigned> TargetResult =
|
||||
getST()->getCacheAssociativity(static_cast<unsigned>(Level));
|
||||
|
||||
if (TargetResult)
|
||||
return TargetResult;
|
||||
|
||||
return BaseT::getCacheAssociativity(Level);
|
||||
}
|
||||
|
||||
virtual unsigned getCacheLineSize() const {
|
||||
|
|
|
@ -40,34 +40,6 @@ namespace {
|
|||
struct NoTTIImpl : TargetTransformInfoImplCRTPBase<NoTTIImpl> {
|
||||
explicit NoTTIImpl(const DataLayout &DL)
|
||||
: TargetTransformInfoImplCRTPBase<NoTTIImpl>(DL) {}
|
||||
|
||||
unsigned getCacheLineSize() const { return 0; }
|
||||
|
||||
llvm::Optional<unsigned> getCacheSize(TargetTransformInfo::CacheLevel Level) const {
|
||||
switch (Level) {
|
||||
case TargetTransformInfo::CacheLevel::L1D:
|
||||
LLVM_FALLTHROUGH;
|
||||
case TargetTransformInfo::CacheLevel::L2D:
|
||||
return llvm::Optional<unsigned>();
|
||||
}
|
||||
llvm_unreachable("Unknown TargetTransformInfo::CacheLevel");
|
||||
}
|
||||
|
||||
llvm::Optional<unsigned> getCacheAssociativity(
|
||||
TargetTransformInfo::CacheLevel Level) const {
|
||||
switch (Level) {
|
||||
case TargetTransformInfo::CacheLevel::L1D:
|
||||
LLVM_FALLTHROUGH;
|
||||
case TargetTransformInfo::CacheLevel::L2D:
|
||||
return llvm::Optional<unsigned>();
|
||||
}
|
||||
|
||||
llvm_unreachable("Unknown TargetTransformInfo::CacheLevel");
|
||||
}
|
||||
|
||||
unsigned getPrefetchDistance() const { return 0; }
|
||||
unsigned getMinPrefetchStride() const { return 1; }
|
||||
unsigned getMaxPrefetchIterationsAhead() const { return UINT_MAX; }
|
||||
};
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue