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