diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2011-04-28 16:58:40 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2011-04-28 16:58:40 +0000 |
commit | 4145c0d3b1ee90b9e9a964efe30bf820ba8111c6 (patch) | |
tree | 7e33d9ef47df86b96e87b688af23c621afb0a1ae /llvm/test | |
parent | 4f012fd0a1fb2bf0ae89992546dbac32841109bf (diff) | |
download | bcm5719-llvm-4145c0d3b1ee90b9e9a964efe30bf820ba8111c6.tar.gz bcm5719-llvm-4145c0d3b1ee90b9e9a964efe30bf820ba8111c6.zip |
InstCombine: Merge "(trunc x) == C1 & (and x, CA) == C2" into a single and+icmp.
This happens when GVN widens loads. Part of PR6627.
llvm-svn: 130405
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/Transforms/InstCombine/merge-icmp.ll | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstCombine/merge-icmp.ll b/llvm/test/Transforms/InstCombine/merge-icmp.ll new file mode 100644 index 00000000000..00020b157e0 --- /dev/null +++ b/llvm/test/Transforms/InstCombine/merge-icmp.ll @@ -0,0 +1,29 @@ +; RUN: opt -S -instcombine < %s | FileCheck %s + +define i1 @test1(i16* %x) { + %load = load i16* %x, align 4 + %trunc = trunc i16 %load to i8 + %cmp1 = icmp eq i8 %trunc, 127 + %and = and i16 %load, -256 + %cmp2 = icmp eq i16 %and, 17664 + %or = and i1 %cmp1, %cmp2 + ret i1 %or +; CHECK: @test1 +; CHECK-NEXT: load i16 +; CHECK-NEXT: icmp eq i16 %load, 17791 +; CHECK-NEXT: ret i1 +} + +define i1 @test2(i16* %x) { + %load = load i16* %x, align 4 + %and = and i16 %load, -256 + %cmp1 = icmp eq i16 %and, 32512 + %trunc = trunc i16 %load to i8 + %cmp2 = icmp eq i8 %trunc, 69 + %or = and i1 %cmp1, %cmp2 + ret i1 %or +; CHECK: @test2 +; CHECK-NEXT: load i16 +; CHECK-NEXT: icmp eq i16 %load, 32581 +; CHECK-NEXT: ret i1 +} |