From 964e45e60769ccdb4ee0230a179f84f37f6c371a Mon Sep 17 00:00:00 2001 From: Devang Patel Date: Fri, 8 Dec 2006 00:59:05 +0000 Subject: [PATCH] doInitialization and doFinalization for BasicBlockPassManager_New git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32345 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/VMCore/PassManager.cpp | 63 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 3 deletions(-) diff --git a/lib/VMCore/PassManager.cpp b/lib/VMCore/PassManager.cpp index 8cf4a159642..1bc78720060 100644 --- a/lib/VMCore/PassManager.cpp +++ b/lib/VMCore/PassManager.cpp @@ -199,7 +199,6 @@ void PMTopLevelManager::schedulePass(Pass *P, Pass *PM) { addTopLevelPass(P); } - //===----------------------------------------------------------------------===// // PMDataManager @@ -327,7 +326,11 @@ public: Info.setPreservesAll(); } -private: + bool doInitialization(Module &M); + bool doInitialization(Function &F); + bool doFinalization(Module &M); + bool doFinalization(Function &F); + }; /// FunctionPassManagerImpl_New manages FunctionPasses and BasicBlockPassManagers. @@ -533,7 +536,7 @@ void PMDataManager::removeDeadPasses(Pass *P) { std::map::iterator Pos = AvailableAnalysis.find((*I)->getPassInfo()); - // It is possible that deadPass is already removed from the AvailableAnalysis + // It is possible that pass is already removed from the AvailableAnalysis if (Pos != AvailableAnalysis.end()) AvailableAnalysis.erase(Pos); } @@ -669,6 +672,60 @@ Pass * BasicBlockPassManager_New::getAnalysisPassFromManager(AnalysisID AID) { return getAnalysisPass(AID); } +// Implement doInitialization and doFinalization +inline bool BasicBlockPassManager_New::doInitialization(Module &M) { + bool Changed = false; + + for (std::vector::iterator itr = passVectorBegin(), + e = passVectorEnd(); itr != e; ++itr) { + Pass *P = *itr; + BasicBlockPass *BP = dynamic_cast(P); + Changed |= BP->doInitialization(M); + } + + return Changed; +} + +inline bool BasicBlockPassManager_New::doFinalization(Module &M) { + bool Changed = false; + + for (std::vector::iterator itr = passVectorBegin(), + e = passVectorEnd(); itr != e; ++itr) { + Pass *P = *itr; + BasicBlockPass *BP = dynamic_cast(P); + Changed |= BP->doFinalization(M); + } + + return Changed; +} + +inline bool BasicBlockPassManager_New::doInitialization(Function &F) { + bool Changed = false; + + for (std::vector::iterator itr = passVectorBegin(), + e = passVectorEnd(); itr != e; ++itr) { + Pass *P = *itr; + BasicBlockPass *BP = dynamic_cast(P); + Changed |= BP->doInitialization(F); + } + + return Changed; +} + +inline bool BasicBlockPassManager_New::doFinalization(Function &F) { + bool Changed = false; + + for (std::vector::iterator itr = passVectorBegin(), + e = passVectorEnd(); itr != e; ++itr) { + Pass *P = *itr; + BasicBlockPass *BP = dynamic_cast(P); + Changed |= BP->doFinalization(F); + } + + return Changed; +} + + //===----------------------------------------------------------------------===// // FunctionPassManager_New implementation