133a90b18e084c15f4e2558f9aa8ade4227b39f51Chris Lattner; This test makes sure that these instructions are properly eliminated.
233a90b18e084c15f4e2558f9aa8ade4227b39f51Chris Lattner;
333a90b18e084c15f4e2558f9aa8ade4227b39f51Chris Lattner
43e054fe9efc64596534bbae0d1634ed15181d642Dan Gohman; RUN: opt < %s -instcombine -S | not grep and
533a90b18e084c15f4e2558f9aa8ade4227b39f51Chris Lattner
676806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i32 @test1(i32 %A) {
776806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ; zero result
876806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %B = and i32 %A, 0              ; <i32> [#uses=1]
976806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i32 %B
1033a90b18e084c15f4e2558f9aa8ade4227b39f51Chris Lattner}
1133a90b18e084c15f4e2558f9aa8ade4227b39f51Chris Lattner
1276806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i32 @test2(i32 %A) {
1376806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ; noop
1476806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %B = and i32 %A, -1             ; <i32> [#uses=1]
1576806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i32 %B
1633a90b18e084c15f4e2558f9aa8ade4227b39f51Chris Lattner}
1733a90b18e084c15f4e2558f9aa8ade4227b39f51Chris Lattner
1876806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i1 @test3(i1 %A) {
1976806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ; always = false
2076806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %B = and i1 %A, false           ; <i1> [#uses=1]
2176806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i1 %B
2233a90b18e084c15f4e2558f9aa8ade4227b39f51Chris Lattner}
2333a90b18e084c15f4e2558f9aa8ade4227b39f51Chris Lattner
2476806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i1 @test4(i1 %A) {
2576806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ; noop
2676806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %B = and i1 %A, true            ; <i1> [#uses=1]
2776806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i1 %B
2833a90b18e084c15f4e2558f9aa8ade4227b39f51Chris Lattner}
2933a90b18e084c15f4e2558f9aa8ade4227b39f51Chris Lattner
3076806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i32 @test5(i32 %A) {
3176806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %B = and i32 %A, %A             ; <i32> [#uses=1]
3276806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i32 %B
33829b79dd8ca141b38ebbf62fcac6155e5d99f435Chris Lattner}
34829b79dd8ca141b38ebbf62fcac6155e5d99f435Chris Lattner
3576806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i1 @test6(i1 %A) {
3676806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %B = and i1 %A, %A              ; <i1> [#uses=1]
3776806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i1 %B
38829b79dd8ca141b38ebbf62fcac6155e5d99f435Chris Lattner}
3933a90b18e084c15f4e2558f9aa8ade4227b39f51Chris Lattner
4076806b6a434ad5477727d3733d18fe309a1281feTanya Lattner; A & ~A == 0
4176806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i32 @test7(i32 %A) {
4276806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %NotA = xor i32 %A, -1          ; <i32> [#uses=1]
4376806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %B = and i32 %A, %NotA          ; <i32> [#uses=1]
4476806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i32 %B
451b77300154ca8cbf1594475712811228f898149cChris Lattner}
461b77300154ca8cbf1594475712811228f898149cChris Lattner
4776806b6a434ad5477727d3733d18fe309a1281feTanya Lattner; AND associates
4876806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i8 @test8(i8 %A) {
4976806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %B = and i8 %A, 3               ; <i8> [#uses=1]
5076806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %C = and i8 %B, 4               ; <i8> [#uses=1]
5176806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i8 %C
521b77300154ca8cbf1594475712811228f898149cChris Lattner}
538408add00a690046ddbc3e5d9d19c6b640444f65Chris Lattner
5476806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i1 @test9(i32 %A) {
5576806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ; Test of sign bit, convert to setle %A, 0
5676806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %B = and i32 %A, -2147483648            ; <i32> [#uses=1]
5776806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %C = icmp ne i32 %B, 0          ; <i1> [#uses=1]
5876806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i1 %C
59a73fede7143911085186458d8b28d52cfb26396cChris Lattner}
60a73fede7143911085186458d8b28d52cfb26396cChris Lattner
6176806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i1 @test9a(i32 %A) {
6276806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ; Test of sign bit, convert to setle %A, 0
6376806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %B = and i32 %A, -2147483648            ; <i32> [#uses=1]
6476806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %C = icmp ne i32 %B, 0          ; <i1> [#uses=1]
6576806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i1 %C
66a73fede7143911085186458d8b28d52cfb26396cChris Lattner}
672b8e478b5d31f5fb5bf9bb5b9cf8ebea6350ffceChris Lattner
6876806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i32 @test10(i32 %A) {
6976806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %B = and i32 %A, 12             ; <i32> [#uses=1]
7076806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %C = xor i32 %B, 15             ; <i32> [#uses=1]
7176806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ; (X ^ C1) & C2 --> (X & C2) ^ (C1&C2)
7276806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %D = and i32 %C, 1              ; <i32> [#uses=1]
7376806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i32 %D
742b8e478b5d31f5fb5bf9bb5b9cf8ebea6350ffceChris Lattner}
754daaebf170a1b39bf3c2d43a690ceb94165708f3Chris Lattner
7676806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i32 @test11(i32 %A, i32* %P) {
7776806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %B = or i32 %A, 3               ; <i32> [#uses=1]
7876806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %C = xor i32 %B, 12             ; <i32> [#uses=2]
7976806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ; additional use of C
8076806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        store i32 %C, i32* %P
8176806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ; %C = and uint %B, 3 --> 3
8276806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %D = and i32 %C, 3              ; <i32> [#uses=1]
8376806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i32 %D
844daaebf170a1b39bf3c2d43a690ceb94165708f3Chris Lattner}
854daaebf170a1b39bf3c2d43a690ceb94165708f3Chris Lattner
8676806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i1 @test12(i32 %A, i32 %B) {
8776806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %C1 = icmp ult i32 %A, %B               ; <i1> [#uses=1]
8876806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %C2 = icmp ule i32 %A, %B               ; <i1> [#uses=1]
8976806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ; (A < B) & (A <= B) === (A < B)
9076806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %D = and i1 %C1, %C2            ; <i1> [#uses=1]
9176806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i1 %D
9212642fda090658215b1f20c7d9cecb37b5b6560cChris Lattner}
9312642fda090658215b1f20c7d9cecb37b5b6560cChris Lattner
9476806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i1 @test13(i32 %A, i32 %B) {
9576806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %C1 = icmp ult i32 %A, %B               ; <i1> [#uses=1]
9676806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %C2 = icmp ugt i32 %A, %B               ; <i1> [#uses=1]
9776806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ; (A < B) & (A > B) === false
9876806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %D = and i1 %C1, %C2            ; <i1> [#uses=1]
9976806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i1 %D
10012642fda090658215b1f20c7d9cecb37b5b6560cChris Lattner}
1014daaebf170a1b39bf3c2d43a690ceb94165708f3Chris Lattner
10276806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i1 @test14(i8 %A) {
10376806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %B = and i8 %A, -128            ; <i8> [#uses=1]
10476806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %C = icmp ne i8 %B, 0           ; <i1> [#uses=1]
10576806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i1 %C
106545513918a3031a4d0588f5960cbbe685a3e6bdaChris Lattner}
1070daee350cf4d2f6a3a3c2edd6e3efe8a8a8795b7Chris Lattner
10876806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i8 @test15(i8 %A) {
10976806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %B = lshr i8 %A, 7              ; <i8> [#uses=1]
11076806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ; Always equals zero
11176806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %C = and i8 %B, 2               ; <i8> [#uses=1]
11276806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i8 %C
1130daee350cf4d2f6a3a3c2edd6e3efe8a8a8795b7Chris Lattner}
1140daee350cf4d2f6a3a3c2edd6e3efe8a8a8795b7Chris Lattner
11576806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i8 @test16(i8 %A) {
11676806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %B = shl i8 %A, 2               ; <i8> [#uses=1]
11776806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %C = and i8 %B, 3               ; <i8> [#uses=1]
11876806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i8 %C
1190daee350cf4d2f6a3a3c2edd6e3efe8a8a8795b7Chris Lattner}
120b80e3ada7b15ae299dabe21bef0f06adbf0eb077Chris Lattner
12176806b6a434ad5477727d3733d18fe309a1281feTanya Lattner;; ~(~X & Y) --> (X | ~Y)
12276806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i8 @test17(i8 %X, i8 %Y) {
12376806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %B = xor i8 %X, -1              ; <i8> [#uses=1]
12476806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %C = and i8 %B, %Y              ; <i8> [#uses=1]
12576806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %D = xor i8 %C, -1              ; <i8> [#uses=1]
12676806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i8 %D
127b80e3ada7b15ae299dabe21bef0f06adbf0eb077Chris Lattner}
128b80e3ada7b15ae299dabe21bef0f06adbf0eb077Chris Lattner
12976806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i1 @test18(i32 %A) {
13076806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %B = and i32 %A, -128           ; <i32> [#uses=1]
13176806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ;; C >= 128
13276806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %C = icmp ne i32 %B, 0          ; <i1> [#uses=1]
13376806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i1 %C
1347502ae664093e3274c8807c94a4c7504be24a456Chris Lattner}
1357502ae664093e3274c8807c94a4c7504be24a456Chris Lattner
13676806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i1 @test18a(i8 %A) {
13776806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %B = and i8 %A, -2              ; <i8> [#uses=1]
13876806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %C = icmp eq i8 %B, 0           ; <i1> [#uses=1]
13976806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i1 %C
140dffb4455035df1445891b7d6a657f4ccbb67ab0cChris Lattner}
141dffb4455035df1445891b7d6a657f4ccbb67ab0cChris Lattner
14276806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i32 @test19(i32 %A) {
14376806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %B = shl i32 %A, 3              ; <i32> [#uses=1]
14476806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ;; Clearing a zero bit
14576806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %C = and i32 %B, -2             ; <i32> [#uses=1]
14676806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i32 %C
14771dd80105531c7d1df9719be03abd0e55f7e98b4Chris Lattner}
14871dd80105531c7d1df9719be03abd0e55f7e98b4Chris Lattner
14976806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i8 @test20(i8 %A) {
15076806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %C = lshr i8 %A, 7              ; <i8> [#uses=1]
15176806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ;; Unneeded
15276806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %D = and i8 %C, 1               ; <i8> [#uses=1]
15376806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i8 %D
15471dd80105531c7d1df9719be03abd0e55f7e98b4Chris Lattner}
15571dd80105531c7d1df9719be03abd0e55f7e98b4Chris Lattner
15676806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i1 @test22(i32 %A) {
15776806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %B = icmp eq i32 %A, 1          ; <i1> [#uses=1]
15876806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %C = icmp sge i32 %A, 3         ; <i1> [#uses=1]
15976806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ;; false
16076806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %D = and i1 %B, %C              ; <i1> [#uses=1]
16176806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i1 %D
1623b03395b38ea901803806c7b227980308ca21041Chris Lattner}
1633b03395b38ea901803806c7b227980308ca21041Chris Lattner
16476806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i1 @test23(i32 %A) {
16576806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %B = icmp sgt i32 %A, 1         ; <i1> [#uses=1]
16676806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %C = icmp sle i32 %A, 2         ; <i1> [#uses=1]
16776806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ;; A == 2
16876806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %D = and i1 %B, %C              ; <i1> [#uses=1]
16976806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i1 %D
1703b03395b38ea901803806c7b227980308ca21041Chris Lattner}
1713b03395b38ea901803806c7b227980308ca21041Chris Lattner
17276806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i1 @test24(i32 %A) {
17376806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %B = icmp sgt i32 %A, 1         ; <i1> [#uses=1]
17476806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %C = icmp ne i32 %A, 2          ; <i1> [#uses=1]
17576806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ;; A > 2
17676806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %D = and i1 %B, %C              ; <i1> [#uses=1]
17776806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i1 %D
1783b03395b38ea901803806c7b227980308ca21041Chris Lattner}
1793b03395b38ea901803806c7b227980308ca21041Chris Lattner
18076806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i1 @test25(i32 %A) {
18176806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %B = icmp sge i32 %A, 50                ; <i1> [#uses=1]
18276806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %C = icmp slt i32 %A, 100               ; <i1> [#uses=1]
18376806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ;; (A-50) <u 50
18476806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %D = and i1 %B, %C              ; <i1> [#uses=1]
18576806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i1 %D
1863b03395b38ea901803806c7b227980308ca21041Chris Lattner}
1873b03395b38ea901803806c7b227980308ca21041Chris Lattner
18876806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i1 @test26(i32 %A) {
189377a5c1a87b879b7a05a635ed7bbf125b0b61e28David Majnemer        %B = icmp ne i32 %A, 49         ; <i1> [#uses=1]
190377a5c1a87b879b7a05a635ed7bbf125b0b61e28David Majnemer        %C = icmp ne i32 %A, 50         ; <i1> [#uses=1]
191377a5c1a87b879b7a05a635ed7bbf125b0b61e28David Majnemer        ;; (A-49) > 1
19276806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %D = and i1 %B, %C              ; <i1> [#uses=1]
19376806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i1 %D
1943b03395b38ea901803806c7b227980308ca21041Chris Lattner}
1953b03395b38ea901803806c7b227980308ca21041Chris Lattner
19676806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i8 @test27(i8 %A) {
19776806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %B = and i8 %A, 4               ; <i8> [#uses=1]
19876806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %C = sub i8 %B, 16              ; <i8> [#uses=1]
19976806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ;; 0xF0
20076806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %D = and i8 %C, -16             ; <i8> [#uses=1]
20176806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %E = add i8 %D, 16              ; <i8> [#uses=1]
20276806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i8 %E
2038797f5975878b7daab4ef15787dc649f6088c073Chris Lattner}
204e768ff2cdca504c42b5bf1ab9c7c57b54be381a3Chris Lattner
20576806b6a434ad5477727d3733d18fe309a1281feTanya Lattner;; This is juse a zero extending shr.
20676806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i32 @test28(i32 %X) {
20776806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ;; Sign extend
20876806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %Y = ashr i32 %X, 24            ; <i32> [#uses=1]
20976806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ;; Mask out sign bits
21076806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %Z = and i32 %Y, 255            ; <i32> [#uses=1]
21176806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i32 %Z
212e768ff2cdca504c42b5bf1ab9c7c57b54be381a3Chris Lattner}
213e768ff2cdca504c42b5bf1ab9c7c57b54be381a3Chris Lattner
21476806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i32 @test29(i8 %X) {
21576806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %Y = zext i8 %X to i32          ; <i32> [#uses=1]
21676806b6a434ad5477727d3733d18fe309a1281feTanya Lattner       ;; Zero extend makes this unneeded.
21776806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %Z = and i32 %Y, 255            ; <i32> [#uses=1]
21876806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i32 %Z
219e768ff2cdca504c42b5bf1ab9c7c57b54be381a3Chris Lattner}
220e768ff2cdca504c42b5bf1ab9c7c57b54be381a3Chris Lattner
22176806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i32 @test30(i1 %X) {
22276806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %Y = zext i1 %X to i32          ; <i32> [#uses=1]
22376806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %Z = and i32 %Y, 1              ; <i32> [#uses=1]
22476806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i32 %Z
225cb94575bc6c5f2e922c4180822ed333bc74aeddfChris Lattner}
2265962b3b0bf3c74ef715c666f6080cf4cfee58ea0Chris Lattner
22776806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i32 @test31(i1 %X) {
22876806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %Y = zext i1 %X to i32          ; <i32> [#uses=1]
22976806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %Z = shl i32 %Y, 4              ; <i32> [#uses=1]
23076806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %A = and i32 %Z, 16             ; <i32> [#uses=1]
23176806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i32 %A
2325962b3b0bf3c74ef715c666f6080cf4cfee58ea0Chris Lattner}
2335962b3b0bf3c74ef715c666f6080cf4cfee58ea0Chris Lattner
23476806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i32 @test32(i32 %In) {
23576806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %Y = and i32 %In, 16            ; <i32> [#uses=1]
23676806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %Z = lshr i32 %Y, 2             ; <i32> [#uses=1]
23776806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %A = and i32 %Z, 1              ; <i32> [#uses=1]
23876806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i32 %A
2395962b3b0bf3c74ef715c666f6080cf4cfee58ea0Chris Lattner}
2402f2c3e43928f6a23f7ecf7d158d4b605e64db6b4Chris Lattner
24176806b6a434ad5477727d3733d18fe309a1281feTanya Lattner;; Code corresponding to one-bit bitfield ^1.
24276806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i32 @test33(i32 %b) {
24376806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %tmp.4.mask = and i32 %b, 1             ; <i32> [#uses=1]
24476806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %tmp.10 = xor i32 %tmp.4.mask, 1                ; <i32> [#uses=1]
24576806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %tmp.12 = and i32 %b, -2                ; <i32> [#uses=1]
24676806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %tmp.13 = or i32 %tmp.12, %tmp.10               ; <i32> [#uses=1]
24776806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i32 %tmp.13
2482f2c3e43928f6a23f7ecf7d158d4b605e64db6b4Chris Lattner}
2492f2c3e43928f6a23f7ecf7d158d4b605e64db6b4Chris Lattner
25076806b6a434ad5477727d3733d18fe309a1281feTanya Lattnerdefine i32 @test34(i32 %A, i32 %B) {
25176806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %tmp.2 = or i32 %B, %A          ; <i32> [#uses=1]
25276806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        %tmp.4 = and i32 %tmp.2, %B             ; <i32> [#uses=1]
25376806b6a434ad5477727d3733d18fe309a1281feTanya Lattner        ret i32 %tmp.4
2541f7b4e685e6ae751519c33d703d8292a117579ffChris Lattner}
2551f7b4e685e6ae751519c33d703d8292a117579ffChris Lattner
256