Remove a ton of extraneous #includes
[oota-llvm.git] / include / llvm / Analysis / DataStructure / DSGraphTraits.h
index 11d00f7d67585260a4f77d920a77268b0ec870af..7ea30c02c0db412b6b727ab9c7d459c2a7fc8d3e 100644 (file)
@@ -23,10 +23,11 @@ class DSNodeIterator : public forward_iterator<const DSNode, ptrdiff_t> {
   typedef DSNodeIterator<NodeTy> _Self;
 
   DSNodeIterator(NodeTy *N) : Node(N), Offset(0) {}   // begin iterator
-  DSNodeIterator(NodeTy *N, bool)       // Create end iterator
-    : Node(N) {
-    Offset = (N->getSize()+((1 << DS::PointerShift)-1)) &
-      ~((1 << DS::PointerShift)-1);
+  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;
   }
 public:
   DSNodeIterator(const DSNodeHandle &NH)
@@ -44,7 +45,10 @@ public:
   }
   
   pointer operator*() const {
-    return Node->getLink(Offset).getNode();
+    if (Node->isDeadNode())
+      return Node->getForwardNode();
+    else
+      return Node->getLink(Offset).getNode();
   }
   pointer operator->() const { return operator*(); }