Code refactoring.
authorDevang Patel <dpatel@apple.com>
Tue, 16 Jan 2007 02:00:38 +0000 (02:00 +0000)
committerDevang Patel <dpatel@apple.com>
Tue, 16 Jan 2007 02:00:38 +0000 (02:00 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33245 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/PassManagers.h
lib/VMCore/PassManager.cpp

index 170b992c85f03fd6e0f2b3f06a363e3c16874fe0..c4b3eed7f8a02d574a48a999e6d46a6c83fa3dc2 100644 (file)
@@ -86,6 +86,13 @@ class llvm::PMStack;
 
 namespace llvm {
 
+/// FunctionPassManager and PassManager, two top level managers, serve 
+/// as the public interface of pass manager infrastructure.
+enum TopLevelManagerType {
+  TLM_Function,  // FunctionPassManager
+  TLM_Pass       // PassManager
+};
+    
 //===----------------------------------------------------------------------===//
 // PMTopLevelManager
 //
@@ -118,6 +125,7 @@ public:
   /// then return NULL.
   Pass *findAnalysisPass(AnalysisID AID);
 
+  PMTopLevelManager(enum TopLevelManagerType t);
   virtual ~PMTopLevelManager(); 
 
   /// Add immutable pass and initialize it.
index db03842bcea09967133e39f729c401b30db97d2d..1e3b48ee686d1f5c93cba8468521d12f98ba37ed 100644 (file)
@@ -112,7 +112,8 @@ class FunctionPassManagerImpl : public Pass,
                                 public PMTopLevelManager {
 public:
 
-  FunctionPassManagerImpl(int Depth) : PMDataManager(Depth) { }
+  FunctionPassManagerImpl(int Depth) : PMDataManager(Depth),
+                                       PMTopLevelManager(TLM_Function) { }
 
   /// add - Add a pass to the queue of passes to run.  This passes ownership of
   /// the Pass to the PassManager.  When the PassManager is destroyed, the pass
@@ -151,13 +152,6 @@ public:
       addImmutablePass(IP);
       recordAvailableAnalysis(IP);
     } else {
-      // Assign manager
-      if (activeStack.empty()) {
-        FPPassManager *FPP = new FPPassManager(getDepth() + 1);
-        FPP->setTopLevelManager(this->getTopLevelManager());
-        addPassManager(FPP);
-        activeStack.push(FPP);
-      }
       P->assignPassManager(activeStack);
     }
 
@@ -220,7 +214,8 @@ class PassManagerImpl : public Pass,
 
 public:
 
-  PassManagerImpl(int Depth) : PMDataManager(Depth) { }
+  PassManagerImpl(int Depth) : PMDataManager(Depth),
+                               PMTopLevelManager(TLM_Pass) { }
 
   /// add - Add a pass to the queue of passes to run.  This passes ownership of
   /// the Pass to the PassManager.  When the PassManager is destroyed, the pass
@@ -251,15 +246,6 @@ public:
       addImmutablePass(IP);
       recordAvailableAnalysis(IP);
     } else {
-
-      // Assign manager
-      if (activeStack.empty()) {
-        MPPassManager *MPP = new MPPassManager(getDepth() + 1);
-        MPP->setTopLevelManager(this->getTopLevelManager());
-        addPassManager(MPP);
-        activeStack.push(MPP);
-      }
-      
       P->assignPassManager(activeStack);
     }
 
@@ -331,6 +317,23 @@ static TimingInfo *TheTimeInfo;
 //===----------------------------------------------------------------------===//
 // PMTopLevelManager implementation
 
+/// Initialize top level manager. Create first pass manager.
+PMTopLevelManager::PMTopLevelManager (enum TopLevelManagerType t) {
+
+  if (t == TLM_Pass) {
+    MPPassManager *MPP = new MPPassManager(1);
+    MPP->setTopLevelManager(this);
+    addPassManager(MPP);
+    activeStack.push(MPP);
+  } 
+  else if (t == TLM_Function) {
+    FPPassManager *FPP = new FPPassManager(1);
+    FPP->setTopLevelManager(this);
+    addPassManager(FPP);
+    activeStack.push(FPP);
+  } 
+}
+
 /// Set pass P as the last user of the given analysis passes.
 void PMTopLevelManager::setLastUser(std::vector<Pass *> &AnalysisPasses, 
                                     Pass *P) {