Edward O'Callaghan | f4a93dd | 2009-11-22 15:18:27 +0000 | [diff] [blame] | 1 | ; RUN: llc < %s -march=thumb -mattr=+thumb2 | FileCheck %s |
| 2 | |
David Goodwin | 7f98cac | 2009-06-26 22:37:07 +0000 | [diff] [blame] | 3 | |
Andrew Trick | e02a150 | 2011-04-29 14:02:41 +0000 | [diff] [blame] | 4 | ; CHECK: f1: |
| 5 | ; CHECK: ror.w r0, r0, #22 |
David Goodwin | 7f98cac | 2009-06-26 22:37:07 +0000 | [diff] [blame] | 6 | define i32 @f1(i32 %a) { |
| 7 | %l8 = shl i32 %a, 10 |
| 8 | %r8 = lshr i32 %a, 22 |
| 9 | %tmp = or i32 %l8, %r8 |
| 10 | ret i32 %tmp |
| 11 | } |
Andrew Trick | e02a150 | 2011-04-29 14:02:41 +0000 | [diff] [blame] | 12 | |
| 13 | ; CHECK: f2: |
Andrew Trick | d49ffe8 | 2011-04-29 14:18:15 +0000 | [diff] [blame] | 14 | ; CHECK-NOT: and |
Andrew Trick | e02a150 | 2011-04-29 14:02:41 +0000 | [diff] [blame] | 15 | ; CHECK: ror |
| 16 | define i32 @f2(i32 %v, i32 %nbits) { |
| 17 | entry: |
Andrew Trick | d49ffe8 | 2011-04-29 14:18:15 +0000 | [diff] [blame] | 18 | %and = and i32 %nbits, 31 |
| 19 | %shr = lshr i32 %v, %and |
| 20 | %sub = sub i32 32, %and |
Andrew Trick | e02a150 | 2011-04-29 14:02:41 +0000 | [diff] [blame] | 21 | %shl = shl i32 %v, %sub |
| 22 | %or = or i32 %shl, %shr |
| 23 | ret i32 %or |
| 24 | } |