Chris Lattner | 74e9547 | 2002-05-06 05:43:36 +0000 | [diff] [blame] | 1 | ; This test makes sure that these instructions are properly eliminated. |
| 2 | ; |
| 3 | |
Chris Lattner | f6f95d0 | 2002-08-02 19:27:58 +0000 | [diff] [blame] | 4 | ; RUN: if as < %s | opt -instcombine | dis | grep and |
Chris Lattner | 74e9547 | 2002-05-06 05:43:36 +0000 | [diff] [blame] | 5 | ; RUN: then exit 1 |
| 6 | ; RUN: else exit 0 |
| 7 | ; RUN: fi |
| 8 | |
| 9 | implementation |
| 10 | |
Chris Lattner | 2deaf77 | 2003-02-18 18:06:44 +0000 | [diff] [blame] | 11 | int %test1(int %A) { |
Chris Lattner | 74e9547 | 2002-05-06 05:43:36 +0000 | [diff] [blame] | 12 | %B = and int %A, 0 ; zero result |
| 13 | ret int %B |
| 14 | } |
| 15 | |
Chris Lattner | 2deaf77 | 2003-02-18 18:06:44 +0000 | [diff] [blame] | 16 | int %test2(int %A) { |
Chris Lattner | 74e9547 | 2002-05-06 05:43:36 +0000 | [diff] [blame] | 17 | %B = and int %A, -1 ; noop |
| 18 | ret int %B |
| 19 | } |
| 20 | |
Chris Lattner | 2deaf77 | 2003-02-18 18:06:44 +0000 | [diff] [blame] | 21 | bool %test3(bool %A) { |
Chris Lattner | 74e9547 | 2002-05-06 05:43:36 +0000 | [diff] [blame] | 22 | %B = and bool %A, false ; always = false |
| 23 | ret bool %B |
| 24 | } |
| 25 | |
Chris Lattner | 2deaf77 | 2003-02-18 18:06:44 +0000 | [diff] [blame] | 26 | bool %test4(bool %A) { |
Chris Lattner | 74e9547 | 2002-05-06 05:43:36 +0000 | [diff] [blame] | 27 | %B = and bool %A, true ; noop |
| 28 | ret bool %B |
| 29 | } |
| 30 | |
Chris Lattner | 2deaf77 | 2003-02-18 18:06:44 +0000 | [diff] [blame] | 31 | int %test5(int %A) { |
Chris Lattner | 6022ad0 | 2002-05-06 05:51:26 +0000 | [diff] [blame] | 32 | %B = and int %A, %A |
| 33 | ret int %B |
| 34 | } |
| 35 | |
Chris Lattner | 2deaf77 | 2003-02-18 18:06:44 +0000 | [diff] [blame] | 36 | bool %test6(bool %A) { |
Chris Lattner | 6022ad0 | 2002-05-06 05:51:26 +0000 | [diff] [blame] | 37 | %B = and bool %A, %A |
| 38 | ret bool %B |
| 39 | } |
Chris Lattner | 74e9547 | 2002-05-06 05:43:36 +0000 | [diff] [blame] | 40 | |
Chris Lattner | c5fccf3 | 2003-02-18 19:28:47 +0000 | [diff] [blame] | 41 | int %test7(int %A) { ; A & ~A == 0 |
| 42 | %NotA = xor int %A, -1 |
| 43 | %B = and int %A, %NotA |
| 44 | ret int %B |
Chris Lattner | f67d52d | 2003-03-10 22:43:56 +0000 | [diff] [blame^] | 45 | } |
| 46 | |
| 47 | ubyte %test8(ubyte %A) { ; AND associates |
| 48 | %B = and ubyte %A, 3 |
| 49 | %C = and ubyte %B, 4 |
| 50 | ret ubyte %C |
| 51 | } |