| 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 sh |
| 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 | 87301bc | 2003-03-10 18:20:53 +0000 | [diff] [blame] | 11 | int %test1(int %A) { |
| Chris Lattner | 74e9547 | 2002-05-06 05:43:36 +0000 | [diff] [blame] | 12 | %B = shl int %A, ubyte 0 |
| 13 | ret int %B |
| 14 | } |
| 15 | |
| Chris Lattner | 87301bc | 2003-03-10 18:20:53 +0000 | [diff] [blame] | 16 | int %test2(ubyte %A) { |
| Chris Lattner | 74e9547 | 2002-05-06 05:43:36 +0000 | [diff] [blame] | 17 | %B = shl int 0, ubyte %A |
| 18 | ret int %B |
| 19 | } |
| 20 | |
| Chris Lattner | 87301bc | 2003-03-10 18:20:53 +0000 | [diff] [blame] | 21 | int %test3(int %A) { |
| Chris Lattner | 74e9547 | 2002-05-06 05:43:36 +0000 | [diff] [blame] | 22 | %B = shr int %A, ubyte 0 |
| 23 | ret int %B |
| 24 | } |
| 25 | |
| Chris Lattner | 87301bc | 2003-03-10 18:20:53 +0000 | [diff] [blame] | 26 | int %test4(ubyte %A) { |
| Chris Lattner | 74e9547 | 2002-05-06 05:43:36 +0000 | [diff] [blame] | 27 | %B = shr int 0, ubyte %A |
| 28 | ret int %B |
| 29 | } |
| 30 | |
| Chris Lattner | 87301bc | 2003-03-10 18:20:53 +0000 | [diff] [blame] | 31 | uint %test5(uint %A) { |
| Chris Lattner | bcb8138 | 2002-05-06 16:11:31 +0000 | [diff] [blame] | 32 | %B = shr uint %A, ubyte 32 ;; shift all bits out |
| 33 | ret uint %B |
| Chris Lattner | 74e9547 | 2002-05-06 05:43:36 +0000 | [diff] [blame] | 34 | } |
| 35 | |
| Chris Lattner | d97f054 | 2003-03-10 19:16:20 +0000 | [diff] [blame^] | 36 | uint %test5a(uint %A) { |
| 37 | %B = shl uint %A, ubyte 32 ;; shift all bits out |
| 38 | ret uint %B |
| 39 | } |
| 40 | |
| Chris Lattner | 025e58d | 2002-09-10 23:03:10 +0000 | [diff] [blame] | 41 | uint %test6(uint %A) { |
| 42 | %B = shl uint %A, ubyte 1 ;; convert to an add instruction |
| 43 | ret uint %B |
| 44 | } |
| Chris Lattner | ee5c8a9 | 2002-10-08 16:10:35 +0000 | [diff] [blame] | 45 | |
| 46 | int %test7(ubyte %A) { |
| 47 | %B = shr int -1, ubyte %A ;; Always equal to -1 |
| 48 | ret int %B |
| 49 | } |
| Chris Lattner | d97f054 | 2003-03-10 19:16:20 +0000 | [diff] [blame^] | 50 | |
| 51 | ubyte %test8(ubyte %A) { ;; (A << 5) << 3 === A << 8 == 0 |
| 52 | %B = shl ubyte %A, ubyte 5 |
| 53 | %C = shl ubyte %B, ubyte 3 |
| 54 | ret ubyte %C |
| 55 | } |
| 56 | |
| 57 | ubyte %test9(ubyte %A) { ;; (A << 7) >> 7 === A & 1 |
| 58 | %B = shl ubyte %A, ubyte 7 |
| 59 | %C = shr ubyte %B, ubyte 7 |
| 60 | ret ubyte %C |
| 61 | } |
| 62 | |
| 63 | ubyte %test10(ubyte %A) { ;; (A >> 7) << 7 === A & 128 |
| 64 | %B = shr ubyte %A, ubyte 7 |
| 65 | %C = shl ubyte %B, ubyte 7 |
| 66 | ret ubyte %C |
| 67 | } |
| 68 | |
| 69 | ubyte %test11(ubyte %A) { ;; (A >> 3) << 4 == (A & 0x1F) << 1 |
| 70 | %B = shr ubyte %A, ubyte 3 |
| 71 | %C = shl ubyte %B, ubyte 4 |
| 72 | ret ubyte %C |
| 73 | } |
| 74 | |