Edward O'Callaghan | f4a93dd | 2009-11-22 15:18:27 +0000 | [diff] [blame] | 1 | ; RUN: llc < %s -march=thumb -mattr=+thumb2 | FileCheck %s |
Bob Wilson | ac03af4 | 2012-07-02 17:22:47 +0000 | [diff] [blame] | 2 | ; RUN: llc < %s -march=thumb | FileCheck %s -check-prefix=THUMB1 |
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 |
Bob Wilson | ac03af4 | 2012-07-02 17:22:47 +0000 | [diff] [blame] | 16 | ; THUMB1: f2 |
| 17 | ; THUMB1: and |
Andrew Trick | e02a150 | 2011-04-29 14:02:41 +0000 | [diff] [blame] | 18 | define i32 @f2(i32 %v, i32 %nbits) { |
| 19 | entry: |
Andrew Trick | d49ffe8 | 2011-04-29 14:18:15 +0000 | [diff] [blame] | 20 | %and = and i32 %nbits, 31 |
| 21 | %shr = lshr i32 %v, %and |
| 22 | %sub = sub i32 32, %and |
Andrew Trick | e02a150 | 2011-04-29 14:02:41 +0000 | [diff] [blame] | 23 | %shl = shl i32 %v, %sub |
| 24 | %or = or i32 %shl, %shr |
| 25 | ret i32 %or |
Bob Wilson | ac03af4 | 2012-07-02 17:22:47 +0000 | [diff] [blame] | 26 | } |