Jim Grosbach | 1187285 | 2009-11-17 00:20:26 +0000 | [diff] [blame] | 1 | ; RUN: llc < %s -march=thumb -mattr=+thumb2 | FileCheck %s |
Evan Cheng | d27c9fc | 2009-07-03 01:43:10 +0000 | [diff] [blame] | 2 | |
| 3 | define i32 @test1(i32 %x) { |
Jim Grosbach | 1187285 | 2009-11-17 00:20:26 +0000 | [diff] [blame] | 4 | ; CHECK: test1 |
Johnny Chen | 267124c | 2010-03-04 22:24:41 +0000 | [diff] [blame] | 5 | ; CHECK: uxtb16 r0, r0 |
Evan Cheng | d27c9fc | 2009-07-03 01:43:10 +0000 | [diff] [blame] | 6 | %tmp1 = and i32 %x, 16711935 ; <i32> [#uses=1] |
| 7 | ret i32 %tmp1 |
| 8 | } |
| 9 | |
| 10 | define i32 @test2(i32 %x) { |
Jim Grosbach | 1187285 | 2009-11-17 00:20:26 +0000 | [diff] [blame] | 11 | ; CHECK: test2 |
Johnny Chen | 267124c | 2010-03-04 22:24:41 +0000 | [diff] [blame] | 12 | ; CHECK: uxtb16 r0, r0, ror #8 |
Evan Cheng | d27c9fc | 2009-07-03 01:43:10 +0000 | [diff] [blame] | 13 | %tmp1 = lshr i32 %x, 8 ; <i32> [#uses=1] |
| 14 | %tmp2 = and i32 %tmp1, 16711935 ; <i32> [#uses=1] |
| 15 | ret i32 %tmp2 |
| 16 | } |
| 17 | |
| 18 | define i32 @test3(i32 %x) { |
Jim Grosbach | 1187285 | 2009-11-17 00:20:26 +0000 | [diff] [blame] | 19 | ; CHECK: test3 |
Johnny Chen | 267124c | 2010-03-04 22:24:41 +0000 | [diff] [blame] | 20 | ; CHECK: uxtb16 r0, r0, ror #8 |
Evan Cheng | d27c9fc | 2009-07-03 01:43:10 +0000 | [diff] [blame] | 21 | %tmp1 = lshr i32 %x, 8 ; <i32> [#uses=1] |
| 22 | %tmp2 = and i32 %tmp1, 16711935 ; <i32> [#uses=1] |
| 23 | ret i32 %tmp2 |
| 24 | } |
| 25 | |
| 26 | define i32 @test4(i32 %x) { |
Jim Grosbach | 1187285 | 2009-11-17 00:20:26 +0000 | [diff] [blame] | 27 | ; CHECK: test4 |
Johnny Chen | 267124c | 2010-03-04 22:24:41 +0000 | [diff] [blame] | 28 | ; CHECK: uxtb16 r0, r0, ror #8 |
Evan Cheng | d27c9fc | 2009-07-03 01:43:10 +0000 | [diff] [blame] | 29 | %tmp1 = lshr i32 %x, 8 ; <i32> [#uses=1] |
| 30 | %tmp6 = and i32 %tmp1, 16711935 ; <i32> [#uses=1] |
| 31 | ret i32 %tmp6 |
| 32 | } |
| 33 | |
| 34 | define i32 @test5(i32 %x) { |
Jim Grosbach | 1187285 | 2009-11-17 00:20:26 +0000 | [diff] [blame] | 35 | ; CHECK: test5 |
Johnny Chen | 267124c | 2010-03-04 22:24:41 +0000 | [diff] [blame] | 36 | ; CHECK: uxtb16 r0, r0, ror #8 |
Evan Cheng | d27c9fc | 2009-07-03 01:43:10 +0000 | [diff] [blame] | 37 | %tmp1 = lshr i32 %x, 8 ; <i32> [#uses=1] |
| 38 | %tmp2 = and i32 %tmp1, 16711935 ; <i32> [#uses=1] |
| 39 | ret i32 %tmp2 |
| 40 | } |
| 41 | |
| 42 | define i32 @test6(i32 %x) { |
Jim Grosbach | 1187285 | 2009-11-17 00:20:26 +0000 | [diff] [blame] | 43 | ; CHECK: test6 |
Johnny Chen | 267124c | 2010-03-04 22:24:41 +0000 | [diff] [blame] | 44 | ; CHECK: uxtb16 r0, r0, ror #16 |
Evan Cheng | d27c9fc | 2009-07-03 01:43:10 +0000 | [diff] [blame] | 45 | %tmp1 = lshr i32 %x, 16 ; <i32> [#uses=1] |
| 46 | %tmp2 = and i32 %tmp1, 255 ; <i32> [#uses=1] |
| 47 | %tmp4 = shl i32 %x, 16 ; <i32> [#uses=1] |
| 48 | %tmp5 = and i32 %tmp4, 16711680 ; <i32> [#uses=1] |
| 49 | %tmp6 = or i32 %tmp2, %tmp5 ; <i32> [#uses=1] |
| 50 | ret i32 %tmp6 |
| 51 | } |
| 52 | |
| 53 | define i32 @test7(i32 %x) { |
Jim Grosbach | 1187285 | 2009-11-17 00:20:26 +0000 | [diff] [blame] | 54 | ; CHECK: test7 |
Johnny Chen | 267124c | 2010-03-04 22:24:41 +0000 | [diff] [blame] | 55 | ; CHECK: uxtb16 r0, r0, ror #16 |
Evan Cheng | d27c9fc | 2009-07-03 01:43:10 +0000 | [diff] [blame] | 56 | %tmp1 = lshr i32 %x, 16 ; <i32> [#uses=1] |
| 57 | %tmp2 = and i32 %tmp1, 255 ; <i32> [#uses=1] |
| 58 | %tmp4 = shl i32 %x, 16 ; <i32> [#uses=1] |
| 59 | %tmp5 = and i32 %tmp4, 16711680 ; <i32> [#uses=1] |
| 60 | %tmp6 = or i32 %tmp2, %tmp5 ; <i32> [#uses=1] |
| 61 | ret i32 %tmp6 |
| 62 | } |
| 63 | |
| 64 | define i32 @test8(i32 %x) { |
Jim Grosbach | 1187285 | 2009-11-17 00:20:26 +0000 | [diff] [blame] | 65 | ; CHECK: test8 |
Johnny Chen | 267124c | 2010-03-04 22:24:41 +0000 | [diff] [blame] | 66 | ; CHECK: uxtb16 r0, r0, ror #24 |
Evan Cheng | d27c9fc | 2009-07-03 01:43:10 +0000 | [diff] [blame] | 67 | %tmp1 = shl i32 %x, 8 ; <i32> [#uses=1] |
| 68 | %tmp2 = and i32 %tmp1, 16711680 ; <i32> [#uses=1] |
| 69 | %tmp5 = lshr i32 %x, 24 ; <i32> [#uses=1] |
| 70 | %tmp6 = or i32 %tmp2, %tmp5 ; <i32> [#uses=1] |
| 71 | ret i32 %tmp6 |
| 72 | } |
| 73 | |
| 74 | define i32 @test9(i32 %x) { |
Jim Grosbach | 1187285 | 2009-11-17 00:20:26 +0000 | [diff] [blame] | 75 | ; CHECK: test9 |
Johnny Chen | 267124c | 2010-03-04 22:24:41 +0000 | [diff] [blame] | 76 | ; CHECK: uxtb16 r0, r0, ror #24 |
Evan Cheng | d27c9fc | 2009-07-03 01:43:10 +0000 | [diff] [blame] | 77 | %tmp1 = lshr i32 %x, 24 ; <i32> [#uses=1] |
| 78 | %tmp4 = shl i32 %x, 8 ; <i32> [#uses=1] |
| 79 | %tmp5 = and i32 %tmp4, 16711680 ; <i32> [#uses=1] |
| 80 | %tmp6 = or i32 %tmp5, %tmp1 ; <i32> [#uses=1] |
| 81 | ret i32 %tmp6 |
| 82 | } |
| 83 | |
| 84 | define i32 @test10(i32 %p0) { |
Jim Grosbach | 1187285 | 2009-11-17 00:20:26 +0000 | [diff] [blame] | 85 | ; CHECK: test10 |
| 86 | ; CHECK: mov.w r1, #16253176 |
| 87 | ; CHECK: and.w r0, r1, r0, lsr #7 |
| 88 | ; CHECK: lsrs r1, r0, #5 |
Johnny Chen | 267124c | 2010-03-04 22:24:41 +0000 | [diff] [blame] | 89 | ; CHECK: uxtb16 r1, r1 |
Jim Grosbach | 1187285 | 2009-11-17 00:20:26 +0000 | [diff] [blame] | 90 | ; CHECK: orr.w r0, r1, r0 |
| 91 | |
Evan Cheng | d27c9fc | 2009-07-03 01:43:10 +0000 | [diff] [blame] | 92 | %tmp1 = lshr i32 %p0, 7 ; <i32> [#uses=1] |
| 93 | %tmp2 = and i32 %tmp1, 16253176 ; <i32> [#uses=2] |
| 94 | %tmp4 = lshr i32 %tmp2, 5 ; <i32> [#uses=1] |
| 95 | %tmp5 = and i32 %tmp4, 458759 ; <i32> [#uses=1] |
| 96 | %tmp7 = or i32 %tmp5, %tmp2 ; <i32> [#uses=1] |
| 97 | ret i32 %tmp7 |
| 98 | } |