diff options
| author | David Majnemer <david.majnemer@gmail.com> | 2014-12-06 10:51:40 +0000 |
|---|---|---|
| committer | David Majnemer <david.majnemer@gmail.com> | 2014-12-06 10:51:40 +0000 |
| commit | 1af36e5baf4f1d046db4f308a28ca1b18475cab4 (patch) | |
| tree | c2452f5c3d6cfea7ecbc6e28706bdccdfdd20373 /llvm/test/Transforms | |
| parent | fc3062f65aee7ed02b0bdb75f3883f6030d7bf9f (diff) | |
| download | bcm5719-llvm-1af36e5baf4f1d046db4f308a28ca1b18475cab4.tar.gz bcm5719-llvm-1af36e5baf4f1d046db4f308a28ca1b18475cab4.zip | |
InstSimplify: Optimize away useless unsigned comparisons
Code like X < Y && Y == 0 should always be folded away to false.
llvm-svn: 223583
Diffstat (limited to 'llvm/test/Transforms')
| -rw-r--r-- | llvm/test/Transforms/InstSimplify/AndOrXor.ll | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstSimplify/AndOrXor.ll b/llvm/test/Transforms/InstSimplify/AndOrXor.ll index bf7e9a28640..ce3c2aa6af2 100644 --- a/llvm/test/Transforms/InstSimplify/AndOrXor.ll +++ b/llvm/test/Transforms/InstSimplify/AndOrXor.ll @@ -155,3 +155,51 @@ define i32 @neg_nuw(i32 %x) { ret i32 %neg ; CHECK: ret i32 0 } + +define i1 @and_icmp1(i32 %x, i32 %y) { + %1 = icmp ult i32 %x, %y + %2 = icmp ne i32 %y, 0 + %3 = and i1 %1, %2 + ret i1 %3 +} +; CHECK-LABEL: @and_icmp1( +; CHECK: %[[cmp:.*]] = icmp ult i32 %x, %y +; CHECK: ret i1 %[[cmp]] + +define i1 @and_icmp2(i32 %x, i32 %y) { + %1 = icmp ult i32 %x, %y + %2 = icmp eq i32 %y, 0 + %3 = and i1 %1, %2 + ret i1 %3 +} +; CHECK-LABEL: @and_icmp2( +; CHECK: ret i1 false + +define i1 @or_icmp1(i32 %x, i32 %y) { + %1 = icmp ult i32 %x, %y + %2 = icmp ne i32 %y, 0 + %3 = or i1 %1, %2 + ret i1 %3 +} +; CHECK-LABEL: @or_icmp1( +; CHECK: %[[cmp:.*]] = icmp ne i32 %y, 0 +; CHECK: ret i1 %[[cmp]] + +define i1 @or_icmp2(i32 %x, i32 %y) { + %1 = icmp uge i32 %x, %y + %2 = icmp ne i32 %y, 0 + %3 = or i1 %1, %2 + ret i1 %3 +} +; CHECK-LABEL: @or_icmp2( +; CHECK: ret i1 true + +define i1 @or_icmp3(i32 %x, i32 %y) { + %1 = icmp uge i32 %x, %y + %2 = icmp eq i32 %y, 0 + %3 = or i1 %1, %2 + ret i1 %3 +} +; CHECK-LABEL: @or_icmp3( +; CHECK: %[[cmp:.*]] = icmp uge i32 %x, %y +; CHECK: ret i1 %[[cmp]] |

