Nate Begeman | 1b0674c | 2005-08-03 18:27:17 +0000 | [diff] [blame] | 1 | ; All of these ands and shifts should be folded into rlwimi's |
Tanya Lattner | cfab3da | 2008-02-19 08:07:33 +0000 | [diff] [blame^] | 2 | ; RUN: llvm-as < %s | llc -march=ppc32 -o %t -f |
| 3 | ; RUN: not grep and %t |
| 4 | ; RUN: not grep srawi %t |
| 5 | ; RUN: not grep srwi %t |
| 6 | ; RUN: not grep slwi %t |
Dan Gohman | 28beeea | 2007-08-15 13:36:28 +0000 | [diff] [blame] | 7 | ; RUN: grep rlwinm %t | count 8 |
Nate Begeman | 1b0674c | 2005-08-03 18:27:17 +0000 | [diff] [blame] | 8 | |
Tanya Lattner | cfab3da | 2008-02-19 08:07:33 +0000 | [diff] [blame^] | 9 | define i32 @test1(i32 %a) { |
Nate Begeman | 1b0674c | 2005-08-03 18:27:17 +0000 | [diff] [blame] | 10 | entry: |
Tanya Lattner | cfab3da | 2008-02-19 08:07:33 +0000 | [diff] [blame^] | 11 | %tmp.1 = and i32 %a, 268431360 ; <i32> [#uses=1] |
| 12 | ret i32 %tmp.1 |
Nate Begeman | 1b0674c | 2005-08-03 18:27:17 +0000 | [diff] [blame] | 13 | } |
| 14 | |
Tanya Lattner | cfab3da | 2008-02-19 08:07:33 +0000 | [diff] [blame^] | 15 | define i32 @test2(i32 %a) { |
Nate Begeman | 1b0674c | 2005-08-03 18:27:17 +0000 | [diff] [blame] | 16 | entry: |
Tanya Lattner | cfab3da | 2008-02-19 08:07:33 +0000 | [diff] [blame^] | 17 | %tmp.1 = and i32 %a, -268435441 ; <i32> [#uses=1] |
| 18 | ret i32 %tmp.1 |
Nate Begeman | 1b0674c | 2005-08-03 18:27:17 +0000 | [diff] [blame] | 19 | } |
Chris Lattner | 645f381 | 2005-08-09 20:24:16 +0000 | [diff] [blame] | 20 | |
Tanya Lattner | cfab3da | 2008-02-19 08:07:33 +0000 | [diff] [blame^] | 21 | define i32 @test3(i32 %a) { |
Chris Lattner | 645f381 | 2005-08-09 20:24:16 +0000 | [diff] [blame] | 22 | entry: |
Tanya Lattner | cfab3da | 2008-02-19 08:07:33 +0000 | [diff] [blame^] | 23 | %tmp.2 = ashr i32 %a, 8 ; <i32> [#uses=1] |
| 24 | %tmp.3 = and i32 %tmp.2, 255 ; <i32> [#uses=1] |
| 25 | ret i32 %tmp.3 |
Chris Lattner | 645f381 | 2005-08-09 20:24:16 +0000 | [diff] [blame] | 26 | } |
| 27 | |
Tanya Lattner | cfab3da | 2008-02-19 08:07:33 +0000 | [diff] [blame^] | 28 | define i32 @test4(i32 %a) { |
Chris Lattner | 645f381 | 2005-08-09 20:24:16 +0000 | [diff] [blame] | 29 | entry: |
Tanya Lattner | cfab3da | 2008-02-19 08:07:33 +0000 | [diff] [blame^] | 30 | %tmp.3 = lshr i32 %a, 8 ; <i32> [#uses=1] |
| 31 | %tmp.4 = and i32 %tmp.3, 255 ; <i32> [#uses=1] |
| 32 | ret i32 %tmp.4 |
Chris Lattner | 645f381 | 2005-08-09 20:24:16 +0000 | [diff] [blame] | 33 | } |
| 34 | |
Tanya Lattner | cfab3da | 2008-02-19 08:07:33 +0000 | [diff] [blame^] | 35 | define i32 @test5(i32 %a) { |
Chris Lattner | 645f381 | 2005-08-09 20:24:16 +0000 | [diff] [blame] | 36 | entry: |
Tanya Lattner | cfab3da | 2008-02-19 08:07:33 +0000 | [diff] [blame^] | 37 | %tmp.2 = shl i32 %a, 8 ; <i32> [#uses=1] |
| 38 | %tmp.3 = and i32 %tmp.2, -8388608 ; <i32> [#uses=1] |
| 39 | ret i32 %tmp.3 |
Chris Lattner | 645f381 | 2005-08-09 20:24:16 +0000 | [diff] [blame] | 40 | } |
| 41 | |
Tanya Lattner | cfab3da | 2008-02-19 08:07:33 +0000 | [diff] [blame^] | 42 | define i32 @test6(i32 %a) { |
Chris Lattner | 645f381 | 2005-08-09 20:24:16 +0000 | [diff] [blame] | 43 | entry: |
Tanya Lattner | cfab3da | 2008-02-19 08:07:33 +0000 | [diff] [blame^] | 44 | %tmp.1 = and i32 %a, 65280 ; <i32> [#uses=1] |
| 45 | %tmp.2 = ashr i32 %tmp.1, 8 ; <i32> [#uses=1] |
| 46 | ret i32 %tmp.2 |
Chris Lattner | 645f381 | 2005-08-09 20:24:16 +0000 | [diff] [blame] | 47 | } |
| 48 | |
Tanya Lattner | cfab3da | 2008-02-19 08:07:33 +0000 | [diff] [blame^] | 49 | define i32 @test7(i32 %a) { |
Chris Lattner | 645f381 | 2005-08-09 20:24:16 +0000 | [diff] [blame] | 50 | entry: |
Tanya Lattner | cfab3da | 2008-02-19 08:07:33 +0000 | [diff] [blame^] | 51 | %tmp.1 = and i32 %a, 65280 ; <i32> [#uses=1] |
| 52 | %tmp.2 = lshr i32 %tmp.1, 8 ; <i32> [#uses=1] |
| 53 | ret i32 %tmp.2 |
Chris Lattner | 645f381 | 2005-08-09 20:24:16 +0000 | [diff] [blame] | 54 | } |
| 55 | |
Tanya Lattner | cfab3da | 2008-02-19 08:07:33 +0000 | [diff] [blame^] | 56 | define i32 @test8(i32 %a) { |
Chris Lattner | 645f381 | 2005-08-09 20:24:16 +0000 | [diff] [blame] | 57 | entry: |
Tanya Lattner | cfab3da | 2008-02-19 08:07:33 +0000 | [diff] [blame^] | 58 | %tmp.1 = and i32 %a, 16711680 ; <i32> [#uses=1] |
| 59 | %tmp.2 = shl i32 %tmp.1, 8 ; <i32> [#uses=1] |
| 60 | ret i32 %tmp.2 |
Chris Lattner | 645f381 | 2005-08-09 20:24:16 +0000 | [diff] [blame] | 61 | } |