summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/InstCombine
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2011-01-30 22:01:13 +0000
committerAnders Carlsson <andersca@mac.com>2011-01-30 22:01:13 +0000
commitf23a6da271dd9be949e5f3cb12bc15a9a9d98712 (patch)
treea283bfd8db93f372c03afa003b8089778c26af02 /llvm/lib/Transforms/InstCombine
parenta03f3a85cb8d7ed86943c12030088fddc05ba1b3 (diff)
downloadbcm5719-llvm-f23a6da271dd9be949e5f3cb12bc15a9a9d98712.tar.gz
bcm5719-llvm-f23a6da271dd9be949e5f3cb12bc15a9a9d98712.zip
Recognize and simplify
(A+B) == A -> B == 0 A == (A+B) -> B == 0 llvm-svn: 124567
Diffstat (limited to 'llvm/lib/Transforms/InstCombine')
-rw-r--r--llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
index fe436bce210..8c5e7e48c44 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
@@ -2341,7 +2341,17 @@ Instruction *InstCombiner::visitICmpInst(ICmpInst &I) {
if (match(Op1, m_Sub(m_Specific(Op0), m_Value(B))))
return new ICmpInst(I.getPredicate(), B,
Constant::getNullValue(B->getType()));
-
+
+ // (A+B) == A -> B == 0
+ if (match(Op0, m_Add(m_Specific(Op1), m_Value(B))))
+ return new ICmpInst(I.getPredicate(), B,
+ Constant::getNullValue(B->getType()));
+
+ // A == (A+B) -> B == 0
+ if (match(Op1, m_Add(m_Specific(Op0), m_Value(B))))
+ return new ICmpInst(I.getPredicate(), B,
+ Constant::getNullValue(B->getType()));
+
// (X&Z) == (Y&Z) -> (X^Y) & Z == 0
if (Op0->hasOneUse() && Op1->hasOneUse() &&
match(Op0, m_And(m_Value(A), m_Value(B))) &&
OpenPOWER on IntegriCloud