* Move some code from Pass.cpp to PassManagerT.h
authorChris Lattner <sabre@nondot.org>
Tue, 30 Jul 2002 16:27:02 +0000 (16:27 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 30 Jul 2002 16:27:02 +0000 (16:27 +0000)
* Implement stuff so that code can declare that they only depend on the CFG of
  a function, not on anything else.  This speeds up GCCAS a lot.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3155 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/Pass.cpp
lib/VMCore/PassManagerT.h

index 06e77e7fe16ba0d305eeccd0c0ac02b8b95e3384..d60a50053cf76197563b860effa009bd58a959bd 100644 (file)
@@ -10,7 +10,6 @@
 #include "PassManagerT.h"         // PassManagerT implementation
 #include "llvm/Module.h"
 #include "Support/STLExtras.h"
-#include "Support/CommandLine.h"
 #include "Support/TypeInfo.h"
 #include <typeinfo>
 #include <iostream>
 //   AnalysisID Class Implementation
 //
 
-static std::vector<AnalysisID> CFGOnlyAnalyses;
-#if 0
-// Source of unique analysis ID #'s.
-unsigned AnalysisID::NextID = 0;
+static std::vector<const PassInfo*> CFGOnlyAnalyses;
 
-AnalysisID::AnalysisID(const AnalysisID &AID, bool DependsOnlyOnCFG) {
-  ID = AID.ID;                    // Implement the copy ctor part...
-  Constructor = AID.Constructor;
-  
-  // If this analysis only depends on the CFG of the function, add it to the CFG
-  // only list...
-  if (DependsOnlyOnCFG)
-    CFGOnlyAnalyses.push_back(AID);
+void RegisterPassBase::setPreservesCFG() {
+  CFGOnlyAnalyses.push_back(PIObj);
 }
-#endif
 
 //===----------------------------------------------------------------------===//
 //   AnalysisResolver Class Implementation
@@ -137,33 +126,6 @@ TimingInfo::~TimingInfo() {
 }
 
 
-//===----------------------------------------------------------------------===//
-// Pass debugging information.  Often it is useful to find out what pass is
-// running when a crash occurs in a utility.  When this library is compiled with
-// debugging on, a command line option (--debug-pass) is enabled that causes the
-// pass name to be printed before it executes.
-//
-
-// Different debug levels that can be enabled...
-enum PassDebugLevel {
-  None, Structure, Executions, Details
-};
-
-static cl::opt<enum PassDebugLevel>
-PassDebugging("debug-pass", cl::Hidden,
-              cl::desc("Print PassManager debugging information"),
-              cl::values(
-  clEnumVal(None      , "disable debug output"),
-  // TODO: add option to print out pass names "PassOptions"
-  clEnumVal(Structure , "print pass structure before run()"),
-  clEnumVal(Executions, "print pass name before it is executed"),
-  clEnumVal(Details   , "print pass details when it is executed"),
-                         0));
-
-void PMDebug::PrintPassStructure(Pass *P) {
-  if (PassDebugging >= Structure)
-    P->dumpPassStructure();
-}
 
 void PMDebug::PrintPassInformation(unsigned Depth, const char *Action,
                                    Pass *P, Annotable *V) {
@@ -190,22 +152,12 @@ void PMDebug::PrintAnalysisSetInfo(unsigned Depth, const char *Msg,
                                    Pass *P, const std::vector<AnalysisID> &Set){
   if (PassDebugging >= Details && !Set.empty()) {
     std::cerr << (void*)P << std::string(Depth*2+3, ' ') << Msg << " Analyses:";
-    for (unsigned i = 0; i != Set.size(); ++i) {
-      // FIXME: This can use the local pass map!
-      Pass *P = Set[i]->createPass();   // Good thing this is just debug code...
-      std::cerr << "  " << P->getPassName();
-      delete P;
-    }
+    for (unsigned i = 0; i != Set.size(); ++i)
+      std::cerr << "  " << Set[i]->getPassName();
     std::cerr << "\n";
   }
 }
 
-// dumpPassStructure - Implement the -debug-passes=Structure option
-void Pass::dumpPassStructure(unsigned Offset) {
-  std::cerr << std::string(Offset*2, ' ') << getPassName() << "\n";
-}
-
-
 //===----------------------------------------------------------------------===//
 // Pass Implementation
 //
@@ -214,6 +166,10 @@ void Pass::addToPassManager(PassManagerT<Module> *PM, AnalysisUsage &AU) {
   PM->addPass(this, AU);
 }
 
+// dumpPassStructure - Implement the -debug-passes=Structure option
+void Pass::dumpPassStructure(unsigned Offset) {
+  std::cerr << std::string(Offset*2, ' ') << getPassName() << "\n";
+}
 
 // getPassName - Use C++ RTTI to get a SOMEWHAT intelligable name for the pass.
 //
index 6e5fcbdd3e282887347d0112eb9a8c4f221cf578..555bcaae1062ff60e41df5b3b1c278405d59bc6d 100644 (file)
 #define LLVM_PASSMANAGER_T_H
 
 #include "llvm/Pass.h"
-#include <string>
+#include "Support/CommandLine.h"
 #include <algorithm>
 class Annotable;
 
+//===----------------------------------------------------------------------===//
+// Pass debugging information.  Often it is useful to find out what pass is
+// running when a crash occurs in a utility.  When this library is compiled with
+// debugging on, a command line option (--debug-pass) is enabled that causes the
+// pass name to be printed before it executes.
+//
+
+// Different debug levels that can be enabled...
+enum PassDebugLevel {
+  None, Structure, Executions, Details
+};
+
+static cl::opt<enum PassDebugLevel>
+PassDebugging("debug-pass", cl::Hidden,
+              cl::desc("Print PassManager debugging information"),
+              cl::values(
+  clEnumVal(None      , "disable debug output"),
+  // TODO: add option to print out pass names "PassOptions"
+  clEnumVal(Structure , "print pass structure before run()"),
+  clEnumVal(Executions, "print pass name before it is executed"),
+  clEnumVal(Details   , "print pass details when it is executed"),
+                         0));
+
 //===----------------------------------------------------------------------===//
 // PMDebug class - a set of debugging functions, that are not to be
 // instantiated by the template.
@@ -28,7 +51,10 @@ struct PMDebug {
   // If compiled in debug mode, these functions can be enabled by setting
   // -debug-pass on the command line of the tool being used.
   //
-  static void PrintPassStructure(Pass *P);
+  static void PrintPassStructure(Pass *P) {
+    if (PassDebugging >= Structure)
+      P->dumpPassStructure();
+  }
   static void PrintPassInformation(unsigned,const char*,Pass *, Annotable *);
   static void PrintAnalysisSetInfo(unsigned,const char*,Pass *P,
                                    const std::vector<AnalysisID> &);