[llvm-commits] CVS: llvm/lib/VMCore/PassManagerT.h

Chris Lattner lattner at cs.uiuc.edu
Thu Jan 12 08:48:35 PST 2006



Changes in directory llvm/lib/VMCore:

PassManagerT.h updated: 1.66 -> 1.67
---
Log message:

Patch #10 from Saem:
"Extracts a few more methods, reduces some redundancy in the code at
the same time."


---
Diffs of the changes:  (+32 -52)

 PassManagerT.h |   84 +++++++++++++++++++++------------------------------------
 1 files changed, 32 insertions(+), 52 deletions(-)


Index: llvm/lib/VMCore/PassManagerT.h
diff -u llvm/lib/VMCore/PassManagerT.h:1.66 llvm/lib/VMCore/PassManagerT.h:1.67
--- llvm/lib/VMCore/PassManagerT.h:1.66	Wed Jan 11 10:14:49 2006
+++ llvm/lib/VMCore/PassManagerT.h	Thu Jan 12 10:48:23 2006
@@ -472,33 +472,10 @@
            E = RequiredSet.end(); I != E; ++I)
       markPassUsed(*I, P);     // Mark *I as used by P
 
-    // Erase all analyses not in the preserved set...
-    if (!AnUsage.getPreservesAll()) {
-      const std::vector<AnalysisID> &PreservedSet = AnUsage.getPreservedSet();
-      for (std::map<AnalysisID, Pass*>::iterator I = CurrentAnalyses.begin(),
-             E = CurrentAnalyses.end(); I != E; ) {
-        if (std::find(PreservedSet.begin(), PreservedSet.end(), I->first) ==
-            PreservedSet.end()) {             // Analysis not preserved!
-          CurrentAnalyses.erase(I);           // Remove from available analyses
-          I = CurrentAnalyses.begin();
-        } else {
-          ++I;
-        }
-      }
-    }
-
-    // Add this pass to the currently available set...
-    if (const PassInfo *PI = P->getPassInfo()) {
-      CurrentAnalyses[PI] = P;
-
-      // This pass is the current implementation of all of the interfaces it
-      // implements as well.
-      //
-      const std::vector<const PassInfo*> &II = PI->getInterfacesImplemented();
-      for (unsigned i = 0, e = II.size(); i != e; ++i)
-        CurrentAnalyses[II[i]] = P;
-    }
-
+    removeNonPreservedAnalyses(AnUsage);
+    
+    makeCurrentlyAvailable(P);
+    
     // For now assume that our results are never used...
     LastUseOf[P] = P;
   }
@@ -632,30 +609,10 @@
       // Erase all analyses not in the preserved set
       removeNonPreservedAnalyses(AnUsage);
       
-      // Add the current pass to the set of passes that have been run, and are
-      // thus available to users.
-      //
-      if (const PassInfo *PI = P->getPassInfo()) {
-        CurrentAnalyses[PI] = P;
-
-        // This pass is the current implementation of all of the interfaces it
-        // implements as well.
-        //
-        const std::vector<const PassInfo*> &II = PI->getInterfacesImplemented();
-        for (unsigned i = 0, e = II.size(); i != e; ++i)
-          CurrentAnalyses[II[i]] = P;
-      }
-
-      // Free memory for any passes that we are the last use of...
-      std::vector<Pass*> &DeadPass = LastUserOf[P];
-      for (std::vector<Pass*>::iterator I = DeadPass.begin(),E = DeadPass.end();
-           I != E; ++I) {
-        PMDebug::PrintPassInformation(getDepth()+1, "Freeing Pass", *I, M);
-        (*I)->releaseMemory();
-      }
+      makeCurrentlyAvailable(P);
       
-      // remove dead passes from the CurrentAnalyses list...
-      removeDeadPasses(DeadPass);
+      // free memory and remove dead passes from the CurrentAnalyses list...
+      removeDeadPasses(P, M, LastUserOf);
     }
     
     return MadeChanges;
@@ -707,7 +664,15 @@
     }
   }
   
-  inline void removeDeadPasses(std::vector<Pass*> &DeadPass) { 
+  inline void removeDeadPasses(Pass* P, UnitType *M, 
+              std::map<Pass *, std::vector<Pass*> > &LastUserOf) { 
+    std::vector<Pass*> &DeadPass = LastUserOf[P];
+    for (std::vector<Pass*>::iterator I = DeadPass.begin(),E = DeadPass.end();
+          I != E; ++I) {
+      PMDebug::PrintPassInformation(getDepth()+1, "Freeing Pass", *I, M);
+      (*I)->releaseMemory();
+    }
+    
     for (std::map<AnalysisID, Pass*>::iterator I = CurrentAnalyses.begin();
           I != CurrentAnalyses.end(); ) {
       std::vector<Pass*>::iterator DPI = std::find(DeadPass.begin(),
@@ -720,8 +685,23 @@
       }
     }
   }
+  
+  inline void makeCurrentlyAvailable(Pass* P) { 
+    if (const PassInfo *PI = P->getPassInfo()) {
+      CurrentAnalyses[PI] = P;
+
+      // This pass is the current implementation of all of the interfaces it
+      // implements as well.
+      //
+      const std::vector<const PassInfo*> &II = PI->getInterfacesImplemented();
+      for (unsigned i = 0, e = II.size(); i != e; ++i)
+        CurrentAnalyses[II[i]] = P;
+    }
+  }
 };
 
+
+
 //===----------------------------------------------------------------------===//
 // BasicBlockPassManager
 //
@@ -859,7 +839,7 @@
 };
 
 //===----------------------------------------------------------------------===//
-// PassManagerTraits Method Implementations
+// PassManager Method Implementations
 //
 
 // BasicBlockPassManager Implementations






More information about the llvm-commits mailing list