diff options
Diffstat (limited to 'contrib/llvm/lib/Analysis/IPA/CallPrinter.cpp')
| -rw-r--r-- | contrib/llvm/lib/Analysis/IPA/CallPrinter.cpp | 45 | 
1 files changed, 25 insertions, 20 deletions
diff --git a/contrib/llvm/lib/Analysis/IPA/CallPrinter.cpp b/contrib/llvm/lib/Analysis/IPA/CallPrinter.cpp index 306ae7a4dbfb..68dcd3c06427 100644 --- a/contrib/llvm/lib/Analysis/IPA/CallPrinter.cpp +++ b/contrib/llvm/lib/Analysis/IPA/CallPrinter.cpp @@ -22,13 +22,10 @@ using namespace llvm;  namespace llvm { -template<> -struct DOTGraphTraits<CallGraph*> : public DefaultDOTGraphTraits { -  DOTGraphTraits (bool isSimple=false) : DefaultDOTGraphTraits(isSimple) {} +template <> struct DOTGraphTraits<CallGraph *> : public DefaultDOTGraphTraits { +  DOTGraphTraits(bool isSimple = false) : DefaultDOTGraphTraits(isSimple) {} -  static std::string getGraphName(CallGraph *Graph) { -    return "Call graph"; -  } +  static std::string getGraphName(CallGraph *Graph) { return "Call graph"; }    std::string getNodeLabel(CallGraphNode *Node, CallGraph *Graph) {      if (Function *Func = Node->getFunction()) @@ -38,49 +35,57 @@ struct DOTGraphTraits<CallGraph*> : public DefaultDOTGraphTraits {    }  }; +struct AnalysisCallGraphWrapperPassTraits { +  static CallGraph *getGraph(CallGraphWrapperPass *P) { +    return &P->getCallGraph(); +  } +}; +  } // end llvm namespace  namespace {  struct CallGraphViewer -  : public DOTGraphTraitsModuleViewer<CallGraph, true> { +    : public DOTGraphTraitsModuleViewer<CallGraphWrapperPass, true, CallGraph *, +                                        AnalysisCallGraphWrapperPassTraits> {    static char ID;    CallGraphViewer() -    : DOTGraphTraitsModuleViewer<CallGraph, true>("callgraph", ID) { +      : DOTGraphTraitsModuleViewer<CallGraphWrapperPass, true, CallGraph *, +                                   AnalysisCallGraphWrapperPassTraits>( +            "callgraph", ID) {      initializeCallGraphViewerPass(*PassRegistry::getPassRegistry());    }  }; -struct CallGraphPrinter -  : public DOTGraphTraitsModulePrinter<CallGraph, true> { +struct CallGraphPrinter : public DOTGraphTraitsModulePrinter< +                              CallGraphWrapperPass, true, CallGraph *, +                              AnalysisCallGraphWrapperPassTraits> {    static char ID;    CallGraphPrinter() -    : DOTGraphTraitsModulePrinter<CallGraph, true>("callgraph", ID) { -      initializeCallGraphPrinterPass(*PassRegistry::getPassRegistry()); +      : DOTGraphTraitsModulePrinter<CallGraphWrapperPass, true, CallGraph *, +                                    AnalysisCallGraphWrapperPassTraits>( +            "callgraph", ID) { +    initializeCallGraphPrinterPass(*PassRegistry::getPassRegistry());    }  };  } // end anonymous namespace  char CallGraphViewer::ID = 0; -INITIALIZE_PASS(CallGraphViewer, "view-callgraph", -                "View call graph", -                false, false) +INITIALIZE_PASS(CallGraphViewer, "view-callgraph", "View call graph", false, +                false)  char CallGraphPrinter::ID = 0;  INITIALIZE_PASS(CallGraphPrinter, "dot-callgraph", -                "Print call graph to 'dot' file", -                false, false) +                "Print call graph to 'dot' file", false, false)  // Create methods available outside of this file, to use them  // "include/llvm/LinkAllPasses.h". Otherwise the pass would be deleted by  // the link time optimization. -ModulePass *llvm::createCallGraphViewerPass() { -  return new CallGraphViewer(); -} +ModulePass *llvm::createCallGraphViewerPass() { return new CallGraphViewer(); }  ModulePass *llvm::createCallGraphPrinterPass() {    return new CallGraphPrinter();  | 
