doInitialization and doFinalization for BasicBlockPassManager_New
authorDevang Patel <dpatel@apple.com>
Fri, 8 Dec 2006 00:59:05 +0000 (00:59 +0000)
committerDevang Patel <dpatel@apple.com>
Fri, 8 Dec 2006 00:59:05 +0000 (00:59 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32345 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/PassManager.cpp

index 8cf4a159642ee1561e47dcf2aff599a0751e1b17..1bc78720060c333a02807733b4942b32673d699c 100644 (file)
@@ -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<AnalysisID, Pass*>::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<Pass *>::iterator itr = passVectorBegin(),
+         e = passVectorEnd(); itr != e; ++itr) {
+    Pass *P = *itr;
+    BasicBlockPass *BP = dynamic_cast<BasicBlockPass*>(P);    
+    Changed |= BP->doInitialization(M);
+  }
+
+  return Changed;
+}
+
+inline bool BasicBlockPassManager_New::doFinalization(Module &M) {
+  bool Changed = false;
+
+  for (std::vector<Pass *>::iterator itr = passVectorBegin(),
+         e = passVectorEnd(); itr != e; ++itr) {
+    Pass *P = *itr;
+    BasicBlockPass *BP = dynamic_cast<BasicBlockPass*>(P);    
+    Changed |= BP->doFinalization(M);
+  }
+
+  return Changed;
+}
+
+inline bool BasicBlockPassManager_New::doInitialization(Function &F) {
+  bool Changed = false;
+
+  for (std::vector<Pass *>::iterator itr = passVectorBegin(),
+         e = passVectorEnd(); itr != e; ++itr) {
+    Pass *P = *itr;
+    BasicBlockPass *BP = dynamic_cast<BasicBlockPass*>(P);    
+    Changed |= BP->doInitialization(F);
+  }
+
+  return Changed;
+}
+
+inline bool BasicBlockPassManager_New::doFinalization(Function &F) {
+  bool Changed = false;
+
+  for (std::vector<Pass *>::iterator itr = passVectorBegin(),
+         e = passVectorEnd(); itr != e; ++itr) {
+    Pass *P = *itr;
+    BasicBlockPass *BP = dynamic_cast<BasicBlockPass*>(P);    
+    Changed |= BP->doFinalization(F);
+  }
+
+  return Changed;
+}
+
+
 //===----------------------------------------------------------------------===//
 // FunctionPassManager_New implementation