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

Owen Anderson resistor at mac.com
Tue Jul 20 09:55:05 PDT 2010


Author: resistor
Date: Tue Jul 20 11:55:05 2010
New Revision: 108856

URL: http://llvm.org/viewvc/llvm-project?rev=108856&view=rev
Log:
Pull out r108755.  After offline discussion with Chris, we're going to go a different direction with this.

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

Modified: llvm/trunk/include/llvm/PassSupport.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/PassSupport.h?rev=108856&r1=108855&r2=108856&view=diff
==============================================================================
--- llvm/trunk/include/llvm/PassSupport.h (original)
+++ llvm/trunk/include/llvm/PassSupport.h Tue Jul 20 11:55:05 2010
@@ -36,10 +36,6 @@
 class PassInfo {
 public:
   typedef Pass* (*NormalCtor_t)();
-  struct InterfaceInfo {
-    const PassInfo *interface;
-    const InterfaceInfo *next;
-  };
 
 private:
   const char      *const PassName;     // Nice name for Pass
@@ -48,7 +44,7 @@
   const bool IsCFGOnlyPass;            // Pass only looks at the CFG.
   const bool IsAnalysis;               // True if an analysis pass.
   const bool IsAnalysisGroup;          // True if an analysis group.
-  const InterfaceInfo *ItfImpl;// Interfaces implemented by this pass
+  std::vector<const PassInfo*> ItfImpl;// Interfaces implemented by this pass
 
   NormalCtor_t NormalCtor;
 
@@ -120,16 +116,13 @@
   /// template.
   ///
   void addInterfaceImplemented(const PassInfo *ItfPI) {
-    InterfaceInfo *NewInfo = new InterfaceInfo();
-    NewInfo->interface = ItfPI;
-    NewInfo->next = ItfImpl;
-    ItfImpl = NewInfo;
+    ItfImpl.push_back(ItfPI);
   }
 
   /// getInterfacesImplemented - Return a list of all of the analysis group
   /// interfaces implemented by this pass.
   ///
-  const InterfaceInfo *getInterfacesImplemented() const {
+  const std::vector<const PassInfo*> &getInterfacesImplemented() const {
     return ItfImpl;
   }
 

Modified: llvm/trunk/lib/VMCore/PassManager.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/PassManager.cpp?rev=108856&r1=108855&r2=108856&view=diff
==============================================================================
--- llvm/trunk/lib/VMCore/PassManager.cpp (original)
+++ llvm/trunk/lib/VMCore/PassManager.cpp Tue Jul 20 11:55:05 2010
@@ -638,14 +638,10 @@
 
     // If Pass not found then check the interfaces implemented by Immutable Pass
     if (!P) {
-      const PassInfo::InterfaceInfo *ImmPI = PI->getInterfacesImplemented();
-      while (ImmPI) {
-        if (ImmPI->interface == AID) {
-          P = *I;
-          break;
-        } else
-          ImmPI = ImmPI->next;
-      }
+      const std::vector<const PassInfo*> &ImmPI =
+        PI->getInterfacesImplemented();
+      if (std::find(ImmPI.begin(), ImmPI.end(), AID) != ImmPI.end())
+        P = *I;
     }
   }
 
@@ -735,11 +731,9 @@
 
   //This pass is the current implementation of all of the interfaces it
   //implements as well.
-  const PassInfo::InterfaceInfo *II = PI->getInterfacesImplemented();
-  while (II) {
-    AvailableAnalysis[II->interface] = P;
-    II = II->next;
-  }
+  const std::vector<const PassInfo*> &II = PI->getInterfacesImplemented();
+  for (unsigned i = 0, e = II.size(); i != e; ++i)
+    AvailableAnalysis[II[i]] = P;
 }
 
 // Return true if P preserves high level analysis used by other
@@ -873,13 +867,12 @@
 
     // Remove all interfaces this pass implements, for which it is also
     // listed as the available implementation.
-    const PassInfo::InterfaceInfo *II = PI->getInterfacesImplemented();
-    while (II) {
+    const std::vector<const PassInfo*> &II = PI->getInterfacesImplemented();
+    for (unsigned i = 0, e = II.size(); i != e; ++i) {
       std::map<AnalysisID, Pass*>::iterator Pos =
-        AvailableAnalysis.find(II->interface);
+        AvailableAnalysis.find(II[i]);
       if (Pos != AvailableAnalysis.end() && Pos->second == P)
         AvailableAnalysis.erase(Pos);
-      II = II->next;
     }
   }
 }





More information about the llvm-commits mailing list