summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
authorSuyog Sarda <suyog.sarda@samsung.com>2014-07-22 15:37:39 +0000
committerSuyog Sarda <suyog.sarda@samsung.com>2014-07-22 15:37:39 +0000
commit521237cad6b82e8f8bd340410e275474672838ba (patch)
treeed010f97e0d45384d750264f28bc3062e90aaea8 /llvm/lib/Transforms
parent0d38c3a7266037c0f9c5fe42b661418989474c16 (diff)
downloadbcm5719-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.cpp6
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)))
OpenPOWER on IntegriCloud