From 4d440bd786ae4dad7035c30fd09044a9efc8dccd Mon Sep 17 00:00:00 2001 From: Jakob Stoklund Olesen Date: Wed, 18 Aug 2010 19:00:11 +0000 Subject: [PATCH] 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 --- include/llvm/ADT/DepthFirstIterator.h | 9 +++++++++ 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 b9e5cbdf8c6..3edb5550788 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 b081bf37337..dae282dfce6 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.