diff options
Diffstat (limited to 'include/llvm/Analysis/DataStructure/DSGraphTraits.h')
-rw-r--r-- | include/llvm/Analysis/DataStructure/DSGraphTraits.h | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/include/llvm/Analysis/DataStructure/DSGraphTraits.h b/include/llvm/Analysis/DataStructure/DSGraphTraits.h index 78e0b3bb61..34e0e825d2 100644 --- a/include/llvm/Analysis/DataStructure/DSGraphTraits.h +++ b/include/llvm/Analysis/DataStructure/DSGraphTraits.h @@ -23,9 +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) { + DSNodeIterator(NodeTy *N, bool) : Node(N) { // Create end iterator Offset = N->getNumLinks() << DS::PointerShift; + if (Offset == 0 && Node->getForwardNode() && + (Node->NodeType & DSNode::DEAD)) // Model Forward link + Offset += DS::PointerSize; } public: DSNodeIterator(const DSNodeHandle &NH) @@ -43,7 +45,10 @@ public: } pointer operator*() const { - return Node->getLink(Offset).getNode(); + if (Node->NodeType & DSNode::DEAD) + return Node->getForwardNode(); + else + return Node->getLink(Offset).getNode(); } pointer operator->() const { return operator*(); } |