aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Transforms/Scalar/InstructionCombining.cpp
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2008-12-01 08:09:47 +0000
committerBill Wendling <isanbard@gmail.com>2008-12-01 08:09:47 +0000
commitc1f311332398f5f02b12e147f25d93cbba1c9c5a (patch)
tree0193288b7b1201c824545d3c4e9f12da7a73a0e5 /lib/Transforms/Scalar/InstructionCombining.cpp
parentf2e0efd309bdb08bec9aca8a18b62914eca995ec (diff)
downloadexternal_llvm-c1f311332398f5f02b12e147f25d93cbba1c9c5a.zip
external_llvm-c1f311332398f5f02b12e147f25d93cbba1c9c5a.tar.gz
external_llvm-c1f311332398f5f02b12e147f25d93cbba1c9c5a.tar.bz2
Use m_Specific() instead of double matching.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60341 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Scalar/InstructionCombining.cpp')
-rw-r--r--lib/Transforms/Scalar/InstructionCombining.cpp30
1 files changed, 12 insertions, 18 deletions
diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp
index aae1e14..47d9c25 100644
--- a/lib/Transforms/Scalar/InstructionCombining.cpp
+++ b/lib/Transforms/Scalar/InstructionCombining.cpp
@@ -4603,28 +4603,22 @@ Instruction *InstCombiner::visitOr(BinaryOperator &I) {
if (Instruction *Match = MatchSelectFromAndOr(D, A, B, C))
return Match;
- V1 = V2 = 0;
-
// ((A&~B)|(~A&B)) -> A^B
- if ((match(C, m_Not(m_Value(V1))) &&
- match(B, m_Not(m_Value(V2)))))
- if (V1 == D && V2 == A)
- return BinaryOperator::CreateXor(V1, V2);
+ if ((match(C, m_Not(m_Specific(D))) &&
+ match(B, m_Not(m_Specific(A)))))
+ return BinaryOperator::CreateXor(A, D);
// ((~B&A)|(~A&B)) -> A^B
- if ((match(A, m_Not(m_Value(V1))) &&
- match(B, m_Not(m_Value(V2)))))
- if (V1 == D && V2 == C)
- return BinaryOperator::CreateXor(V1, V2);
+ if ((match(A, m_Not(m_Specific(D))) &&
+ match(B, m_Not(m_Specific(C)))))
+ return BinaryOperator::CreateXor(C, D);
// ((A&~B)|(B&~A)) -> A^B
- if ((match(C, m_Not(m_Value(V1))) &&
- match(D, m_Not(m_Value(V2)))))
- if (V1 == B && V2 == A)
- return BinaryOperator::CreateXor(V1, V2);
+ if ((match(C, m_Not(m_Specific(B))) &&
+ match(D, m_Not(m_Specific(A)))))
+ return BinaryOperator::CreateXor(A, B);
// ((~B&A)|(B&~A)) -> A^B
- if ((match(A, m_Not(m_Value(V1))) &&
- match(D, m_Not(m_Value(V2)))))
- if (V1 == B && V2 == C)
- return BinaryOperator::CreateXor(V1, V2);
+ if ((match(A, m_Not(m_Specific(B))) &&
+ match(D, m_Not(m_Specific(C)))))
+ return BinaryOperator::CreateXor(C, B);
}
// (X >> Z) | (Y >> Z) -> (X|Y) >> Z for all shifts.