aboutsummaryrefslogtreecommitdiff
path: root/include/llvm/Analysis/DataStructure/DSGraphTraits.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/llvm/Analysis/DataStructure/DSGraphTraits.h')
-rw-r--r--include/llvm/Analysis/DataStructure/DSGraphTraits.h11
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*(); }