[llvm-commits] CVS: llvm/include/Support/GraphWriter.h

Chris Lattner lattner at cs.uiuc.edu
Tue Oct 15 20:19:01 PDT 2002


Changes in directory llvm/include/Support:

GraphWriter.h updated: 1.3 -> 1.4

---
Log message:

  - Generic graph printing infrastructure changes:
     * Only print outgoing edges from a cell if the destination isn't null.
       This is important for DSGraphs, which have sources with no edges.
     * Allow Node attributes to override shape of the node


---
Diffs of the changes:

Index: llvm/include/Support/GraphWriter.h
diff -u llvm/include/Support/GraphWriter.h:1.3 llvm/include/Support/GraphWriter.h:1.4
--- llvm/include/Support/GraphWriter.h:1.3	Thu Oct 10 17:29:51 2002
+++ llvm/include/Support/GraphWriter.h	Tue Oct 15 20:18:14 2002
@@ -69,9 +69,9 @@
 
     std::string NodeAttributes = DOTTraits::getNodeAttributes(Node);
 
-    O << "\tNode" << (void*)Node << " [";
+    O << "\tNode" << (void*)Node << " [shape=record,";
     if (!NodeAttributes.empty()) O << NodeAttributes << ",";
-    O << "shape=record,label=\"{"
+    O << "label=\"{"
       << DOT::EscapeString(DOTTraits::getNodeLabel(Node, G));
     
     // Print out the fields of the current node...
@@ -94,23 +94,24 @@
     // Output all of the edges now
     EI = GTraits::child_begin(Node);
     for (unsigned i = 0; EI != EE && i != 64; ++EI, ++i) {
-      NodeType *TargetNode = *EI;
-      O << "\tNode" << (void*)Node << ":g" << i << " -> Node"
-        << (void*)TargetNode;
-      if (DOTTraits::edgeTargetsEdgeSource(Node, EI)) {
-        typename GTraits::ChildIteratorType TargetIt =
-          DOTTraits::getEdgeTarget(Node, EI);
-        // Figure out which edge this targets...
-        unsigned Offset = std::distance(GTraits::child_begin(TargetNode),
-                                        TargetIt);
-        if (Offset > 64) Offset = 64;  // Targetting the trancated part?
-        O << ":g" << Offset;        
+      if (NodeType *TargetNode = *EI) {
+        O << "\tNode" << (void*)Node << ":g" << i << " -> Node"
+          << (void*)TargetNode;
+        if (DOTTraits::edgeTargetsEdgeSource(Node, EI)) {
+          typename GTraits::ChildIteratorType TargetIt =
+            DOTTraits::getEdgeTarget(Node, EI);
+          // Figure out which edge this targets...
+          unsigned Offset = std::distance(GTraits::child_begin(TargetNode),
+                                          TargetIt);
+          if (Offset > 64) Offset = 64;  // Targetting the trancated part?
+          O << ":g" << Offset;        
+        }
+        
+        std::string EdgeAttributes = DOTTraits::getEdgeAttributes(Node, EI);
+        if (!EdgeAttributes.empty())
+          O << "[" << EdgeAttributes << "]";
+        O << ";\n";
       }
-
-      std::string EdgeAttributes = DOTTraits::getEdgeAttributes(Node, EI);
-      if (!EdgeAttributes.empty())
-        O << "[" << EdgeAttributes << "]";
-      O << ";\n";
     }
   }
 





More information about the llvm-commits mailing list