aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/Support/GraphWriter.h37
-rw-r--r--include/llvm/Support/GraphWriter.h37
2 files changed, 58 insertions, 16 deletions
diff --git a/include/Support/GraphWriter.h b/include/Support/GraphWriter.h
index 7783b46808..60cae2e500 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<typename GraphType>
diff --git a/include/llvm/Support/GraphWriter.h b/include/llvm/Support/GraphWriter.h
index 7783b46808..60cae2e500 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<typename GraphType>