Aggressively prune the DFS when inserting phi-defs.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111394 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Jakob Stoklund Olesen 2010-08-18 19:00:11 +00:00
parent 1407c84242
commit 4d440bd786
2 changed files with 12 additions and 3 deletions

View File

@ -193,6 +193,15 @@ public:
NodeType *getPath(unsigned n) const {
return VisitStack[n].first.getPointer();
}
/// skipChildren - Skip all children of Node, assuming that Node is on the
/// current path. This allows more aggressive pruning than just skipping
/// children of the current node.
_Self& skipChildren(NodeType *Node) {
while (!VisitStack.empty() && **this != Node)
VisitStack.pop_back();
return skipChildren();
}
};

View File

@ -446,9 +446,9 @@ VNInfo *LiveIntervalMap::mapValue(const VNInfo *ParentVNI, SlotIndex Idx) {
}
// No need to search the children, we found a dominating value.
// FIXME: We could prune up to the last phi-def we inserted, need df_iterator
// for that.
IDFI.skipChildren();
// MBB is either the found dominating value, or the last phi-def we created.
// Either way, the children of MBB would be shadowed, so don't search them.
IDFI.skipChildren(MBB);
}
// The search should at least find a dominating value for IdxMBB.