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