summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/VMCore/Pass.cpp62
-rw-r--r--lib/VMCore/PassManagerT.h30
2 files changed, 37 insertions, 55 deletions
diff --git a/lib/VMCore/Pass.cpp b/lib/VMCore/Pass.cpp
index 06e77e7fe1..d60a50053c 100644
--- a/lib/VMCore/Pass.cpp
+++ b/lib/VMCore/Pass.cpp
@@ -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>
@@ -21,21 +20,11 @@
// 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.
//
diff --git a/lib/VMCore/PassManagerT.h b/lib/VMCore/PassManagerT.h
index 6e5fcbdd3e..555bcaae10 100644
--- a/lib/VMCore/PassManagerT.h
+++ b/lib/VMCore/PassManagerT.h
@@ -16,11 +16,34 @@
#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> &);