diff --git a/include/llvm/PassManager.h b/include/llvm/PassManager.h index 7e1d903d553..5d2aa14fbfe 100644 --- a/include/llvm/PassManager.h +++ b/include/llvm/PassManager.h @@ -88,6 +88,36 @@ public: bool doFinalization(); }; +/// PassManagerAnalysisHelper helpes pass manager analysis required by +/// the managed passes. +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 */ } + +private: + // Required set of analysis for the passes managed by this manager + std::vector RequiredSet; +}; + /// BasicBlockpassManager_New manages BasicBlockPass. It batches all the /// pass together and sequence them to process one basic block before /// processing next basic block. diff --git a/lib/VMCore/PassManager.cpp b/lib/VMCore/PassManager.cpp index c87d33305a7..766f8ce8b46 100644 --- a/lib/VMCore/PassManager.cpp +++ b/lib/VMCore/PassManager.cpp @@ -18,6 +18,46 @@ using namespace llvm; +// PassManagerAnalysisHelper implementation + +/// Return TRUE IFF pass P's required analysis set does not required new +/// manager. +bool PassManagerAnalysisHelper::manageablePass(Pass *P) { + + AnalysisUsage AnUsage; + P->getAnalysisUsage(AnUsage); + + // If this pass is not preserving information that is required by the other passes + // managed by this manager then use new manager + // TODO + return true; +} + +/// Return TRUE iff AnalysisID AID is currently available. +bool PassManagerAnalysisHelper::analysisCurrentlyAvailable(AnalysisID AID) { + + // TODO + return false; +} + +/// Augment RequiredSet by adding analysis required by pass P. +void PassManagerAnalysisHelper::noteDownRequiredAnalysis(Pass *P) { + + // TODO +} + +/// Remove AnalysisID from the RequiredSet +void PassManagerAnalysisHelper::removeAnalysis(AnalysisID AID) { + + // TODO +} + +/// Remove Analyss not preserved by Pass P +void PassManagerAnalysisHelper::removeNotPreservedAnalysis(Pass *P) { + + // TODO +} + /// BasicBlockPassManager implementation /// Add pass P into PassVector and return TRUE. If this pass is not