diff options
| author | Suyog Sarda <suyog.sarda@samsung.com> | 2014-07-22 15:37:39 +0000 |
|---|---|---|
| committer | Suyog Sarda <suyog.sarda@samsung.com> | 2014-07-22 15:37:39 +0000 |
| commit | 521237cad6b82e8f8bd340410e275474672838ba (patch) | |
| tree | ed010f97e0d45384d750264f28bc3062e90aaea8 /llvm/lib/Transforms | |
| parent | 0d38c3a7266037c0f9c5fe42b661418989474c16 (diff) | |
| download | bcm5719-llvm-521237cad6b82e8f8bd340410e275474672838ba.tar.gz bcm5719-llvm-521237cad6b82e8f8bd340410e275474672838ba.zip | |
This patch implements transform for pattern "(A | B) ^ (~A) -> (A | ~B)".
Patch Credit to Ankit Jain !!
Differential Revision: http://reviews.llvm.org/D4588
llvm-svn: 213662
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp index b23a606e088..431f7323511 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp @@ -2446,6 +2446,12 @@ Instruction *InstCombiner::visitXor(BinaryOperator &I) { } } + // (A | B)^(~A) -> (A | ~B) + Value *A = nullptr, *B = nullptr; + if (match(Op0, m_Or(m_Value(A), m_Value(B))) && + match(Op1, m_Not(m_Specific(A)))) + return BinaryOperator::CreateOr(A, Builder->CreateNot(B)); + // (icmp1 A, B) ^ (icmp2 A, B) --> (icmp3 A, B) if (ICmpInst *RHS = dyn_cast<ICmpInst>(I.getOperand(1))) if (ICmpInst *LHS = dyn_cast<ICmpInst>(I.getOperand(0))) |

