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