Halfway conversion from custom printing to GraphWriter printing
authorChris Lattner <sabre@nondot.org>
Sun, 13 Oct 2002 19:31:57 +0000 (19:31 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 13 Oct 2002 19:31:57 +0000 (19:31 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4146 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/DataStructure/Printer.cpp

index 51ebe632eb43bedacc5a536b2055a8acb2186c87..b7c2714836228678f9919c2a85ae5e0d0b0ca5de 100644 (file)
@@ -6,9 +6,11 @@
 
 #include "llvm/Analysis/DataStructure.h"
 #include "llvm/Analysis/DSGraph.h"
+#include "llvm/Analysis/DSGraphTraits.h"
 #include "llvm/Module.h"
 #include "llvm/Assembly/Writer.h"
 #include "Support/CommandLine.h"
+#include "Support/GraphWriter.h"
 #include <fstream>
 #include <sstream>
 using std::string;
@@ -165,6 +167,36 @@ void DSGraph::print(std::ostream &O) const {
   O << "}\n";
 }
 
+template<>
+struct DOTGraphTraits<DSGraph*> : public DefaultDOTGraphTraits {
+  static std::string getGraphName(DSGraph *G) {
+    if (G->hasFunction())
+      return "Function " + G->getFunction().getName();
+    else
+      return "Non-function graph";
+  }
+
+  static const char *getGraphProperties(DSGraph *G) {
+    return "\tnode [shape=Mrecord];\n"
+           "\tedge [arrowtail=\"dot\"];\n"
+           "\tsize=\"10,7.5\";\n"
+           "\trotate=\"90\";\n";
+  }
+
+  static std::string getNodeLabel(DSNode *Node, DSGraph *Graph) {
+    return getCaption(Node, Graph);
+  }
+
+  static std::string getNodeAttributes(DSNode *N) {
+    return "";//fontname=Courier";
+  }
+  
+  //static int getEdgeSourceLabel(DSNode *Node, node_iterator I) {
+  //    return MergeMap[i];
+  //  }
+};
+
+
 
 void DSGraph::writeGraphToFile(std::ostream &O, const string &GraphName) {
   string Filename = GraphName + ".dot";
@@ -172,6 +204,7 @@ void DSGraph::writeGraphToFile(std::ostream &O, const string &GraphName) {
   std::ofstream F(Filename.c_str());
   
   if (F.good()) {
+    WriteGraph(F, this);
     print(F);
     O << " [" << getGraphSize() << "+" << getFunctionCalls().size() << "]\n";
   } else {