[Alignment][NFC] migrate DataLayout internal struct to llvm::Align
[llvm-core.git] / test / CodeGen / AVR / rot.ll
bloba7b77d97ba698cb3c5f39a135fcd556956483e5b
1 ; RUN: llc < %s -march=avr | FileCheck %s
3 ; Bit rotation tests.
5 ; CHECK-LABEL: rol8:
6 define i8 @rol8(i8 %val, i8 %amt) {
7   ; CHECK:      andi r22, 7
9   ; CHECK-NEXT: cpi r22, 0
10   ; CHECK-NEXT: breq LBB0_2
12 ; CHECK-NEXT: LBB0_1:
13   ; CHECK-NEXT: rol r24
14   ; CHECK-NEXT: subi r22, 1
15   ; CHECK-NEXT: brne LBB0_1
17 ; CHECK-NEXT:LBB0_2:
18   ; CHECK-NEXT: ret
19   %mod = urem i8 %amt, 8
21   %inv = sub i8 8, %mod
22   %parta = shl i8 %val, %mod
23   %partb = lshr i8 %val, %inv
25   %rotl = or i8 %parta, %partb
27   ret i8 %rotl
31 ; CHECK-LABEL: ror8:
32 define i8 @ror8(i8 %val, i8 %amt) {
33   ; CHECK:      andi r22, 7
35   ; CHECK-NEXT: cpi r22, 0
36   ; CHECK-NEXT: breq LBB1_2
38 ; CHECK-NEXT: LBB1_1:
39   ; CHECK-NEXT: ror r24
40   ; CHECK-NEXT: subi r22, 1
41   ; CHECK-NEXT: brne LBB1_1
43 ; CHECK-NEXT:LBB1_2:
44   ; CHECK-NEXT: ret
45   %mod = urem i8 %amt, 8
47   %inv = sub i8 8, %mod
48   %parta = lshr i8 %val, %mod
49   %partb = shl i8 %val, %inv
51   %rotr = or i8 %parta, %partb
53   ret i8 %rotr