diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2010-08-18 19:00:11 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2010-08-18 19:00:11 +0000 |
commit | 4d440bd786ae4dad7035c30fd09044a9efc8dccd (patch) | |
tree | 9a631ebe204c82dfcbe6ad380737891355facdad | |
parent | 1407c84242688dbcdbaa5b0296c18f46d102f25a (diff) | |
download | external_llvm-4d440bd786ae4dad7035c30fd09044a9efc8dccd.zip external_llvm-4d440bd786ae4dad7035c30fd09044a9efc8dccd.tar.gz external_llvm-4d440bd786ae4dad7035c30fd09044a9efc8dccd.tar.bz2 |
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
-rw-r--r-- | include/llvm/ADT/DepthFirstIterator.h | 9 | ||||
-rw-r--r-- | lib/CodeGen/SplitKit.cpp | 6 |
2 files changed, 12 insertions, 3 deletions
diff --git a/include/llvm/ADT/DepthFirstIterator.h b/include/llvm/ADT/DepthFirstIterator.h index b9e5cbd..3edb555 100644 --- a/include/llvm/ADT/DepthFirstIterator.h +++ b/include/llvm/ADT/DepthFirstIterator.h @@ -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(); + } }; diff --git a/lib/CodeGen/SplitKit.cpp b/lib/CodeGen/SplitKit.cpp index b081bf3..dae282d 100644 --- a/lib/CodeGen/SplitKit.cpp +++ b/lib/CodeGen/SplitKit.cpp @@ -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. |