diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2015-01-13 23:53:50 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2015-01-13 23:53:50 +0000 |
commit | 76890d82c0d00fc145ed4608f3b8c223ad1f7640 (patch) | |
tree | 7a9702dacb0b22f918900a7a55824aff71e86ab1 /llvm/lib/Analysis/LazyCallGraph.cpp | |
parent | bed7f07080d45525e2ac0ddf08e930c689c45079 (diff) | |
download | llvm-76890d82c0d00fc145ed4608f3b8c223ad1f7640.zip llvm-76890d82c0d00fc145ed4608f3b8c223ad1f7640.tar.gz llvm-76890d82c0d00fc145ed4608f3b8c223ad1f7640.tar.bz2 |
[PM] Move the LazyCallGraph printing functionality to a print method.
I'm adding generic analysis printing utility pass support which will
require such a method (or a specialization) so this will let the
existing printing logic satisfy that.
llvm-svn: 225854
Diffstat (limited to 'llvm/lib/Analysis/LazyCallGraph.cpp')
-rw-r--r-- | llvm/lib/Analysis/LazyCallGraph.cpp | 74 |
1 files changed, 38 insertions, 36 deletions
diff --git a/llvm/lib/Analysis/LazyCallGraph.cpp b/llvm/lib/Analysis/LazyCallGraph.cpp index c8d0410c..edb8531 100644 --- a/llvm/lib/Analysis/LazyCallGraph.cpp +++ b/llvm/lib/Analysis/LazyCallGraph.cpp @@ -542,6 +542,43 @@ void LazyCallGraph::removeEdge(Node &CallerN, Function &Callee) { return CallerN.removeEdgeInternal(Callee); } +static void printNodes(raw_ostream &OS, LazyCallGraph::Node &N, + SmallPtrSetImpl<LazyCallGraph::Node *> &Printed) { + // Recurse depth first through the nodes. + for (LazyCallGraph::Node &ChildN : N) + if (Printed.insert(&ChildN).second) + printNodes(OS, ChildN, Printed); + + OS << " Call edges in function: " << N.getFunction().getName() << "\n"; + for (LazyCallGraph::iterator I = N.begin(), E = N.end(); I != E; ++I) + OS << " -> " << I->getFunction().getName() << "\n"; + + OS << "\n"; +} + +static void printSCC(raw_ostream &OS, LazyCallGraph::SCC &SCC) { + ptrdiff_t SCCSize = std::distance(SCC.begin(), SCC.end()); + OS << " SCC with " << SCCSize << " functions:\n"; + + for (LazyCallGraph::Node *N : SCC) + OS << " " << N->getFunction().getName() << "\n"; + + OS << "\n"; +} + +void LazyCallGraph::print(raw_ostream &OS, Module &M) { + OS << "Printing the call graph for module: " << M.getModuleIdentifier() + << "\n\n"; + + SmallPtrSet<LazyCallGraph::Node *, 16> Printed; + for (LazyCallGraph::Node &N : *this) + if (Printed.insert(&N).second) + printNodes(OS, N, Printed); + + for (LazyCallGraph::SCC &SCC : this->postorder_sccs()) + printSCC(OS, SCC); +} + LazyCallGraph::Node &LazyCallGraph::insertInto(Function &F, Node *&MappedN) { return *new (MappedN = BPA.Allocate()) Node(*this, F); } @@ -684,44 +721,9 @@ char LazyCallGraphAnalysis::PassID; LazyCallGraphPrinterPass::LazyCallGraphPrinterPass(raw_ostream &OS) : OS(OS) {} -static void printNodes(raw_ostream &OS, LazyCallGraph::Node &N, - SmallPtrSetImpl<LazyCallGraph::Node *> &Printed) { - // Recurse depth first through the nodes. - for (LazyCallGraph::Node &ChildN : N) - if (Printed.insert(&ChildN).second) - printNodes(OS, ChildN, Printed); - - OS << " Call edges in function: " << N.getFunction().getName() << "\n"; - for (LazyCallGraph::iterator I = N.begin(), E = N.end(); I != E; ++I) - OS << " -> " << I->getFunction().getName() << "\n"; - - OS << "\n"; -} - -static void printSCC(raw_ostream &OS, LazyCallGraph::SCC &SCC) { - ptrdiff_t SCCSize = std::distance(SCC.begin(), SCC.end()); - OS << " SCC with " << SCCSize << " functions:\n"; - - for (LazyCallGraph::Node *N : SCC) - OS << " " << N->getFunction().getName() << "\n"; - - OS << "\n"; -} - PreservedAnalyses LazyCallGraphPrinterPass::run(Module &M, ModuleAnalysisManager *AM) { - LazyCallGraph &G = AM->getResult<LazyCallGraphAnalysis>(M); - - OS << "Printing the call graph for module: " << M.getModuleIdentifier() - << "\n\n"; - - SmallPtrSet<LazyCallGraph::Node *, 16> Printed; - for (LazyCallGraph::Node &N : G) - if (Printed.insert(&N).second) - printNodes(OS, N, Printed); - - for (LazyCallGraph::SCC &SCC : G.postorder_sccs()) - printSCC(OS, SCC); + AM->getResult<LazyCallGraphAnalysis>(M).print(OS, M); return PreservedAnalyses::all(); } |