OSDN Git Service

Fix the "partial pool allocator" on em3d and others. The problem is that
authorChris Lattner <sabre@nondot.org>
Mon, 1 Mar 2004 01:42:26 +0000 (01:42 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 1 Mar 2004 01:42:26 +0000 (01:42 +0000)
DSNodes, unlike other GraphTraits nodes, can have null outgoing edges, and
df_iterator doesn't take this into consideration.  As a workaround, the
successor iterator now handles null nodes and 'indicates' that null has
no successors.

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

include/llvm/Analysis/DSGraphTraits.h
include/llvm/Analysis/DataStructure/DSGraphTraits.h

index 72541b8..017d86f 100644 (file)
@@ -33,10 +33,14 @@ class DSNodeIterator : public forward_iterator<const DSNode, ptrdiff_t> {
 
   DSNodeIterator(NodeTy *N) : Node(N), Offset(0) {}   // begin iterator
   DSNodeIterator(NodeTy *N, bool) : Node(N) {         // Create end iterator
-    Offset = N->getNumLinks() << DS::PointerShift;
-    if (Offset == 0 && Node->getForwardNode() &&
-        Node->isDeadNode())        // Model Forward link
-      Offset += DS::PointerSize;
+    if (N != 0) {
+      Offset = N->getNumLinks() << DS::PointerShift;
+      if (Offset == 0 && Node->getForwardNode() &&
+          Node->isDeadNode())        // Model Forward link
+        Offset += DS::PointerSize;
+    } else {
+      Offset = 0;
+    }
   }
 public:
   DSNodeIterator(const DSNodeHandle &NH)
index 72541b8..017d86f 100644 (file)
@@ -33,10 +33,14 @@ class DSNodeIterator : public forward_iterator<const DSNode, ptrdiff_t> {
 
   DSNodeIterator(NodeTy *N) : Node(N), Offset(0) {}   // begin iterator
   DSNodeIterator(NodeTy *N, bool) : Node(N) {         // Create end iterator
-    Offset = N->getNumLinks() << DS::PointerShift;
-    if (Offset == 0 && Node->getForwardNode() &&
-        Node->isDeadNode())        // Model Forward link
-      Offset += DS::PointerSize;
+    if (N != 0) {
+      Offset = N->getNumLinks() << DS::PointerShift;
+      if (Offset == 0 && Node->getForwardNode() &&
+          Node->isDeadNode())        // Model Forward link
+        Offset += DS::PointerSize;
+    } else {
+      Offset = 0;
+    }
   }
 public:
   DSNodeIterator(const DSNodeHandle &NH)