summaryrefslogtreecommitdiffstats
path: root/llvm/include
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/include')
-rw-r--r--llvm/include/llvm/Pass.h11
1 files changed, 9 insertions, 2 deletions
diff --git a/llvm/include/llvm/Pass.h b/llvm/include/llvm/Pass.h
index 9951a988bf0..fcdc66fcbad 100644
--- a/llvm/include/llvm/Pass.h
+++ b/llvm/include/llvm/Pass.h
@@ -108,6 +108,8 @@ public:
void dump() const; // dump - call print(std::cerr, 0);
virtual void assignPassManager(PMStack &PMS) {}
+ virtual void setupPassManager(PMStack &PMS) {}
+
// Access AnalysisResolver
inline void setResolver(AnalysisResolver *AR) { Resolver = AR; }
inline AnalysisResolver *getResolver() { return Resolver; }
@@ -201,6 +203,7 @@ public:
virtual bool runPass(BasicBlock&) { return false; }
virtual void assignPassManager(PMStack &PMS);
+
// Force out-of-line virtual method.
virtual ~ModulePass();
};
@@ -267,6 +270,7 @@ public:
bool run(Function &F);
virtual void assignPassManager(PMStack &PMS);
+ virtual void setupPassManager(PMStack &PMS);
};
@@ -321,6 +325,7 @@ public:
virtual bool runPass(BasicBlock &BB);
virtual void assignPassManager(PMStack &PMS);
+ virtual void setupPassManager(PMStack &PMS);
};
/// Different types of internal pass managers. External pass managers
@@ -337,8 +342,10 @@ enum PassManagerType {
/// PMStack
/// Top level pass manager (see PasManager.cpp) maintains active Pass Managers
-/// using PMStack. Each Pass implements assignPassManager() to connect itself
-/// with appropriate manager. assignPassManager() walks PMStack to find
+/// using PMStack. Each Pass implements setupPassManager() and
+/// assignPassManager() to connect itself with appropriate manager.
+/// setupPassManager() creates new pass manager if required before adding
+/// required analysis passes. assignPassManager() walks PMStack to find
/// suitable manager.
///
/// PMStack is just a wrapper around standard deque that overrides pop() and
OpenPOWER on IntegriCloud