summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
authorSuyog Sarda <suyog.sarda@samsung.com>2014-08-01 05:07:20 +0000
committerSuyog Sarda <suyog.sarda@samsung.com>2014-08-01 05:07:20 +0000
commit56c9a8703502de8bc1b6f82627478a232fab571c (patch)
treeb0dc96316793ff61a18b8e10e3dde89788d13806 /llvm/lib/Transforms
parent1c6c2f69f782599fe0d820a03c12b116b424ad65 (diff)
downloadbcm5719-llvm-56c9a8703502de8bc1b6f82627478a232fab571c.tar.gz
bcm5719-llvm-56c9a8703502de8bc1b6f82627478a232fab571c.zip
This patch implements transform for pattern "(A & ~B) ^ (~A) -> ~(A & B)".
Differential Revision: http://reviews.llvm.org/D4653 llvm-svn: 214479
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r--llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
index 3fd5b7bbd8c..971995694e9 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
@@ -2524,6 +2524,11 @@ Instruction *InstCombiner::visitXor(BinaryOperator &I) {
match(Op1, m_Not(m_Specific(A))))
return BinaryOperator::CreateOr(A, Builder->CreateNot(B));
+ // (A & ~B) ^ (~A) -> ~(A & B)
+ if (match(Op0, m_And(m_Value(A), m_Not(m_Value(B)))) &&
+ match(Op1, m_Not(m_Specific(A))))
+ return BinaryOperator::CreateNot(Builder->CreateAnd(A, 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)))
OpenPOWER on IntegriCloud