xref: /llvm-project/llvm/test/CodeGen/X86/apx/ror.ll (revision 5c68c6d70fc204b0efdb2af95dfb328d616129e3)
1*5c68c6d7SShengchen Kan; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*5c68c6d7SShengchen Kan; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ndd -verify-machineinstrs --show-mc-encoding | FileCheck %s
3*5c68c6d7SShengchen Kan
4*5c68c6d7SShengchen Kandefine i8 @ror8m1(ptr %ptr) {
5*5c68c6d7SShengchen Kan; CHECK-LABEL: ror8m1:
6*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
7*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorb (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xd0,0x0f]
8*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
9*5c68c6d7SShengchen Kanentry:
10*5c68c6d7SShengchen Kan  %a = load i8, ptr %ptr
11*5c68c6d7SShengchen Kan  %0 = lshr i8 %a, 1
12*5c68c6d7SShengchen Kan  %1 = shl i8 %a, 7
13*5c68c6d7SShengchen Kan  %ror = or i8 %0, %1
14*5c68c6d7SShengchen Kan  ret i8 %ror
15*5c68c6d7SShengchen Kan}
16*5c68c6d7SShengchen Kan
17*5c68c6d7SShengchen Kandefine i16 @ror16m1(ptr %ptr) {
18*5c68c6d7SShengchen Kan; CHECK-LABEL: ror16m1:
19*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
20*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorw (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd1,0x0f]
21*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
22*5c68c6d7SShengchen Kanentry:
23*5c68c6d7SShengchen Kan  %a = load i16, ptr %ptr
24*5c68c6d7SShengchen Kan  %0 = lshr i16 %a, 1
25*5c68c6d7SShengchen Kan  %1 = shl i16 %a, 15
26*5c68c6d7SShengchen Kan  %ror = or i16 %0, %1
27*5c68c6d7SShengchen Kan  ret i16 %ror
28*5c68c6d7SShengchen Kan}
29*5c68c6d7SShengchen Kan
30*5c68c6d7SShengchen Kandefine i32 @ror32m1(ptr %ptr) {
31*5c68c6d7SShengchen Kan; CHECK-LABEL: ror32m1:
32*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
33*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorl (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd1,0x0f]
34*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
35*5c68c6d7SShengchen Kanentry:
36*5c68c6d7SShengchen Kan  %a = load i32, ptr %ptr
37*5c68c6d7SShengchen Kan  %0 = lshr i32 %a, 1
38*5c68c6d7SShengchen Kan  %1 = shl i32 %a, 31
39*5c68c6d7SShengchen Kan  %ror = or i32 %0, %1
40*5c68c6d7SShengchen Kan  ret i32 %ror
41*5c68c6d7SShengchen Kan}
42*5c68c6d7SShengchen Kan
43*5c68c6d7SShengchen Kandefine i64 @ror64m1(ptr %ptr) {
44*5c68c6d7SShengchen Kan; CHECK-LABEL: ror64m1:
45*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
46*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorq (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd1,0x0f]
47*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
48*5c68c6d7SShengchen Kanentry:
49*5c68c6d7SShengchen Kan  %a = load i64, ptr %ptr
50*5c68c6d7SShengchen Kan  %0 = lshr i64 %a, 1
51*5c68c6d7SShengchen Kan  %1 = shl i64 %a, 63
52*5c68c6d7SShengchen Kan  %ror = or i64 %0, %1
53*5c68c6d7SShengchen Kan  ret i64 %ror
54*5c68c6d7SShengchen Kan}
55*5c68c6d7SShengchen Kan
56*5c68c6d7SShengchen Kandefine i8 @ror8mcl(ptr %ptr, i8 %cl) {
57*5c68c6d7SShengchen Kan; CHECK-LABEL: ror8mcl:
58*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
59*5c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
60*5c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
61*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorb %cl, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0x0f]
62*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
63*5c68c6d7SShengchen Kanentry:
64*5c68c6d7SShengchen Kan  %a = load i8, ptr %ptr
65*5c68c6d7SShengchen Kan  %0 = lshr i8 %a, %cl
66*5c68c6d7SShengchen Kan  %1 = sub i8 8, %cl
67*5c68c6d7SShengchen Kan  %2 = shl i8 %a, %1
68*5c68c6d7SShengchen Kan  %ror = or i8 %0, %2
69*5c68c6d7SShengchen Kan  ret i8 %ror
70*5c68c6d7SShengchen Kan}
71*5c68c6d7SShengchen Kan
72*5c68c6d7SShengchen Kandefine i8 @ror8mcl_mask(ptr %ptr, i8 %cl) {
73*5c68c6d7SShengchen Kan; CHECK-LABEL: ror8mcl_mask:
74*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
75*5c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
76*5c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
77*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorb %cl, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0x0f]
78*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
79*5c68c6d7SShengchen Kanentry:
80*5c68c6d7SShengchen Kan  %shamt = and i8 %cl, 31
81*5c68c6d7SShengchen Kan  %a = load i8, ptr %ptr
82*5c68c6d7SShengchen Kan  %0 = lshr i8 %a, %shamt
83*5c68c6d7SShengchen Kan  %1 = sub i8 8, %shamt
84*5c68c6d7SShengchen Kan  %2 = shl i8 %a, %1
85*5c68c6d7SShengchen Kan  %ror = or i8 %0, %2
86*5c68c6d7SShengchen Kan  ret i8 %ror
87*5c68c6d7SShengchen Kan}
88*5c68c6d7SShengchen Kan
89*5c68c6d7SShengchen Kandefine i16 @ror16mcl(ptr %ptr, i16 %cl) {
90*5c68c6d7SShengchen Kan; CHECK-LABEL: ror16mcl:
91*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
92*5c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
93*5c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
94*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorw %cl, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0x0f]
95*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
96*5c68c6d7SShengchen Kanentry:
97*5c68c6d7SShengchen Kan  %a = load i16, ptr %ptr
98*5c68c6d7SShengchen Kan  %0 = lshr i16 %a, %cl
99*5c68c6d7SShengchen Kan  %1 = sub i16 16, %cl
100*5c68c6d7SShengchen Kan  %2 = shl i16 %a, %1
101*5c68c6d7SShengchen Kan  %ror = or i16 %0, %2
102*5c68c6d7SShengchen Kan  ret i16 %ror
103*5c68c6d7SShengchen Kan}
104*5c68c6d7SShengchen Kan
105*5c68c6d7SShengchen Kandefine i16 @ror16mcl_mask(ptr %ptr, i16 %cl) {
106*5c68c6d7SShengchen Kan; CHECK-LABEL: ror16mcl_mask:
107*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
108*5c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
109*5c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
110*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorw %cl, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0x0f]
111*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
112*5c68c6d7SShengchen Kanentry:
113*5c68c6d7SShengchen Kan  %shamt = and i16 %cl, 31
114*5c68c6d7SShengchen Kan  %a = load i16, ptr %ptr
115*5c68c6d7SShengchen Kan  %0 = lshr i16 %a, %shamt
116*5c68c6d7SShengchen Kan  %1 = sub i16 16, %shamt
117*5c68c6d7SShengchen Kan  %2 = shl i16 %a, %1
118*5c68c6d7SShengchen Kan  %ror = or i16 %0, %2
119*5c68c6d7SShengchen Kan  ret i16 %ror
120*5c68c6d7SShengchen Kan}
121*5c68c6d7SShengchen Kan
122*5c68c6d7SShengchen Kandefine i32 @ror32mcl(ptr %ptr, i32 %cl) {
123*5c68c6d7SShengchen Kan; CHECK-LABEL: ror32mcl:
124*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
125*5c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
126*5c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
127*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorl %cl, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0x0f]
128*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
129*5c68c6d7SShengchen Kanentry:
130*5c68c6d7SShengchen Kan  %a = load i32, ptr %ptr
131*5c68c6d7SShengchen Kan  %0 = lshr i32 %a, %cl
132*5c68c6d7SShengchen Kan  %1 = sub i32 32, %cl
133*5c68c6d7SShengchen Kan  %2 = shl i32 %a, %1
134*5c68c6d7SShengchen Kan  %ror = or i32 %0, %2
135*5c68c6d7SShengchen Kan  ret i32 %ror
136*5c68c6d7SShengchen Kan}
137*5c68c6d7SShengchen Kan
138*5c68c6d7SShengchen Kandefine i32 @ror32mcl_mask(ptr %ptr, i32 %cl) {
139*5c68c6d7SShengchen Kan; CHECK-LABEL: ror32mcl_mask:
140*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
141*5c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
142*5c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
143*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorl %cl, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0x0f]
144*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
145*5c68c6d7SShengchen Kanentry:
146*5c68c6d7SShengchen Kan  %shamt = and i32 %cl, 31
147*5c68c6d7SShengchen Kan  %a = load i32, ptr %ptr
148*5c68c6d7SShengchen Kan  %0 = lshr i32 %a, %shamt
149*5c68c6d7SShengchen Kan  %1 = sub i32 32, %shamt
150*5c68c6d7SShengchen Kan  %2 = shl i32 %a, %1
151*5c68c6d7SShengchen Kan  %ror = or i32 %0, %2
152*5c68c6d7SShengchen Kan  ret i32 %ror
153*5c68c6d7SShengchen Kan}
154*5c68c6d7SShengchen Kan
155*5c68c6d7SShengchen Kandefine i64 @ror64mcl(ptr %ptr, i64 %cl) {
156*5c68c6d7SShengchen Kan; CHECK-LABEL: ror64mcl:
157*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
158*5c68c6d7SShengchen Kan; CHECK-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
159*5c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $rcx
160*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorq %cl, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0x0f]
161*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
162*5c68c6d7SShengchen Kanentry:
163*5c68c6d7SShengchen Kan  %a = load i64, ptr %ptr
164*5c68c6d7SShengchen Kan  %0 = lshr i64 %a, %cl
165*5c68c6d7SShengchen Kan  %1 = sub i64 64, %cl
166*5c68c6d7SShengchen Kan  %2 = shl i64 %a, %1
167*5c68c6d7SShengchen Kan  %ror = or i64 %0, %2
168*5c68c6d7SShengchen Kan  ret i64 %ror
169*5c68c6d7SShengchen Kan}
170*5c68c6d7SShengchen Kan
171*5c68c6d7SShengchen Kandefine i64 @ror64mcl_mask(ptr %ptr, i64 %cl) {
172*5c68c6d7SShengchen Kan; CHECK-LABEL: ror64mcl_mask:
173*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
174*5c68c6d7SShengchen Kan; CHECK-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
175*5c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $rcx
176*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorq %cl, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0x0f]
177*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
178*5c68c6d7SShengchen Kanentry:
179*5c68c6d7SShengchen Kan  %shamt = and i64 %cl, 63
180*5c68c6d7SShengchen Kan  %a = load i64, ptr %ptr
181*5c68c6d7SShengchen Kan  %0 = lshr i64 %a, %shamt
182*5c68c6d7SShengchen Kan  %1 = sub i64 64, %shamt
183*5c68c6d7SShengchen Kan  %2 = shl i64 %a, %1
184*5c68c6d7SShengchen Kan  %ror = or i64 %0, %2
185*5c68c6d7SShengchen Kan  ret i64 %ror
186*5c68c6d7SShengchen Kan}
187*5c68c6d7SShengchen Kan
188*5c68c6d7SShengchen Kandefine i8 @ror8mi(ptr %ptr) {
189*5c68c6d7SShengchen Kan; CHECK-LABEL: ror8mi:
190*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
191*5c68c6d7SShengchen Kan; CHECK-NEXT:    rolb $5, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xc0,0x07,0x05]
192*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
193*5c68c6d7SShengchen Kanentry:
194*5c68c6d7SShengchen Kan  %a = load i8, ptr %ptr
195*5c68c6d7SShengchen Kan  %0 = lshr i8 %a, 3
196*5c68c6d7SShengchen Kan  %1 = shl i8 %a, 5
197*5c68c6d7SShengchen Kan  %ror = or i8 %0, %1
198*5c68c6d7SShengchen Kan  ret i8 %ror
199*5c68c6d7SShengchen Kan}
200*5c68c6d7SShengchen Kan
201*5c68c6d7SShengchen Kandefine i16 @ror16mi(ptr %ptr) {
202*5c68c6d7SShengchen Kan; CHECK-LABEL: ror16mi:
203*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
204*5c68c6d7SShengchen Kan; CHECK-NEXT:    rolw $13, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xc1,0x07,0x0d]
205*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
206*5c68c6d7SShengchen Kanentry:
207*5c68c6d7SShengchen Kan  %a = load i16, ptr %ptr
208*5c68c6d7SShengchen Kan  %0 = lshr i16 %a, 3
209*5c68c6d7SShengchen Kan  %1 = shl i16 %a, 13
210*5c68c6d7SShengchen Kan  %ror = or i16 %0, %1
211*5c68c6d7SShengchen Kan  ret i16 %ror
212*5c68c6d7SShengchen Kan}
213*5c68c6d7SShengchen Kan
214*5c68c6d7SShengchen Kandefine i32 @ror32mi(ptr %ptr) {
215*5c68c6d7SShengchen Kan; CHECK-LABEL: ror32mi:
216*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
217*5c68c6d7SShengchen Kan; CHECK-NEXT:    roll $29, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xc1,0x07,0x1d]
218*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
219*5c68c6d7SShengchen Kanentry:
220*5c68c6d7SShengchen Kan  %a = load i32, ptr %ptr
221*5c68c6d7SShengchen Kan  %0 = lshr i32 %a, 3
222*5c68c6d7SShengchen Kan  %1 = shl i32 %a, 29
223*5c68c6d7SShengchen Kan  %ror = or i32 %0, %1
224*5c68c6d7SShengchen Kan  ret i32 %ror
225*5c68c6d7SShengchen Kan}
226*5c68c6d7SShengchen Kan
227*5c68c6d7SShengchen Kandefine i64 @ror64mi(ptr %ptr) {
228*5c68c6d7SShengchen Kan; CHECK-LABEL: ror64mi:
229*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
230*5c68c6d7SShengchen Kan; CHECK-NEXT:    rolq $61, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xc1,0x07,0x3d]
231*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
232*5c68c6d7SShengchen Kanentry:
233*5c68c6d7SShengchen Kan  %a = load i64, ptr %ptr
234*5c68c6d7SShengchen Kan  %0 = lshr i64 %a, 3
235*5c68c6d7SShengchen Kan  %1 = shl i64 %a, 61
236*5c68c6d7SShengchen Kan  %ror = or i64 %0, %1
237*5c68c6d7SShengchen Kan  ret i64 %ror
238*5c68c6d7SShengchen Kan}
239*5c68c6d7SShengchen Kan
240*5c68c6d7SShengchen Kandefine i8 @ror8r1(i8 noundef %a) {
241*5c68c6d7SShengchen Kan; CHECK-LABEL: ror8r1:
242*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
243*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorb %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xd0,0xcf]
244*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
245*5c68c6d7SShengchen Kanentry:
246*5c68c6d7SShengchen Kan  %0 = lshr i8 %a, 1
247*5c68c6d7SShengchen Kan  %1 = shl i8 %a, 7
248*5c68c6d7SShengchen Kan  %ror = or i8 %0, %1
249*5c68c6d7SShengchen Kan  ret i8 %ror
250*5c68c6d7SShengchen Kan}
251*5c68c6d7SShengchen Kan
252*5c68c6d7SShengchen Kandefine i16 @ror16r1(i16 noundef %a) {
253*5c68c6d7SShengchen Kan; CHECK-LABEL: ror16r1:
254*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
255*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorw %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd1,0xcf]
256*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
257*5c68c6d7SShengchen Kanentry:
258*5c68c6d7SShengchen Kan  %0 = lshr i16 %a, 1
259*5c68c6d7SShengchen Kan  %1 = shl i16 %a, 15
260*5c68c6d7SShengchen Kan  %ror = or i16 %0, %1
261*5c68c6d7SShengchen Kan  ret i16 %ror
262*5c68c6d7SShengchen Kan}
263*5c68c6d7SShengchen Kan
264*5c68c6d7SShengchen Kandefine i32 @ror32r1(i32 noundef %a) {
265*5c68c6d7SShengchen Kan; CHECK-LABEL: ror32r1:
266*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
267*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorl %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd1,0xcf]
268*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
269*5c68c6d7SShengchen Kanentry:
270*5c68c6d7SShengchen Kan  %0 = lshr i32 %a, 1
271*5c68c6d7SShengchen Kan  %1 = shl i32 %a, 31
272*5c68c6d7SShengchen Kan  %ror = or i32 %0, %1
273*5c68c6d7SShengchen Kan  ret i32 %ror
274*5c68c6d7SShengchen Kan}
275*5c68c6d7SShengchen Kan
276*5c68c6d7SShengchen Kandefine i64 @ror64r1(i64 noundef %a) {
277*5c68c6d7SShengchen Kan; CHECK-LABEL: ror64r1:
278*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
279*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorq %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd1,0xcf]
280*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
281*5c68c6d7SShengchen Kanentry:
282*5c68c6d7SShengchen Kan  %0 = lshr i64 %a, 1
283*5c68c6d7SShengchen Kan  %1 = shl i64 %a, 63
284*5c68c6d7SShengchen Kan  %ror = or i64 %0, %1
285*5c68c6d7SShengchen Kan  ret i64 %ror
286*5c68c6d7SShengchen Kan}
287*5c68c6d7SShengchen Kan
288*5c68c6d7SShengchen Kandefine i8 @ror8rcl(i8 noundef %a, i8 %cl) {
289*5c68c6d7SShengchen Kan; CHECK-LABEL: ror8rcl:
290*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
291*5c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
292*5c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
293*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorb %cl, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0xcf]
294*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
295*5c68c6d7SShengchen Kanentry:
296*5c68c6d7SShengchen Kan  %0 = lshr i8 %a, %cl
297*5c68c6d7SShengchen Kan  %1 = sub i8 8, %cl
298*5c68c6d7SShengchen Kan  %2 = shl i8 %a, %1
299*5c68c6d7SShengchen Kan  %ror = or i8 %0, %2
300*5c68c6d7SShengchen Kan  ret i8 %ror
301*5c68c6d7SShengchen Kan}
302*5c68c6d7SShengchen Kan
303*5c68c6d7SShengchen Kandefine i8 @ror8rcl_mask(i8 noundef %a, i8 %cl) {
304*5c68c6d7SShengchen Kan; CHECK-LABEL: ror8rcl_mask:
305*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
306*5c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
307*5c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
308*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorb %cl, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0xcf]
309*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
310*5c68c6d7SShengchen Kanentry:
311*5c68c6d7SShengchen Kan  %shamt = and i8 %cl, 31
312*5c68c6d7SShengchen Kan  %0 = lshr i8 %a, %shamt
313*5c68c6d7SShengchen Kan  %1 = sub i8 8, %shamt
314*5c68c6d7SShengchen Kan  %2 = shl i8 %a, %1
315*5c68c6d7SShengchen Kan  %ror = or i8 %0, %2
316*5c68c6d7SShengchen Kan  ret i8 %ror
317*5c68c6d7SShengchen Kan}
318*5c68c6d7SShengchen Kan
319*5c68c6d7SShengchen Kandefine i16 @ror16rcl(i16 noundef %a, i16 %cl) {
320*5c68c6d7SShengchen Kan; CHECK-LABEL: ror16rcl:
321*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
322*5c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
323*5c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
324*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorw %cl, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0xcf]
325*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
326*5c68c6d7SShengchen Kanentry:
327*5c68c6d7SShengchen Kan  %0 = lshr i16 %a, %cl
328*5c68c6d7SShengchen Kan  %1 = sub i16 16, %cl
329*5c68c6d7SShengchen Kan  %2 = shl i16 %a, %1
330*5c68c6d7SShengchen Kan  %ror = or i16 %0, %2
331*5c68c6d7SShengchen Kan  ret i16 %ror
332*5c68c6d7SShengchen Kan}
333*5c68c6d7SShengchen Kan
334*5c68c6d7SShengchen Kandefine i16 @ror16rcl_mask(i16 noundef %a, i16 %cl) {
335*5c68c6d7SShengchen Kan; CHECK-LABEL: ror16rcl_mask:
336*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
337*5c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
338*5c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
339*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorw %cl, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0xcf]
340*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
341*5c68c6d7SShengchen Kanentry:
342*5c68c6d7SShengchen Kan  %shamt = and i16 %cl, 31
343*5c68c6d7SShengchen Kan  %0 = lshr i16 %a, %shamt
344*5c68c6d7SShengchen Kan  %1 = sub i16 16, %shamt
345*5c68c6d7SShengchen Kan  %2 = shl i16 %a, %1
346*5c68c6d7SShengchen Kan  %ror = or i16 %0, %2
347*5c68c6d7SShengchen Kan  ret i16 %ror
348*5c68c6d7SShengchen Kan}
349*5c68c6d7SShengchen Kan
350*5c68c6d7SShengchen Kandefine i32 @ror32rcl(i32 noundef %a, i32 %cl) {
351*5c68c6d7SShengchen Kan; CHECK-LABEL: ror32rcl:
352*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
353*5c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
354*5c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
355*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorl %cl, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0xcf]
356*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
357*5c68c6d7SShengchen Kanentry:
358*5c68c6d7SShengchen Kan  %0 = lshr i32 %a, %cl
359*5c68c6d7SShengchen Kan  %1 = sub i32 32, %cl
360*5c68c6d7SShengchen Kan  %2 = shl i32 %a, %1
361*5c68c6d7SShengchen Kan  %ror = or i32 %0, %2
362*5c68c6d7SShengchen Kan  ret i32 %ror
363*5c68c6d7SShengchen Kan}
364*5c68c6d7SShengchen Kan
365*5c68c6d7SShengchen Kandefine i32 @ror32rcl_mask(i32 noundef %a, i32 %cl) {
366*5c68c6d7SShengchen Kan; CHECK-LABEL: ror32rcl_mask:
367*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
368*5c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
369*5c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
370*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorl %cl, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0xcf]
371*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
372*5c68c6d7SShengchen Kanentry:
373*5c68c6d7SShengchen Kan  %shamt = and i32 %cl, 31
374*5c68c6d7SShengchen Kan  %0 = lshr i32 %a, %shamt
375*5c68c6d7SShengchen Kan  %1 = sub i32 32, %shamt
376*5c68c6d7SShengchen Kan  %2 = shl i32 %a, %1
377*5c68c6d7SShengchen Kan  %ror = or i32 %0, %2
378*5c68c6d7SShengchen Kan  ret i32 %ror
379*5c68c6d7SShengchen Kan}
380*5c68c6d7SShengchen Kan
381*5c68c6d7SShengchen Kandefine i64 @ror64rcl(i64 noundef %a, i64 %cl) {
382*5c68c6d7SShengchen Kan; CHECK-LABEL: ror64rcl:
383*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
384*5c68c6d7SShengchen Kan; CHECK-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
385*5c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $rcx
386*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorq %cl, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0xcf]
387*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
388*5c68c6d7SShengchen Kanentry:
389*5c68c6d7SShengchen Kan  %0 = lshr i64 %a, %cl
390*5c68c6d7SShengchen Kan  %1 = sub i64 64, %cl
391*5c68c6d7SShengchen Kan  %2 = shl i64 %a, %1
392*5c68c6d7SShengchen Kan  %ror = or i64 %0, %2
393*5c68c6d7SShengchen Kan  ret i64 %ror
394*5c68c6d7SShengchen Kan}
395*5c68c6d7SShengchen Kan
396*5c68c6d7SShengchen Kandefine i64 @ror64rcl_mask(i64 noundef %a, i64 %cl) {
397*5c68c6d7SShengchen Kan; CHECK-LABEL: ror64rcl_mask:
398*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
399*5c68c6d7SShengchen Kan; CHECK-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
400*5c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $rcx
401*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorq %cl, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0xcf]
402*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
403*5c68c6d7SShengchen Kanentry:
404*5c68c6d7SShengchen Kan  %shamt = and i64 %cl, 63
405*5c68c6d7SShengchen Kan  %0 = lshr i64 %a, %shamt
406*5c68c6d7SShengchen Kan  %1 = sub i64 64, %shamt
407*5c68c6d7SShengchen Kan  %2 = shl i64 %a, %1
408*5c68c6d7SShengchen Kan  %ror = or i64 %0, %2
409*5c68c6d7SShengchen Kan  ret i64 %ror
410*5c68c6d7SShengchen Kan}
411*5c68c6d7SShengchen Kan
412*5c68c6d7SShengchen Kandefine i8 @ror8ri(i8 noundef %a) {
413*5c68c6d7SShengchen Kan; CHECK-LABEL: ror8ri:
414*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
415*5c68c6d7SShengchen Kan; CHECK-NEXT:    rolb $5, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xc0,0xc7,0x05]
416*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
417*5c68c6d7SShengchen Kanentry:
418*5c68c6d7SShengchen Kan  %0 = lshr i8 %a, 3
419*5c68c6d7SShengchen Kan  %1 = shl i8 %a, 5
420*5c68c6d7SShengchen Kan  %ror = or i8 %0, %1
421*5c68c6d7SShengchen Kan  ret i8 %ror
422*5c68c6d7SShengchen Kan}
423*5c68c6d7SShengchen Kan
424*5c68c6d7SShengchen Kandefine i16 @ror16ri(i16 noundef %a) {
425*5c68c6d7SShengchen Kan; CHECK-LABEL: ror16ri:
426*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
427*5c68c6d7SShengchen Kan; CHECK-NEXT:    rolw $13, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xc1,0xc7,0x0d]
428*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
429*5c68c6d7SShengchen Kanentry:
430*5c68c6d7SShengchen Kan  %0 = lshr i16 %a, 3
431*5c68c6d7SShengchen Kan  %1 = shl i16 %a, 13
432*5c68c6d7SShengchen Kan  %ror = or i16 %0, %1
433*5c68c6d7SShengchen Kan  ret i16 %ror
434*5c68c6d7SShengchen Kan}
435*5c68c6d7SShengchen Kan
436*5c68c6d7SShengchen Kandefine i32 @ror32ri(i32 noundef %a) {
437*5c68c6d7SShengchen Kan; CHECK-LABEL: ror32ri:
438*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
439*5c68c6d7SShengchen Kan; CHECK-NEXT:    roll $29, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xc1,0xc7,0x1d]
440*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
441*5c68c6d7SShengchen Kanentry:
442*5c68c6d7SShengchen Kan  %0 = lshr i32 %a, 3
443*5c68c6d7SShengchen Kan  %1 = shl i32 %a, 29
444*5c68c6d7SShengchen Kan  %ror = or i32 %0, %1
445*5c68c6d7SShengchen Kan  ret i32 %ror
446*5c68c6d7SShengchen Kan}
447*5c68c6d7SShengchen Kan
448*5c68c6d7SShengchen Kandefine i64 @ror64ri(i64 noundef %a) {
449*5c68c6d7SShengchen Kan; CHECK-LABEL: ror64ri:
450*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
451*5c68c6d7SShengchen Kan; CHECK-NEXT:    rolq $61, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xc1,0xc7,0x3d]
452*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
453*5c68c6d7SShengchen Kanentry:
454*5c68c6d7SShengchen Kan  %0 = lshr i64 %a, 3
455*5c68c6d7SShengchen Kan  %1 = shl i64 %a, 61
456*5c68c6d7SShengchen Kan  %ror = or i64 %0, %1
457*5c68c6d7SShengchen Kan  ret i64 %ror
458*5c68c6d7SShengchen Kan}
459*5c68c6d7SShengchen Kan
460*5c68c6d7SShengchen Kandefine void @ror8m1_legacy(ptr %ptr) {
461*5c68c6d7SShengchen Kan; CHECK-LABEL: ror8m1_legacy:
462*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
463*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorb (%rdi) # encoding: [0xd0,0x0f]
464*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
465*5c68c6d7SShengchen Kanentry:
466*5c68c6d7SShengchen Kan  %a = load i8, ptr %ptr
467*5c68c6d7SShengchen Kan  %0 = lshr i8 %a, 1
468*5c68c6d7SShengchen Kan  %1 = shl i8 %a, 7
469*5c68c6d7SShengchen Kan  %ror = or i8 %0, %1
470*5c68c6d7SShengchen Kan  store i8 %ror, ptr %ptr
471*5c68c6d7SShengchen Kan  ret void
472*5c68c6d7SShengchen Kan}
473*5c68c6d7SShengchen Kan
474*5c68c6d7SShengchen Kandefine void @ror16m1_legacy(ptr %ptr) {
475*5c68c6d7SShengchen Kan; CHECK-LABEL: ror16m1_legacy:
476*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
477*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorw (%rdi) # encoding: [0x66,0xd1,0x0f]
478*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
479*5c68c6d7SShengchen Kanentry:
480*5c68c6d7SShengchen Kan  %a = load i16, ptr %ptr
481*5c68c6d7SShengchen Kan  %0 = lshr i16 %a, 1
482*5c68c6d7SShengchen Kan  %1 = shl i16 %a, 15
483*5c68c6d7SShengchen Kan  %ror = or i16 %0, %1
484*5c68c6d7SShengchen Kan  store i16 %ror, ptr %ptr
485*5c68c6d7SShengchen Kan  ret void
486*5c68c6d7SShengchen Kan}
487*5c68c6d7SShengchen Kan
488*5c68c6d7SShengchen Kandefine void @ror32m1_legacy(ptr %ptr) {
489*5c68c6d7SShengchen Kan; CHECK-LABEL: ror32m1_legacy:
490*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
491*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorl (%rdi) # encoding: [0xd1,0x0f]
492*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
493*5c68c6d7SShengchen Kanentry:
494*5c68c6d7SShengchen Kan  %a = load i32, ptr %ptr
495*5c68c6d7SShengchen Kan  %0 = lshr i32 %a, 1
496*5c68c6d7SShengchen Kan  %1 = shl i32 %a, 31
497*5c68c6d7SShengchen Kan  %ror = or i32 %0, %1
498*5c68c6d7SShengchen Kan  store i32 %ror, ptr %ptr
499*5c68c6d7SShengchen Kan  ret void
500*5c68c6d7SShengchen Kan}
501*5c68c6d7SShengchen Kan
502*5c68c6d7SShengchen Kandefine void @ror64m1_legacy(ptr %ptr) {
503*5c68c6d7SShengchen Kan; CHECK-LABEL: ror64m1_legacy:
504*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
505*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorq (%rdi) # encoding: [0x48,0xd1,0x0f]
506*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
507*5c68c6d7SShengchen Kanentry:
508*5c68c6d7SShengchen Kan  %a = load i64, ptr %ptr
509*5c68c6d7SShengchen Kan  %0 = lshr i64 %a, 1
510*5c68c6d7SShengchen Kan  %1 = shl i64 %a, 63
511*5c68c6d7SShengchen Kan  %ror = or i64 %0, %1
512*5c68c6d7SShengchen Kan  store i64 %ror, ptr %ptr
513*5c68c6d7SShengchen Kan  ret void
514*5c68c6d7SShengchen Kan}
515*5c68c6d7SShengchen Kan
516*5c68c6d7SShengchen Kandefine void @ror8mcl_legacy(ptr %ptr, i8 %cl) {
517*5c68c6d7SShengchen Kan; CHECK-LABEL: ror8mcl_legacy:
518*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
519*5c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
520*5c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
521*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorb %cl, (%rdi) # encoding: [0xd2,0x0f]
522*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
523*5c68c6d7SShengchen Kanentry:
524*5c68c6d7SShengchen Kan  %a = load i8, ptr %ptr
525*5c68c6d7SShengchen Kan  %0 = lshr i8 %a, %cl
526*5c68c6d7SShengchen Kan  %1 = sub i8 8, %cl
527*5c68c6d7SShengchen Kan  %2 = shl i8 %a, %1
528*5c68c6d7SShengchen Kan  %ror = or i8 %0, %2
529*5c68c6d7SShengchen Kan  store i8 %ror, ptr %ptr
530*5c68c6d7SShengchen Kan  ret void
531*5c68c6d7SShengchen Kan}
532*5c68c6d7SShengchen Kan
533*5c68c6d7SShengchen Kandefine void @ror16mcl_legacy(ptr %ptr, i16 %cl) {
534*5c68c6d7SShengchen Kan; CHECK-LABEL: ror16mcl_legacy:
535*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
536*5c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
537*5c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
538*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorw %cl, (%rdi) # encoding: [0x66,0xd3,0x0f]
539*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
540*5c68c6d7SShengchen Kanentry:
541*5c68c6d7SShengchen Kan  %a = load i16, ptr %ptr
542*5c68c6d7SShengchen Kan  %0 = lshr i16 %a, %cl
543*5c68c6d7SShengchen Kan  %1 = sub i16 16, %cl
544*5c68c6d7SShengchen Kan  %2 = shl i16 %a, %1
545*5c68c6d7SShengchen Kan  %ror = or i16 %0, %2
546*5c68c6d7SShengchen Kan  store i16 %ror, ptr %ptr
547*5c68c6d7SShengchen Kan  ret void
548*5c68c6d7SShengchen Kan}
549*5c68c6d7SShengchen Kan
550*5c68c6d7SShengchen Kandefine void @ror32mcl_legacy(ptr %ptr, i32 %cl) {
551*5c68c6d7SShengchen Kan; CHECK-LABEL: ror32mcl_legacy:
552*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
553*5c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
554*5c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
555*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorl %cl, (%rdi) # encoding: [0xd3,0x0f]
556*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
557*5c68c6d7SShengchen Kanentry:
558*5c68c6d7SShengchen Kan  %a = load i32, ptr %ptr
559*5c68c6d7SShengchen Kan  %0 = lshr i32 %a, %cl
560*5c68c6d7SShengchen Kan  %1 = sub i32 32, %cl
561*5c68c6d7SShengchen Kan  %2 = shl i32 %a, %1
562*5c68c6d7SShengchen Kan  %ror = or i32 %0, %2
563*5c68c6d7SShengchen Kan  store i32 %ror, ptr %ptr
564*5c68c6d7SShengchen Kan  ret void
565*5c68c6d7SShengchen Kan}
566*5c68c6d7SShengchen Kan
567*5c68c6d7SShengchen Kandefine void @ror64mcl_legacy(ptr %ptr, i64 %cl) {
568*5c68c6d7SShengchen Kan; CHECK-LABEL: ror64mcl_legacy:
569*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
570*5c68c6d7SShengchen Kan; CHECK-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
571*5c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $rcx
572*5c68c6d7SShengchen Kan; CHECK-NEXT:    rorq %cl, (%rdi) # encoding: [0x48,0xd3,0x0f]
573*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
574*5c68c6d7SShengchen Kanentry:
575*5c68c6d7SShengchen Kan  %a = load i64, ptr %ptr
576*5c68c6d7SShengchen Kan  %0 = lshr i64 %a, %cl
577*5c68c6d7SShengchen Kan  %1 = sub i64 64, %cl
578*5c68c6d7SShengchen Kan  %2 = shl i64 %a, %1
579*5c68c6d7SShengchen Kan  %ror = or i64 %0, %2
580*5c68c6d7SShengchen Kan  store i64 %ror, ptr %ptr
581*5c68c6d7SShengchen Kan  ret void
582*5c68c6d7SShengchen Kan}
583*5c68c6d7SShengchen Kan
584*5c68c6d7SShengchen Kandefine void @ror8mi_legacy(ptr %ptr) {
585*5c68c6d7SShengchen Kan; CHECK-LABEL: ror8mi_legacy:
586*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
587*5c68c6d7SShengchen Kan; CHECK-NEXT:    rolb $5, (%rdi) # encoding: [0xc0,0x07,0x05]
588*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
589*5c68c6d7SShengchen Kanentry:
590*5c68c6d7SShengchen Kan  %a = load i8, ptr %ptr
591*5c68c6d7SShengchen Kan  %0 = lshr i8 %a, 3
592*5c68c6d7SShengchen Kan  %1 = shl i8 %a, 5
593*5c68c6d7SShengchen Kan  %ror = or i8 %0, %1
594*5c68c6d7SShengchen Kan  store i8 %ror, ptr %ptr
595*5c68c6d7SShengchen Kan  ret void
596*5c68c6d7SShengchen Kan}
597*5c68c6d7SShengchen Kan
598*5c68c6d7SShengchen Kandefine void @ror16mi_legacy(ptr %ptr) {
599*5c68c6d7SShengchen Kan; CHECK-LABEL: ror16mi_legacy:
600*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
601*5c68c6d7SShengchen Kan; CHECK-NEXT:    rolw $13, (%rdi) # encoding: [0x66,0xc1,0x07,0x0d]
602*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
603*5c68c6d7SShengchen Kanentry:
604*5c68c6d7SShengchen Kan  %a = load i16, ptr %ptr
605*5c68c6d7SShengchen Kan  %0 = lshr i16 %a, 3
606*5c68c6d7SShengchen Kan  %1 = shl i16 %a, 13
607*5c68c6d7SShengchen Kan  %ror = or i16 %0, %1
608*5c68c6d7SShengchen Kan  store i16 %ror, ptr %ptr
609*5c68c6d7SShengchen Kan  ret void
610*5c68c6d7SShengchen Kan}
611*5c68c6d7SShengchen Kan
612*5c68c6d7SShengchen Kandefine void @ror32mi_legacy(ptr %ptr) {
613*5c68c6d7SShengchen Kan; CHECK-LABEL: ror32mi_legacy:
614*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
615*5c68c6d7SShengchen Kan; CHECK-NEXT:    roll $29, (%rdi) # encoding: [0xc1,0x07,0x1d]
616*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
617*5c68c6d7SShengchen Kanentry:
618*5c68c6d7SShengchen Kan  %a = load i32, ptr %ptr
619*5c68c6d7SShengchen Kan  %0 = lshr i32 %a, 3
620*5c68c6d7SShengchen Kan  %1 = shl i32 %a, 29
621*5c68c6d7SShengchen Kan  %ror = or i32 %0, %1
622*5c68c6d7SShengchen Kan  store i32 %ror, ptr %ptr
623*5c68c6d7SShengchen Kan  ret void
624*5c68c6d7SShengchen Kan}
625*5c68c6d7SShengchen Kan
626*5c68c6d7SShengchen Kandefine void @ror64mi_legacy(ptr %ptr) {
627*5c68c6d7SShengchen Kan; CHECK-LABEL: ror64mi_legacy:
628*5c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
629*5c68c6d7SShengchen Kan; CHECK-NEXT:    rolq $61, (%rdi) # encoding: [0x48,0xc1,0x07,0x3d]
630*5c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
631*5c68c6d7SShengchen Kanentry:
632*5c68c6d7SShengchen Kan  %a = load i64, ptr %ptr
633*5c68c6d7SShengchen Kan  %0 = lshr i64 %a, 3
634*5c68c6d7SShengchen Kan  %1 = shl i64 %a, 61
635*5c68c6d7SShengchen Kan  %ror = or i64 %0, %1
636*5c68c6d7SShengchen Kan  store i64 %ror, ptr %ptr
637*5c68c6d7SShengchen Kan  ret void
638*5c68c6d7SShengchen Kan}
639