Add doInitialization and doFinalization support in FunctionManager_New.
authorDevang Patel <dpatel@apple.com>
Wed, 15 Nov 2006 01:27:05 +0000 (01:27 +0000)
committerDevang Patel <dpatel@apple.com>
Wed, 15 Nov 2006 01:27:05 +0000 (01:27 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31745 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/PassManager.cpp

index 6ce61c3562376acca26f5cb3b525d4eb26d0dd6f..379162be36d871d8716601a8bfcbcf503dca799c 100644 (file)
@@ -14,6 +14,7 @@
 
 #include "llvm/PassManager.h"
 #include "llvm/Module.h"
+#include "llvm/ModuleProvider.h"
 #include <vector>
 #include <map>
 
@@ -174,6 +175,13 @@ public:
   /// Return true IFF AnalysisID AID is currently available.
   Pass *getAnalysisPassFromManager(AnalysisID AID);
 
+  /// doInitialization - Run all of the initializers for the function passes.
+  ///
+  bool doInitialization(Module &M);
+  
+  /// doFinalization - Run all of the initializers for the function passes.
+  ///
+  bool doFinalization(Module &M);
 private:
   // Active Pass Managers
   BasicBlockPassManager_New *activeBBPassManager;
@@ -355,8 +363,8 @@ void CommonPassManagerImpl::addPassToManager (Pass *P,
 // implementations it needs.
 //
 void CommonPassManagerImpl::initializeAnalysisImpl(Pass *P) {
-    AnalysisUsage AnUsage;
-    P->getAnalysisUsage(AnUsage);
+  AnalysisUsage AnUsage;
+  P->getAnalysisUsage(AnUsage);
  
   for (std::vector<const PassInfo *>::const_iterator
          I = AnUsage.getRequiredSet().begin(),
@@ -441,6 +449,18 @@ FunctionPassManager_New::runOnModule(Module &M) {
   return FPM->runOnModule(M);
 }
 
+/// doInitialization - Run all of the initializers for the function passes.
+///
+bool FunctionPassManager_New::doInitialization() {
+  return FPM->doInitialization(*MP->getModule());
+}
+
+/// doFinalization - Run all of the initializers for the function passes.
+///
+bool FunctionPassManager_New::doFinalization() {
+  return FPM->doFinalization(*MP->getModule());
+}
+
 // FunctionPassManagerImpl_New implementation
 
 // FunctionPassManager
@@ -517,6 +537,36 @@ Pass *FunctionPassManagerImpl_New::getAnalysisPassFromManager(AnalysisID AID) {
   return NULL;
 }
 
+inline bool FunctionPassManagerImpl_New::doInitialization(Module &M) {
+  bool Changed = false;
+
+  for (std::vector<Pass *>::iterator itr = passVectorBegin(),
+         e = passVectorEnd(); itr != e; ++itr) {
+    Pass *P = *itr;
+    
+    FunctionPass *FP = dynamic_cast<FunctionPass*>(P);
+    Changed |= FP->doInitialization(M);
+  }
+
+  return Changed;
+}
+
+inline bool FunctionPassManagerImpl_New::doFinalization(Module &M) {
+  bool Changed = false;
+
+  for (std::vector<Pass *>::iterator itr = passVectorBegin(),
+         e = passVectorEnd(); itr != e; ++itr) {
+    Pass *P = *itr;
+    
+    FunctionPass *FP = dynamic_cast<FunctionPass*>(P);
+    Changed |= FP->doFinalization(M);
+  }
+
+
+  return Changed;
+}
+
+
 // ModulePassManager implementation
 
 /// Add P into pass vector if it is manageble. If P is a FunctionPass