summaryrefslogtreecommitdiff
path: root/include/llvm/Support
diff options
context:
space:
mode:
Diffstat (limited to 'include/llvm/Support')
-rw-r--r--include/llvm/Support/DOTGraphTraits.h18
-rw-r--r--include/llvm/Support/GraphWriter.h22
2 files changed, 36 insertions, 4 deletions
diff --git a/include/llvm/Support/DOTGraphTraits.h b/include/llvm/Support/DOTGraphTraits.h
index 080c09b5f4..2367c0e260 100644
--- a/include/llvm/Support/DOTGraphTraits.h
+++ b/include/llvm/Support/DOTGraphTraits.h
@@ -100,6 +100,24 @@ struct DefaultDOTGraphTraits {
return I;
}
+ /// hasEdgeDestLabels - If this function returns true, the graph is able
+ /// to provide labels for edge destinations.
+ static bool hasEdgeDestLabels() {
+ return false;
+ }
+
+ /// numEdgeDestLabels - If hasEdgeDestLabels, this function returns the
+ /// number of incoming edge labels the given node has.
+ static unsigned numEdgeDestLabels(const void *Node) {
+ return 0;
+ }
+
+ /// getEdgeDestLabel - If hasEdgeDestLabels, this function returns the
+ /// incoming edge label with the given index in the given node.
+ static std::string getEdgeDestLabel(const void *Node, unsigned i) {
+ return "";
+ }
+
/// addCustomGraphFeatures - If a graph is made up of more than just
/// straight-forward nodes and edges, this is the place to put all of the
/// custom stuff necessary. The GraphWriter object, instantiated with your
diff --git a/include/llvm/Support/GraphWriter.h b/include/llvm/Support/GraphWriter.h
index afb2f545bb..20e85cce7d 100644
--- a/include/llvm/Support/GraphWriter.h
+++ b/include/llvm/Support/GraphWriter.h
@@ -146,11 +146,11 @@ public:
for (unsigned i = 0; EI != EE && i != 64; ++EI, ++i) {
if (i) O << "|";
- O << "<g" << i << ">" << DOTTraits::getEdgeSourceLabel(Node, EI);
+ O << "<s" << i << ">" << DOTTraits::getEdgeSourceLabel(Node, EI);
}
if (EI != EE)
- O << "|<g64>truncated...";
+ O << "|<s64>truncated...";
O << "}";
if (DOTTraits::renderGraphFromBottomUp()) O << "|";
}
@@ -163,6 +163,20 @@ public:
O << "|" << (void*)Node;
}
+ if (DOTTraits::hasEdgeDestLabels()) {
+ O << "|{";
+
+ unsigned i = 0, e = DOTTraits::numEdgeDestLabels(Node);
+ for (; i != e && i != 64; ++i) {
+ if (i) O << "|";
+ O << "<d" << i << ">" << DOTTraits::getEdgeDestLabel(Node, i);
+ }
+
+ if (i != e)
+ O << "|<d64>truncated...";
+ O << "}";
+ }
+
O << "}\"];\n"; // Finish printing the "node" line
// Output all of the edges now
@@ -223,10 +237,10 @@ public:
O << "\tNode" << SrcNodeID;
if (SrcNodePort >= 0)
- O << ":g" << SrcNodePort;
+ O << ":s" << SrcNodePort;
O << " -> Node" << reinterpret_cast<const void*>(DestNodeID);
if (DestNodePort >= 0)
- O << ":g" << DestNodePort;
+ O << ":d" << DestNodePort;
if (!Attrs.empty())
O << "[" << Attrs << "]";