diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2015-01-31 11:17:59 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2015-01-31 11:17:59 +0000 |
commit | 93dcdc47db64b1674996d555786230873c83bdde (patch) | |
tree | ea487af3bf71bde23ad90436b32a0c4a9c8d3191 /llvm/lib/Analysis/TargetTransformInfo.cpp | |
parent | 9559a5c05e1fab06c7493eb34dd37cf06cb353d8 (diff) | |
download | llvm-93dcdc47db64b1674996d555786230873c83bdde.zip llvm-93dcdc47db64b1674996d555786230873c83bdde.tar.gz llvm-93dcdc47db64b1674996d555786230873c83bdde.tar.bz2 |
[PM] Switch the TargetMachine interface from accepting a pass manager
base which it adds a single analysis pass to, to instead return the type
erased TargetTransformInfo object constructed for that TargetMachine.
This removes all of the pass variants for TTI. There is now a single TTI
*pass* in the Analysis layer. All of the Analysis <-> Target
communication is through the TTI's type erased interface itself. While
the diff is large here, it is nothing more that code motion to make
types available in a header file for use in a different source file
within each target.
I've tried to keep all the doxygen comments and file boilerplate in line
with this move, but let me know if I missed anything.
With this in place, the next step to making TTI work with the new pass
manager is to introduce a really simple new-style analysis that produces
a TTI object via a callback into this routine on the target machine.
Once we have that, we'll have the building blocks necessary to accept
a function argument as well.
llvm-svn: 227685
Diffstat (limited to 'llvm/lib/Analysis/TargetTransformInfo.cpp')
-rw-r--r-- | llvm/lib/Analysis/TargetTransformInfo.cpp | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/llvm/lib/Analysis/TargetTransformInfo.cpp b/llvm/lib/Analysis/TargetTransformInfo.cpp index cdbce0d..a78d1db 100644 --- a/llvm/lib/Analysis/TargetTransformInfo.cpp +++ b/llvm/lib/Analysis/TargetTransformInfo.cpp @@ -21,6 +21,20 @@ using namespace llvm; #define DEBUG_TYPE "tti" +namespace { +/// \brief No-op implementation of the TTI interface using the utility base +/// classes. +/// +/// This is used when no target specific information is available. +struct NoTTIImpl : TargetTransformInfoImplCRTPBase<NoTTIImpl> { + explicit NoTTIImpl(const DataLayout *DL) + : TargetTransformInfoImplCRTPBase<NoTTIImpl>(DL) {} +}; +} + +TargetTransformInfo::TargetTransformInfo(const DataLayout *DL) + : TTIImpl(new Model<NoTTIImpl>(NoTTIImpl(DL))) {} + TargetTransformInfo::~TargetTransformInfo() {} TargetTransformInfo::TargetTransformInfo(TargetTransformInfo &&Arg) @@ -241,17 +255,6 @@ Value *TargetTransformInfo::getOrCreateResultFromMemIntrinsic( TargetTransformInfo::Concept::~Concept() {} -namespace { -/// \brief No-op implementation of the TTI interface using the utility base -/// classes. -/// -/// This is used when no target specific information is available. -struct NoTTIImpl : TargetTransformInfoImplCRTPBase<NoTTIImpl> { - explicit NoTTIImpl(const DataLayout *DL) - : TargetTransformInfoImplCRTPBase<NoTTIImpl>(DL) {} -}; -} - // Register the basic pass. INITIALIZE_PASS(TargetTransformInfoWrapperPass, "tti", "Target Transform Information", false, true) @@ -272,6 +275,7 @@ TargetTransformInfoWrapperPass::TargetTransformInfoWrapperPass( *PassRegistry::getPassRegistry()); } -ImmutablePass *llvm::createNoTargetTransformInfoPass(const DataLayout *DL) { - return new TargetTransformInfoWrapperPass(NoTTIImpl(DL)); +ImmutablePass * +llvm::createTargetTransformInfoWrapperPass(TargetTransformInfo TTI) { + return new TargetTransformInfoWrapperPass(std::move(TTI)); } |