[llvm-commits] [llvm] r94160 - in /llvm/trunk: include/llvm/Analysis/LoopPass.h include/llvm/CallGraphSCCPass.h include/llvm/Pass.h lib/VMCore/PassManager.cpp tools/opt/opt.cpp

Chris Lattner sabre at nondot.org
Thu Jan 21 22:03:06 PST 2010


Author: lattner
Date: Fri Jan 22 00:03:06 2010
New Revision: 94160

URL: http://llvm.org/viewvc/llvm-project?rev=94160&view=rev
Log:
elimiante the dynamic_cast's from opt.

Modified:
    llvm/trunk/include/llvm/Analysis/LoopPass.h
    llvm/trunk/include/llvm/CallGraphSCCPass.h
    llvm/trunk/include/llvm/Pass.h
    llvm/trunk/lib/VMCore/PassManager.cpp
    llvm/trunk/tools/opt/opt.cpp

Modified: llvm/trunk/include/llvm/Analysis/LoopPass.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/LoopPass.h?rev=94160&r1=94159&r2=94160&view=diff

==============================================================================
--- llvm/trunk/include/llvm/Analysis/LoopPass.h (original)
+++ llvm/trunk/include/llvm/Analysis/LoopPass.h Fri Jan 22 00:03:06 2010
@@ -28,8 +28,8 @@
 
 class LoopPass : public Pass {
 public:
-  explicit LoopPass(intptr_t pid) : Pass(pid) {}
-  explicit LoopPass(void *pid) : Pass(pid) {}
+  explicit LoopPass(intptr_t pid) : Pass(PT_Loop, pid) {}
+  explicit LoopPass(void *pid) : Pass(PT_Loop, pid) {}
 
   // runOnLoop - This method should be implemented by the subclass to perform
   // whatever action is necessary for the specified Loop.

Modified: llvm/trunk/include/llvm/CallGraphSCCPass.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CallGraphSCCPass.h?rev=94160&r1=94159&r2=94160&view=diff

==============================================================================
--- llvm/trunk/include/llvm/CallGraphSCCPass.h (original)
+++ llvm/trunk/include/llvm/CallGraphSCCPass.h Fri Jan 22 00:03:06 2010
@@ -32,8 +32,8 @@
 
 struct CallGraphSCCPass : public Pass {
 
-  explicit CallGraphSCCPass(intptr_t pid) : Pass(pid) {}
-  explicit CallGraphSCCPass(void *pid) : Pass(pid) {}
+  explicit CallGraphSCCPass(intptr_t pid) : Pass(PT_CallGraphSCC, pid) {}
+  explicit CallGraphSCCPass(void *pid) : Pass(PT_CallGraphSCC, pid) {}
 
   /// doInitialization - This method is called before the SCC's of the program
   /// has been processed, allowing the pass to do initialization as necessary.

Modified: llvm/trunk/include/llvm/Pass.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Pass.h?rev=94160&r1=94159&r2=94160&view=diff

==============================================================================
--- llvm/trunk/include/llvm/Pass.h (original)
+++ llvm/trunk/include/llvm/Pass.h Fri Jan 22 00:03:06 2010
@@ -64,6 +64,16 @@
   PMT_Last
 };
 
+// Different types of passes.
+enum PassKind {
+  PT_BasicBlock,
+  PT_Loop,
+  PT_Function,
+  PT_CallGraphSCC,
+  PT_Module,
+  PT_PassManager
+};
+  
 //===----------------------------------------------------------------------===//
 /// Pass interface - Implemented by all 'passes'.  Subclass this if you are an
 /// interprocedural optimization or you do not fit into any of the more
@@ -72,19 +82,23 @@
 class Pass {
   AnalysisResolver *Resolver;  // Used to resolve analysis
   intptr_t PassID;
-
+  PassKind Kind;
   void operator=(const Pass&);  // DO NOT IMPLEMENT
   Pass(const Pass &);           // DO NOT IMPLEMENT
   
 public:
-  explicit Pass(intptr_t pid) : Resolver(0), PassID(pid) {
+  explicit Pass(PassKind K, intptr_t pid) : Resolver(0), PassID(pid), Kind(K) {
     assert(pid && "pid cannot be 0");
   }
-  explicit Pass(const void *pid) : Resolver(0), PassID((intptr_t)pid) {
+  explicit Pass(PassKind K, const void *pid)
+    : Resolver(0), PassID((intptr_t)pid), Kind(K) {
     assert(pid && "pid cannot be 0"); 
   }
   virtual ~Pass();
 
+  
+  PassKind getPassKind() const { return Kind; }
+  
   /// getPassName - Return a nice clean name for a pass.  This usually
   /// implemented in terms of the name that is registered by one of the
   /// Registration templates, but can be overloaded directly.
@@ -118,7 +132,7 @@
 
   // Access AnalysisResolver
   inline void setResolver(AnalysisResolver *AR) { 
-    assert (!Resolver && "Resolver is already set");
+    assert(!Resolver && "Resolver is already set");
     Resolver = AR; 
   }
   inline AnalysisResolver *getResolver() { 
@@ -229,8 +243,8 @@
   ///  Return what kind of Pass Manager can manage this pass.
   virtual PassManagerType getPotentialPassManagerType() const;
 
-  explicit ModulePass(intptr_t pid) : Pass(pid) {}
-  explicit ModulePass(const void *pid) : Pass(pid) {}
+  explicit ModulePass(intptr_t pid) : Pass(PT_Module, pid) {}
+  explicit ModulePass(const void *pid) : Pass(PT_Module, pid) {}
   // Force out-of-line virtual method.
   virtual ~ModulePass();
 };
@@ -276,8 +290,8 @@
 ///
 class FunctionPass : public Pass {
 public:
-  explicit FunctionPass(intptr_t pid) : Pass(pid) {}
-  explicit FunctionPass(const void *pid) : Pass(pid) {}
+  explicit FunctionPass(intptr_t pid) : Pass(PT_Function, pid) {}
+  explicit FunctionPass(const void *pid) : Pass(PT_Function, pid) {}
 
   /// doInitialization - Virtual method overridden by subclasses to do
   /// any necessary per-module initialization.
@@ -326,8 +340,8 @@
 ///
 class BasicBlockPass : public Pass {
 public:
-  explicit BasicBlockPass(intptr_t pid) : Pass(pid) {}
-  explicit BasicBlockPass(const void *pid) : Pass(pid) {}
+  explicit BasicBlockPass(intptr_t pid) : Pass(PT_BasicBlock, pid) {}
+  explicit BasicBlockPass(const void *pid) : Pass(PT_BasicBlock, pid) {}
 
   /// doInitialization - Virtual method overridden by subclasses to do
   /// any necessary per-module initialization.

Modified: llvm/trunk/lib/VMCore/PassManager.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/PassManager.cpp?rev=94160&r1=94159&r2=94160&view=diff

==============================================================================
--- llvm/trunk/lib/VMCore/PassManager.cpp (original)
+++ llvm/trunk/lib/VMCore/PassManager.cpp Fri Jan 22 00:03:06 2010
@@ -172,7 +172,7 @@
 public:
   static char ID;
   explicit FunctionPassManagerImpl(int Depth) : 
-    Pass(&ID), PMDataManager(Depth), 
+    Pass(PT_PassManager, &ID), PMDataManager(Depth), 
     PMTopLevelManager(TLM_Function), wasRun(false) { }
 
   /// add - Add a pass to the queue of passes to run.  This passes ownership of
@@ -241,7 +241,7 @@
 public:
   static char ID;
   explicit MPPassManager(int Depth) :
-    Pass(&ID), PMDataManager(Depth) { }
+    Pass(PT_PassManager, &ID), PMDataManager(Depth) { }
 
   // Delete on the fly managers.
   virtual ~MPPassManager() {
@@ -321,7 +321,8 @@
 public:
   static char ID;
   explicit PassManagerImpl(int Depth) :
-    Pass(&ID), PMDataManager(Depth), PMTopLevelManager(TLM_Pass) { }
+    Pass(PT_PassManager, &ID), 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

Modified: llvm/trunk/tools/opt/opt.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/opt/opt.cpp?rev=94160&r1=94159&r2=94160&view=diff

==============================================================================
--- llvm/trunk/tools/opt/opt.cpp (original)
+++ llvm/trunk/tools/opt/opt.cpp Fri Jan 22 00:03:06 2010
@@ -479,16 +479,23 @@
       addPass(Passes, P);
 
       if (AnalyzeOnly) {
-        if (dynamic_cast<BasicBlockPass*>(P))
+        switch (P->getPassKind()) {
+        case PT_BasicBlock:
           Passes.add(new BasicBlockPassPrinter(PassInf));
-        else if (dynamic_cast<LoopPass*>(P))
+          break;
+        case PT_Loop:
           Passes.add(new LoopPassPrinter(PassInf));
-        else if (dynamic_cast<FunctionPass*>(P))
+          break;
+        case PT_Function:
           Passes.add(new FunctionPassPrinter(PassInf));
-        else if (dynamic_cast<CallGraphSCCPass*>(P))
+          break;
+        case PT_CallGraphSCC:
           Passes.add(new CallGraphSCCPassPrinter(PassInf));
-        else
+          break;
+        default:
           Passes.add(new ModulePassPrinter(PassInf));
+          break;
+        }
       }
     }
 





More information about the llvm-commits mailing list