| Nate Begeman | b3b86d5 | 2005-08-03 18:27:17 +0000 | [diff] [blame] | 1 | ; All of these ands and shifts should be folded into rlwimi's | 
| Dan Gohman | c8054d9 | 2009-09-09 00:09:15 +0000 | [diff] [blame] | 2 | ; RUN: llc < %s -march=ppc32 -o %t | 
| Tanya Lattner | a99d8b5 | 2008-02-19 08:07:33 +0000 | [diff] [blame] | 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 | f9dd170 | 2007-08-15 13:36:28 +0000 | [diff] [blame] | 7 | ; RUN: grep rlwinm %t | count 8 | 
| Nate Begeman | b3b86d5 | 2005-08-03 18:27:17 +0000 | [diff] [blame] | 8 |  | 
| Tanya Lattner | a99d8b5 | 2008-02-19 08:07:33 +0000 | [diff] [blame] | 9 | define i32 @test1(i32 %a) { | 
| Nate Begeman | b3b86d5 | 2005-08-03 18:27:17 +0000 | [diff] [blame] | 10 | entry: | 
| Tanya Lattner | a99d8b5 | 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 | b3b86d5 | 2005-08-03 18:27:17 +0000 | [diff] [blame] | 13 | } | 
|  | 14 |  | 
| Tanya Lattner | a99d8b5 | 2008-02-19 08:07:33 +0000 | [diff] [blame] | 15 | define i32 @test2(i32 %a) { | 
| Nate Begeman | b3b86d5 | 2005-08-03 18:27:17 +0000 | [diff] [blame] | 16 | entry: | 
| Tanya Lattner | a99d8b5 | 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 | b3b86d5 | 2005-08-03 18:27:17 +0000 | [diff] [blame] | 19 | } | 
| Chris Lattner | 080f741 | 2005-08-09 20:24:16 +0000 | [diff] [blame] | 20 |  | 
| Tanya Lattner | a99d8b5 | 2008-02-19 08:07:33 +0000 | [diff] [blame] | 21 | define i32 @test3(i32 %a) { | 
| Chris Lattner | 080f741 | 2005-08-09 20:24:16 +0000 | [diff] [blame] | 22 | entry: | 
| Tanya Lattner | a99d8b5 | 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 | 080f741 | 2005-08-09 20:24:16 +0000 | [diff] [blame] | 26 | } | 
|  | 27 |  | 
| Tanya Lattner | a99d8b5 | 2008-02-19 08:07:33 +0000 | [diff] [blame] | 28 | define i32 @test4(i32 %a) { | 
| Chris Lattner | 080f741 | 2005-08-09 20:24:16 +0000 | [diff] [blame] | 29 | entry: | 
| Tanya Lattner | a99d8b5 | 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 | 080f741 | 2005-08-09 20:24:16 +0000 | [diff] [blame] | 33 | } | 
|  | 34 |  | 
| Tanya Lattner | a99d8b5 | 2008-02-19 08:07:33 +0000 | [diff] [blame] | 35 | define i32 @test5(i32 %a) { | 
| Chris Lattner | 080f741 | 2005-08-09 20:24:16 +0000 | [diff] [blame] | 36 | entry: | 
| Tanya Lattner | a99d8b5 | 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 | 080f741 | 2005-08-09 20:24:16 +0000 | [diff] [blame] | 40 | } | 
|  | 41 |  | 
| Tanya Lattner | a99d8b5 | 2008-02-19 08:07:33 +0000 | [diff] [blame] | 42 | define i32 @test6(i32 %a) { | 
| Chris Lattner | 080f741 | 2005-08-09 20:24:16 +0000 | [diff] [blame] | 43 | entry: | 
| Tanya Lattner | a99d8b5 | 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 | 080f741 | 2005-08-09 20:24:16 +0000 | [diff] [blame] | 47 | } | 
|  | 48 |  | 
| Tanya Lattner | a99d8b5 | 2008-02-19 08:07:33 +0000 | [diff] [blame] | 49 | define i32 @test7(i32 %a) { | 
| Chris Lattner | 080f741 | 2005-08-09 20:24:16 +0000 | [diff] [blame] | 50 | entry: | 
| Tanya Lattner | a99d8b5 | 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 | 080f741 | 2005-08-09 20:24:16 +0000 | [diff] [blame] | 54 | } | 
|  | 55 |  | 
| Tanya Lattner | a99d8b5 | 2008-02-19 08:07:33 +0000 | [diff] [blame] | 56 | define i32 @test8(i32 %a) { | 
| Chris Lattner | 080f741 | 2005-08-09 20:24:16 +0000 | [diff] [blame] | 57 | entry: | 
| Tanya Lattner | a99d8b5 | 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 | 080f741 | 2005-08-09 20:24:16 +0000 | [diff] [blame] | 61 | } |