diff options
author | Chris Lattner <sabre@nondot.org> | 2009-09-15 05:03:04 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-09-15 05:03:04 +0000 |
commit | d4d966f5008202c188addb5573b578a8dbc7e37c (patch) | |
tree | ff29a2212869a01177930cbce21bb59e1336cce3 /llvm/lib | |
parent | 7cd39e07215159ed749ddd9fc1611008a2addade (diff) | |
download | bcm5719-llvm-d4d966f5008202c188addb5573b578a8dbc7e37c.tar.gz bcm5719-llvm-d4d966f5008202c188addb5573b578a8dbc7e37c.zip |
make -debug-pass=Executions show information about what call graph nodes
are in the SCC for each execution of a CGSCC pass.
llvm-svn: 81838
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp | 15 | ||||
-rw-r--r-- | llvm/lib/VMCore/PassManager.cpp | 17 |
2 files changed, 27 insertions, 5 deletions
diff --git a/llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp b/llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp index e4e0ecb2c9a..801ae1952cb 100644 --- a/llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp +++ b/llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp @@ -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); diff --git a/llvm/lib/VMCore/PassManager.cpp b/llvm/lib/VMCore/PassManager.cpp index 83045cd4ab5..f2c9ea3b997 100644 --- a/llvm/lib/VMCore/PassManager.cpp +++ b/llvm/lib/VMCore/PassManager.cpp @@ -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. |