diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2013-11-17 03:18:05 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2013-11-17 03:18:05 +0000 |
commit | 8417e857818e972f318bd549caabc54bdf537c26 (patch) | |
tree | d80b10d6ea0fd7a72abc2ba1eb6444ce78f2bb01 | |
parent | ca1b7799aaeeeb0c6af80fa31fb8f74e79ab2967 (diff) | |
download | external_llvm-8417e857818e972f318bd549caabc54bdf537c26.zip external_llvm-8417e857818e972f318bd549caabc54bdf537c26.tar.gz external_llvm-8417e857818e972f318bd549caabc54bdf537c26.tar.bz2 |
[PM] Completely remove support for explicit 'require' methods on the
AnalysisManager. All this method did was assert something and we have
a perfectly good way to trigger that assert from the query path.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194947 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/IR/PassManager.h | 37 | ||||
-rw-r--r-- | unittests/IR/PassManagerTest.cpp | 1 |
2 files changed, 6 insertions, 32 deletions
diff --git a/include/llvm/IR/PassManager.h b/include/llvm/IR/PassManager.h index 08aac77..833547a 100644 --- a/include/llvm/IR/PassManager.h +++ b/include/llvm/IR/PassManager.h @@ -151,6 +151,9 @@ public: /// constructed around. template <typename PassT> const typename PassT::Result &getResult(Module *M) { + assert(ModuleAnalysisPasses.count(PassT::ID()) && + "This analysis pass was not registered prior to being queried"); + const AnalysisResultConcept<Module> &ResultConcept = getResultImpl(PassT::ID(), M); typedef AnalysisResultModel<Module, typename PassT::Result> ResultModelT; @@ -163,6 +166,9 @@ public: /// re-run the analysis to produce a valid result. template <typename PassT> const typename PassT::Result &getResult(Function *F) { + assert(FunctionAnalysisPasses.count(PassT::ID()) && + "This analysis pass was not registered prior to being queried"); + const AnalysisResultConcept<Function> &ResultConcept = getResultImpl(PassT::ID(), F); typedef AnalysisResultModel<Function, typename PassT::Result> ResultModelT; @@ -180,21 +186,6 @@ public: registerAnalysisPassImpl<PassT>(llvm_move(Pass)); } - /// \brief Require that a particular analysis pass is provided by the manager. - /// - /// This allows transform passes to assert ther requirements during - /// construction and fail fast if the analysis manager doesn't provide the - /// needed facilities. - /// - /// We force the analysis manager to have these passes explicitly registered - /// first to ensure that there is exactly one place in the code responsible - /// for adding an analysis pass to the manager as all transforms will share - /// a single pass within the manager and each may not be the canonical place - /// to initialize such a pass. - template <typename PassT> void requireAnalysisPass() { - requireAnalysisPassImpl<PassT>(); - } - /// \brief Invalidate a specific analysis pass for an IR module. /// /// Note that the analysis result can disregard invalidation. @@ -334,22 +325,6 @@ private: new AnalysisPassModel<PassT>(llvm_move(Pass)); } - /// \brief Module pass specific implementation of requirement declaration. - template <typename PassT> - typename enable_if<is_same<typename PassT::IRUnitT, Module> >::type - requireAnalysisPassImpl() { - assert(ModuleAnalysisPasses.count(PassT::ID()) && - "This analysis pass was not registered prior to being required"); - } - - /// \brief Function pass specific implementation of requirement declaration. - template <typename PassT> - typename enable_if<is_same<typename PassT::IRUnitT, Function> >::type - requireAnalysisPassImpl() { - assert(FunctionAnalysisPasses.count(PassT::ID()) && - "This analysis pass was not registered prior to being required"); - } - /// \brief Map type from module analysis pass ID to pass concept pointer. typedef DenseMap<void *, polymorphic_ptr<AnalysisPassConcept<Module> > > diff --git a/unittests/IR/PassManagerTest.cpp b/unittests/IR/PassManagerTest.cpp index 8eec0ec..7b60e38 100644 --- a/unittests/IR/PassManagerTest.cpp +++ b/unittests/IR/PassManagerTest.cpp @@ -63,7 +63,6 @@ struct TestModulePass { struct TestFunctionPass { TestFunctionPass(AnalysisManager &AM, int &RunCount, int &AnalyzedInstrCount) : AM(AM), RunCount(RunCount), AnalyzedInstrCount(AnalyzedInstrCount) { - AM.requireAnalysisPass<TestAnalysisPass>(); } bool run(Function *F) { |