summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2010-12-11 09:42:59 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2010-12-11 09:42:59 +0000
commit20e3b4b380e949af32eeb4f184c51bfd62286f1a (patch)
tree7f97eebcd1c8322d1e0257e5c642042e2bd55c39 /test
parenta9688c4b5769be7a6a89350888b3173c97fe87ed (diff)
downloadllvm-20e3b4b380e949af32eeb4f184c51bfd62286f1a.tar.gz
llvm-20e3b4b380e949af32eeb4f184c51bfd62286f1a.tar.bz2
llvm-20e3b4b380e949af32eeb4f184c51bfd62286f1a.tar.xz
Factor the (x & 2^n) ? 2^m : 0 instcombine into its own method and generalize it
to catch cases where n != m with a shift. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121608 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r--test/Transforms/InstCombine/select.ll25
1 files changed, 25 insertions, 0 deletions
diff --git a/test/Transforms/InstCombine/select.ll b/test/Transforms/InstCombine/select.ll
index 120d158aa6..e9efa74e1a 100644
--- a/test/Transforms/InstCombine/select.ll
+++ b/test/Transforms/InstCombine/select.ll
@@ -223,6 +223,31 @@ define i32 @test15d(i32 %X) {
; CHECK: ret i32 %t1
}
+;; (a & 128) ? 256 : 0
+define i32 @test15e(i32 %X) {
+ %t1 = and i32 %X, 128
+ %t2 = icmp ne i32 %t1, 0
+ %t3 = select i1 %t2, i32 256, i32 0
+ ret i32 %t3
+; CHECK: @test15e
+; CHECK: %t1 = shl i32 %X, 1
+; CHECK: and i32 %t1, 256
+; CHECK: ret i32
+}
+
+;; (a & 128) ? 0 : 256
+define i32 @test15f(i32 %X) {
+ %t1 = and i32 %X, 128
+ %t2 = icmp ne i32 %t1, 0
+ %t3 = select i1 %t2, i32 0, i32 256
+ ret i32 %t3
+; CHECK: @test15f
+; CHECK: %t1 = shl i32 %X, 1
+; CHECK: and i32 %t1, 256
+; CHECK: xor i32 %{{.*}}, 256
+; CHECK: ret i32
+}
+
define i32 @test16(i1 %C, i32* %P) {
%P2 = select i1 %C, i32* %P, i32* null
%V = load i32* %P2