xref: /llvm-project/llvm/test/CodeGen/X86/apx/shl.ll (revision 20683de70e43fa73536ac1e8ce4082604048d040)
15c68c6d7SShengchen Kan; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
25c68c6d7SShengchen Kan; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ndd -verify-machineinstrs --show-mc-encoding | FileCheck %s
3a9e8a3a1SShengchen Kan; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ndd,nf -verify-machineinstrs --show-mc-encoding | FileCheck --check-prefix=NF %s
45c68c6d7SShengchen Kan
55c68c6d7SShengchen Kandefine i8 @shl8ri(i8 noundef %a) {
65c68c6d7SShengchen Kan; CHECK-LABEL: shl8ri:
75c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
85c68c6d7SShengchen Kan; CHECK-NEXT:    shlb $4, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xc0,0xe7,0x04]
95c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
10a9e8a3a1SShengchen Kan;
11a9e8a3a1SShengchen Kan; NF-LABEL: shl8ri:
12a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
13a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shlb $4, %dil, %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xc0,0xe7,0x04]
14a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
155c68c6d7SShengchen Kanentry:
165c68c6d7SShengchen Kan  %shl = shl i8 %a, 4
175c68c6d7SShengchen Kan  ret i8 %shl
185c68c6d7SShengchen Kan}
195c68c6d7SShengchen Kan
205c68c6d7SShengchen Kandefine i16 @shl16ri(i16 noundef %a) {
215c68c6d7SShengchen Kan; CHECK-LABEL: shl16ri:
225c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
23*20683de7SShengchen Kan; CHECK-NEXT:    shlw $4, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xc1,0xe7,0x04]
245c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
25a9e8a3a1SShengchen Kan;
26a9e8a3a1SShengchen Kan; NF-LABEL: shl16ri:
27a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
28*20683de7SShengchen Kan; NF-NEXT:    {nf} shlw $4, %di, %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0xc1,0xe7,0x04]
29a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
305c68c6d7SShengchen Kanentry:
315c68c6d7SShengchen Kan  %shl = shl i16 %a, 4
325c68c6d7SShengchen Kan  ret i16 %shl
335c68c6d7SShengchen Kan}
345c68c6d7SShengchen Kan
355c68c6d7SShengchen Kandefine i32 @shl32ri(i32 noundef %a) {
365c68c6d7SShengchen Kan; CHECK-LABEL: shl32ri:
375c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
385c68c6d7SShengchen Kan; CHECK-NEXT:    shll $4, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xc1,0xe7,0x04]
395c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
40a9e8a3a1SShengchen Kan;
41a9e8a3a1SShengchen Kan; NF-LABEL: shl32ri:
42a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
43a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shll $4, %edi, %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xc1,0xe7,0x04]
44a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
455c68c6d7SShengchen Kanentry:
465c68c6d7SShengchen Kan  %shl = shl i32 %a, 4
475c68c6d7SShengchen Kan  ret i32 %shl
485c68c6d7SShengchen Kan}
495c68c6d7SShengchen Kan
505c68c6d7SShengchen Kandefine i64 @shl64ri(i64 noundef %a) {
515c68c6d7SShengchen Kan; CHECK-LABEL: shl64ri:
525c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
535c68c6d7SShengchen Kan; CHECK-NEXT:    shlq $4, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xc1,0xe7,0x04]
545c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
55a9e8a3a1SShengchen Kan;
56a9e8a3a1SShengchen Kan; NF-LABEL: shl64ri:
57a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
58a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shlq $4, %rdi, %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0xc1,0xe7,0x04]
59a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
605c68c6d7SShengchen Kanentry:
615c68c6d7SShengchen Kan  %shl = shl i64 %a, 4
625c68c6d7SShengchen Kan  ret i64 %shl
635c68c6d7SShengchen Kan}
645c68c6d7SShengchen Kan
655c68c6d7SShengchen Kandefine i8 @shl8m1(ptr %ptr) {
665c68c6d7SShengchen Kan; CHECK-LABEL: shl8m1:
675c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
685c68c6d7SShengchen Kan; CHECK-NEXT:    movzbl (%rdi), %eax # encoding: [0x0f,0xb6,0x07]
695c68c6d7SShengchen Kan; CHECK-NEXT:    addb %al, %al # EVEX TO LEGACY Compression encoding: [0x00,0xc0]
705c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
71a9e8a3a1SShengchen Kan;
72a9e8a3a1SShengchen Kan; NF-LABEL: shl8m1:
73a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
74a9e8a3a1SShengchen Kan; NF-NEXT:    movzbl (%rdi), %eax # encoding: [0x0f,0xb6,0x07]
75a9e8a3a1SShengchen Kan; NF-NEXT:    addb %al, %al # EVEX TO LEGACY Compression encoding: [0x00,0xc0]
76a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
775c68c6d7SShengchen Kanentry:
785c68c6d7SShengchen Kan  %a = load i8, ptr %ptr
795c68c6d7SShengchen Kan  %shl = shl i8 %a, 1
805c68c6d7SShengchen Kan  ret i8 %shl
815c68c6d7SShengchen Kan}
825c68c6d7SShengchen Kan
835c68c6d7SShengchen Kandefine i16 @shl16m1(ptr %ptr) {
845c68c6d7SShengchen Kan; CHECK-LABEL: shl16m1:
855c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
865c68c6d7SShengchen Kan; CHECK-NEXT:    movzwl (%rdi), %eax # encoding: [0x0f,0xb7,0x07]
87*20683de7SShengchen Kan; CHECK-NEXT:    addw %ax, %ax # EVEX TO LEGACY Compression encoding: [0x66,0x01,0xc0]
885c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
89a9e8a3a1SShengchen Kan;
90a9e8a3a1SShengchen Kan; NF-LABEL: shl16m1:
91a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
92a9e8a3a1SShengchen Kan; NF-NEXT:    movzwl (%rdi), %eax # encoding: [0x0f,0xb7,0x07]
93*20683de7SShengchen Kan; NF-NEXT:    addw %ax, %ax # EVEX TO LEGACY Compression encoding: [0x66,0x01,0xc0]
94a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
955c68c6d7SShengchen Kanentry:
965c68c6d7SShengchen Kan  %a = load i16, ptr %ptr
975c68c6d7SShengchen Kan  %shl = shl i16 %a, 1
985c68c6d7SShengchen Kan  ret i16 %shl
995c68c6d7SShengchen Kan}
1005c68c6d7SShengchen Kan
1015c68c6d7SShengchen Kandefine i32 @shl32m1(ptr %ptr) {
1025c68c6d7SShengchen Kan; CHECK-LABEL: shl32m1:
1035c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
1045c68c6d7SShengchen Kan; CHECK-NEXT:    movl (%rdi), %eax # encoding: [0x8b,0x07]
1055c68c6d7SShengchen Kan; CHECK-NEXT:    addl %eax, %eax # EVEX TO LEGACY Compression encoding: [0x01,0xc0]
1065c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
107a9e8a3a1SShengchen Kan;
108a9e8a3a1SShengchen Kan; NF-LABEL: shl32m1:
109a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
110a9e8a3a1SShengchen Kan; NF-NEXT:    movl (%rdi), %eax # encoding: [0x8b,0x07]
111a9e8a3a1SShengchen Kan; NF-NEXT:    addl %eax, %eax # EVEX TO LEGACY Compression encoding: [0x01,0xc0]
112a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
1135c68c6d7SShengchen Kanentry:
1145c68c6d7SShengchen Kan  %a = load i32, ptr %ptr
1155c68c6d7SShengchen Kan  %shl = shl i32 %a, 1
1165c68c6d7SShengchen Kan  ret i32 %shl
1175c68c6d7SShengchen Kan}
1185c68c6d7SShengchen Kan
1195c68c6d7SShengchen Kandefine i64 @shl64m1(ptr %ptr) {
1205c68c6d7SShengchen Kan; CHECK-LABEL: shl64m1:
1215c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
1225c68c6d7SShengchen Kan; CHECK-NEXT:    movq (%rdi), %rax # encoding: [0x48,0x8b,0x07]
1235c68c6d7SShengchen Kan; CHECK-NEXT:    addq %rax, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x01,0xc0]
1245c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
125a9e8a3a1SShengchen Kan;
126a9e8a3a1SShengchen Kan; NF-LABEL: shl64m1:
127a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
128a9e8a3a1SShengchen Kan; NF-NEXT:    movq (%rdi), %rax # encoding: [0x48,0x8b,0x07]
129a9e8a3a1SShengchen Kan; NF-NEXT:    addq %rax, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x01,0xc0]
130a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
1315c68c6d7SShengchen Kanentry:
1325c68c6d7SShengchen Kan  %a = load i64, ptr %ptr
1335c68c6d7SShengchen Kan  %shl = shl i64 %a, 1
1345c68c6d7SShengchen Kan  ret i64 %shl
1355c68c6d7SShengchen Kan}
1365c68c6d7SShengchen Kan
1375c68c6d7SShengchen Kandefine i8 @shl8mcl(ptr %ptr, i8 %cl) {
1385c68c6d7SShengchen Kan; CHECK-LABEL: shl8mcl:
1395c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
1405c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
1415c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
1425c68c6d7SShengchen Kan; CHECK-NEXT:    shlb %cl, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0x27]
1435c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
144a9e8a3a1SShengchen Kan;
145a9e8a3a1SShengchen Kan; NF-LABEL: shl8mcl:
146a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
147a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
148a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
149a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shlb %cl, (%rdi), %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd2,0x27]
150a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
1515c68c6d7SShengchen Kanentry:
1525c68c6d7SShengchen Kan  %a = load i8, ptr %ptr
1535c68c6d7SShengchen Kan  %shl = shl i8 %a, %cl
1545c68c6d7SShengchen Kan  ret i8 %shl
1555c68c6d7SShengchen Kan}
1565c68c6d7SShengchen Kan
1575c68c6d7SShengchen Kandefine i8 @shl8mcl_mask(ptr %ptr, i8 %cl) {
1585c68c6d7SShengchen Kan; CHECK-LABEL: shl8mcl_mask:
1595c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
1605c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
1615c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
1625c68c6d7SShengchen Kan; CHECK-NEXT:    shlb %cl, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0x27]
1635c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
164a9e8a3a1SShengchen Kan;
165a9e8a3a1SShengchen Kan; NF-LABEL: shl8mcl_mask:
166a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
167a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
168a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
169a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shlb %cl, (%rdi), %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd2,0x27]
170a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
1715c68c6d7SShengchen Kanentry:
1725c68c6d7SShengchen Kan  %a = load i8, ptr %ptr
1735c68c6d7SShengchen Kan  %shamt = and i8 %cl, 31
1745c68c6d7SShengchen Kan  %shl = shl i8 %a, %shamt
1755c68c6d7SShengchen Kan  ret i8 %shl
1765c68c6d7SShengchen Kan}
1775c68c6d7SShengchen Kan
1785c68c6d7SShengchen Kandefine i16 @shl16mcl(ptr %ptr, i16 %cl) {
1795c68c6d7SShengchen Kan; CHECK-LABEL: shl16mcl:
1805c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
1815c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
1825c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
183*20683de7SShengchen Kan; CHECK-NEXT:    shlw %cl, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0x27]
1845c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
185a9e8a3a1SShengchen Kan;
186a9e8a3a1SShengchen Kan; NF-LABEL: shl16mcl:
187a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
188a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
189a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
190*20683de7SShengchen Kan; NF-NEXT:    {nf} shlw %cl, (%rdi), %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0xd3,0x27]
191a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
1925c68c6d7SShengchen Kanentry:
1935c68c6d7SShengchen Kan  %a = load i16, ptr %ptr
1945c68c6d7SShengchen Kan  %shl = shl i16 %a, %cl
1955c68c6d7SShengchen Kan  ret i16 %shl
1965c68c6d7SShengchen Kan}
1975c68c6d7SShengchen Kan
1985c68c6d7SShengchen Kandefine i16 @shl16mcl_mask(ptr %ptr, i16 %cl) {
1995c68c6d7SShengchen Kan; CHECK-LABEL: shl16mcl_mask:
2005c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
2015c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
2025c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
203*20683de7SShengchen Kan; CHECK-NEXT:    shlw %cl, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0x27]
2045c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
205a9e8a3a1SShengchen Kan;
206a9e8a3a1SShengchen Kan; NF-LABEL: shl16mcl_mask:
207a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
208a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
209a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
210*20683de7SShengchen Kan; NF-NEXT:    {nf} shlw %cl, (%rdi), %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0xd3,0x27]
211a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
2125c68c6d7SShengchen Kanentry:
2135c68c6d7SShengchen Kan  %a = load i16, ptr %ptr
2145c68c6d7SShengchen Kan  %shamt = and i16 %cl, 31
2155c68c6d7SShengchen Kan  %shl = shl i16 %a, %shamt
2165c68c6d7SShengchen Kan  ret i16 %shl
2175c68c6d7SShengchen Kan}
2185c68c6d7SShengchen Kan
2195c68c6d7SShengchen Kandefine i32 @shl32mcl(ptr %ptr, i32 %cl) {
2205c68c6d7SShengchen Kan; CHECK-LABEL: shl32mcl:
2215c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
2225c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
2235c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
2245c68c6d7SShengchen Kan; CHECK-NEXT:    shll %cl, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0x27]
2255c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
226a9e8a3a1SShengchen Kan;
227a9e8a3a1SShengchen Kan; NF-LABEL: shl32mcl:
228a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
229a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
230a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
231a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shll %cl, (%rdi), %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd3,0x27]
232a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
2335c68c6d7SShengchen Kanentry:
2345c68c6d7SShengchen Kan  %a = load i32, ptr %ptr
2355c68c6d7SShengchen Kan  %shl = shl i32 %a, %cl
2365c68c6d7SShengchen Kan  ret i32 %shl
2375c68c6d7SShengchen Kan}
2385c68c6d7SShengchen Kan
2395c68c6d7SShengchen Kandefine i32 @shl32mcl_mask(ptr %ptr, i32 %cl) {
2405c68c6d7SShengchen Kan; CHECK-LABEL: shl32mcl_mask:
2415c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
2425c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
2435c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
2445c68c6d7SShengchen Kan; CHECK-NEXT:    shll %cl, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0x27]
2455c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
246a9e8a3a1SShengchen Kan;
247a9e8a3a1SShengchen Kan; NF-LABEL: shl32mcl_mask:
248a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
249a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
250a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
251a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shll %cl, (%rdi), %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd3,0x27]
252a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
2535c68c6d7SShengchen Kanentry:
2545c68c6d7SShengchen Kan  %a = load i32, ptr %ptr
2555c68c6d7SShengchen Kan  %shamt = and i32 %cl, 31
2565c68c6d7SShengchen Kan  %shl = shl i32 %a, %shamt
2575c68c6d7SShengchen Kan  ret i32 %shl
2585c68c6d7SShengchen Kan}
2595c68c6d7SShengchen Kan
2605c68c6d7SShengchen Kandefine i64 @shl64mcl(ptr %ptr, i64 %cl) {
2615c68c6d7SShengchen Kan; CHECK-LABEL: shl64mcl:
2625c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
2635c68c6d7SShengchen Kan; CHECK-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
2645c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $rcx
2655c68c6d7SShengchen Kan; CHECK-NEXT:    shlq %cl, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0x27]
2665c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
267a9e8a3a1SShengchen Kan;
268a9e8a3a1SShengchen Kan; NF-LABEL: shl64mcl:
269a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
270a9e8a3a1SShengchen Kan; NF-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
271a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $rcx
272a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shlq %cl, (%rdi), %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0xd3,0x27]
273a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
2745c68c6d7SShengchen Kanentry:
2755c68c6d7SShengchen Kan  %a = load i64, ptr %ptr
2765c68c6d7SShengchen Kan  %shl = shl i64 %a, %cl
2775c68c6d7SShengchen Kan  ret i64 %shl
2785c68c6d7SShengchen Kan}
2795c68c6d7SShengchen Kan
2805c68c6d7SShengchen Kandefine i64 @shl64mcl_mask(ptr %ptr, i64 %cl) {
2815c68c6d7SShengchen Kan; CHECK-LABEL: shl64mcl_mask:
2825c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
2835c68c6d7SShengchen Kan; CHECK-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
2845c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $rcx
2855c68c6d7SShengchen Kan; CHECK-NEXT:    shlq %cl, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0x27]
2865c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
287a9e8a3a1SShengchen Kan;
288a9e8a3a1SShengchen Kan; NF-LABEL: shl64mcl_mask:
289a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
290a9e8a3a1SShengchen Kan; NF-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
291a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $rcx
292a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shlq %cl, (%rdi), %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0xd3,0x27]
293a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
2945c68c6d7SShengchen Kanentry:
2955c68c6d7SShengchen Kan  %a = load i64, ptr %ptr
2965c68c6d7SShengchen Kan  %shamt = and i64 %cl, 63
2975c68c6d7SShengchen Kan  %shl = shl i64 %a, %shamt
2985c68c6d7SShengchen Kan  ret i64 %shl
2995c68c6d7SShengchen Kan}
3005c68c6d7SShengchen Kan
3015c68c6d7SShengchen Kandefine i8 @shl8mi(ptr %ptr) {
3025c68c6d7SShengchen Kan; CHECK-LABEL: shl8mi:
3035c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
3045c68c6d7SShengchen Kan; CHECK-NEXT:    shlb $4, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xc0,0x27,0x04]
3055c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
306a9e8a3a1SShengchen Kan;
307a9e8a3a1SShengchen Kan; NF-LABEL: shl8mi:
308a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
309a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shlb $4, (%rdi), %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xc0,0x27,0x04]
310a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
3115c68c6d7SShengchen Kanentry:
3125c68c6d7SShengchen Kan  %a = load i8, ptr %ptr
3135c68c6d7SShengchen Kan  %shl = shl i8 %a, 4
3145c68c6d7SShengchen Kan  ret i8 %shl
3155c68c6d7SShengchen Kan}
3165c68c6d7SShengchen Kan
3175c68c6d7SShengchen Kandefine i16 @shl16mi(ptr %ptr) {
3185c68c6d7SShengchen Kan; CHECK-LABEL: shl16mi:
3195c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
320*20683de7SShengchen Kan; CHECK-NEXT:    shlw $4, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xc1,0x27,0x04]
3215c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
322a9e8a3a1SShengchen Kan;
323a9e8a3a1SShengchen Kan; NF-LABEL: shl16mi:
324a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
325*20683de7SShengchen Kan; NF-NEXT:    {nf} shlw $4, (%rdi), %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0xc1,0x27,0x04]
326a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
3275c68c6d7SShengchen Kanentry:
3285c68c6d7SShengchen Kan  %a = load i16, ptr %ptr
3295c68c6d7SShengchen Kan  %shl = shl i16 %a, 4
3305c68c6d7SShengchen Kan  ret i16 %shl
3315c68c6d7SShengchen Kan}
3325c68c6d7SShengchen Kan
3335c68c6d7SShengchen Kandefine i32 @shl32mi(ptr %ptr) {
3345c68c6d7SShengchen Kan; CHECK-LABEL: shl32mi:
3355c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
3365c68c6d7SShengchen Kan; CHECK-NEXT:    shll $4, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xc1,0x27,0x04]
3375c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
338a9e8a3a1SShengchen Kan;
339a9e8a3a1SShengchen Kan; NF-LABEL: shl32mi:
340a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
341a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shll $4, (%rdi), %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xc1,0x27,0x04]
342a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
3435c68c6d7SShengchen Kanentry:
3445c68c6d7SShengchen Kan  %a = load i32, ptr %ptr
3455c68c6d7SShengchen Kan  %shl = shl i32 %a, 4
3465c68c6d7SShengchen Kan  ret i32 %shl
3475c68c6d7SShengchen Kan}
3485c68c6d7SShengchen Kan
3495c68c6d7SShengchen Kandefine i64 @shl64mi(ptr %ptr) {
3505c68c6d7SShengchen Kan; CHECK-LABEL: shl64mi:
3515c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
3525c68c6d7SShengchen Kan; CHECK-NEXT:    shlq $4, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xc1,0x27,0x04]
3535c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
354a9e8a3a1SShengchen Kan;
355a9e8a3a1SShengchen Kan; NF-LABEL: shl64mi:
356a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
357a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shlq $4, (%rdi), %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0xc1,0x27,0x04]
358a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
3595c68c6d7SShengchen Kanentry:
3605c68c6d7SShengchen Kan  %a = load i64, ptr %ptr
3615c68c6d7SShengchen Kan  %shl = shl i64 %a, 4
3625c68c6d7SShengchen Kan  ret i64 %shl
3635c68c6d7SShengchen Kan}
3645c68c6d7SShengchen Kan
3655c68c6d7SShengchen Kandefine i8 @shl8r1(i8 noundef %a) {
3665c68c6d7SShengchen Kan; CHECK-LABEL: shl8r1:
3675c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
3685c68c6d7SShengchen Kan; CHECK-NEXT:    addb %dil, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0x00,0xff]
3695c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
370a9e8a3a1SShengchen Kan;
371a9e8a3a1SShengchen Kan; NF-LABEL: shl8r1:
372a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
373a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} addb %dil, %dil, %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x00,0xff]
374a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
3755c68c6d7SShengchen Kanentry:
3765c68c6d7SShengchen Kan  %shl = shl i8 %a, 1
3775c68c6d7SShengchen Kan  ret i8 %shl
3785c68c6d7SShengchen Kan}
3795c68c6d7SShengchen Kan
3805c68c6d7SShengchen Kandefine i16 @shl16r1(i16 noundef %a) {
3815c68c6d7SShengchen Kan; CHECK-LABEL: shl16r1:
3825c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
383*20683de7SShengchen Kan; CHECK-NEXT:    addw %di, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0x01,0xff]
3845c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
385a9e8a3a1SShengchen Kan;
386a9e8a3a1SShengchen Kan; NF-LABEL: shl16r1:
387a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
388*20683de7SShengchen Kan; NF-NEXT:    {nf} addw %di, %di, %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0x01,0xff]
389a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
3905c68c6d7SShengchen Kanentry:
3915c68c6d7SShengchen Kan  %shl = shl i16 %a, 1
3925c68c6d7SShengchen Kan  ret i16 %shl
3935c68c6d7SShengchen Kan}
3945c68c6d7SShengchen Kan
3955c68c6d7SShengchen Kandefine i32 @shl32r1(i32 noundef %a) {
3965c68c6d7SShengchen Kan; CHECK-LABEL: shl32r1:
3975c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
3985c68c6d7SShengchen Kan; CHECK-NEXT:    addl %edi, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0x01,0xff]
3995c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
400a9e8a3a1SShengchen Kan;
401a9e8a3a1SShengchen Kan; NF-LABEL: shl32r1:
402a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
403a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} addl %edi, %edi, %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x01,0xff]
404a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
4055c68c6d7SShengchen Kanentry:
4065c68c6d7SShengchen Kan  %shl = shl i32 %a, 1
4075c68c6d7SShengchen Kan  ret i32 %shl
4085c68c6d7SShengchen Kan}
4095c68c6d7SShengchen Kan
4105c68c6d7SShengchen Kandefine i64 @shl64r1(i64 noundef %a) {
4115c68c6d7SShengchen Kan; CHECK-LABEL: shl64r1:
4125c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
4135c68c6d7SShengchen Kan; CHECK-NEXT:    addq %rdi, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0x01,0xff]
4145c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
415a9e8a3a1SShengchen Kan;
416a9e8a3a1SShengchen Kan; NF-LABEL: shl64r1:
417a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
418a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} addq %rdi, %rdi, %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0x01,0xff]
419a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
4205c68c6d7SShengchen Kanentry:
4215c68c6d7SShengchen Kan  %shl = shl i64 %a, 1
4225c68c6d7SShengchen Kan  ret i64 %shl
4235c68c6d7SShengchen Kan}
4245c68c6d7SShengchen Kan
4255c68c6d7SShengchen Kandefine i8 @shl8rcl(i8 noundef %a, i8 %cl) {
4265c68c6d7SShengchen Kan; CHECK-LABEL: shl8rcl:
4275c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
4285c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
4295c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
4305c68c6d7SShengchen Kan; CHECK-NEXT:    shlb %cl, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0xe7]
4315c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
432a9e8a3a1SShengchen Kan;
433a9e8a3a1SShengchen Kan; NF-LABEL: shl8rcl:
434a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
435a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
436a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
437a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shlb %cl, %dil, %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd2,0xe7]
438a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
4395c68c6d7SShengchen Kanentry:
4405c68c6d7SShengchen Kan  %shl = shl i8 %a, %cl
4415c68c6d7SShengchen Kan  ret i8 %shl
4425c68c6d7SShengchen Kan}
4435c68c6d7SShengchen Kan
4445c68c6d7SShengchen Kandefine i8 @shl8rcl_mask(i8 noundef %a, i8 %cl) {
4455c68c6d7SShengchen Kan; CHECK-LABEL: shl8rcl_mask:
4465c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
4475c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
4485c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
4495c68c6d7SShengchen Kan; CHECK-NEXT:    shlb %cl, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0xe7]
4505c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
451a9e8a3a1SShengchen Kan;
452a9e8a3a1SShengchen Kan; NF-LABEL: shl8rcl_mask:
453a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
454a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
455a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
456a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shlb %cl, %dil, %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd2,0xe7]
457a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
4585c68c6d7SShengchen Kanentry:
4595c68c6d7SShengchen Kan  %shamt = and i8 %cl, 31
4605c68c6d7SShengchen Kan  %shl = shl i8 %a, %shamt
4615c68c6d7SShengchen Kan  ret i8 %shl
4625c68c6d7SShengchen Kan}
4635c68c6d7SShengchen Kan
4645c68c6d7SShengchen Kandefine i16 @shl16rcl(i16 noundef %a, i16 %cl) {
4655c68c6d7SShengchen Kan; CHECK-LABEL: shl16rcl:
4665c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
4675c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
4685c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
469*20683de7SShengchen Kan; CHECK-NEXT:    shlw %cl, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0xe7]
4705c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
471a9e8a3a1SShengchen Kan;
472a9e8a3a1SShengchen Kan; NF-LABEL: shl16rcl:
473a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
474a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
475a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
476*20683de7SShengchen Kan; NF-NEXT:    {nf} shlw %cl, %di, %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0xd3,0xe7]
477a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
4785c68c6d7SShengchen Kanentry:
4795c68c6d7SShengchen Kan  %shl = shl i16 %a, %cl
4805c68c6d7SShengchen Kan  ret i16 %shl
4815c68c6d7SShengchen Kan}
4825c68c6d7SShengchen Kan
4835c68c6d7SShengchen Kandefine i16 @shl16rcl_mask(i16 noundef %a, i16 %cl) {
4845c68c6d7SShengchen Kan; CHECK-LABEL: shl16rcl_mask:
4855c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
4865c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
4875c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
488*20683de7SShengchen Kan; CHECK-NEXT:    shlw %cl, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0xe7]
4895c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
490a9e8a3a1SShengchen Kan;
491a9e8a3a1SShengchen Kan; NF-LABEL: shl16rcl_mask:
492a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
493a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
494a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
495*20683de7SShengchen Kan; NF-NEXT:    {nf} shlw %cl, %di, %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0xd3,0xe7]
496a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
4975c68c6d7SShengchen Kanentry:
4985c68c6d7SShengchen Kan  %shamt = and i16 %cl, 31
4995c68c6d7SShengchen Kan  %shl = shl i16 %a, %shamt
5005c68c6d7SShengchen Kan  ret i16 %shl
5015c68c6d7SShengchen Kan}
5025c68c6d7SShengchen Kan
5035c68c6d7SShengchen Kandefine i32 @shl32rcl(i32 noundef %a, i32 %cl) {
5045c68c6d7SShengchen Kan; CHECK-LABEL: shl32rcl:
5055c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
5065c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
5075c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
5085c68c6d7SShengchen Kan; CHECK-NEXT:    shll %cl, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0xe7]
5095c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
510a9e8a3a1SShengchen Kan;
511a9e8a3a1SShengchen Kan; NF-LABEL: shl32rcl:
512a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
513a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
514a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
515a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shll %cl, %edi, %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd3,0xe7]
516a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
5175c68c6d7SShengchen Kanentry:
5185c68c6d7SShengchen Kan  %shl = shl i32 %a, %cl
5195c68c6d7SShengchen Kan  ret i32 %shl
5205c68c6d7SShengchen Kan}
5215c68c6d7SShengchen Kan
5225c68c6d7SShengchen Kandefine i32 @shl32rcl_mask(i32 noundef %a, i32 %cl) {
5235c68c6d7SShengchen Kan; CHECK-LABEL: shl32rcl_mask:
5245c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
5255c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
5265c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
5275c68c6d7SShengchen Kan; CHECK-NEXT:    shll %cl, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0xe7]
5285c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
529a9e8a3a1SShengchen Kan;
530a9e8a3a1SShengchen Kan; NF-LABEL: shl32rcl_mask:
531a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
532a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
533a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
534a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shll %cl, %edi, %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd3,0xe7]
535a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
5365c68c6d7SShengchen Kanentry:
5375c68c6d7SShengchen Kan  %shamt = and i32 %cl, 31
5385c68c6d7SShengchen Kan  %shl = shl i32 %a, %shamt
5395c68c6d7SShengchen Kan  ret i32 %shl
5405c68c6d7SShengchen Kan}
5415c68c6d7SShengchen Kan
5425c68c6d7SShengchen Kandefine i64 @shl64rcl(i64 noundef %a, i64 %cl) {
5435c68c6d7SShengchen Kan; CHECK-LABEL: shl64rcl:
5445c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
5455c68c6d7SShengchen Kan; CHECK-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
5465c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $rcx
5475c68c6d7SShengchen Kan; CHECK-NEXT:    shlq %cl, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0xe7]
5485c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
549a9e8a3a1SShengchen Kan;
550a9e8a3a1SShengchen Kan; NF-LABEL: shl64rcl:
551a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
552a9e8a3a1SShengchen Kan; NF-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
553a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $rcx
554a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shlq %cl, %rdi, %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0xd3,0xe7]
555a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
5565c68c6d7SShengchen Kanentry:
5575c68c6d7SShengchen Kan  %shl = shl i64 %a, %cl
5585c68c6d7SShengchen Kan  ret i64 %shl
5595c68c6d7SShengchen Kan}
5605c68c6d7SShengchen Kan
5615c68c6d7SShengchen Kandefine i64 @shl64rcl_mask(i64 noundef %a, i64 %cl) {
5625c68c6d7SShengchen Kan; CHECK-LABEL: shl64rcl_mask:
5635c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
5645c68c6d7SShengchen Kan; CHECK-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
5655c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $rcx
5665c68c6d7SShengchen Kan; CHECK-NEXT:    shlq %cl, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0xe7]
5675c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
568a9e8a3a1SShengchen Kan;
569a9e8a3a1SShengchen Kan; NF-LABEL: shl64rcl_mask:
570a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
571a9e8a3a1SShengchen Kan; NF-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
572a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $rcx
573a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shlq %cl, %rdi, %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0xd3,0xe7]
574a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
5755c68c6d7SShengchen Kanentry:
5765c68c6d7SShengchen Kan  %shamt = and i64 %cl, 63
5775c68c6d7SShengchen Kan  %shl = shl i64 %a, %shamt
5785c68c6d7SShengchen Kan  ret i64 %shl
5795c68c6d7SShengchen Kan}
5805c68c6d7SShengchen Kan
5815c68c6d7SShengchen Kandefine void @shl8m1_legacy(ptr %ptr) {
5825c68c6d7SShengchen Kan; CHECK-LABEL: shl8m1_legacy:
5835c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
5845c68c6d7SShengchen Kan; CHECK-NEXT:    shlb (%rdi) # encoding: [0xd0,0x27]
5855c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
586a9e8a3a1SShengchen Kan;
587a9e8a3a1SShengchen Kan; NF-LABEL: shl8m1_legacy:
588a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
589a9e8a3a1SShengchen Kan; NF-NEXT:    shlb (%rdi) # encoding: [0xd0,0x27]
590a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
5915c68c6d7SShengchen Kanentry:
5925c68c6d7SShengchen Kan  %a = load i8, ptr %ptr
5935c68c6d7SShengchen Kan  %shl = shl i8 %a, 1
5945c68c6d7SShengchen Kan  store i8 %shl, ptr %ptr
5955c68c6d7SShengchen Kan  ret void
5965c68c6d7SShengchen Kan}
5975c68c6d7SShengchen Kan
5985c68c6d7SShengchen Kandefine void @shl16m1_legacy(ptr %ptr) {
5995c68c6d7SShengchen Kan; CHECK-LABEL: shl16m1_legacy:
6005c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
6015c68c6d7SShengchen Kan; CHECK-NEXT:    shlw (%rdi) # encoding: [0x66,0xd1,0x27]
6025c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
603a9e8a3a1SShengchen Kan;
604a9e8a3a1SShengchen Kan; NF-LABEL: shl16m1_legacy:
605a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
606a9e8a3a1SShengchen Kan; NF-NEXT:    shlw (%rdi) # encoding: [0x66,0xd1,0x27]
607a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
6085c68c6d7SShengchen Kanentry:
6095c68c6d7SShengchen Kan  %a = load i16, ptr %ptr
6105c68c6d7SShengchen Kan  %shl = shl i16 %a, 1
6115c68c6d7SShengchen Kan  store i16 %shl, ptr %ptr
6125c68c6d7SShengchen Kan  ret void
6135c68c6d7SShengchen Kan}
6145c68c6d7SShengchen Kan
6155c68c6d7SShengchen Kandefine void @shl32m1_legacy(ptr %ptr) {
6165c68c6d7SShengchen Kan; CHECK-LABEL: shl32m1_legacy:
6175c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
6185c68c6d7SShengchen Kan; CHECK-NEXT:    shll (%rdi) # encoding: [0xd1,0x27]
6195c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
620a9e8a3a1SShengchen Kan;
621a9e8a3a1SShengchen Kan; NF-LABEL: shl32m1_legacy:
622a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
623a9e8a3a1SShengchen Kan; NF-NEXT:    shll (%rdi) # encoding: [0xd1,0x27]
624a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
6255c68c6d7SShengchen Kanentry:
6265c68c6d7SShengchen Kan  %a = load i32, ptr %ptr
6275c68c6d7SShengchen Kan  %shl = shl i32 %a, 1
6285c68c6d7SShengchen Kan  store i32 %shl, ptr %ptr
6295c68c6d7SShengchen Kan  ret void
6305c68c6d7SShengchen Kan}
6315c68c6d7SShengchen Kan
6325c68c6d7SShengchen Kandefine void @shl64m1_legacy(ptr %ptr) {
6335c68c6d7SShengchen Kan; CHECK-LABEL: shl64m1_legacy:
6345c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
6355c68c6d7SShengchen Kan; CHECK-NEXT:    shlq (%rdi) # encoding: [0x48,0xd1,0x27]
6365c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
637a9e8a3a1SShengchen Kan;
638a9e8a3a1SShengchen Kan; NF-LABEL: shl64m1_legacy:
639a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
640a9e8a3a1SShengchen Kan; NF-NEXT:    shlq (%rdi) # encoding: [0x48,0xd1,0x27]
641a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
6425c68c6d7SShengchen Kanentry:
6435c68c6d7SShengchen Kan  %a = load i64, ptr %ptr
6445c68c6d7SShengchen Kan  %shl = shl i64 %a, 1
6455c68c6d7SShengchen Kan  store i64 %shl, ptr %ptr
6465c68c6d7SShengchen Kan  ret void
6475c68c6d7SShengchen Kan}
6485c68c6d7SShengchen Kan
6495c68c6d7SShengchen Kandefine void @shl8mi_legacy(ptr %ptr) {
6505c68c6d7SShengchen Kan; CHECK-LABEL: shl8mi_legacy:
6515c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
6525c68c6d7SShengchen Kan; CHECK-NEXT:    shlb $4, (%rdi) # encoding: [0xc0,0x27,0x04]
6535c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
654a9e8a3a1SShengchen Kan;
655a9e8a3a1SShengchen Kan; NF-LABEL: shl8mi_legacy:
656a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
657a9e8a3a1SShengchen Kan; NF-NEXT:    shlb $4, (%rdi) # encoding: [0xc0,0x27,0x04]
658a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
6595c68c6d7SShengchen Kanentry:
6605c68c6d7SShengchen Kan  %a = load i8, ptr %ptr
6615c68c6d7SShengchen Kan  %shl = shl i8 %a, 4
6625c68c6d7SShengchen Kan  store i8 %shl, ptr %ptr
6635c68c6d7SShengchen Kan  ret void
6645c68c6d7SShengchen Kan}
6655c68c6d7SShengchen Kan
6665c68c6d7SShengchen Kandefine void @shl16mi_legacy(ptr %ptr) {
6675c68c6d7SShengchen Kan; CHECK-LABEL: shl16mi_legacy:
6685c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
6695c68c6d7SShengchen Kan; CHECK-NEXT:    shlw $4, (%rdi) # encoding: [0x66,0xc1,0x27,0x04]
6705c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
671a9e8a3a1SShengchen Kan;
672a9e8a3a1SShengchen Kan; NF-LABEL: shl16mi_legacy:
673a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
674a9e8a3a1SShengchen Kan; NF-NEXT:    shlw $4, (%rdi) # encoding: [0x66,0xc1,0x27,0x04]
675a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
6765c68c6d7SShengchen Kanentry:
6775c68c6d7SShengchen Kan  %a = load i16, ptr %ptr
6785c68c6d7SShengchen Kan  %shl = shl i16 %a, 4
6795c68c6d7SShengchen Kan  store i16 %shl, ptr %ptr
6805c68c6d7SShengchen Kan  ret void
6815c68c6d7SShengchen Kan}
6825c68c6d7SShengchen Kan
6835c68c6d7SShengchen Kandefine void @shl32mi_legacy(ptr %ptr) {
6845c68c6d7SShengchen Kan; CHECK-LABEL: shl32mi_legacy:
6855c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
6865c68c6d7SShengchen Kan; CHECK-NEXT:    shll $4, (%rdi) # encoding: [0xc1,0x27,0x04]
6875c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
688a9e8a3a1SShengchen Kan;
689a9e8a3a1SShengchen Kan; NF-LABEL: shl32mi_legacy:
690a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
691a9e8a3a1SShengchen Kan; NF-NEXT:    shll $4, (%rdi) # encoding: [0xc1,0x27,0x04]
692a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
6935c68c6d7SShengchen Kanentry:
6945c68c6d7SShengchen Kan  %a = load i32, ptr %ptr
6955c68c6d7SShengchen Kan  %shl = shl i32 %a, 4
6965c68c6d7SShengchen Kan  store i32 %shl, ptr %ptr
6975c68c6d7SShengchen Kan  ret void
6985c68c6d7SShengchen Kan}
6995c68c6d7SShengchen Kan
7005c68c6d7SShengchen Kandefine void @shl64mi_legacy(ptr %ptr) {
7015c68c6d7SShengchen Kan; CHECK-LABEL: shl64mi_legacy:
7025c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
7035c68c6d7SShengchen Kan; CHECK-NEXT:    shlq $4, (%rdi) # encoding: [0x48,0xc1,0x27,0x04]
7045c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
705a9e8a3a1SShengchen Kan;
706a9e8a3a1SShengchen Kan; NF-LABEL: shl64mi_legacy:
707a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
708a9e8a3a1SShengchen Kan; NF-NEXT:    shlq $4, (%rdi) # encoding: [0x48,0xc1,0x27,0x04]
709a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
7105c68c6d7SShengchen Kanentry:
7115c68c6d7SShengchen Kan  %a = load i64, ptr %ptr
7125c68c6d7SShengchen Kan  %shl = shl i64 %a, 4
7135c68c6d7SShengchen Kan  store i64 %shl, ptr %ptr
7145c68c6d7SShengchen Kan  ret void
7155c68c6d7SShengchen Kan}
7165c68c6d7SShengchen Kan
7175c68c6d7SShengchen Kandefine void @shl8mcl_legacy(ptr %ptr, i8 %cl) {
7185c68c6d7SShengchen Kan; CHECK-LABEL: shl8mcl_legacy:
7195c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
7205c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
7215c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
7225c68c6d7SShengchen Kan; CHECK-NEXT:    shlb %cl, (%rdi) # encoding: [0xd2,0x27]
7235c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
724a9e8a3a1SShengchen Kan;
725a9e8a3a1SShengchen Kan; NF-LABEL: shl8mcl_legacy:
726a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
727a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
728a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
729a9e8a3a1SShengchen Kan; NF-NEXT:    shlb %cl, (%rdi) # encoding: [0xd2,0x27]
730a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
7315c68c6d7SShengchen Kanentry:
7325c68c6d7SShengchen Kan  %a = load i8, ptr %ptr
7335c68c6d7SShengchen Kan  %shl = shl i8 %a, %cl
7345c68c6d7SShengchen Kan  store i8 %shl, ptr %ptr
7355c68c6d7SShengchen Kan  ret void
7365c68c6d7SShengchen Kan}
7375c68c6d7SShengchen Kan
7385c68c6d7SShengchen Kandefine void @shl16mcl_legacy(ptr %ptr, i16 %cl) {
7395c68c6d7SShengchen Kan; CHECK-LABEL: shl16mcl_legacy:
7405c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
7415c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
7425c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
7435c68c6d7SShengchen Kan; CHECK-NEXT:    shlw %cl, (%rdi) # encoding: [0x66,0xd3,0x27]
7445c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
745a9e8a3a1SShengchen Kan;
746a9e8a3a1SShengchen Kan; NF-LABEL: shl16mcl_legacy:
747a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
748a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
749a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
750a9e8a3a1SShengchen Kan; NF-NEXT:    shlw %cl, (%rdi) # encoding: [0x66,0xd3,0x27]
751a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
7525c68c6d7SShengchen Kanentry:
7535c68c6d7SShengchen Kan  %a = load i16, ptr %ptr
7545c68c6d7SShengchen Kan  %shl = shl i16 %a, %cl
7555c68c6d7SShengchen Kan  store i16 %shl, ptr %ptr
7565c68c6d7SShengchen Kan  ret void
7575c68c6d7SShengchen Kan}
7585c68c6d7SShengchen Kan
7595c68c6d7SShengchen Kandefine void @shl32mcl_legacy(ptr %ptr, i32 %cl) {
7605c68c6d7SShengchen Kan; CHECK-LABEL: shl32mcl_legacy:
7615c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
7625c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
7635c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
7645c68c6d7SShengchen Kan; CHECK-NEXT:    shll %cl, (%rdi) # encoding: [0xd3,0x27]
7655c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
766a9e8a3a1SShengchen Kan;
767a9e8a3a1SShengchen Kan; NF-LABEL: shl32mcl_legacy:
768a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
769a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
770a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
771a9e8a3a1SShengchen Kan; NF-NEXT:    shll %cl, (%rdi) # encoding: [0xd3,0x27]
772a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
7735c68c6d7SShengchen Kanentry:
7745c68c6d7SShengchen Kan  %a = load i32, ptr %ptr
7755c68c6d7SShengchen Kan  %shl = shl i32 %a, %cl
7765c68c6d7SShengchen Kan  store i32 %shl, ptr %ptr
7775c68c6d7SShengchen Kan  ret void
7785c68c6d7SShengchen Kan}
7795c68c6d7SShengchen Kan
7805c68c6d7SShengchen Kandefine void @shl64mcl_legacy(ptr %ptr, i64 %cl) {
7815c68c6d7SShengchen Kan; CHECK-LABEL: shl64mcl_legacy:
7825c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
7835c68c6d7SShengchen Kan; CHECK-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
7845c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $rcx
7855c68c6d7SShengchen Kan; CHECK-NEXT:    shlq %cl, (%rdi) # encoding: [0x48,0xd3,0x27]
7865c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
787a9e8a3a1SShengchen Kan;
788a9e8a3a1SShengchen Kan; NF-LABEL: shl64mcl_legacy:
789a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
790a9e8a3a1SShengchen Kan; NF-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
791a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $rcx
792a9e8a3a1SShengchen Kan; NF-NEXT:    shlq %cl, (%rdi) # encoding: [0x48,0xd3,0x27]
793a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
7945c68c6d7SShengchen Kanentry:
7955c68c6d7SShengchen Kan  %a = load i64, ptr %ptr
7965c68c6d7SShengchen Kan  %shl = shl i64 %a, %cl
7975c68c6d7SShengchen Kan  store i64 %shl, ptr %ptr
7985c68c6d7SShengchen Kan  ret void
7995c68c6d7SShengchen Kan}
800