From 96f549310013eaf751ff401b5ad3cbe01542e9b1 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 16 Oct 2002 02:03:18 +0000 Subject: [PATCH] * Factor printing code again, add emitSimpleNode method git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4198 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/Support/GraphWriter.h | 37 +++++++++++++++++++++++------- include/llvm/Support/GraphWriter.h | 37 +++++++++++++++++++++++------- 2 files changed, 58 insertions(+), 16 deletions(-) diff --git a/include/Support/GraphWriter.h b/include/Support/GraphWriter.h index 7783b468087..60cae2e5002 100644 --- a/include/Support/GraphWriter.h +++ b/include/Support/GraphWriter.h @@ -124,8 +124,7 @@ public: void writeEdge(NodeType *Node, unsigned edgeidx, child_iterator EI) { if (NodeType *TargetNode = *EI) { - O << "\tNode" << (void*)Node << ":g" << edgeidx << " -> Node" - << (void*)TargetNode; + int DestPort = -1; if (DOTTraits::edgeTargetsEdgeSource(Node, EI)) { child_iterator TargetIt = DOTTraits::getEdgeTarget(Node, EI); @@ -133,15 +132,37 @@ public: unsigned Offset = std::distance(GTraits::child_begin(TargetNode), TargetIt); if (Offset > 64) Offset = 64; // Targetting the truncated part? - O << ":g" << Offset; + DestPort = (int)Offset; } - - std::string EdgeAttributes = DOTTraits::getEdgeAttributes(Node, EI); - if (!EdgeAttributes.empty()) - O << "[" << EdgeAttributes << "]"; - O << ";\n"; + + emitEdge((void *)Node, edgeidx, (void*)TargetNode, DestPort, + DOTTraits::getEdgeAttributes(Node, EI)); } } + + /// emitSimpleNode - Outputs a simple (non-record) node + void emitSimpleNode(void *ID, const std::string &Attr, + const std::string &Label) { + O << "\tNode" << ID << "[ "; + if (!Attr.empty()) + O << Attr << ","; + O << " label =\"" << DOT::EscapeString(Label) << "\"];\n"; + } + + /// emitEdge - Output an edge from a simple node into the graph... + void emitEdge(void *SrcNodeID, int SrcNodePort, + void *DestNodeID, int DestNodePort, const std::string &Attrs) { + O << "\tNode" << SrcNodeID; + if (SrcNodePort >= 0) + O << ":g" << SrcNodePort; + O << " -> Node" << (void*)DestNodeID; + if (DestNodePort >= 0) + O << ":g" << DestNodePort; + + if (!Attrs.empty()) + O << "[" << Attrs << "]"; + O << ";\n"; + } }; template diff --git a/include/llvm/Support/GraphWriter.h b/include/llvm/Support/GraphWriter.h index 7783b468087..60cae2e5002 100644 --- a/include/llvm/Support/GraphWriter.h +++ b/include/llvm/Support/GraphWriter.h @@ -124,8 +124,7 @@ public: void writeEdge(NodeType *Node, unsigned edgeidx, child_iterator EI) { if (NodeType *TargetNode = *EI) { - O << "\tNode" << (void*)Node << ":g" << edgeidx << " -> Node" - << (void*)TargetNode; + int DestPort = -1; if (DOTTraits::edgeTargetsEdgeSource(Node, EI)) { child_iterator TargetIt = DOTTraits::getEdgeTarget(Node, EI); @@ -133,15 +132,37 @@ public: unsigned Offset = std::distance(GTraits::child_begin(TargetNode), TargetIt); if (Offset > 64) Offset = 64; // Targetting the truncated part? - O << ":g" << Offset; + DestPort = (int)Offset; } - - std::string EdgeAttributes = DOTTraits::getEdgeAttributes(Node, EI); - if (!EdgeAttributes.empty()) - O << "[" << EdgeAttributes << "]"; - O << ";\n"; + + emitEdge((void *)Node, edgeidx, (void*)TargetNode, DestPort, + DOTTraits::getEdgeAttributes(Node, EI)); } } + + /// emitSimpleNode - Outputs a simple (non-record) node + void emitSimpleNode(void *ID, const std::string &Attr, + const std::string &Label) { + O << "\tNode" << ID << "[ "; + if (!Attr.empty()) + O << Attr << ","; + O << " label =\"" << DOT::EscapeString(Label) << "\"];\n"; + } + + /// emitEdge - Output an edge from a simple node into the graph... + void emitEdge(void *SrcNodeID, int SrcNodePort, + void *DestNodeID, int DestNodePort, const std::string &Attrs) { + O << "\tNode" << SrcNodeID; + if (SrcNodePort >= 0) + O << ":g" << SrcNodePort; + O << " -> Node" << (void*)DestNodeID; + if (DestNodePort >= 0) + O << ":g" << DestNodePort; + + if (!Attrs.empty()) + O << "[" << Attrs << "]"; + O << ";\n"; + } }; template