-};
-
-class FunctionPass;
-class ImmutablePass;
-class Function;
-
-class FunctionPassManager {
- FunctionPassManagerT *PM; // This is a straightforward Pimpl class
- ModuleProvider *MP;
-public:
- FunctionPassManager(ModuleProvider *P);
- ~FunctionPassManager();
-
- /// add - Add a pass to the queue of passes to run. This passes
- /// ownership of the FunctionPass to the PassManager. When the
- /// PassManager is destroyed, the pass will be destroyed as well, so
- /// there is no need to delete the pass. This implies that all
- /// passes MUST be allocated with 'new'.
- ///
- void add(FunctionPass *P);
-
- /// add - ImmutablePasses are not FunctionPasses, so we have a
- /// special hack to get them into a FunctionPassManager.
- ///
- void add(ImmutablePass *IP);
-
- /// doInitialization - Run all of the initializers for the function passes.
- ///
- bool doInitialization();
-
- /// run - Execute all of the passes scheduled for execution. Keep
- /// track of whether any of the passes modifies the function, and if
- /// so, return true.
- ///
- bool run(Function &F);
-
- /// doFinalization - Run all of the initializers for the function passes.
- ///
- bool doFinalization();
-};
-
-/// PassManagerAnalysisHelper helps pass manager analysis required by
-/// the managed passes. It provides methods to add/remove analysis
-/// available and query if certain analysis is available or not.
-class PassManagerAnalysisHelper {
-
-public:
-
- /// Return true IFF pass P's required analysis set does not required new
- /// manager.
- bool manageablePass(Pass *P);
-
- /// Return true IFF AnalysisID AID is currently available.
- bool analysisCurrentlyAvailable(AnalysisID AID);
-
- /// Augment RequiredSet by adding analysis required by pass P.
- void noteDownRequiredAnalysis(Pass *P);
-
- /// Remove AnalysisID from the RequiredSet
- void removeAnalysis(AnalysisID AID);
-
- /// Remove Analysis that is not preserved by the pass
- void removeNotPreservedAnalysis(Pass *P);
-
- /// Remove dead passes
- void removeDeadPasses() { /* TODO : Implement */ }