summaryrefslogtreecommitdiffstats
path: root/include/llvm
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2008-07-21 21:06:55 +0000
committerDan Gohman <gohman@apple.com>2008-07-21 21:06:55 +0000
commit358033102ffaef4d1afb1c0b7e96440906f0b48f (patch)
tree14fa1a4a6ca923476c8165cbdc22e85c8a91a243 /include/llvm
parent2dbc167294c1a7a4cd7a43f86bff104afd6110e5 (diff)
downloadexternal_llvm-358033102ffaef4d1afb1c0b7e96440906f0b48f.zip
external_llvm-358033102ffaef4d1afb1c0b7e96440906f0b48f.tar.gz
external_llvm-358033102ffaef4d1afb1c0b7e96440906f0b48f.tar.bz2
Enhance the GraphWriter support for edge destinations, and teach the
SelectionDAG graph writer to make use of them. Now, nodes with multiple values are displayed as such, with incoming edges pointing to the specific value they use. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53875 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm')
-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 080c09b..2367c0e 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 afb2f54..20e85cc 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 << "]";