From 63a32de77680dd705d3f2788ea60021ecd4ad51e Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 16 Oct 2002 01:18:14 +0000 Subject: [PATCH] - 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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4192 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/Support/GraphWriter.h | 37 +++++++++++++++--------------- include/llvm/Support/GraphWriter.h | 37 +++++++++++++++--------------- 2 files changed, 38 insertions(+), 36 deletions(-) diff --git a/include/Support/GraphWriter.h b/include/Support/GraphWriter.h index fadff105362..cae7345c7a8 100644 --- a/include/Support/GraphWriter.h +++ b/include/Support/GraphWriter.h @@ -69,9 +69,9 @@ std::ostream &WriteGraph(std::ostream &O, const GraphType &G) { 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 @@ std::ostream &WriteGraph(std::ostream &O, const GraphType &G) { // 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"; } } diff --git a/include/llvm/Support/GraphWriter.h b/include/llvm/Support/GraphWriter.h index fadff105362..cae7345c7a8 100644 --- a/include/llvm/Support/GraphWriter.h +++ b/include/llvm/Support/GraphWriter.h @@ -69,9 +69,9 @@ std::ostream &WriteGraph(std::ostream &O, const GraphType &G) { 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 @@ std::ostream &WriteGraph(std::ostream &O, const GraphType &G) { // 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"; } }