mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-12 06:06:32 +00:00
Use m_Specific() instead of double matching.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60341 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9c531a0f07
commit
03aae5f7e1
@ -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.
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep {xor i32 %b, %a} | count 4
|
||||
; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep {xor i32 %a, %b} | count 4
|
||||
; RUN: llvm-as < %s | opt -instcombine | llvm-dis | not grep {and}
|
||||
|
||||
define i32 @func1(i32 %a, i32 %b) nounwind readnone {
|
||||
|
Loading…
Reference in New Issue
Block a user