- virtual bool doFinalization(Function &F) { return false; }
-
- /// doFinalization - Virtual method overriden by subclasses to do any post
- /// processing needed after all passes have run.
- ///
- virtual bool doFinalization(Module &M) { return false; }
-
-
- // To run this pass on a function, we simply call runOnBasicBlock once for
- // each function.
- //
- bool runOnFunction(Function &F);
-
- /// To run directly on the basic block, we initialize, runOnBasicBlock, then
- /// finalize.
- ///
- virtual bool runPass(Module &M) { return false; }
- virtual bool runPass(BasicBlock &BB);
-
- virtual void assignPassManager(PMStack &PMS);
- virtual void setupPassManager(PMStack &PMS);
-};
-
-/// Different types of internal pass managers. External pass managers
-/// (PassManager and FunctionPassManager) are not represented here.
-/// Ordering of pass manager types is important here.
-enum PassManagerType {
- PMT_Unknown = 0,
- PMT_ModulePassManager = 1, /// MPPassManager
- PMT_CallGraphPassManager, /// CGPassManager
- PMT_FunctionPassManager, /// FPPassManager
- PMT_LoopPassManager, /// LPPassManager
- PMT_BasicBlockPassManager /// BBPassManager
-};
-
-/// PMStack
-/// Top level pass manager (see PasManager.cpp) maintains active Pass Managers
-/// 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
-/// push() methods.
-class PMStack {
-public:
- typedef std::deque<PMDataManager *>::reverse_iterator iterator;
- iterator begin() { return S.rbegin(); }
- iterator end() { return S.rend(); }