diff options
author | Suyog Sarda <suyog.sarda@samsung.com> | 2014-07-22 18:09:41 +0000 |
---|---|---|
committer | Suyog Sarda <suyog.sarda@samsung.com> | 2014-07-22 18:09:41 +0000 |
commit | d64faf6cae5eae40e8cbea132b126ecb710aa9ec (patch) | |
tree | f80b023fb2e3a1aef0d8c30c9a949d7e868d9276 /llvm/lib/Transforms | |
parent | 54891de4cb6569e7287335ff85aef994bca94862 (diff) | |
download | bcm5719-llvm-d64faf6cae5eae40e8cbea132b126ecb710aa9ec.tar.gz bcm5719-llvm-d64faf6cae5eae40e8cbea132b126ecb710aa9ec.zip |
Added InstCombine Transform for patterns:
"((~A & B) | A) -> (A | B)" and "((A & B) | ~A) -> (~A | B)"
Original Patch credit to Ankit Jain !!
Differential Revision: http://reviews.llvm.org/D4591
llvm-svn: 213676
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp index 431f7323511..ef6a848357e 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp @@ -1988,6 +1988,16 @@ Instruction *InstCombiner::visitOr(BinaryOperator &I) { return BinaryOperator::CreateXor(NOr, C1); } + // ((~A & B) | A) -> (A | B) + if (match(Op0, m_And(m_Not(m_Value(A)), m_Value(B))) && + match(Op1, m_Specific(A))) + return BinaryOperator::CreateOr(A, B); + + // ((A & B) | ~A) -> (~A | B) + if (match(Op0, m_And(m_Value(A), m_Value(B))) && + match(Op1, m_Not(m_Specific(A)))) + return BinaryOperator::CreateOr(Builder->CreateNot(A), B); + // (A & C)|(B & D) Value *C = nullptr, *D = nullptr; if (match(Op0, m_And(m_Value(A), m_Value(C))) && |