[llvm-commits] [llvm] r167759 - in /llvm/trunk: include/llvm/PassManagers.h lib/VMCore/PassManager.cpp

Evan Cheng evan.cheng at apple.com
Mon Nov 12 13:42:53 PST 2012


Author: evancheng
Date: Mon Nov 12 15:42:53 2012
New Revision: 167759

URL: http://llvm.org/viewvc/llvm-project?rev=167759&view=rev
Log:
Cache size of PassVector to speed up getNumContainedPasses().
getNumContainedPasses() used to compute the size of the vector on demand. It is
called repeated in loops (such as runOnFunction()) and it can be updated while
inside the loop.

Modified:
    llvm/trunk/include/llvm/PassManagers.h
    llvm/trunk/lib/VMCore/PassManager.cpp

Modified: llvm/trunk/include/llvm/PassManagers.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/PassManagers.h?rev=167759&r1=167758&r2=167759&view=diff
==============================================================================
--- llvm/trunk/include/llvm/PassManagers.h (original)
+++ llvm/trunk/include/llvm/PassManagers.h Mon Nov 12 15:42:53 2012
@@ -263,7 +263,7 @@
 class PMDataManager {
 public:
 
-  explicit PMDataManager() : TPM(NULL), Depth(0) {
+  explicit PMDataManager() : TPM(NULL), PassVectorSize(0), Depth(0) {
     initializeAnalysisInfo();
   }
 
@@ -344,7 +344,7 @@
   void dumpPreservedSet(const Pass *P) const;
 
   virtual unsigned getNumContainedPasses() const {
-    return (unsigned)PassVector.size();
+    return PassVectorSize;
   }
 
   virtual PassManagerType getPassManagerType() const {
@@ -369,14 +369,16 @@
   // Top level manager.
   PMTopLevelManager *TPM;
 
-  // Collection of pass that are managed by this manager
-  SmallVector<Pass *, 16> PassVector;
-
   // Collection of Analysis provided by Parent pass manager and
   // used by current pass manager. At at time there can not be more
   // then PMT_Last active pass mangers.
   std::map<AnalysisID, Pass *> *InheritedAnalysis[PMT_Last];
 
+  // Collection of pass that are managed by this manager
+  SmallVector<Pass *, 16> PassVector;
+
+  // Cache the size of PassVector
+  unsigned PassVectorSize;
 
   /// isPassDebuggingExecutionsOrMore - Return true if -debug-pass=Executions
   /// or higher is specified.
@@ -444,7 +446,7 @@
   }
 
   FunctionPass *getContainedPass(unsigned N) {
-    assert ( N < PassVector.size() && "Pass number out of range!");
+    assert ( N < PassVectorSize && "Pass number out of range!");
     FunctionPass *FP = static_cast<FunctionPass *>(PassVector[N]);
     return FP;
   }

Modified: llvm/trunk/lib/VMCore/PassManager.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/PassManager.cpp?rev=167759&r1=167758&r2=167759&view=diff
==============================================================================
--- llvm/trunk/lib/VMCore/PassManager.cpp (original)
+++ llvm/trunk/lib/VMCore/PassManager.cpp Mon Nov 12 15:42:53 2012
@@ -195,7 +195,7 @@
   }
 
   BasicBlockPass *getContainedPass(unsigned N) {
-    assert(N < PassVector.size() && "Pass number out of range!");
+    assert(N < PassVectorSize && "Pass number out of range!");
     BasicBlockPass *BP = static_cast<BasicBlockPass *>(PassVector[N]);
     return BP;
   }
@@ -346,7 +346,7 @@
   }
 
   ModulePass *getContainedPass(unsigned N) {
-    assert(N < PassVector.size() && "Pass number out of range!");
+    assert(N < PassVectorSize && "Pass number out of range!");
     return static_cast<ModulePass *>(PassVector[N]);
   }
 
@@ -963,6 +963,7 @@
   if (!ProcessAnalysis) {
     // Add pass
     PassVector.push_back(P);
+    ++PassVectorSize;
     return;
   }
 
@@ -1024,6 +1025,7 @@
 
   // Add pass
   PassVector.push_back(P);
+  ++PassVectorSize;
 }
 
 





More information about the llvm-commits mailing list