brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.0 KiB · db77baa Raw
296 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42; RUN: llc < %s -mtriple=i686--   -mcpu=x86-64    | FileCheck %s --check-prefixes=X86-SSE23; RUN: llc < %s -mtriple=x86_64-- -mcpu=x86-64    | FileCheck %s --check-prefixes=X64-SSE24; RUN: llc < %s -mtriple=i686--   -mcpu=x86-64-v2 | FileCheck %s --check-prefixes=X86-SSE425; RUN: llc < %s -mtriple=x86_64-- -mcpu=x86-64-v2 | FileCheck %s --check-prefixes=X64-SSE426; RUN: llc < %s -mtriple=i686--   -mcpu=x86-64-v3 | FileCheck %s --check-prefixes=X86-AVX27; RUN: llc < %s -mtriple=x86_64-- -mcpu=x86-64-v3 | FileCheck %s --check-prefixes=X64-AVX28; RUN: llc < %s -mtriple=i686--   -mcpu=x86-64-v4 | FileCheck %s --check-prefixes=X86-AVX5129; RUN: llc < %s -mtriple=x86_64-- -mcpu=x86-64-v4 | FileCheck %s --check-prefixes=X64-AVX51210 11; PR78897 - Don't vectorize a mul of extracted values if we'd still need the extract.12; TODO: We should vectorize on 32-bit targets.13define <16 x i8> @produceShuffleVectorForByte(i8 zeroext %0) nounwind {14; X86-SSE2-LABEL: produceShuffleVectorForByte:15; X86-SSE2:       # %bb.0: # %entry16; X86-SSE2-NEXT:    pushl %ebx17; X86-SSE2-NEXT:    pushl %edi18; X86-SSE2-NEXT:    pushl %esi19; X86-SSE2-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero20; X86-SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]21; X86-SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm0[0,0,0,0,4,5,6,7]22; X86-SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm123; X86-SSE2-NEXT:    pxor %xmm0, %xmm024; X86-SSE2-NEXT:    pcmpeqb %xmm1, %xmm025; X86-SSE2-NEXT:    movq {{.*#+}} xmm1 = [17,17,17,17,17,17,17,17,0,0,0,0,0,0,0,0]26; X86-SSE2-NEXT:    pand %xmm0, %xmm127; X86-SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[1,1,1,1]28; X86-SSE2-NEXT:    movd %xmm2, %esi29; X86-SSE2-NEXT:    movd %xmm1, %ecx30; X86-SSE2-NEXT:    movl $286331152, %edi # imm = 0x1111111031; X86-SSE2-NEXT:    movl %ecx, %eax32; X86-SSE2-NEXT:    mull %edi33; X86-SSE2-NEXT:    imull $286331153, %ecx, %ebx # imm = 0x1111111134; X86-SSE2-NEXT:    addl %edx, %ebx35; X86-SSE2-NEXT:    imull $286331152, %esi, %edx # imm = 0x1111111036; X86-SSE2-NEXT:    addl %ebx, %edx37; X86-SSE2-NEXT:    movd %edx, %xmm238; X86-SSE2-NEXT:    movd %eax, %xmm139; X86-SSE2-NEXT:    xorl $286331153, %ecx # imm = 0x1111111140; X86-SSE2-NEXT:    movl %ecx, %eax41; X86-SSE2-NEXT:    mull %edi42; X86-SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]43; X86-SSE2-NEXT:    xorl $17895697, %esi # imm = 0x111111144; X86-SSE2-NEXT:    imull $286331153, %ecx, %ecx # imm = 0x1111111145; X86-SSE2-NEXT:    addl %edx, %ecx46; X86-SSE2-NEXT:    imull $286331152, %esi, %edx # imm = 0x1111111047; X86-SSE2-NEXT:    addl %ecx, %edx48; X86-SSE2-NEXT:    movd %edx, %xmm249; X86-SSE2-NEXT:    movd %eax, %xmm350; X86-SSE2-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1]51; X86-SSE2-NEXT:    pand %xmm0, %xmm152; X86-SSE2-NEXT:    pandn %xmm3, %xmm053; X86-SSE2-NEXT:    por %xmm1, %xmm054; X86-SSE2-NEXT:    movdqa %xmm0, %xmm155; X86-SSE2-NEXT:    psrlw $4, %xmm156; X86-SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]57; X86-SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm058; X86-SSE2-NEXT:    popl %esi59; X86-SSE2-NEXT:    popl %edi60; X86-SSE2-NEXT:    popl %ebx61; X86-SSE2-NEXT:    retl62;63; X64-SSE2-LABEL: produceShuffleVectorForByte:64; X64-SSE2:       # %bb.0: # %entry65; X64-SSE2-NEXT:    movd %edi, %xmm066; X64-SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]67; X64-SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm0[0,0,0,0,4,5,6,7]68; X64-SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm169; X64-SSE2-NEXT:    pxor %xmm0, %xmm070; X64-SSE2-NEXT:    pcmpeqb %xmm1, %xmm071; X64-SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [17,17,17,17,17,17,17,17,u,u,u,u,u,u,u,u]72; X64-SSE2-NEXT:    pand %xmm0, %xmm173; X64-SSE2-NEXT:    movq %xmm1, %rax74; X64-SSE2-NEXT:    movabsq $1229782938247303440, %rcx # imm = 0x111111111111111075; X64-SSE2-NEXT:    movabsq $76861433640456465, %rdx # imm = 0x11111111111111176; X64-SSE2-NEXT:    xorq %rax, %rdx77; X64-SSE2-NEXT:    imulq %rcx, %rax78; X64-SSE2-NEXT:    movq %rax, %xmm179; X64-SSE2-NEXT:    imulq %rcx, %rdx80; X64-SSE2-NEXT:    movq %rdx, %xmm281; X64-SSE2-NEXT:    pand %xmm0, %xmm182; X64-SSE2-NEXT:    pandn %xmm2, %xmm083; X64-SSE2-NEXT:    por %xmm1, %xmm084; X64-SSE2-NEXT:    movdqa %xmm0, %xmm185; X64-SSE2-NEXT:    psrlw $4, %xmm186; X64-SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]87; X64-SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm088; X64-SSE2-NEXT:    retq89;90; X86-SSE42-LABEL: produceShuffleVectorForByte:91; X86-SSE42:       # %bb.0: # %entry92; X86-SSE42-NEXT:    pushl %ebx93; X86-SSE42-NEXT:    pushl %edi94; X86-SSE42-NEXT:    pushl %esi95; X86-SSE42-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero96; X86-SSE42-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]97; X86-SSE42-NEXT:    pshuflw {{.*#+}} xmm1 = xmm0[0,0,0,0,4,5,6,7]98; X86-SSE42-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm199; X86-SSE42-NEXT:    pxor %xmm0, %xmm0100; X86-SSE42-NEXT:    pcmpeqb %xmm1, %xmm0101; X86-SSE42-NEXT:    movdqa {{.*#+}} xmm1 = [17,17,17,17,17,17,17,17,u,u,u,u,u,u,u,u]102; X86-SSE42-NEXT:    pand %xmm0, %xmm1103; X86-SSE42-NEXT:    movd %xmm1, %ecx104; X86-SSE42-NEXT:    movl $286331152, %edi # imm = 0x11111110105; X86-SSE42-NEXT:    movl %ecx, %eax106; X86-SSE42-NEXT:    mull %edi107; X86-SSE42-NEXT:    pextrd $1, %xmm1, %esi108; X86-SSE42-NEXT:    imull $286331153, %ecx, %ebx # imm = 0x11111111109; X86-SSE42-NEXT:    addl %edx, %ebx110; X86-SSE42-NEXT:    imull $286331152, %esi, %edx # imm = 0x11111110111; X86-SSE42-NEXT:    addl %ebx, %edx112; X86-SSE42-NEXT:    movd %eax, %xmm2113; X86-SSE42-NEXT:    pinsrd $1, %edx, %xmm2114; X86-SSE42-NEXT:    xorl $286331153, %ecx # imm = 0x11111111115; X86-SSE42-NEXT:    movl %ecx, %eax116; X86-SSE42-NEXT:    mull %edi117; X86-SSE42-NEXT:    xorl $17895697, %esi # imm = 0x1111111118; X86-SSE42-NEXT:    imull $286331153, %ecx, %ecx # imm = 0x11111111119; X86-SSE42-NEXT:    addl %edx, %ecx120; X86-SSE42-NEXT:    imull $286331152, %esi, %edx # imm = 0x11111110121; X86-SSE42-NEXT:    addl %ecx, %edx122; X86-SSE42-NEXT:    movd %eax, %xmm1123; X86-SSE42-NEXT:    pinsrd $1, %edx, %xmm1124; X86-SSE42-NEXT:    pblendvb %xmm0, %xmm2, %xmm1125; X86-SSE42-NEXT:    movdqa %xmm1, %xmm0126; X86-SSE42-NEXT:    psrlw $4, %xmm0127; X86-SSE42-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]128; X86-SSE42-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1129; X86-SSE42-NEXT:    movdqa %xmm1, %xmm0130; X86-SSE42-NEXT:    popl %esi131; X86-SSE42-NEXT:    popl %edi132; X86-SSE42-NEXT:    popl %ebx133; X86-SSE42-NEXT:    retl134;135; X64-SSE42-LABEL: produceShuffleVectorForByte:136; X64-SSE42:       # %bb.0: # %entry137; X64-SSE42-NEXT:    movd %edi, %xmm0138; X64-SSE42-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]139; X64-SSE42-NEXT:    pshuflw {{.*#+}} xmm1 = xmm0[0,0,0,0,4,5,6,7]140; X64-SSE42-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1141; X64-SSE42-NEXT:    pxor %xmm0, %xmm0142; X64-SSE42-NEXT:    pcmpeqb %xmm1, %xmm0143; X64-SSE42-NEXT:    movdqa {{.*#+}} xmm1 = [17,17,17,17,17,17,17,17,u,u,u,u,u,u,u,u]144; X64-SSE42-NEXT:    pand %xmm0, %xmm1145; X64-SSE42-NEXT:    movq %xmm1, %rax146; X64-SSE42-NEXT:    movabsq $1229782938247303440, %rcx # imm = 0x1111111111111110147; X64-SSE42-NEXT:    movabsq $76861433640456465, %rdx # imm = 0x111111111111111148; X64-SSE42-NEXT:    xorq %rax, %rdx149; X64-SSE42-NEXT:    imulq %rcx, %rax150; X64-SSE42-NEXT:    movq %rax, %xmm2151; X64-SSE42-NEXT:    imulq %rcx, %rdx152; X64-SSE42-NEXT:    movq %rdx, %xmm1153; X64-SSE42-NEXT:    pblendvb %xmm0, %xmm2, %xmm1154; X64-SSE42-NEXT:    movdqa %xmm1, %xmm0155; X64-SSE42-NEXT:    psrlw $4, %xmm0156; X64-SSE42-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]157; X64-SSE42-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1158; X64-SSE42-NEXT:    movdqa %xmm1, %xmm0159; X64-SSE42-NEXT:    retq160;161; X86-AVX2-LABEL: produceShuffleVectorForByte:162; X86-AVX2:       # %bb.0: # %entry163; X86-AVX2-NEXT:    pushl %ebx164; X86-AVX2-NEXT:    pushl %edi165; X86-AVX2-NEXT:    pushl %esi166; X86-AVX2-NEXT:    vpbroadcastb {{[0-9]+}}(%esp), %xmm0167; X86-AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0168; X86-AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1169; X86-AVX2-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0170; X86-AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm1171; X86-AVX2-NEXT:    vmovd %xmm1, %edx172; X86-AVX2-NEXT:    movl $286331152, %ecx # imm = 0x11111110173; X86-AVX2-NEXT:    mulxl %ecx, %edi, %esi174; X86-AVX2-NEXT:    vpextrd $1, %xmm1, %eax175; X86-AVX2-NEXT:    imull $286331153, %edx, %ebx # imm = 0x11111111176; X86-AVX2-NEXT:    addl %esi, %ebx177; X86-AVX2-NEXT:    imull $286331152, %eax, %esi # imm = 0x11111110178; X86-AVX2-NEXT:    addl %ebx, %esi179; X86-AVX2-NEXT:    vmovd %edi, %xmm1180; X86-AVX2-NEXT:    xorl $286331153, %edx # imm = 0x11111111181; X86-AVX2-NEXT:    mulxl %ecx, %edi, %ecx182; X86-AVX2-NEXT:    vpinsrd $1, %esi, %xmm1, %xmm1183; X86-AVX2-NEXT:    xorl $17895697, %eax # imm = 0x1111111184; X86-AVX2-NEXT:    imull $286331153, %edx, %edx # imm = 0x11111111185; X86-AVX2-NEXT:    addl %ecx, %edx186; X86-AVX2-NEXT:    imull $286331152, %eax, %eax # imm = 0x11111110187; X86-AVX2-NEXT:    addl %edx, %eax188; X86-AVX2-NEXT:    vmovd %edi, %xmm2189; X86-AVX2-NEXT:    vpinsrd $1, %eax, %xmm2, %xmm2190; X86-AVX2-NEXT:    vpblendvb %xmm0, %xmm1, %xmm2, %xmm0191; X86-AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm1192; X86-AVX2-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]193; X86-AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0194; X86-AVX2-NEXT:    popl %esi195; X86-AVX2-NEXT:    popl %edi196; X86-AVX2-NEXT:    popl %ebx197; X86-AVX2-NEXT:    retl198;199; X64-AVX2-LABEL: produceShuffleVectorForByte:200; X64-AVX2:       # %bb.0: # %entry201; X64-AVX2-NEXT:    vmovd %edi, %xmm0202; X64-AVX2-NEXT:    vpbroadcastb %xmm0, %xmm0203; X64-AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0204; X64-AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1205; X64-AVX2-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0206; X64-AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1207; X64-AVX2-NEXT:    vmovq %xmm1, %rax208; X64-AVX2-NEXT:    movabsq $1229782938247303440, %rcx # imm = 0x1111111111111110209; X64-AVX2-NEXT:    movabsq $76861433640456465, %rdx # imm = 0x111111111111111210; X64-AVX2-NEXT:    xorq %rax, %rdx211; X64-AVX2-NEXT:    imulq %rcx, %rax212; X64-AVX2-NEXT:    vmovq %rax, %xmm1213; X64-AVX2-NEXT:    imulq %rcx, %rdx214; X64-AVX2-NEXT:    vmovq %rdx, %xmm2215; X64-AVX2-NEXT:    vpblendvb %xmm0, %xmm1, %xmm2, %xmm0216; X64-AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm1217; X64-AVX2-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]218; X64-AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0219; X64-AVX2-NEXT:    retq220;221; X86-AVX512-LABEL: produceShuffleVectorForByte:222; X86-AVX512:       # %bb.0: # %entry223; X86-AVX512-NEXT:    pushl %ebx224; X86-AVX512-NEXT:    pushl %edi225; X86-AVX512-NEXT:    pushl %esi226; X86-AVX512-NEXT:    vpbroadcastb {{[0-9]+}}(%esp), %xmm0227; X86-AVX512-NEXT:    vmovd %xmm0, %eax228; X86-AVX512-NEXT:    kmovd %eax, %k1229; X86-AVX512-NEXT:    knotw %k1, %k2230; X86-AVX512-NEXT:    vmovdqu8 {{.*#+}} xmm0 {%k2} {z} = [17,17,17,17,17,17,17,17,u,u,u,u,u,u,u,u]231; X86-AVX512-NEXT:    vpextrd $1, %xmm0, %eax232; X86-AVX512-NEXT:    vmovd %xmm0, %edx233; X86-AVX512-NEXT:    movl $286331152, %ecx # imm = 0x11111110234; X86-AVX512-NEXT:    mulxl %ecx, %edi, %esi235; X86-AVX512-NEXT:    imull $286331153, %edx, %ebx # imm = 0x11111111236; X86-AVX512-NEXT:    addl %esi, %ebx237; X86-AVX512-NEXT:    imull $286331152, %eax, %esi # imm = 0x11111110238; X86-AVX512-NEXT:    addl %ebx, %esi239; X86-AVX512-NEXT:    vmovd %edi, %xmm0240; X86-AVX512-NEXT:    vpinsrd $1, %esi, %xmm0, %xmm0241; X86-AVX512-NEXT:    xorl $17895697, %eax # imm = 0x1111111242; X86-AVX512-NEXT:    xorl $286331153, %edx # imm = 0x11111111243; X86-AVX512-NEXT:    mulxl %ecx, %esi, %ecx244; X86-AVX512-NEXT:    imull $286331153, %edx, %edx # imm = 0x11111111245; X86-AVX512-NEXT:    addl %ecx, %edx246; X86-AVX512-NEXT:    imull $286331152, %eax, %eax # imm = 0x11111110247; X86-AVX512-NEXT:    addl %edx, %eax248; X86-AVX512-NEXT:    vmovd %esi, %xmm1249; X86-AVX512-NEXT:    vpinsrd $1, %eax, %xmm1, %xmm1250; X86-AVX512-NEXT:    vmovdqu8 %xmm1, %xmm0 {%k1}251; X86-AVX512-NEXT:    vpsrlw $4, %xmm0, %xmm1252; X86-AVX512-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]253; X86-AVX512-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}{1to4}, %xmm0, %xmm0254; X86-AVX512-NEXT:    popl %esi255; X86-AVX512-NEXT:    popl %edi256; X86-AVX512-NEXT:    popl %ebx257; X86-AVX512-NEXT:    retl258;259; X64-AVX512-LABEL: produceShuffleVectorForByte:260; X64-AVX512:       # %bb.0: # %entry261; X64-AVX512-NEXT:    kmovd %edi, %k1262; X64-AVX512-NEXT:    knotw %k1, %k2263; X64-AVX512-NEXT:    vmovdqu8 {{.*#+}} xmm0 {%k2} {z} = [17,17,17,17,17,17,17,17,u,u,u,u,u,u,u,u]264; X64-AVX512-NEXT:    vmovq %xmm0, %rax265; X64-AVX512-NEXT:    movabsq $1229782938247303440, %rcx # imm = 0x1111111111111110266; X64-AVX512-NEXT:    movabsq $76861433640456465, %rdx # imm = 0x111111111111111267; X64-AVX512-NEXT:    xorq %rax, %rdx268; X64-AVX512-NEXT:    imulq %rcx, %rax269; X64-AVX512-NEXT:    vmovq %rax, %xmm0270; X64-AVX512-NEXT:    imulq %rcx, %rdx271; X64-AVX512-NEXT:    vmovq %rdx, %xmm1272; X64-AVX512-NEXT:    vmovdqu8 %xmm1, %xmm0 {%k1}273; X64-AVX512-NEXT:    vpsrlw $4, %xmm0, %xmm1274; X64-AVX512-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]275; X64-AVX512-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm0276; X64-AVX512-NEXT:    retq277entry:278  %const = bitcast i64 1229782938247303440 to i64279  %1 = insertelement <1 x i8> poison, i8 %0, i64 0280  %2 = shufflevector <1 x i8> %1, <1 x i8> poison, <8 x i32> zeroinitializer281  %3 = and <8 x i8> %2, <i8 1, i8 2, i8 4, i8 8, i8 16, i8 32, i8 64, i8 -128>282  %.not.not = icmp eq <8 x i8> %3, zeroinitializer283  %4 = select <8 x i1> %.not.not, <8 x i8> <i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17>, <8 x i8> zeroinitializer284  %5 = bitcast <8 x i8> %4 to i64285  %6 = mul i64 %5, %const286  %7 = bitcast i64 %6 to <8 x i8>287  %8 = xor i64 %5, 76861433640456465288  %9 = mul i64 %8, %const289  %10 = bitcast i64 %9 to <8 x i8>290  %11 = select <8 x i1> %.not.not, <8 x i8> %7, <8 x i8> %10291  %12 = and <8 x i8> %11, <i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15>292  %13 = lshr <8 x i8> %11, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>293  %14 = shufflevector <8 x i8> %12, <8 x i8> %13, <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>294  ret <16 x i8> %14295}296