summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2013-11-17 03:18:05 +0000
committerChandler Carruth <chandlerc@gmail.com>2013-11-17 03:18:05 +0000
commita8df47603af85c422a59a8b373ad7d76ab1691f1 (patch)
tree64b54d89554e1c14a795b89e7968c1ade370ee31
parent7101fd0e562a21ccb5223ed62b9bc406c2c27517 (diff)
downloadbcm5719-llvm-a8df47603af85c422a59a8b373ad7d76ab1691f1.tar.gz
bcm5719-llvm-a8df47603af85c422a59a8b373ad7d76ab1691f1.zip
[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. llvm-svn: 194947
-rw-r--r--llvm/include/llvm/IR/PassManager.h37
-rw-r--r--llvm/unittests/IR/PassManagerTest.cpp1
2 files changed, 6 insertions, 32 deletions
diff --git a/llvm/include/llvm/IR/PassManager.h b/llvm/include/llvm/IR/PassManager.h
index 08aac77f68a..833547a23ac 100644
--- a/llvm/include/llvm/IR/PassManager.h
+++ b/llvm/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/llvm/unittests/IR/PassManagerTest.cpp b/llvm/unittests/IR/PassManagerTest.cpp
index 8eec0eca7bc..7b60e3899a0 100644
--- a/llvm/unittests/IR/PassManagerTest.cpp
+++ b/llvm/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) {
OpenPOWER on IntegriCloud