X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=tools%2Fopt%2FGraphPrinters.cpp;h=867e33480879aafa2ab511d24ac8ab1115076404;hb=56867520990a4fea1353d55f71bb74a0126554e6;hp=34c937f0d4d52b6db556871a36eeb8df567fcdd7;hpb=3b39537e71f1b4bdf7dd49244e39e0a585951f1e;p=oota-llvm.git diff --git a/tools/opt/GraphPrinters.cpp b/tools/opt/GraphPrinters.cpp index 34c937f0d4d..867e3348087 100644 --- a/tools/opt/GraphPrinters.cpp +++ b/tools/opt/GraphPrinters.cpp @@ -1,10 +1,10 @@ //===- GraphPrinters.cpp - DOT printers for various graph types -----------===// -// +// // The LLVM Compiler Infrastructure // -// This file was developed by the LLVM research group and is distributed under -// the University of Illinois Open Source License. See LICENSE.TXT for details. -// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// //===----------------------------------------------------------------------===// // // This file defines several printers for various different types of graphs used @@ -14,11 +14,13 @@ // //===----------------------------------------------------------------------===// -#include "Support/GraphWriter.h" +#include "llvm/Support/GraphWriter.h" #include "llvm/Pass.h" #include "llvm/Value.h" #include "llvm/Analysis/CallGraph.h" +#include #include +using namespace llvm; template static void WriteGraphToFile(std::ostream &O, const std::string &GraphName, @@ -26,7 +28,7 @@ static void WriteGraphToFile(std::ostream &O, const std::string &GraphName, std::string Filename = GraphName + ".dot"; O << "Writing '" << Filename << "'..."; std::ofstream F(Filename.c_str()); - + if (F.good()) WriteGraph(F, GT); else @@ -39,36 +41,43 @@ static void WriteGraphToFile(std::ostream &O, const std::string &GraphName, // Call Graph Printer //===----------------------------------------------------------------------===// -template<> -struct DOTGraphTraits : public DefaultDOTGraphTraits { - static std::string getGraphName(CallGraph *F) { - return "Call Graph"; - } +namespace llvm { + template<> + struct DOTGraphTraits : public DefaultDOTGraphTraits { + static std::string getGraphName(CallGraph *F) { + return "Call Graph"; + } - static std::string getNodeLabel(CallGraphNode *Node, CallGraph *Graph) { - if (Node->getFunction()) - return ((Value*)Node->getFunction())->getName(); - else - return "Indirect call node"; - } -}; + static std::string getNodeLabel(CallGraphNode *Node, CallGraph *Graph) { + if (Node->getFunction()) + return ((Value*)Node->getFunction())->getName(); + else + return "Indirect call node"; + } + }; +} namespace { - struct CallGraphPrinter : public Pass { - virtual bool run(Module &M) { + struct CallGraphPrinter : public ModulePass { + static char ID; // Pass ID, replacement for typeid + CallGraphPrinter() : ModulePass((intptr_t)&ID) {} + + virtual bool runOnModule(Module &M) { WriteGraphToFile(std::cerr, "callgraph", &getAnalysis()); return false; } void print(std::ostream &OS) const {} - + void print(std::ostream &OS, const llvm::Module*) const {} + virtual void getAnalysisUsage(AnalysisUsage &AU) const { AU.addRequired(); AU.setPreservesAll(); } }; - RegisterAnalysis P2("print-callgraph", - "Print Call Graph to 'dot' file"); -}; + char CallGraphPrinter::ID = 0; + RegisterPass P2("print-callgraph", + "Print Call Graph to 'dot' file"); +}