If an edge points to a field of another memory object, actually reflect this
authorChris Lattner <sabre@nondot.org>
Tue, 22 Jun 2004 07:13:10 +0000 (07:13 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 22 Jun 2004 07:13:10 +0000 (07:13 +0000)
in the DOT visualization of the DSGraphs.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14316 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/DataStructure/Printer.cpp

index f6e073adce980f83d4fa39142d6088060c11ff06..9863875a4e9d922b94304200eec0ca972f1fd733 100644 (file)
@@ -100,6 +100,24 @@ struct DOTGraphTraits<const DSGraph*> : public DefaultDOTGraphTraits {
   static std::string getNodeAttributes(const DSNode *N) {
     return "shape=Mrecord";
   }
+
+  static bool edgeTargetsEdgeSource(const void *Node,
+                                    DSNode::const_iterator I) {
+    unsigned O = I.getNode()->getLink(I.getOffset()).getOffset();
+    return (O >> DS::PointerShift) != 0;
+  }
+
+  static DSNode::const_iterator getEdgeTarget(const DSNode *Node,
+                                              DSNode::const_iterator I) {
+    unsigned O = I.getNode()->getLink(I.getOffset()).getOffset();
+    unsigned LinkNo = O >> DS::PointerShift;
+    const DSNode *N = *I;
+    DSNode::const_iterator R = N->begin();
+    for (; LinkNo; --LinkNo)
+      ++R;
+    return R;
+  }
+
   
   /// addCustomGraphFeatures - Use this graph writing hook to emit call nodes
   /// and the return node.