blob: 2a218eae9752b6934bf2b1e6f45314e6956d48f5 [file] [log] [blame]
Edward O'Callaghancc856372009-11-22 15:18:27 +00001; RUN: llc < %s -march=thumb -mattr=+thumb2 | FileCheck %s
Bob Wilson22972212012-07-02 17:22:47 +00002; RUN: llc < %s -march=thumb | FileCheck %s -check-prefix=THUMB1
David Goodwin3aaa7512009-06-26 22:37:07 +00003
Stephen Lind24ab202013-07-14 06:24:09 +00004; CHECK-LABEL: f1:
Andrew Trick65266ed2011-04-29 14:02:41 +00005; CHECK: ror.w r0, r0, #22
David Goodwin3aaa7512009-06-26 22:37:07 +00006define 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 Trick65266ed2011-04-29 14:02:41 +000012
Stephen Lind24ab202013-07-14 06:24:09 +000013; CHECK-LABEL: f2:
Andrew Tricke794e172011-04-29 14:18:15 +000014; CHECK-NOT: and
Andrew Trick65266ed2011-04-29 14:02:41 +000015; CHECK: ror
Bob Wilson22972212012-07-02 17:22:47 +000016; THUMB1: f2
17; THUMB1: and
Andrew Trick65266ed2011-04-29 14:02:41 +000018define i32 @f2(i32 %v, i32 %nbits) {
19entry:
Andrew Tricke794e172011-04-29 14:18:15 +000020 %and = and i32 %nbits, 31
21 %shr = lshr i32 %v, %and
22 %sub = sub i32 32, %and
Andrew Trick65266ed2011-04-29 14:02:41 +000023 %shl = shl i32 %v, %sub
24 %or = or i32 %shl, %shr
25 ret i32 %or
Bob Wilson22972212012-07-02 17:22:47 +000026}