1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ndd -verify-machineinstrs --show-mc-encoding | FileCheck %s
4 define i8 @rol8m1(ptr %ptr) {
6 ; CHECK: # %bb.0: # %entry
7 ; CHECK-NEXT: rolb (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xd0,0x07]
8 ; CHECK-NEXT: retq # encoding: [0xc3]
10 %a = load i8, ptr %ptr
17 define i8 @rol8m1_intrinsic(ptr %ptr) {
18 ; CHECK-LABEL: rol8m1_intrinsic:
20 ; CHECK-NEXT: rolb (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xd0,0x07]
21 ; CHECK-NEXT: retq # encoding: [0xc3]
22 %a = load i8, ptr %ptr
23 %f = call i8 @llvm.fshr.i8(i8 %a, i8 %a, i8 7)
27 define i16 @rol16m1(ptr %ptr) {
28 ; CHECK-LABEL: rol16m1:
29 ; CHECK: # %bb.0: # %entry
30 ; CHECK-NEXT: rolw (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd1,0x07]
31 ; CHECK-NEXT: retq # encoding: [0xc3]
33 %a = load i16, ptr %ptr
40 define i16 @rol16m1_intrinsic(ptr %ptr) {
41 ; CHECK-LABEL: rol16m1_intrinsic:
43 ; CHECK-NEXT: rolw (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd1,0x07]
44 ; CHECK-NEXT: retq # encoding: [0xc3]
45 %a = load i16, ptr %ptr
46 %f = call i16 @llvm.fshr.i16(i16 %a, i16 %a, i16 15)
50 define i32 @rol32m1(ptr %ptr) {
51 ; CHECK-LABEL: rol32m1:
52 ; CHECK: # %bb.0: # %entry
53 ; CHECK-NEXT: roll (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd1,0x07]
54 ; CHECK-NEXT: retq # encoding: [0xc3]
56 %a = load i32, ptr %ptr
63 define i32 @rol32m1_intrinsic(ptr %ptr) {
64 ; CHECK-LABEL: rol32m1_intrinsic:
66 ; CHECK-NEXT: roll (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd1,0x07]
67 ; CHECK-NEXT: retq # encoding: [0xc3]
68 %a = load i32, ptr %ptr
69 %f = call i32 @llvm.fshr.i32(i32 %a, i32 %a, i32 31)
73 define i64 @rol64m1(ptr %ptr) {
74 ; CHECK-LABEL: rol64m1:
75 ; CHECK: # %bb.0: # %entry
76 ; CHECK-NEXT: rolq (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd1,0x07]
77 ; CHECK-NEXT: retq # encoding: [0xc3]
79 %a = load i64, ptr %ptr
86 define i64 @rol64m1_intrinsic(ptr %ptr) {
87 ; CHECK-LABEL: rol64m1_intrinsic:
89 ; CHECK-NEXT: rolq (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd1,0x07]
90 ; CHECK-NEXT: retq # encoding: [0xc3]
91 %a = load i64, ptr %ptr
92 %f = call i64 @llvm.fshr.i64(i64 %a, i64 %a, i64 63)
96 define i8 @rol8mcl(ptr %ptr, i8 %cl) {
97 ; CHECK-LABEL: rol8mcl:
98 ; CHECK: # %bb.0: # %entry
99 ; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]
100 ; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
101 ; CHECK-NEXT: rolb %cl, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0x07]
102 ; CHECK-NEXT: retq # encoding: [0xc3]
104 %a = load i8, ptr %ptr
112 define i16 @rol16mcl(ptr %ptr, i16 %cl) {
113 ; CHECK-LABEL: rol16mcl:
114 ; CHECK: # %bb.0: # %entry
115 ; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]
116 ; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
117 ; CHECK-NEXT: rolw %cl, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0x07]
118 ; CHECK-NEXT: retq # encoding: [0xc3]
120 %a = load i16, ptr %ptr
128 define i32 @rol32mcl(ptr %ptr, i32 %cl) {
129 ; CHECK-LABEL: rol32mcl:
130 ; CHECK: # %bb.0: # %entry
131 ; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]
132 ; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
133 ; CHECK-NEXT: roll %cl, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0x07]
134 ; CHECK-NEXT: retq # encoding: [0xc3]
136 %a = load i32, ptr %ptr
144 define i64 @rol64mcl(ptr %ptr, i64 %cl) {
145 ; CHECK-LABEL: rol64mcl:
146 ; CHECK: # %bb.0: # %entry
147 ; CHECK-NEXT: movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
148 ; CHECK-NEXT: # kill: def $cl killed $cl killed $rcx
149 ; CHECK-NEXT: rolq %cl, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0x07]
150 ; CHECK-NEXT: retq # encoding: [0xc3]
152 %a = load i64, ptr %ptr
160 define i8 @rol8mi(ptr %ptr) {
161 ; CHECK-LABEL: rol8mi:
162 ; CHECK: # %bb.0: # %entry
163 ; CHECK-NEXT: rolb $3, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xc0,0x07,0x03]
164 ; CHECK-NEXT: retq # encoding: [0xc3]
166 %a = load i8, ptr %ptr
173 define i16 @rol16mi(ptr %ptr) {
174 ; CHECK-LABEL: rol16mi:
175 ; CHECK: # %bb.0: # %entry
176 ; CHECK-NEXT: rolw $3, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xc1,0x07,0x03]
177 ; CHECK-NEXT: retq # encoding: [0xc3]
179 %a = load i16, ptr %ptr
186 define i32 @rol32mi(ptr %ptr) {
187 ; CHECK-LABEL: rol32mi:
188 ; CHECK: # %bb.0: # %entry
189 ; CHECK-NEXT: roll $3, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xc1,0x07,0x03]
190 ; CHECK-NEXT: retq # encoding: [0xc3]
192 %a = load i32, ptr %ptr
199 define i64 @rol64mi(ptr %ptr) {
200 ; CHECK-LABEL: rol64mi:
201 ; CHECK: # %bb.0: # %entry
202 ; CHECK-NEXT: rolq $3, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xc1,0x07,0x03]
203 ; CHECK-NEXT: retq # encoding: [0xc3]
205 %a = load i64, ptr %ptr
212 define i8 @rol8r1(i8 noundef %a) {
213 ; CHECK-LABEL: rol8r1:
214 ; CHECK: # %bb.0: # %entry
215 ; CHECK-NEXT: rolb %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xd0,0xc7]
216 ; CHECK-NEXT: retq # encoding: [0xc3]
224 define i8 @rol8r1_intrinsic(i8 noundef %a) {
225 ; CHECK-LABEL: rol8r1_intrinsic:
227 ; CHECK-NEXT: rolb %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xd0,0xc7]
228 ; CHECK-NEXT: retq # encoding: [0xc3]
229 %f = call i8 @llvm.fshr.i8(i8 %a, i8 %a, i8 7)
233 define i16 @rol16r1(i16 noundef %a) {
234 ; CHECK-LABEL: rol16r1:
235 ; CHECK: # %bb.0: # %entry
236 ; CHECK-NEXT: rolw %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd1,0xc7]
237 ; CHECK-NEXT: retq # encoding: [0xc3]
245 define i16 @rol16r1_intrinsic(i16 noundef %a) {
246 ; CHECK-LABEL: rol16r1_intrinsic:
248 ; CHECK-NEXT: rolw %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd1,0xc7]
249 ; CHECK-NEXT: retq # encoding: [0xc3]
250 %f = call i16 @llvm.fshr.i16(i16 %a, i16 %a, i16 15)
254 define i32 @rol32r1(i32 noundef %a) {
255 ; CHECK-LABEL: rol32r1:
256 ; CHECK: # %bb.0: # %entry
257 ; CHECK-NEXT: roll %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd1,0xc7]
258 ; CHECK-NEXT: retq # encoding: [0xc3]
266 define i32 @rol32r1_intrinsic(i32 noundef %a) {
267 ; CHECK-LABEL: rol32r1_intrinsic:
269 ; CHECK-NEXT: roll %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd1,0xc7]
270 ; CHECK-NEXT: retq # encoding: [0xc3]
271 %f = call i32 @llvm.fshr.i32(i32 %a, i32 %a, i32 31)
275 define i64 @rol64r1(i64 noundef %a) {
276 ; CHECK-LABEL: rol64r1:
277 ; CHECK: # %bb.0: # %entry
278 ; CHECK-NEXT: rolq %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd1,0xc7]
279 ; CHECK-NEXT: retq # encoding: [0xc3]
287 define i64 @rol64r1_intrinsic(i64 noundef %a) {
288 ; CHECK-LABEL: rol64r1_intrinsic:
290 ; CHECK-NEXT: rolq %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd1,0xc7]
291 ; CHECK-NEXT: retq # encoding: [0xc3]
292 %f = call i64 @llvm.fshr.i64(i64 %a, i64 %a, i64 63)
296 define i8 @rol8rcl(i8 noundef %a, i8 %cl) {
297 ; CHECK-LABEL: rol8rcl:
298 ; CHECK: # %bb.0: # %entry
299 ; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]
300 ; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
301 ; CHECK-NEXT: rolb %cl, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0xc7]
302 ; CHECK-NEXT: retq # encoding: [0xc3]
311 define i16 @rol16rcl(i16 noundef %a, i16 %cl) {
312 ; CHECK-LABEL: rol16rcl:
313 ; CHECK: # %bb.0: # %entry
314 ; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]
315 ; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
316 ; CHECK-NEXT: rolw %cl, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0xc7]
317 ; CHECK-NEXT: retq # encoding: [0xc3]
326 define i32 @rol32rcl(i32 noundef %a, i32 %cl) {
327 ; CHECK-LABEL: rol32rcl:
328 ; CHECK: # %bb.0: # %entry
329 ; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]
330 ; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
331 ; CHECK-NEXT: roll %cl, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0xc7]
332 ; CHECK-NEXT: retq # encoding: [0xc3]
341 define i64 @rol64rcl(i64 noundef %a, i64 %cl) {
342 ; CHECK-LABEL: rol64rcl:
343 ; CHECK: # %bb.0: # %entry
344 ; CHECK-NEXT: movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
345 ; CHECK-NEXT: # kill: def $cl killed $cl killed $rcx
346 ; CHECK-NEXT: rolq %cl, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0xc7]
347 ; CHECK-NEXT: retq # encoding: [0xc3]
356 define i8 @rol8ri(i8 noundef %a) {
357 ; CHECK-LABEL: rol8ri:
358 ; CHECK: # %bb.0: # %entry
359 ; CHECK-NEXT: rolb $3, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xc0,0xc7,0x03]
360 ; CHECK-NEXT: retq # encoding: [0xc3]
368 define i16 @rol16ri(i16 noundef %a) {
369 ; CHECK-LABEL: rol16ri:
370 ; CHECK: # %bb.0: # %entry
371 ; CHECK-NEXT: rolw $3, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xc1,0xc7,0x03]
372 ; CHECK-NEXT: retq # encoding: [0xc3]
380 define i32 @rol32ri(i32 noundef %a) {
381 ; CHECK-LABEL: rol32ri:
382 ; CHECK: # %bb.0: # %entry
383 ; CHECK-NEXT: roll $3, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xc1,0xc7,0x03]
384 ; CHECK-NEXT: retq # encoding: [0xc3]
392 define i64 @rol64ri(i64 noundef %a) {
393 ; CHECK-LABEL: rol64ri:
394 ; CHECK: # %bb.0: # %entry
395 ; CHECK-NEXT: rolq $3, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xc1,0xc7,0x03]
396 ; CHECK-NEXT: retq # encoding: [0xc3]
404 define void @rol8m1_legacy(ptr %ptr) {
405 ; CHECK-LABEL: rol8m1_legacy:
406 ; CHECK: # %bb.0: # %entry
407 ; CHECK-NEXT: rolb (%rdi) # encoding: [0xd0,0x07]
408 ; CHECK-NEXT: retq # encoding: [0xc3]
410 %a = load i8, ptr %ptr
414 store i8 %rol, ptr %ptr
418 define void @rol16m1_legacy(ptr %ptr) {
419 ; CHECK-LABEL: rol16m1_legacy:
420 ; CHECK: # %bb.0: # %entry
421 ; CHECK-NEXT: rolw (%rdi) # encoding: [0x66,0xd1,0x07]
422 ; CHECK-NEXT: retq # encoding: [0xc3]
424 %a = load i16, ptr %ptr
428 store i16 %rol, ptr %ptr
432 define void @rol32m1_legacy(ptr %ptr) {
433 ; CHECK-LABEL: rol32m1_legacy:
434 ; CHECK: # %bb.0: # %entry
435 ; CHECK-NEXT: roll (%rdi) # encoding: [0xd1,0x07]
436 ; CHECK-NEXT: retq # encoding: [0xc3]
438 %a = load i32, ptr %ptr
442 store i32 %rol, ptr %ptr
446 define void @rol64m1_legacy(ptr %ptr) {
447 ; CHECK-LABEL: rol64m1_legacy:
448 ; CHECK: # %bb.0: # %entry
449 ; CHECK-NEXT: rolq (%rdi) # encoding: [0x48,0xd1,0x07]
450 ; CHECK-NEXT: retq # encoding: [0xc3]
452 %a = load i64, ptr %ptr
456 store i64 %rol, ptr %ptr
460 define void @rol8mcl_legacy(ptr %ptr, i8 %cl) {
461 ; CHECK-LABEL: rol8mcl_legacy:
462 ; CHECK: # %bb.0: # %entry
463 ; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]
464 ; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
465 ; CHECK-NEXT: rolb %cl, (%rdi) # encoding: [0xd2,0x07]
466 ; CHECK-NEXT: retq # encoding: [0xc3]
468 %a = load i8, ptr %ptr
473 store i8 %rol, ptr %ptr
477 define void @rol16mcl_legacy(ptr %ptr, i16 %cl) {
478 ; CHECK-LABEL: rol16mcl_legacy:
479 ; CHECK: # %bb.0: # %entry
480 ; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]
481 ; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
482 ; CHECK-NEXT: rolw %cl, (%rdi) # encoding: [0x66,0xd3,0x07]
483 ; CHECK-NEXT: retq # encoding: [0xc3]
485 %a = load i16, ptr %ptr
490 store i16 %rol, ptr %ptr
494 define void @rol32mcl_legacy(ptr %ptr, i32 %cl) {
495 ; CHECK-LABEL: rol32mcl_legacy:
496 ; CHECK: # %bb.0: # %entry
497 ; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]
498 ; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
499 ; CHECK-NEXT: roll %cl, (%rdi) # encoding: [0xd3,0x07]
500 ; CHECK-NEXT: retq # encoding: [0xc3]
502 %a = load i32, ptr %ptr
507 store i32 %rol, ptr %ptr
511 define void @rol64mcl_legacy(ptr %ptr, i64 %cl) {
512 ; CHECK-LABEL: rol64mcl_legacy:
513 ; CHECK: # %bb.0: # %entry
514 ; CHECK-NEXT: movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
515 ; CHECK-NEXT: # kill: def $cl killed $cl killed $rcx
516 ; CHECK-NEXT: rolq %cl, (%rdi) # encoding: [0x48,0xd3,0x07]
517 ; CHECK-NEXT: retq # encoding: [0xc3]
519 %a = load i64, ptr %ptr
524 store i64 %rol, ptr %ptr
528 define void @rol8mi_legacy(ptr %ptr) {
529 ; CHECK-LABEL: rol8mi_legacy:
530 ; CHECK: # %bb.0: # %entry
531 ; CHECK-NEXT: rolb $3, (%rdi) # encoding: [0xc0,0x07,0x03]
532 ; CHECK-NEXT: retq # encoding: [0xc3]
534 %a = load i8, ptr %ptr
538 store i8 %rol, ptr %ptr
542 define void @rol16mi_legacy(ptr %ptr) {
543 ; CHECK-LABEL: rol16mi_legacy:
544 ; CHECK: # %bb.0: # %entry
545 ; CHECK-NEXT: rolw $3, (%rdi) # encoding: [0x66,0xc1,0x07,0x03]
546 ; CHECK-NEXT: retq # encoding: [0xc3]
548 %a = load i16, ptr %ptr
552 store i16 %rol, ptr %ptr
556 define void @rol32mi_legacy(ptr %ptr) {
557 ; CHECK-LABEL: rol32mi_legacy:
558 ; CHECK: # %bb.0: # %entry
559 ; CHECK-NEXT: roll $3, (%rdi) # encoding: [0xc1,0x07,0x03]
560 ; CHECK-NEXT: retq # encoding: [0xc3]
562 %a = load i32, ptr %ptr
566 store i32 %rol, ptr %ptr
570 define void @rol64mi_legacy(ptr %ptr) {
571 ; CHECK-LABEL: rol64mi_legacy:
572 ; CHECK: # %bb.0: # %entry
573 ; CHECK-NEXT: rolq $3, (%rdi) # encoding: [0x48,0xc1,0x07,0x03]
574 ; CHECK-NEXT: retq # encoding: [0xc3]
576 %a = load i64, ptr %ptr
580 store i64 %rol, ptr %ptr