xref: /llvm-project/llvm/test/CodeGen/ARM/acle-intrinsics-rot.ll (revision 4d519fc3b5937f495e72de2adcff9ff566bfc31f)
1*4d519fc3SSam Parker; RUN: llc -mtriple=thumbv8m.main -mcpu=cortex-m33 %s -o - | FileCheck %s
2*4d519fc3SSam Parker; RUN: llc -mtriple=thumbv7em %s -o - | FileCheck %s
3*4d519fc3SSam Parker; RUN: llc -mtriple=armv6 %s -o - | FileCheck %s
4*4d519fc3SSam Parker; RUN: llc -mtriple=armv7 %s -o - | FileCheck %s
5*4d519fc3SSam Parker; RUN: llc -mtriple=armv8 %s -o - | FileCheck %s
6*4d519fc3SSam Parker
7*4d519fc3SSam Parker; CHECK-LABEL: sxtb16_ror_8
8*4d519fc3SSam Parker; CHECK: sxtb16 r0, r0, ror #8
9*4d519fc3SSam Parkerdefine i32 @sxtb16_ror_8(i32 %a) {
10*4d519fc3SSam Parkerentry:
11*4d519fc3SSam Parker  %shr.i = lshr i32 %a, 8
12*4d519fc3SSam Parker  %shl.i = shl i32 %a, 24
13*4d519fc3SSam Parker  %or.i = or i32 %shl.i, %shr.i
14*4d519fc3SSam Parker  %0 = tail call i32 @llvm.arm.sxtb16(i32 %or.i)
15*4d519fc3SSam Parker  ret i32 %0
16*4d519fc3SSam Parker}
17*4d519fc3SSam Parker
18*4d519fc3SSam Parker; CHECK-LABEL: sxtb16_ror_16
19*4d519fc3SSam Parker; CHECK: sxtb16 r0, r0, ror #16
20*4d519fc3SSam Parkerdefine i32 @sxtb16_ror_16(i32 %a) {
21*4d519fc3SSam Parkerentry:
22*4d519fc3SSam Parker  %shr.i = lshr i32 %a, 16
23*4d519fc3SSam Parker  %shl.i = shl i32 %a, 16
24*4d519fc3SSam Parker  %or.i = or i32 %shl.i, %shr.i
25*4d519fc3SSam Parker  %0 = tail call i32 @llvm.arm.sxtb16(i32 %or.i)
26*4d519fc3SSam Parker  ret i32 %0
27*4d519fc3SSam Parker}
28*4d519fc3SSam Parker
29*4d519fc3SSam Parker; CHECK-LABEL: sxtb16_ror_24
30*4d519fc3SSam Parker; CHECK: sxtb16 r0, r0, ror #24
31*4d519fc3SSam Parkerdefine i32 @sxtb16_ror_24(i32 %a) {
32*4d519fc3SSam Parkerentry:
33*4d519fc3SSam Parker  %shr.i = lshr i32 %a, 24
34*4d519fc3SSam Parker  %shl.i = shl i32 %a, 8
35*4d519fc3SSam Parker  %or.i = or i32 %shl.i, %shr.i
36*4d519fc3SSam Parker  %0 = tail call i32 @llvm.arm.sxtb16(i32 %or.i)
37*4d519fc3SSam Parker  ret i32 %0
38*4d519fc3SSam Parker}
39*4d519fc3SSam Parker
40*4d519fc3SSam Parker; CHECK-LABEL: uxtb16_ror_8
41*4d519fc3SSam Parker; CHECK: uxtb16 r0, r0, ror #8
42*4d519fc3SSam Parkerdefine i32 @uxtb16_ror_8(i32 %a) {
43*4d519fc3SSam Parkerentry:
44*4d519fc3SSam Parker  %shr.i = lshr i32 %a, 8
45*4d519fc3SSam Parker  %shl.i = shl i32 %a, 24
46*4d519fc3SSam Parker  %or.i = or i32 %shl.i, %shr.i
47*4d519fc3SSam Parker  %0 = tail call i32 @llvm.arm.uxtb16(i32 %or.i)
48*4d519fc3SSam Parker  ret i32 %0
49*4d519fc3SSam Parker}
50*4d519fc3SSam Parker
51*4d519fc3SSam Parker; CHECK-LABEL: uxtb16_ror_16
52*4d519fc3SSam Parker; CHECK: uxtb16 r0, r0, ror #16
53*4d519fc3SSam Parkerdefine i32 @uxtb16_ror_16(i32 %a) {
54*4d519fc3SSam Parkerentry:
55*4d519fc3SSam Parker  %shr.i = lshr i32 %a, 16
56*4d519fc3SSam Parker  %shl.i = shl i32 %a, 16
57*4d519fc3SSam Parker  %or.i = or i32 %shl.i, %shr.i
58*4d519fc3SSam Parker  %0 = tail call i32 @llvm.arm.uxtb16(i32 %or.i)
59*4d519fc3SSam Parker  ret i32 %0
60*4d519fc3SSam Parker}
61*4d519fc3SSam Parker
62*4d519fc3SSam Parker; CHECK-LABEL: uxtb16_ror_24
63*4d519fc3SSam Parker; CHECK: uxtb16 r0, r0, ror #24
64*4d519fc3SSam Parkerdefine i32 @uxtb16_ror_24(i32 %a) {
65*4d519fc3SSam Parkerentry:
66*4d519fc3SSam Parker  %shr.i = lshr i32 %a, 24
67*4d519fc3SSam Parker  %shl.i = shl i32 %a, 8
68*4d519fc3SSam Parker  %or.i = or i32 %shl.i, %shr.i
69*4d519fc3SSam Parker  %0 = tail call i32 @llvm.arm.uxtb16(i32 %or.i)
70*4d519fc3SSam Parker  ret i32 %0
71*4d519fc3SSam Parker}
72*4d519fc3SSam Parker
73*4d519fc3SSam Parker; CHECK-LABEL: sxtab16_ror_8
74*4d519fc3SSam Parker; CHECK: sxtab16 r0, r0, r1, ror #8
75*4d519fc3SSam Parkerdefine i32 @sxtab16_ror_8(i32 %a, i32 %b) {
76*4d519fc3SSam Parkerentry:
77*4d519fc3SSam Parker  %shr.i = lshr i32 %b, 8
78*4d519fc3SSam Parker  %shl.i = shl i32 %b, 24
79*4d519fc3SSam Parker  %or.i = or i32 %shl.i, %shr.i
80*4d519fc3SSam Parker  %0 = tail call i32 @llvm.arm.sxtab16(i32 %a, i32 %or.i)
81*4d519fc3SSam Parker  ret i32 %0
82*4d519fc3SSam Parker}
83*4d519fc3SSam Parker
84*4d519fc3SSam Parker; CHECK-LABEL: sxtab16_ror_16
85*4d519fc3SSam Parker; CHECK: sxtab16 r0, r0, r1, ror #16
86*4d519fc3SSam Parkerdefine i32 @sxtab16_ror_16(i32 %a, i32 %b) {
87*4d519fc3SSam Parkerentry:
88*4d519fc3SSam Parker  %shr.i = lshr i32 %b, 16
89*4d519fc3SSam Parker  %shl.i = shl i32 %b, 16
90*4d519fc3SSam Parker  %or.i = or i32 %shl.i, %shr.i
91*4d519fc3SSam Parker  %0 = tail call i32 @llvm.arm.sxtab16(i32 %a, i32 %or.i)
92*4d519fc3SSam Parker  ret i32 %0
93*4d519fc3SSam Parker}
94*4d519fc3SSam Parker
95*4d519fc3SSam Parker; CHECK-LABEL: sxtab16_ror_24
96*4d519fc3SSam Parker; CHECK: sxtab16 r0, r0, r1, ror #24
97*4d519fc3SSam Parkerdefine i32 @sxtab16_ror_24(i32 %a, i32 %b) {
98*4d519fc3SSam Parkerentry:
99*4d519fc3SSam Parker  %shr.i = lshr i32 %b, 24
100*4d519fc3SSam Parker  %shl.i = shl i32 %b, 8
101*4d519fc3SSam Parker  %or.i = or i32 %shl.i, %shr.i
102*4d519fc3SSam Parker  %0 = tail call i32 @llvm.arm.sxtab16(i32 %a, i32 %or.i)
103*4d519fc3SSam Parker  ret i32 %0
104*4d519fc3SSam Parker}
105*4d519fc3SSam Parker
106*4d519fc3SSam Parker; CHECK-LABEL: uxtab16_ror_8
107*4d519fc3SSam Parker; CHECK: uxtab16 r0, r0, r1, ror #8
108*4d519fc3SSam Parkerdefine i32 @uxtab16_ror_8(i32 %a, i32 %b) {
109*4d519fc3SSam Parkerentry:
110*4d519fc3SSam Parker  %shr.i = lshr i32 %b, 8
111*4d519fc3SSam Parker  %shl.i = shl i32 %b, 24
112*4d519fc3SSam Parker  %or.i = or i32 %shl.i, %shr.i
113*4d519fc3SSam Parker  %0 = tail call i32 @llvm.arm.uxtab16(i32 %a, i32 %or.i)
114*4d519fc3SSam Parker  ret i32 %0
115*4d519fc3SSam Parker}
116*4d519fc3SSam Parker
117*4d519fc3SSam Parker; CHECK-LABEL: uxtab16_ror_16
118*4d519fc3SSam Parker; CHECK: uxtab16 r0, r0, r1, ror #16
119*4d519fc3SSam Parkerdefine i32 @uxtab16_ror_16(i32 %a, i32 %b) {
120*4d519fc3SSam Parkerentry:
121*4d519fc3SSam Parker  %shr.i = lshr i32 %b, 16
122*4d519fc3SSam Parker  %shl.i = shl i32 %b, 16
123*4d519fc3SSam Parker  %or.i = or i32 %shl.i, %shr.i
124*4d519fc3SSam Parker  %0 = tail call i32 @llvm.arm.uxtab16(i32 %a, i32 %or.i)
125*4d519fc3SSam Parker  ret i32 %0
126*4d519fc3SSam Parker}
127*4d519fc3SSam Parker
128*4d519fc3SSam Parker; CHECK-LABEL: uxtab16_ror_24
129*4d519fc3SSam Parker; CHECK: uxtab16 r0, r0, r1, ror #24
130*4d519fc3SSam Parkerdefine i32 @uxtab16_ror_24(i32 %a, i32 %b) {
131*4d519fc3SSam Parkerentry:
132*4d519fc3SSam Parker  %shr.i = lshr i32 %b, 24
133*4d519fc3SSam Parker  %shl.i = shl i32 %b, 8
134*4d519fc3SSam Parker  %or.i = or i32 %shl.i, %shr.i
135*4d519fc3SSam Parker  %0 = tail call i32 @llvm.arm.uxtab16(i32 %a, i32 %or.i)
136*4d519fc3SSam Parker  ret i32 %0
137*4d519fc3SSam Parker}
138*4d519fc3SSam Parker
139*4d519fc3SSam Parkerdeclare i32 @llvm.arm.sxtb16(i32)
140*4d519fc3SSam Parkerdeclare i32 @llvm.arm.uxtb16(i32)
141*4d519fc3SSam Parkerdeclare i32 @llvm.arm.sxtab16(i32, i32)
142*4d519fc3SSam Parkerdeclare i32 @llvm.arm.uxtab16(i32, i32)
143*4d519fc3SSam Parker
144