diff options
author | Cameron Zwarich <zwarich@apple.com> | 2011-01-04 16:24:51 +0000 |
---|---|---|
committer | Cameron Zwarich <zwarich@apple.com> | 2011-01-04 16:24:51 +0000 |
commit | 26db45818a4f1b8483ac5a904eefa43c9b120a5d (patch) | |
tree | 459bf552730368f976011f2f3a26891c0df1ebd8 /lib/CodeGen | |
parent | ee38f85104184b87f78d5bc80e958152d5e01fdf (diff) | |
download | llvm-26db45818a4f1b8483ac5a904eefa43c9b120a5d.tar.gz llvm-26db45818a4f1b8483ac5a904eefa43c9b120a5d.tar.bz2 llvm-26db45818a4f1b8483ac5a904eefa43c9b120a5d.tar.xz |
Switch to path halving from path compression for a small speedup. This also
makes getLeader() nonrecursive.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122811 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r-- | lib/CodeGen/StrongPHIElimination.cpp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/lib/CodeGen/StrongPHIElimination.cpp b/lib/CodeGen/StrongPHIElimination.cpp index 54c6647f05..dc260af0fc 100644 --- a/lib/CodeGen/StrongPHIElimination.cpp +++ b/lib/CodeGen/StrongPHIElimination.cpp @@ -400,12 +400,18 @@ void StrongPHIElimination::addReg(unsigned Reg) { StrongPHIElimination::Node* StrongPHIElimination::Node::getLeader() { - Node* parentPointer = parent.getPointer(); - if (parentPointer == this) - return this; - Node* newParent = parentPointer->getLeader(); - parent.setPointer(newParent); - return newParent; + Node* N = this; + Node* Parent = parent.getPointer(); + Node* Grandparent = Parent->parent.getPointer(); + + while (Parent != Grandparent) { + N->parent.setPointer(Grandparent); + N = Grandparent; + Parent = Parent->parent.getPointer(); + Grandparent = Parent->parent.getPointer(); + } + + return Parent; } unsigned StrongPHIElimination::getRegColor(unsigned Reg) { |