blob: a7b77d97ba698cb3c5f39a135fcd556956483e5b [file] [log] [blame]
Dylan McKay59e7fe32017-05-01 09:48:55 +00001; RUN: llc < %s -march=avr | FileCheck %s
2
3; Bit rotation tests.
4
5; CHECK-LABEL: rol8:
6define i8 @rol8(i8 %val, i8 %amt) {
7 ; CHECK: andi r22, 7
8
Dylan McKay043fa4b2017-05-31 06:27:46 +00009 ; CHECK-NEXT: cpi r22, 0
Dylan McKay59e7fe32017-05-01 09:48:55 +000010 ; CHECK-NEXT: breq LBB0_2
11
12; CHECK-NEXT: LBB0_1:
13 ; CHECK-NEXT: rol r24
14 ; CHECK-NEXT: subi r22, 1
15 ; CHECK-NEXT: brne LBB0_1
16
17; CHECK-NEXT:LBB0_2:
18 ; CHECK-NEXT: ret
19 %mod = urem i8 %amt, 8
20
21 %inv = sub i8 8, %mod
22 %parta = shl i8 %val, %mod
23 %partb = lshr i8 %val, %inv
24
25 %rotl = or i8 %parta, %partb
26
27 ret i8 %rotl
28}
29
30
31; CHECK-LABEL: ror8:
32define i8 @ror8(i8 %val, i8 %amt) {
33 ; CHECK: andi r22, 7
34
Dylan McKay043fa4b2017-05-31 06:27:46 +000035 ; CHECK-NEXT: cpi r22, 0
Dylan McKay59e7fe32017-05-01 09:48:55 +000036 ; CHECK-NEXT: breq LBB1_2
37
38; CHECK-NEXT: LBB1_1:
39 ; CHECK-NEXT: ror r24
40 ; CHECK-NEXT: subi r22, 1
41 ; CHECK-NEXT: brne LBB1_1
42
43; CHECK-NEXT:LBB1_2:
44 ; CHECK-NEXT: ret
45 %mod = urem i8 %amt, 8
46
47 %inv = sub i8 8, %mod
48 %parta = lshr i8 %val, %mod
49 %partb = shl i8 %val, %inv
50
51 %rotr = or i8 %parta, %partb
52
53 ret i8 %rotr
54}
55