Implement a "union-findy" version of DS-Analysis, which eliminates the

Referrers list on DSNodes.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5536 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner
2003-02-11 23:11:51 +00:00
parent 2cec1d3867
commit 72d29a4b00
10 changed files with 388 additions and 362 deletions

View File

@@ -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*(); }