xref: /llvm-project/llvm/test/CodeGen/X86/apx/shr.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 @shr8m1(ptr %ptr) {
65c68c6d7SShengchen Kan; CHECK-LABEL: shr8m1:
75c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
85910e34aSXinWang10; CHECK-NEXT:    shrb (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xd0,0x2f]
95c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
10a9e8a3a1SShengchen Kan;
11a9e8a3a1SShengchen Kan; NF-LABEL: shr8m1:
12a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
13a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shrb (%rdi), %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd0,0x2f]
14a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
155c68c6d7SShengchen Kanentry:
165c68c6d7SShengchen Kan  %a = load i8, ptr %ptr
175c68c6d7SShengchen Kan  %shr = lshr i8 %a, 1
185c68c6d7SShengchen Kan  ret i8 %shr
195c68c6d7SShengchen Kan}
205c68c6d7SShengchen Kan
215c68c6d7SShengchen Kandefine i16 @shr16m1(ptr %ptr) {
225c68c6d7SShengchen Kan; CHECK-LABEL: shr16m1:
235c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
24*20683de7SShengchen Kan; CHECK-NEXT:    shrw (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd1,0x2f]
255c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
26a9e8a3a1SShengchen Kan;
27a9e8a3a1SShengchen Kan; NF-LABEL: shr16m1:
28a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
29*20683de7SShengchen Kan; NF-NEXT:    {nf} shrw (%rdi), %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0xd1,0x2f]
30a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
315c68c6d7SShengchen Kanentry:
325c68c6d7SShengchen Kan  %a = load i16, ptr %ptr
335c68c6d7SShengchen Kan  %shr = lshr i16 %a, 1
345c68c6d7SShengchen Kan  ret i16 %shr
355c68c6d7SShengchen Kan}
365c68c6d7SShengchen Kan
375c68c6d7SShengchen Kandefine i32 @shr32m1(ptr %ptr) {
385c68c6d7SShengchen Kan; CHECK-LABEL: shr32m1:
395c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
405910e34aSXinWang10; CHECK-NEXT:    shrl (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd1,0x2f]
415c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
42a9e8a3a1SShengchen Kan;
43a9e8a3a1SShengchen Kan; NF-LABEL: shr32m1:
44a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
45a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shrl (%rdi), %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd1,0x2f]
46a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
475c68c6d7SShengchen Kanentry:
485c68c6d7SShengchen Kan  %a = load i32, ptr %ptr
495c68c6d7SShengchen Kan  %shr = lshr i32 %a, 1
505c68c6d7SShengchen Kan  ret i32 %shr
515c68c6d7SShengchen Kan}
525c68c6d7SShengchen Kan
535c68c6d7SShengchen Kandefine i64 @shr64m1(ptr %ptr) {
545c68c6d7SShengchen Kan; CHECK-LABEL: shr64m1:
555c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
565910e34aSXinWang10; CHECK-NEXT:    shrq (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd1,0x2f]
575c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
58a9e8a3a1SShengchen Kan;
59a9e8a3a1SShengchen Kan; NF-LABEL: shr64m1:
60a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
61a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shrq (%rdi), %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0xd1,0x2f]
62a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
635c68c6d7SShengchen Kanentry:
645c68c6d7SShengchen Kan  %a = load i64, ptr %ptr
655c68c6d7SShengchen Kan  %shr = lshr i64 %a, 1
665c68c6d7SShengchen Kan  ret i64 %shr
675c68c6d7SShengchen Kan}
685c68c6d7SShengchen Kan
695c68c6d7SShengchen Kandefine i8 @shr8mcl(ptr %ptr, i8 %cl) {
705c68c6d7SShengchen Kan; CHECK-LABEL: shr8mcl:
715c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
725c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
735c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
745c68c6d7SShengchen Kan; CHECK-NEXT:    shrb %cl, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0x2f]
755c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
76a9e8a3a1SShengchen Kan;
77a9e8a3a1SShengchen Kan; NF-LABEL: shr8mcl:
78a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
79a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
80a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
81a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shrb %cl, (%rdi), %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd2,0x2f]
82a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
835c68c6d7SShengchen Kanentry:
845c68c6d7SShengchen Kan  %a = load i8, ptr %ptr
855c68c6d7SShengchen Kan  %shr = lshr i8 %a, %cl
865c68c6d7SShengchen Kan  ret i8 %shr
875c68c6d7SShengchen Kan}
885c68c6d7SShengchen Kan
895c68c6d7SShengchen Kandefine i8 @shr8mcl_mask(ptr %ptr, i8 %cl) {
905c68c6d7SShengchen Kan; CHECK-LABEL: shr8mcl_mask:
915c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
925c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
935c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
945c68c6d7SShengchen Kan; CHECK-NEXT:    shrb %cl, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0x2f]
955c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
96a9e8a3a1SShengchen Kan;
97a9e8a3a1SShengchen Kan; NF-LABEL: shr8mcl_mask:
98a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
99a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
100a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
101a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shrb %cl, (%rdi), %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd2,0x2f]
102a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
1035c68c6d7SShengchen Kanentry:
1045c68c6d7SShengchen Kan  %a = load i8, ptr %ptr
1055c68c6d7SShengchen Kan  %shamt = and i8 %cl, 31
1065c68c6d7SShengchen Kan  %shr = lshr i8 %a, %shamt
1075c68c6d7SShengchen Kan  ret i8 %shr
1085c68c6d7SShengchen Kan}
1095c68c6d7SShengchen Kan
1105c68c6d7SShengchen Kandefine i16 @shr16mcl(ptr %ptr, i16 %cl) {
1115c68c6d7SShengchen Kan; CHECK-LABEL: shr16mcl:
1125c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
1135c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
1145c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
115*20683de7SShengchen Kan; CHECK-NEXT:    shrw %cl, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0x2f]
1165c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
117a9e8a3a1SShengchen Kan;
118a9e8a3a1SShengchen Kan; NF-LABEL: shr16mcl:
119a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
120a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
121a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
122*20683de7SShengchen Kan; NF-NEXT:    {nf} shrw %cl, (%rdi), %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0xd3,0x2f]
123a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
1245c68c6d7SShengchen Kanentry:
1255c68c6d7SShengchen Kan  %a = load i16, ptr %ptr
1265c68c6d7SShengchen Kan  %shr = lshr i16 %a, %cl
1275c68c6d7SShengchen Kan  ret i16 %shr
1285c68c6d7SShengchen Kan}
1295c68c6d7SShengchen Kan
1305c68c6d7SShengchen Kandefine i16 @shr16mcl_mask(ptr %ptr, i16 %cl) {
1315c68c6d7SShengchen Kan; CHECK-LABEL: shr16mcl_mask:
1325c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
1335c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
1345c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
135*20683de7SShengchen Kan; CHECK-NEXT:    shrw %cl, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0x2f]
1365c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
137a9e8a3a1SShengchen Kan;
138a9e8a3a1SShengchen Kan; NF-LABEL: shr16mcl_mask:
139a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
140a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
141a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
142*20683de7SShengchen Kan; NF-NEXT:    {nf} shrw %cl, (%rdi), %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0xd3,0x2f]
143a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
1445c68c6d7SShengchen Kanentry:
1455c68c6d7SShengchen Kan  %a = load i16, ptr %ptr
1465c68c6d7SShengchen Kan  %shamt = and i16 %cl, 31
1475c68c6d7SShengchen Kan  %shr = lshr i16 %a, %shamt
1485c68c6d7SShengchen Kan  ret i16 %shr
1495c68c6d7SShengchen Kan}
1505c68c6d7SShengchen Kan
1515c68c6d7SShengchen Kandefine i32 @shr32mcl(ptr %ptr, i32 %cl) {
1525c68c6d7SShengchen Kan; CHECK-LABEL: shr32mcl:
1535c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
1545c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
1555c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
1565c68c6d7SShengchen Kan; CHECK-NEXT:    shrl %cl, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0x2f]
1575c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
158a9e8a3a1SShengchen Kan;
159a9e8a3a1SShengchen Kan; NF-LABEL: shr32mcl:
160a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
161a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
162a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
163a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shrl %cl, (%rdi), %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd3,0x2f]
164a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
1655c68c6d7SShengchen Kanentry:
1665c68c6d7SShengchen Kan  %a = load i32, ptr %ptr
1675c68c6d7SShengchen Kan  %shr = lshr i32 %a, %cl
1685c68c6d7SShengchen Kan  ret i32 %shr
1695c68c6d7SShengchen Kan}
1705c68c6d7SShengchen Kan
1715c68c6d7SShengchen Kandefine i32 @shr32mcl_mask(ptr %ptr, i32 %cl) {
1725c68c6d7SShengchen Kan; CHECK-LABEL: shr32mcl_mask:
1735c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
1745c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
1755c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
1765c68c6d7SShengchen Kan; CHECK-NEXT:    shrl %cl, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0x2f]
1775c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
178a9e8a3a1SShengchen Kan;
179a9e8a3a1SShengchen Kan; NF-LABEL: shr32mcl_mask:
180a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
181a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
182a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
183a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shrl %cl, (%rdi), %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd3,0x2f]
184a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
1855c68c6d7SShengchen Kanentry:
1865c68c6d7SShengchen Kan  %a = load i32, ptr %ptr
1875c68c6d7SShengchen Kan  %shamt = and i32 %cl, 31
1885c68c6d7SShengchen Kan  %shr = lshr i32 %a, %shamt
1895c68c6d7SShengchen Kan  ret i32 %shr
1905c68c6d7SShengchen Kan}
1915c68c6d7SShengchen Kan
1925c68c6d7SShengchen Kandefine i64 @shr64mcl(ptr %ptr, i64 %cl) {
1935c68c6d7SShengchen Kan; CHECK-LABEL: shr64mcl:
1945c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
1955c68c6d7SShengchen Kan; CHECK-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
1965c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $rcx
1975c68c6d7SShengchen Kan; CHECK-NEXT:    shrq %cl, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0x2f]
1985c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
199a9e8a3a1SShengchen Kan;
200a9e8a3a1SShengchen Kan; NF-LABEL: shr64mcl:
201a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
202a9e8a3a1SShengchen Kan; NF-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
203a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $rcx
204a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shrq %cl, (%rdi), %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0xd3,0x2f]
205a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
2065c68c6d7SShengchen Kanentry:
2075c68c6d7SShengchen Kan  %a = load i64, ptr %ptr
2085c68c6d7SShengchen Kan  %shr = lshr i64 %a, %cl
2095c68c6d7SShengchen Kan  ret i64 %shr
2105c68c6d7SShengchen Kan}
2115c68c6d7SShengchen Kan
2125c68c6d7SShengchen Kandefine i64 @shr64mcl_mask(ptr %ptr, i64 %cl) {
2135c68c6d7SShengchen Kan; CHECK-LABEL: shr64mcl_mask:
2145c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
2155c68c6d7SShengchen Kan; CHECK-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
2165c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $rcx
2175c68c6d7SShengchen Kan; CHECK-NEXT:    shrq %cl, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0x2f]
2185c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
219a9e8a3a1SShengchen Kan;
220a9e8a3a1SShengchen Kan; NF-LABEL: shr64mcl_mask:
221a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
222a9e8a3a1SShengchen Kan; NF-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
223a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $rcx
224a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shrq %cl, (%rdi), %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0xd3,0x2f]
225a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
2265c68c6d7SShengchen Kanentry:
2275c68c6d7SShengchen Kan  %a = load i64, ptr %ptr
2285c68c6d7SShengchen Kan  %shamt = and i64 %cl, 63
2295c68c6d7SShengchen Kan  %shr = lshr i64 %a, %shamt
2305c68c6d7SShengchen Kan  ret i64 %shr
2315c68c6d7SShengchen Kan}
2325c68c6d7SShengchen Kan
2335c68c6d7SShengchen Kandefine i8 @shr8mi(ptr %ptr) {
2345c68c6d7SShengchen Kan; CHECK-LABEL: shr8mi:
2355c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
2365c68c6d7SShengchen Kan; CHECK-NEXT:    shrb $4, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xc0,0x2f,0x04]
2375c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
238a9e8a3a1SShengchen Kan;
239a9e8a3a1SShengchen Kan; NF-LABEL: shr8mi:
240a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
241a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shrb $4, (%rdi), %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xc0,0x2f,0x04]
242a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
2435c68c6d7SShengchen Kanentry:
2445c68c6d7SShengchen Kan  %a = load i8, ptr %ptr
2455c68c6d7SShengchen Kan  %shr = lshr i8 %a, 4
2465c68c6d7SShengchen Kan  ret i8 %shr
2475c68c6d7SShengchen Kan}
2485c68c6d7SShengchen Kan
2495c68c6d7SShengchen Kandefine i16 @shr16mi(ptr %ptr) {
2505c68c6d7SShengchen Kan; CHECK-LABEL: shr16mi:
2515c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
252*20683de7SShengchen Kan; CHECK-NEXT:    shrw $4, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xc1,0x2f,0x04]
2535c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
254a9e8a3a1SShengchen Kan;
255a9e8a3a1SShengchen Kan; NF-LABEL: shr16mi:
256a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
257*20683de7SShengchen Kan; NF-NEXT:    {nf} shrw $4, (%rdi), %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0xc1,0x2f,0x04]
258a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
2595c68c6d7SShengchen Kanentry:
2605c68c6d7SShengchen Kan  %a = load i16, ptr %ptr
2615c68c6d7SShengchen Kan  %shr = lshr i16 %a, 4
2625c68c6d7SShengchen Kan  ret i16 %shr
2635c68c6d7SShengchen Kan}
2645c68c6d7SShengchen Kan
2655c68c6d7SShengchen Kandefine i32 @shr32mi(ptr %ptr) {
2665c68c6d7SShengchen Kan; CHECK-LABEL: shr32mi:
2675c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
2685c68c6d7SShengchen Kan; CHECK-NEXT:    shrl $4, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xc1,0x2f,0x04]
2695c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
270a9e8a3a1SShengchen Kan;
271a9e8a3a1SShengchen Kan; NF-LABEL: shr32mi:
272a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
273a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shrl $4, (%rdi), %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xc1,0x2f,0x04]
274a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
2755c68c6d7SShengchen Kanentry:
2765c68c6d7SShengchen Kan  %a = load i32, ptr %ptr
2775c68c6d7SShengchen Kan  %shr = lshr i32 %a, 4
2785c68c6d7SShengchen Kan  ret i32 %shr
2795c68c6d7SShengchen Kan}
2805c68c6d7SShengchen Kan
2815c68c6d7SShengchen Kandefine i64 @shr64mi(ptr %ptr) {
2825c68c6d7SShengchen Kan; CHECK-LABEL: shr64mi:
2835c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
2845c68c6d7SShengchen Kan; CHECK-NEXT:    shrq $4, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xc1,0x2f,0x04]
2855c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
286a9e8a3a1SShengchen Kan;
287a9e8a3a1SShengchen Kan; NF-LABEL: shr64mi:
288a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
289a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shrq $4, (%rdi), %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0xc1,0x2f,0x04]
290a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
2915c68c6d7SShengchen Kanentry:
2925c68c6d7SShengchen Kan  %a = load i64, ptr %ptr
2935c68c6d7SShengchen Kan  %shr = lshr i64 %a, 4
2945c68c6d7SShengchen Kan  ret i64 %shr
2955c68c6d7SShengchen Kan}
2965c68c6d7SShengchen Kan
2975c68c6d7SShengchen Kandefine i8 @shr8r1(i8 noundef %a) {
2985c68c6d7SShengchen Kan; CHECK-LABEL: shr8r1:
2995c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
3005910e34aSXinWang10; CHECK-NEXT:    shrb %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xd0,0xef]
3015c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
302a9e8a3a1SShengchen Kan;
303a9e8a3a1SShengchen Kan; NF-LABEL: shr8r1:
304a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
305a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shrb %dil, %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd0,0xef]
306a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
3075c68c6d7SShengchen Kanentry:
3085c68c6d7SShengchen Kan  %shr = lshr i8 %a, 1
3095c68c6d7SShengchen Kan  ret i8 %shr
3105c68c6d7SShengchen Kan}
3115c68c6d7SShengchen Kan
3125c68c6d7SShengchen Kandefine i16 @shr16r1(i16 noundef %a) {
3135c68c6d7SShengchen Kan; CHECK-LABEL: shr16r1:
3145c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
315*20683de7SShengchen Kan; CHECK-NEXT:    shrw %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd1,0xef]
3165c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
317a9e8a3a1SShengchen Kan;
318a9e8a3a1SShengchen Kan; NF-LABEL: shr16r1:
319a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
320*20683de7SShengchen Kan; NF-NEXT:    {nf} shrw %di, %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0xd1,0xef]
321a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
3225c68c6d7SShengchen Kanentry:
3235c68c6d7SShengchen Kan  %shr = lshr i16 %a, 1
3245c68c6d7SShengchen Kan  ret i16 %shr
3255c68c6d7SShengchen Kan}
3265c68c6d7SShengchen Kan
3275c68c6d7SShengchen Kandefine i32 @shr32r1(i32 noundef %a) {
3285c68c6d7SShengchen Kan; CHECK-LABEL: shr32r1:
3295c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
3305910e34aSXinWang10; CHECK-NEXT:    shrl %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd1,0xef]
3315c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
332a9e8a3a1SShengchen Kan;
333a9e8a3a1SShengchen Kan; NF-LABEL: shr32r1:
334a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
335a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shrl %edi, %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd1,0xef]
336a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
3375c68c6d7SShengchen Kanentry:
3385c68c6d7SShengchen Kan  %shr = lshr i32 %a, 1
3395c68c6d7SShengchen Kan  ret i32 %shr
3405c68c6d7SShengchen Kan}
3415c68c6d7SShengchen Kan
3425c68c6d7SShengchen Kandefine i64 @shr64r1(i64 noundef %a) {
3435c68c6d7SShengchen Kan; CHECK-LABEL: shr64r1:
3445c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
3455910e34aSXinWang10; CHECK-NEXT:    shrq %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd1,0xef]
3465c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
347a9e8a3a1SShengchen Kan;
348a9e8a3a1SShengchen Kan; NF-LABEL: shr64r1:
349a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
350a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shrq %rdi, %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0xd1,0xef]
351a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
3525c68c6d7SShengchen Kanentry:
3535c68c6d7SShengchen Kan  %shr = lshr i64 %a, 1
3545c68c6d7SShengchen Kan  ret i64 %shr
3555c68c6d7SShengchen Kan}
3565c68c6d7SShengchen Kan
3575c68c6d7SShengchen Kandefine i8 @shr8rcl(i8 noundef %a, i8 %cl) {
3585c68c6d7SShengchen Kan; CHECK-LABEL: shr8rcl:
3595c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
3605c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
3615c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
3625c68c6d7SShengchen Kan; CHECK-NEXT:    shrb %cl, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0xef]
3635c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
364a9e8a3a1SShengchen Kan;
365a9e8a3a1SShengchen Kan; NF-LABEL: shr8rcl:
366a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
367a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
368a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
369a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shrb %cl, %dil, %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd2,0xef]
370a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
3715c68c6d7SShengchen Kanentry:
3725c68c6d7SShengchen Kan  %shr = lshr i8 %a, %cl
3735c68c6d7SShengchen Kan  ret i8 %shr
3745c68c6d7SShengchen Kan}
3755c68c6d7SShengchen Kan
3765c68c6d7SShengchen Kandefine i8 @shr8rcl_mask(i8 noundef %a, i8 %cl) {
3775c68c6d7SShengchen Kan; CHECK-LABEL: shr8rcl_mask:
3785c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
3795c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
3805c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
3815c68c6d7SShengchen Kan; CHECK-NEXT:    shrb %cl, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0xef]
3825c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
383a9e8a3a1SShengchen Kan;
384a9e8a3a1SShengchen Kan; NF-LABEL: shr8rcl_mask:
385a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
386a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
387a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
388a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shrb %cl, %dil, %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd2,0xef]
389a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
3905c68c6d7SShengchen Kanentry:
3915c68c6d7SShengchen Kan  %shamt = and i8 %cl, 31
3925c68c6d7SShengchen Kan  %shr = lshr i8 %a, %shamt
3935c68c6d7SShengchen Kan  ret i8 %shr
3945c68c6d7SShengchen Kan}
3955c68c6d7SShengchen Kan
3965c68c6d7SShengchen Kandefine i16 @shr16rcl(i16 noundef %a, i16 %cl) {
3975c68c6d7SShengchen Kan; CHECK-LABEL: shr16rcl:
3985c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
3995c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
4005c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
401*20683de7SShengchen Kan; CHECK-NEXT:    shrw %cl, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0xef]
4025c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
403a9e8a3a1SShengchen Kan;
404a9e8a3a1SShengchen Kan; NF-LABEL: shr16rcl:
405a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
406a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
407a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
408*20683de7SShengchen Kan; NF-NEXT:    {nf} shrw %cl, %di, %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0xd3,0xef]
409a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
4105c68c6d7SShengchen Kanentry:
4115c68c6d7SShengchen Kan  %shr = lshr i16 %a, %cl
4125c68c6d7SShengchen Kan  ret i16 %shr
4135c68c6d7SShengchen Kan}
4145c68c6d7SShengchen Kan
4155c68c6d7SShengchen Kandefine i16 @shr16rcl_mask(i16 noundef %a, i16 %cl) {
4165c68c6d7SShengchen Kan; CHECK-LABEL: shr16rcl_mask:
4175c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
4185c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
4195c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
420*20683de7SShengchen Kan; CHECK-NEXT:    shrw %cl, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0xef]
4215c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
422a9e8a3a1SShengchen Kan;
423a9e8a3a1SShengchen Kan; NF-LABEL: shr16rcl_mask:
424a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
425a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
426a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
427*20683de7SShengchen Kan; NF-NEXT:    {nf} shrw %cl, %di, %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0xd3,0xef]
428a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
4295c68c6d7SShengchen Kanentry:
4305c68c6d7SShengchen Kan  %shamt = and i16 %cl, 31
4315c68c6d7SShengchen Kan  %shr = lshr i16 %a, %shamt
4325c68c6d7SShengchen Kan  ret i16 %shr
4335c68c6d7SShengchen Kan}
4345c68c6d7SShengchen Kan
4355c68c6d7SShengchen Kandefine i32 @shr32rcl(i32 noundef %a, i32 %cl) {
4365c68c6d7SShengchen Kan; CHECK-LABEL: shr32rcl:
4375c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
4385c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
4395c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
4405c68c6d7SShengchen Kan; CHECK-NEXT:    shrl %cl, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0xef]
4415c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
442a9e8a3a1SShengchen Kan;
443a9e8a3a1SShengchen Kan; NF-LABEL: shr32rcl:
444a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
445a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
446a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
447a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shrl %cl, %edi, %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd3,0xef]
448a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
4495c68c6d7SShengchen Kanentry:
4505c68c6d7SShengchen Kan  %shr = lshr i32 %a, %cl
4515c68c6d7SShengchen Kan  ret i32 %shr
4525c68c6d7SShengchen Kan}
4535c68c6d7SShengchen Kan
4545c68c6d7SShengchen Kandefine i32 @shr32rcl_mask(i32 noundef %a, i32 %cl) {
4555c68c6d7SShengchen Kan; CHECK-LABEL: shr32rcl_mask:
4565c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
4575c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
4585c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
4595c68c6d7SShengchen Kan; CHECK-NEXT:    shrl %cl, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0xef]
4605c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
461a9e8a3a1SShengchen Kan;
462a9e8a3a1SShengchen Kan; NF-LABEL: shr32rcl_mask:
463a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
464a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
465a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
466a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shrl %cl, %edi, %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd3,0xef]
467a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
4685c68c6d7SShengchen Kanentry:
4695c68c6d7SShengchen Kan  %shamt = and i32 %cl, 31
4705c68c6d7SShengchen Kan  %shr = lshr i32 %a, %shamt
4715c68c6d7SShengchen Kan  ret i32 %shr
4725c68c6d7SShengchen Kan}
4735c68c6d7SShengchen Kan
4745c68c6d7SShengchen Kandefine i64 @shr64rcl(i64 noundef %a, i64 %cl) {
4755c68c6d7SShengchen Kan; CHECK-LABEL: shr64rcl:
4765c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
4775c68c6d7SShengchen Kan; CHECK-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
4785c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $rcx
4795c68c6d7SShengchen Kan; CHECK-NEXT:    shrq %cl, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0xef]
4805c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
481a9e8a3a1SShengchen Kan;
482a9e8a3a1SShengchen Kan; NF-LABEL: shr64rcl:
483a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
484a9e8a3a1SShengchen Kan; NF-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
485a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $rcx
486a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shrq %cl, %rdi, %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0xd3,0xef]
487a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
4885c68c6d7SShengchen Kanentry:
4895c68c6d7SShengchen Kan  %shr = lshr i64 %a, %cl
4905c68c6d7SShengchen Kan  ret i64 %shr
4915c68c6d7SShengchen Kan}
4925c68c6d7SShengchen Kan
4935c68c6d7SShengchen Kandefine i64 @shr64rcl_mask(i64 noundef %a, i64 %cl) {
4945c68c6d7SShengchen Kan; CHECK-LABEL: shr64rcl_mask:
4955c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
4965c68c6d7SShengchen Kan; CHECK-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
4975c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $rcx
4985c68c6d7SShengchen Kan; CHECK-NEXT:    shrq %cl, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0xef]
4995c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
500a9e8a3a1SShengchen Kan;
501a9e8a3a1SShengchen Kan; NF-LABEL: shr64rcl_mask:
502a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
503a9e8a3a1SShengchen Kan; NF-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
504a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $rcx
505a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shrq %cl, %rdi, %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0xd3,0xef]
506a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
5075c68c6d7SShengchen Kanentry:
5085c68c6d7SShengchen Kan  %shamt = and i64 %cl, 63
5095c68c6d7SShengchen Kan  %shr = lshr i64 %a, %shamt
5105c68c6d7SShengchen Kan  ret i64 %shr
5115c68c6d7SShengchen Kan}
5125c68c6d7SShengchen Kan
5135c68c6d7SShengchen Kandefine i8 @shr8ri(i8 noundef %a) {
5145c68c6d7SShengchen Kan; CHECK-LABEL: shr8ri:
5155c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
5165c68c6d7SShengchen Kan; CHECK-NEXT:    shrb $4, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xc0,0xef,0x04]
5175c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
518a9e8a3a1SShengchen Kan;
519a9e8a3a1SShengchen Kan; NF-LABEL: shr8ri:
520a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
521a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shrb $4, %dil, %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xc0,0xef,0x04]
522a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
5235c68c6d7SShengchen Kanentry:
5245c68c6d7SShengchen Kan  %shr = lshr i8 %a, 4
5255c68c6d7SShengchen Kan  ret i8 %shr
5265c68c6d7SShengchen Kan}
5275c68c6d7SShengchen Kan
5285c68c6d7SShengchen Kandefine i16 @shr16ri(i16 noundef %a) {
5295c68c6d7SShengchen Kan; CHECK-LABEL: shr16ri:
5305c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
531*20683de7SShengchen Kan; CHECK-NEXT:    shrw $4, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xc1,0xef,0x04]
5325c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
533a9e8a3a1SShengchen Kan;
534a9e8a3a1SShengchen Kan; NF-LABEL: shr16ri:
535a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
536*20683de7SShengchen Kan; NF-NEXT:    {nf} shrw $4, %di, %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0xc1,0xef,0x04]
537a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
5385c68c6d7SShengchen Kanentry:
5395c68c6d7SShengchen Kan  %shr = lshr i16 %a, 4
5405c68c6d7SShengchen Kan  ret i16 %shr
5415c68c6d7SShengchen Kan}
5425c68c6d7SShengchen Kan
5435c68c6d7SShengchen Kandefine i32 @shr32ri(i32 noundef %a) {
5445c68c6d7SShengchen Kan; CHECK-LABEL: shr32ri:
5455c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
5465c68c6d7SShengchen Kan; CHECK-NEXT:    shrl $4, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xc1,0xef,0x04]
5475c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
548a9e8a3a1SShengchen Kan;
549a9e8a3a1SShengchen Kan; NF-LABEL: shr32ri:
550a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
551a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shrl $4, %edi, %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xc1,0xef,0x04]
552a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
5535c68c6d7SShengchen Kanentry:
5545c68c6d7SShengchen Kan  %shr = lshr i32 %a, 4
5555c68c6d7SShengchen Kan  ret i32 %shr
5565c68c6d7SShengchen Kan}
5575c68c6d7SShengchen Kan
5585c68c6d7SShengchen Kandefine i64 @shr64ri(i64 noundef %a) {
5595c68c6d7SShengchen Kan; CHECK-LABEL: shr64ri:
5605c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
5615c68c6d7SShengchen Kan; CHECK-NEXT:    shrq $4, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xc1,0xef,0x04]
5625c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
563a9e8a3a1SShengchen Kan;
564a9e8a3a1SShengchen Kan; NF-LABEL: shr64ri:
565a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
566a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} shrq $4, %rdi, %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0xc1,0xef,0x04]
567a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
5685c68c6d7SShengchen Kanentry:
5695c68c6d7SShengchen Kan  %shr = lshr i64 %a, 4
5705c68c6d7SShengchen Kan  ret i64 %shr
5715c68c6d7SShengchen Kan}
5725c68c6d7SShengchen Kan
5735c68c6d7SShengchen Kandefine void @shr8m1_legacy(ptr %ptr) {
5745c68c6d7SShengchen Kan; CHECK-LABEL: shr8m1_legacy:
5755c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
5765c68c6d7SShengchen Kan; CHECK-NEXT:    shrb (%rdi) # encoding: [0xd0,0x2f]
5775c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
578a9e8a3a1SShengchen Kan;
579a9e8a3a1SShengchen Kan; NF-LABEL: shr8m1_legacy:
580a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
581a9e8a3a1SShengchen Kan; NF-NEXT:    shrb (%rdi) # encoding: [0xd0,0x2f]
582a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
5835c68c6d7SShengchen Kanentry:
5845c68c6d7SShengchen Kan  %a = load i8, ptr %ptr
5855c68c6d7SShengchen Kan  %shr = lshr i8 %a, 1
5865c68c6d7SShengchen Kan  store i8 %shr, ptr %ptr
5875c68c6d7SShengchen Kan  ret void
5885c68c6d7SShengchen Kan}
5895c68c6d7SShengchen Kan
5905c68c6d7SShengchen Kandefine void @shr16m1_legacy(ptr %ptr) {
5915c68c6d7SShengchen Kan; CHECK-LABEL: shr16m1_legacy:
5925c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
5935c68c6d7SShengchen Kan; CHECK-NEXT:    shrw (%rdi) # encoding: [0x66,0xd1,0x2f]
5945c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
595a9e8a3a1SShengchen Kan;
596a9e8a3a1SShengchen Kan; NF-LABEL: shr16m1_legacy:
597a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
598a9e8a3a1SShengchen Kan; NF-NEXT:    shrw (%rdi) # encoding: [0x66,0xd1,0x2f]
599a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
6005c68c6d7SShengchen Kanentry:
6015c68c6d7SShengchen Kan  %a = load i16, ptr %ptr
6025c68c6d7SShengchen Kan  %shr = lshr i16 %a, 1
6035c68c6d7SShengchen Kan  store i16 %shr, ptr %ptr
6045c68c6d7SShengchen Kan  ret void
6055c68c6d7SShengchen Kan}
6065c68c6d7SShengchen Kan
6075c68c6d7SShengchen Kandefine void @shr32m1_legacy(ptr %ptr) {
6085c68c6d7SShengchen Kan; CHECK-LABEL: shr32m1_legacy:
6095c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
6105c68c6d7SShengchen Kan; CHECK-NEXT:    shrl (%rdi) # encoding: [0xd1,0x2f]
6115c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
612a9e8a3a1SShengchen Kan;
613a9e8a3a1SShengchen Kan; NF-LABEL: shr32m1_legacy:
614a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
615a9e8a3a1SShengchen Kan; NF-NEXT:    shrl (%rdi) # encoding: [0xd1,0x2f]
616a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
6175c68c6d7SShengchen Kanentry:
6185c68c6d7SShengchen Kan  %a = load i32, ptr %ptr
6195c68c6d7SShengchen Kan  %shr = lshr i32 %a, 1
6205c68c6d7SShengchen Kan  store i32 %shr, ptr %ptr
6215c68c6d7SShengchen Kan  ret void
6225c68c6d7SShengchen Kan}
6235c68c6d7SShengchen Kan
6245c68c6d7SShengchen Kandefine void @shr64m1_legacy(ptr %ptr) {
6255c68c6d7SShengchen Kan; CHECK-LABEL: shr64m1_legacy:
6265c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
6275c68c6d7SShengchen Kan; CHECK-NEXT:    shrq (%rdi) # encoding: [0x48,0xd1,0x2f]
6285c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
629a9e8a3a1SShengchen Kan;
630a9e8a3a1SShengchen Kan; NF-LABEL: shr64m1_legacy:
631a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
632a9e8a3a1SShengchen Kan; NF-NEXT:    shrq (%rdi) # encoding: [0x48,0xd1,0x2f]
633a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
6345c68c6d7SShengchen Kanentry:
6355c68c6d7SShengchen Kan  %a = load i64, ptr %ptr
6365c68c6d7SShengchen Kan  %shr = lshr i64 %a, 1
6375c68c6d7SShengchen Kan  store i64 %shr, ptr %ptr
6385c68c6d7SShengchen Kan  ret void
6395c68c6d7SShengchen Kan}
6405c68c6d7SShengchen Kan
6415c68c6d7SShengchen Kandefine void @shr8mi_legacy(ptr %ptr) {
6425c68c6d7SShengchen Kan; CHECK-LABEL: shr8mi_legacy:
6435c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
6445c68c6d7SShengchen Kan; CHECK-NEXT:    shrb $4, (%rdi) # encoding: [0xc0,0x2f,0x04]
6455c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
646a9e8a3a1SShengchen Kan;
647a9e8a3a1SShengchen Kan; NF-LABEL: shr8mi_legacy:
648a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
649a9e8a3a1SShengchen Kan; NF-NEXT:    shrb $4, (%rdi) # encoding: [0xc0,0x2f,0x04]
650a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
6515c68c6d7SShengchen Kanentry:
6525c68c6d7SShengchen Kan  %a = load i8, ptr %ptr
6535c68c6d7SShengchen Kan  %shr = lshr i8 %a, 4
6545c68c6d7SShengchen Kan  store i8 %shr, ptr %ptr
6555c68c6d7SShengchen Kan  ret void
6565c68c6d7SShengchen Kan}
6575c68c6d7SShengchen Kan
6585c68c6d7SShengchen Kandefine void @shr16mi_legacy(ptr %ptr) {
6595c68c6d7SShengchen Kan; CHECK-LABEL: shr16mi_legacy:
6605c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
6615c68c6d7SShengchen Kan; CHECK-NEXT:    shrw $4, (%rdi) # encoding: [0x66,0xc1,0x2f,0x04]
6625c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
663a9e8a3a1SShengchen Kan;
664a9e8a3a1SShengchen Kan; NF-LABEL: shr16mi_legacy:
665a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
666a9e8a3a1SShengchen Kan; NF-NEXT:    shrw $4, (%rdi) # encoding: [0x66,0xc1,0x2f,0x04]
667a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
6685c68c6d7SShengchen Kanentry:
6695c68c6d7SShengchen Kan  %a = load i16, ptr %ptr
6705c68c6d7SShengchen Kan  %shr = lshr i16 %a, 4
6715c68c6d7SShengchen Kan  store i16 %shr, ptr %ptr
6725c68c6d7SShengchen Kan  ret void
6735c68c6d7SShengchen Kan}
6745c68c6d7SShengchen Kan
6755c68c6d7SShengchen Kandefine void @shr32mi_legacy(ptr %ptr) {
6765c68c6d7SShengchen Kan; CHECK-LABEL: shr32mi_legacy:
6775c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
6785c68c6d7SShengchen Kan; CHECK-NEXT:    shrl $4, (%rdi) # encoding: [0xc1,0x2f,0x04]
6795c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
680a9e8a3a1SShengchen Kan;
681a9e8a3a1SShengchen Kan; NF-LABEL: shr32mi_legacy:
682a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
683a9e8a3a1SShengchen Kan; NF-NEXT:    shrl $4, (%rdi) # encoding: [0xc1,0x2f,0x04]
684a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
6855c68c6d7SShengchen Kanentry:
6865c68c6d7SShengchen Kan  %a = load i32, ptr %ptr
6875c68c6d7SShengchen Kan  %shr = lshr i32 %a, 4
6885c68c6d7SShengchen Kan  store i32 %shr, ptr %ptr
6895c68c6d7SShengchen Kan  ret void
6905c68c6d7SShengchen Kan}
6915c68c6d7SShengchen Kan
6925c68c6d7SShengchen Kandefine void @shr64mi_legacy(ptr %ptr) {
6935c68c6d7SShengchen Kan; CHECK-LABEL: shr64mi_legacy:
6945c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
6955c68c6d7SShengchen Kan; CHECK-NEXT:    shrq $4, (%rdi) # encoding: [0x48,0xc1,0x2f,0x04]
6965c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
697a9e8a3a1SShengchen Kan;
698a9e8a3a1SShengchen Kan; NF-LABEL: shr64mi_legacy:
699a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
700a9e8a3a1SShengchen Kan; NF-NEXT:    shrq $4, (%rdi) # encoding: [0x48,0xc1,0x2f,0x04]
701a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
7025c68c6d7SShengchen Kanentry:
7035c68c6d7SShengchen Kan  %a = load i64, ptr %ptr
7045c68c6d7SShengchen Kan  %shr = lshr i64 %a, 4
7055c68c6d7SShengchen Kan  store i64 %shr, ptr %ptr
7065c68c6d7SShengchen Kan  ret void
7075c68c6d7SShengchen Kan}
7085c68c6d7SShengchen Kan
7095c68c6d7SShengchen Kandefine void @shr8mcl_legacy(ptr %ptr, i8 %cl) {
7105c68c6d7SShengchen Kan; CHECK-LABEL: shr8mcl_legacy:
7115c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
7125c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
7135c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
7145c68c6d7SShengchen Kan; CHECK-NEXT:    shrb %cl, (%rdi) # encoding: [0xd2,0x2f]
7155c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
716a9e8a3a1SShengchen Kan;
717a9e8a3a1SShengchen Kan; NF-LABEL: shr8mcl_legacy:
718a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
719a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
720a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
721a9e8a3a1SShengchen Kan; NF-NEXT:    shrb %cl, (%rdi) # encoding: [0xd2,0x2f]
722a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
7235c68c6d7SShengchen Kanentry:
7245c68c6d7SShengchen Kan  %a = load i8, ptr %ptr
7255c68c6d7SShengchen Kan  %shr = lshr i8 %a, %cl
7265c68c6d7SShengchen Kan  store i8 %shr, ptr %ptr
7275c68c6d7SShengchen Kan  ret void
7285c68c6d7SShengchen Kan}
7295c68c6d7SShengchen Kan
7305c68c6d7SShengchen Kandefine void @shr16mcl_legacy(ptr %ptr, i16 %cl) {
7315c68c6d7SShengchen Kan; CHECK-LABEL: shr16mcl_legacy:
7325c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
7335c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
7345c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
7355c68c6d7SShengchen Kan; CHECK-NEXT:    shrw %cl, (%rdi) # encoding: [0x66,0xd3,0x2f]
7365c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
737a9e8a3a1SShengchen Kan;
738a9e8a3a1SShengchen Kan; NF-LABEL: shr16mcl_legacy:
739a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
740a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
741a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
742a9e8a3a1SShengchen Kan; NF-NEXT:    shrw %cl, (%rdi) # encoding: [0x66,0xd3,0x2f]
743a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
7445c68c6d7SShengchen Kanentry:
7455c68c6d7SShengchen Kan  %a = load i16, ptr %ptr
7465c68c6d7SShengchen Kan  %shr = lshr i16 %a, %cl
7475c68c6d7SShengchen Kan  store i16 %shr, ptr %ptr
7485c68c6d7SShengchen Kan  ret void
7495c68c6d7SShengchen Kan}
7505c68c6d7SShengchen Kan
7515c68c6d7SShengchen Kandefine void @shr32mcl_legacy(ptr %ptr, i32 %cl) {
7525c68c6d7SShengchen Kan; CHECK-LABEL: shr32mcl_legacy:
7535c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
7545c68c6d7SShengchen Kan; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
7555c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
7565c68c6d7SShengchen Kan; CHECK-NEXT:    shrl %cl, (%rdi) # encoding: [0xd3,0x2f]
7575c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
758a9e8a3a1SShengchen Kan;
759a9e8a3a1SShengchen Kan; NF-LABEL: shr32mcl_legacy:
760a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
761a9e8a3a1SShengchen Kan; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]
762a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $ecx
763a9e8a3a1SShengchen Kan; NF-NEXT:    shrl %cl, (%rdi) # encoding: [0xd3,0x2f]
764a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
7655c68c6d7SShengchen Kanentry:
7665c68c6d7SShengchen Kan  %a = load i32, ptr %ptr
7675c68c6d7SShengchen Kan  %shr = lshr i32 %a, %cl
7685c68c6d7SShengchen Kan  store i32 %shr, ptr %ptr
7695c68c6d7SShengchen Kan  ret void
7705c68c6d7SShengchen Kan}
7715c68c6d7SShengchen Kan
7725c68c6d7SShengchen Kandefine void @shr64mcl_legacy(ptr %ptr, i64 %cl) {
7735c68c6d7SShengchen Kan; CHECK-LABEL: shr64mcl_legacy:
7745c68c6d7SShengchen Kan; CHECK:       # %bb.0: # %entry
7755c68c6d7SShengchen Kan; CHECK-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
7765c68c6d7SShengchen Kan; CHECK-NEXT:    # kill: def $cl killed $cl killed $rcx
7775c68c6d7SShengchen Kan; CHECK-NEXT:    shrq %cl, (%rdi) # encoding: [0x48,0xd3,0x2f]
7785c68c6d7SShengchen Kan; CHECK-NEXT:    retq # encoding: [0xc3]
779a9e8a3a1SShengchen Kan;
780a9e8a3a1SShengchen Kan; NF-LABEL: shr64mcl_legacy:
781a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
782a9e8a3a1SShengchen Kan; NF-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]
783a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $cl killed $cl killed $rcx
784a9e8a3a1SShengchen Kan; NF-NEXT:    shrq %cl, (%rdi) # encoding: [0x48,0xd3,0x2f]
785a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
7865c68c6d7SShengchen Kanentry:
7875c68c6d7SShengchen Kan  %a = load i64, ptr %ptr
7885c68c6d7SShengchen Kan  %shr = lshr i64 %a, %cl
7895c68c6d7SShengchen Kan  store i64 %shr, ptr %ptr
7905c68c6d7SShengchen Kan  ret void
7915c68c6d7SShengchen Kan}
792