diff options
author | Duncan Sands <baldrick@free.fr> | 2012-02-27 12:11:41 +0000 |
---|---|---|
committer | Duncan Sands <baldrick@free.fr> | 2012-02-27 12:11:41 +0000 |
commit | 768ada611b78fe8143f5655f5a5c804b2a9768da (patch) | |
tree | 408197a4e8af7e7f8d6b8cf41a305d970fbfc319 /lib | |
parent | b4b2688db0f377605b236d81a61560657660548c (diff) | |
download | external_llvm-768ada611b78fe8143f5655f5a5c804b2a9768da.zip external_llvm-768ada611b78fe8143f5655f5a5c804b2a9768da.tar.gz external_llvm-768ada611b78fe8143f5655f5a5c804b2a9768da.tar.bz2 |
Micro-optimization, no functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151524 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Transforms/Scalar/GVN.cpp | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/lib/Transforms/Scalar/GVN.cpp b/lib/Transforms/Scalar/GVN.cpp index 06a8be0..702d1d7 100644 --- a/lib/Transforms/Scalar/GVN.cpp +++ b/lib/Transforms/Scalar/GVN.cpp @@ -2041,13 +2041,18 @@ bool GVN::propagateEquality(Value *LHS, Value *RHS, BasicBlock *Root) { // Since we don't have the instruction "A < B" immediately to hand, work out // the value number that it would have and use that to find an appropriate // instruction (if any). - unsigned Num = VN.lookup_or_add_cmp(Cmp->getOpcode(), NotPred, Op0, Op1); - Value *NotCmp = findLeader(Root, Num); - if (NotCmp && isa<Instruction>(NotCmp)) { - unsigned NumReplacements = - replaceAllDominatedUsesWith(NotCmp, NotVal, Root); - Changed |= NumReplacements > 0; - NumGVNEqProp += NumReplacements; + uint32_t NextNum = VN.getNextUnusedValueNumber(); + uint32_t Num = VN.lookup_or_add_cmp(Cmp->getOpcode(), NotPred, Op0, Op1); + // If the number we were assigned was brand new then there is no point in + // looking for an instruction realizing it: there cannot be one! + if (Num < NextNum) { + Value *NotCmp = findLeader(Root, Num); + if (NotCmp && isa<Instruction>(NotCmp)) { + unsigned NumReplacements = + replaceAllDominatedUsesWith(NotCmp, NotVal, Root); + Changed |= NumReplacements > 0; + NumGVNEqProp += NumReplacements; + } } // Ensure that any instruction in scope that gets the "A < B" value number // is replaced with false. |