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 | 1937233a222144826216aad1eb18ccbbd2ea3ecd (patch) | |
tree | 88cbea1a630908bd23a3496665bfd19e6181f8ce /lib/Analysis/TargetTransformInfo.cpp | |
parent | 2d94613ec1af7711c9f63d434dbb02ef1bb86cc0 (diff) |
[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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227685 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/TargetTransformInfo.cpp')
-rw-r--r-- | lib/Analysis/TargetTransformInfo.cpp | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/lib/Analysis/TargetTransformInfo.cpp b/lib/Analysis/TargetTransformInfo.cpp index cdbce0d78c1..a78d1db396a 100644 --- a/lib/Analysis/TargetTransformInfo.cpp +++ b/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)); } |