Fix the "partial pool allocator" on em3d and others. The problem is that

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
This commit is contained in:
Chris Lattner 2004-03-01 01:42:26 +00:00
parent 9148ad3099
commit 99df257910
2 changed files with 16 additions and 8 deletions

View 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)

View 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)