and.ll revision 4daaebf170a1b39bf3c2d43a690ceb94165708f3
1; This test makes sure that these instructions are properly eliminated. 2; 3 4; RUN: as < %s | opt -instcombine | dis | not grep and 5 6implementation 7 8int %test1(int %A) { 9 %B = and int %A, 0 ; zero result 10 ret int %B 11} 12 13int %test2(int %A) { 14 %B = and int %A, -1 ; noop 15 ret int %B 16} 17 18bool %test3(bool %A) { 19 %B = and bool %A, false ; always = false 20 ret bool %B 21} 22 23bool %test4(bool %A) { 24 %B = and bool %A, true ; noop 25 ret bool %B 26} 27 28int %test5(int %A) { 29 %B = and int %A, %A 30 ret int %B 31} 32 33bool %test6(bool %A) { 34 %B = and bool %A, %A 35 ret bool %B 36} 37 38int %test7(int %A) { ; A & ~A == 0 39 %NotA = xor int %A, -1 40 %B = and int %A, %NotA 41 ret int %B 42} 43 44ubyte %test8(ubyte %A) { ; AND associates 45 %B = and ubyte %A, 3 46 %C = and ubyte %B, 4 47 ret ubyte %C 48} 49 50bool %test9(int %A) { 51 %B = and int %A, -2147483648 ; Test of sign bit, convert to setle %A, 0 52 %C = cast int %B to bool 53 ret bool %C 54} 55 56bool %test9(uint %A) { 57 %B = and uint %A, 2147483648 ; Test of sign bit, convert to setle %A, 0 58 %C = cast uint %B to bool 59 ret bool %C 60} 61 62uint %test10(uint %A) { 63 %B = and uint %A, 12 64 %C = xor uint %B, 15 65 %D = and uint %C, 1 ; (X ^ C1) & C2 --> (X & C2) ^ (C1&C2) 66 ret uint %D 67} 68 69uint %test11(uint %A, uint* %P) { 70 %B = or uint %A, 3 71 %C = xor uint %B, 12 72 store uint %C, uint* %P ; additional use of C 73 %D = and uint %C, 3 ; %C = and uint %B, 3 --> 3 74 ret uint %D 75} 76 77 78