mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
make -debug-pass=Executions show information about what call graph nodes
are in the SCC for each execution of a CGSCC pass. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81838 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
745c9be986
commit
9554c61328
@ -380,6 +380,11 @@ protected:
|
||||
// then PMT_Last active pass mangers.
|
||||
std::map<AnalysisID, Pass *> *InheritedAnalysis[PMT_Last];
|
||||
|
||||
|
||||
/// isPassDebuggingExecutionsOrMore - Return true if -debug-pass=Executions
|
||||
/// or higher is specified.
|
||||
bool isPassDebuggingExecutionsOrMore() const;
|
||||
|
||||
private:
|
||||
void dumpAnalysisUsage(const StringRef &Msg, const Pass *P,
|
||||
const AnalysisUsage::VectorType &Set) const;
|
||||
|
@ -317,7 +317,20 @@ bool CGPassManager::runOnModule(Module &M) {
|
||||
PassNo != e; ++PassNo) {
|
||||
Pass *P = getContainedPass(PassNo);
|
||||
|
||||
dumpPassInfo(P, EXECUTION_MSG, ON_CG_MSG, "");
|
||||
// If we're in -debug-pass=Executions mode, construct the SCC node list,
|
||||
// otherwise avoid constructing this string as it is expensive.
|
||||
if (isPassDebuggingExecutionsOrMore()) {
|
||||
std::string Functions;
|
||||
#ifndef NDEBUG
|
||||
raw_string_ostream OS(Functions);
|
||||
for (unsigned i = 0, e = CurSCC.size(); i != e; ++i) {
|
||||
if (i) OS << ", ";
|
||||
CurSCC[i]->print(OS);
|
||||
}
|
||||
OS.flush();
|
||||
#endif
|
||||
dumpPassInfo(P, EXECUTION_MSG, ON_CG_MSG, Functions);
|
||||
}
|
||||
dumpRequiredSet(P);
|
||||
|
||||
initializeAnalysisImpl(P);
|
||||
|
@ -67,6 +67,15 @@ PassDebugging("debug-pass", cl::Hidden,
|
||||
clEnumValEnd));
|
||||
} // End of llvm namespace
|
||||
|
||||
/// isPassDebuggingExecutionsOrMore - Return true if -debug-pass=Executions
|
||||
/// or higher is specified.
|
||||
bool PMDataManager::isPassDebuggingExecutionsOrMore() const {
|
||||
return PassDebugging >= Executions;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void PassManagerPrettyStackEntry::print(raw_ostream &OS) const {
|
||||
if (V == 0 && M == 0)
|
||||
OS << "Releasing pass '";
|
||||
@ -1044,7 +1053,7 @@ void PMDataManager::dumpPassInfo(Pass *P, enum PassDebuggingString S1,
|
||||
errs() << "' on Loop '" << Msg << "'...\n";
|
||||
break;
|
||||
case ON_CG_MSG:
|
||||
errs() << "' on Call Graph '" << Msg << "'...\n";
|
||||
errs() << "' on Call Graph Nodes '" << Msg << "'...\n";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@ -1076,10 +1085,10 @@ void PMDataManager::dumpAnalysisUsage(const StringRef &Msg, const Pass *P,
|
||||
return;
|
||||
errs() << (void*)P << std::string(getDepth()*2+3, ' ') << Msg << " Analyses:";
|
||||
for (unsigned i = 0; i != Set.size(); ++i) {
|
||||
if (i) errs() << ",";
|
||||
errs() << " " << Set[i]->getPassName();
|
||||
if (i) errs() << ',';
|
||||
errs() << ' ' << Set[i]->getPassName();
|
||||
}
|
||||
errs() << "\n";
|
||||
errs() << '\n';
|
||||
}
|
||||
|
||||
/// Add RequiredPass into list of lower level passes required by pass P.
|
||||
|
Loading…
Reference in New Issue
Block a user