mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-14 15:39:06 +00:00
* Move some code from Pass.cpp to PassManagerT.h
* 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
This commit is contained in:
parent
5fa829c54a
commit
37d66c4dea
@ -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.
|
||||
//
|
||||
|
@ -16,10 +16,33 @@
|
||||
#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> &);
|
||||
|
Loading…
Reference in New Issue
Block a user