brintos

brintos / llvm-project-archived public Read only

0
0
Text · 32.3 KiB · 497f71a Raw
570 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-pc-linux -mattr=+avx2 | FileCheck %s --check-prefix=AVX23; RUN: llc < %s -mtriple=x86_64-pc-linux -mattr=+avx512f,+avx512vl | FileCheck %s --check-prefix=AVX512F4; RUN: llc < %s -mtriple=x86_64-pc-linux -mattr=+avx512f,+avx512vl,+avx512bw | FileCheck %s --check-prefix=AVX512BW5; RUN: llc < %s -mtriple=x86_64-pc-linux -mattr=+avx512f,+avx512vl,+avx512vbmi | FileCheck %s --check-prefix=AVX512VBMI6 7define <64 x i8> @f1(ptr %p0) {8; AVX2-LABEL: f1:9; AVX2:       # %bb.0:10; AVX2-NEXT:    vmovdqa 128(%rdi), %ymm111; AVX2-NEXT:    vmovdqa 32(%rdi), %ymm012; AVX2-NEXT:    vmovdqa (%rdi), %xmm213; AVX2-NEXT:    vmovdqa 16(%rdi), %xmm314; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = [128,128,128,128,128,128,3,5,9,11,15,u,u,u,u,u]15; AVX2-NEXT:    vpshufb %xmm4, %xmm3, %xmm316; AVX2-NEXT:    vmovdqa {{.*#+}} xmm5 = [1,3,7,9,13,15,128,128,128,128,128,u,u,u,u,u]17; AVX2-NEXT:    vpshufb %xmm5, %xmm2, %xmm218; AVX2-NEXT:    vpor %xmm3, %xmm2, %xmm219; AVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm3 = [1,3,7,9,13,15,0,0,0,0,0,1,5,7,11,13,1,3,7,9,13,15,0,0,0,0,0,1,5,7,11,13]20; AVX2-NEXT:    # ymm3 = mem[0,1,0,1]21; AVX2-NEXT:    vpshufb %ymm3, %ymm0, %ymm022; AVX2-NEXT:    vpmovsxdq {{.*#+}} xmm6 = [18446744073709551615,16777215]23; AVX2-NEXT:    vpblendvb %ymm6, %ymm2, %ymm0, %ymm024; AVX2-NEXT:    vmovdqa 80(%rdi), %xmm225; AVX2-NEXT:    vmovdqa {{.*#+}} xmm7 = [u,u,u,u,u,u,128,128,128,128,128,1,5,7,11,13]26; AVX2-NEXT:    vpshufb %xmm7, %xmm2, %xmm227; AVX2-NEXT:    vmovdqa 64(%rdi), %xmm828; AVX2-NEXT:    vmovdqa {{.*#+}} xmm9 = [u,u,u,u,u,u,3,5,9,11,15,128,128,128,128,128]29; AVX2-NEXT:    vpshufb %xmm9, %xmm8, %xmm830; AVX2-NEXT:    vpor %xmm2, %xmm8, %xmm231; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm232; AVX2-NEXT:    vpblendw {{.*#+}} ymm2 = ymm0[0,1,2],ymm2[3,4,5,6,7],ymm0[8,9,10],ymm2[11,12,13,14,15]33; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm2[4,5,6,7]34; AVX2-NEXT:    vmovdqa 112(%rdi), %xmm235; AVX2-NEXT:    vpshufb %xmm4, %xmm2, %xmm236; AVX2-NEXT:    vmovdqa 96(%rdi), %xmm437; AVX2-NEXT:    vpshufb %xmm5, %xmm4, %xmm438; AVX2-NEXT:    vpor %xmm2, %xmm4, %xmm239; AVX2-NEXT:    vpshufb %ymm3, %ymm1, %ymm140; AVX2-NEXT:    vpblendvb %ymm6, %ymm2, %ymm1, %ymm141; AVX2-NEXT:    vmovdqa 176(%rdi), %xmm242; AVX2-NEXT:    vpshufb %xmm7, %xmm2, %xmm243; AVX2-NEXT:    vmovdqa 160(%rdi), %xmm344; AVX2-NEXT:    vpshufb %xmm9, %xmm3, %xmm345; AVX2-NEXT:    vpor %xmm2, %xmm3, %xmm246; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm247; AVX2-NEXT:    vpblendw {{.*#+}} ymm2 = ymm1[0,1,2],ymm2[3,4,5,6,7],ymm1[8,9,10],ymm2[11,12,13,14,15]48; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm2[4,5,6,7]49; AVX2-NEXT:    retq50;51; AVX512F-LABEL: f1:52; AVX512F:       # %bb.0:53; AVX512F-NEXT:    vmovdqa 112(%rdi), %xmm054; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm1 = [128,128,128,128,128,128,3,5,9,11,15,u,u,u,u,u]55; AVX512F-NEXT:    vpshufb %xmm1, %xmm0, %xmm056; AVX512F-NEXT:    vmovdqa 96(%rdi), %xmm257; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm3 = [1,3,7,9,13,15,128,128,128,128,128,u,u,u,u,u]58; AVX512F-NEXT:    vpshufb %xmm3, %xmm2, %xmm259; AVX512F-NEXT:    vpor %xmm0, %xmm2, %xmm060; AVX512F-NEXT:    vmovdqa 176(%rdi), %xmm261; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm4 = [u,u,u,u,u,u,128,128,128,128,128,1,5,7,11,13]62; AVX512F-NEXT:    vpshufb %xmm4, %xmm2, %xmm263; AVX512F-NEXT:    vmovdqa 160(%rdi), %xmm564; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm6 = [u,u,u,u,u,u,3,5,9,11,15,128,128,128,128,128]65; AVX512F-NEXT:    vpshufb %xmm6, %xmm5, %xmm566; AVX512F-NEXT:    vpor %xmm2, %xmm5, %xmm267; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm268; AVX512F-NEXT:    vmovdqa 128(%rdi), %ymm569; AVX512F-NEXT:    vpshufb {{.*#+}} ymm5 = ymm5[u,u,u,u,u,u,u,u,u,u,u,1,5,7,11,13,17,19,23,25,29,31,u,u,u,u,u,u,u,u,u,u]70; AVX512F-NEXT:    vpblendw {{.*#+}} ymm2 = ymm5[0,1,2],ymm2[3,4,5,6,7],ymm5[8,9,10],ymm2[11,12,13,14,15]71; AVX512F-NEXT:    vpblendd {{.*#+}} ymm2 = ymm5[0,1,2,3],ymm2[4,5,6,7]72; AVX512F-NEXT:    vpternlogq {{.*#+}} ymm2 = ymm0 ^ (mem & (ymm2 ^ ymm0))73; AVX512F-NEXT:    vmovdqa 80(%rdi), %xmm074; AVX512F-NEXT:    vpshufb %xmm4, %xmm0, %xmm075; AVX512F-NEXT:    vmovdqa 64(%rdi), %xmm476; AVX512F-NEXT:    vpshufb %xmm6, %xmm4, %xmm477; AVX512F-NEXT:    vpor %xmm0, %xmm4, %xmm078; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm079; AVX512F-NEXT:    vmovdqa (%rdi), %xmm480; AVX512F-NEXT:    vmovdqa 16(%rdi), %xmm581; AVX512F-NEXT:    vpshufb %xmm1, %xmm5, %xmm182; AVX512F-NEXT:    vpshufb %xmm3, %xmm4, %xmm383; AVX512F-NEXT:    vpor %xmm1, %xmm3, %xmm184; AVX512F-NEXT:    vmovdqa 32(%rdi), %ymm385; AVX512F-NEXT:    vpshufb {{.*#+}} ymm3 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm3[1,5,7,11,13,17,19,23,25,29,31],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero86; AVX512F-NEXT:    vpternlogq {{.*#+}} ymm3 = ymm3 | (ymm1 & mem)87; AVX512F-NEXT:    vpblendw {{.*#+}} ymm0 = ymm3[0,1,2],ymm0[3,4,5,6,7],ymm3[8,9,10],ymm0[11,12,13,14,15]88; AVX512F-NEXT:    vpblendd {{.*#+}} ymm0 = ymm3[0,1,2,3],ymm0[4,5,6,7]89; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm090; AVX512F-NEXT:    retq91;92; AVX512BW-LABEL: f1:93; AVX512BW:       # %bb.0:94; AVX512BW-NEXT:    vmovdqa 112(%rdi), %xmm095; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm1 = [128,128,128,128,128,128,3,5,9,11,15,u,u,u,u,u]96; AVX512BW-NEXT:    vpshufb %xmm1, %xmm0, %xmm097; AVX512BW-NEXT:    vmovdqa 96(%rdi), %xmm298; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm3 = [1,3,7,9,13,15,128,128,128,128,128,u,u,u,u,u]99; AVX512BW-NEXT:    vpshufb %xmm3, %xmm2, %xmm2100; AVX512BW-NEXT:    vpor %xmm0, %xmm2, %xmm0101; AVX512BW-NEXT:    vmovdqa 176(%rdi), %xmm2102; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm4 = [u,u,u,u,u,u,128,128,128,128,128,1,5,7,11,13]103; AVX512BW-NEXT:    vpshufb %xmm4, %xmm2, %xmm2104; AVX512BW-NEXT:    vmovdqa 160(%rdi), %xmm5105; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm6 = [u,u,u,u,u,u,3,5,9,11,15,128,128,128,128,128]106; AVX512BW-NEXT:    vpshufb %xmm6, %xmm5, %xmm5107; AVX512BW-NEXT:    vpor %xmm2, %xmm5, %xmm2108; AVX512BW-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2109; AVX512BW-NEXT:    vmovdqa 128(%rdi), %ymm5110; AVX512BW-NEXT:    vbroadcasti128 {{.*#+}} ymm7 = [1,3,7,9,13,15,0,0,0,0,0,1,5,7,11,13,1,3,7,9,13,15,0,0,0,0,0,1,5,7,11,13]111; AVX512BW-NEXT:    # ymm7 = mem[0,1,0,1]112; AVX512BW-NEXT:    vpshufb %ymm7, %ymm5, %ymm5113; AVX512BW-NEXT:    vpblendw {{.*#+}} ymm2 = ymm5[0,1,2],ymm2[3,4,5,6,7],ymm5[8,9,10],ymm2[11,12,13,14,15]114; AVX512BW-NEXT:    vpblendd {{.*#+}} ymm2 = ymm5[0,1,2,3],ymm2[4,5,6,7]115; AVX512BW-NEXT:    movl $2047, %eax # imm = 0x7FF116; AVX512BW-NEXT:    kmovd %eax, %k1117; AVX512BW-NEXT:    vmovdqu8 %ymm0, %ymm2 {%k1}118; AVX512BW-NEXT:    vmovdqa (%rdi), %xmm0119; AVX512BW-NEXT:    vmovdqa 16(%rdi), %xmm5120; AVX512BW-NEXT:    vpshufb %xmm1, %xmm5, %xmm1121; AVX512BW-NEXT:    vpshufb %xmm3, %xmm0, %xmm0122; AVX512BW-NEXT:    vpor %xmm1, %xmm0, %xmm0123; AVX512BW-NEXT:    vmovdqa 32(%rdi), %ymm1124; AVX512BW-NEXT:    movl $4192256, %eax # imm = 0x3FF800125; AVX512BW-NEXT:    kmovd %eax, %k1126; AVX512BW-NEXT:    vpshufb %ymm7, %ymm1, %ymm0 {%k1}127; AVX512BW-NEXT:    vmovdqa 80(%rdi), %xmm1128; AVX512BW-NEXT:    vpshufb %xmm4, %xmm1, %xmm1129; AVX512BW-NEXT:    vmovdqa 64(%rdi), %xmm3130; AVX512BW-NEXT:    vpshufb %xmm6, %xmm3, %xmm3131; AVX512BW-NEXT:    vpor %xmm1, %xmm3, %xmm1132; AVX512BW-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm1133; AVX512BW-NEXT:    vpblendw {{.*#+}} ymm1 = ymm0[0,1,2],ymm1[3,4,5,6,7],ymm0[8,9,10],ymm1[11,12,13,14,15]134; AVX512BW-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]135; AVX512BW-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0136; AVX512BW-NEXT:    retq137;138; AVX512VBMI-LABEL: f1:139; AVX512VBMI:       # %bb.0:140; AVX512VBMI-NEXT:    vmovdqa64 (%rdi), %zmm0141; AVX512VBMI-NEXT:    vmovdqa64 {{.*#+}} zmm1 = [1,3,7,9,13,15,19,21,25,27,31,33,37,39,43,45,49,51,55,57,61,63,67,69,73,75,79,81,85,87,91,93,97,99,103,105,109,111,115,117,121,123,127,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u]142; AVX512VBMI-NEXT:    vpermi2b 64(%rdi), %zmm0, %zmm1143; AVX512VBMI-NEXT:    vmovdqa64 {{.*#+}} zmm0 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,65,69,71,75,77,81,83,87,89,93,95,99,101,105,107,111,113,117,119,123,125]144; AVX512VBMI-NEXT:    vpermi2b 128(%rdi), %zmm1, %zmm0145; AVX512VBMI-NEXT:    retq146  %a0 = load <192 x i8>, ptr %p0147  %r = shufflevector <192 x i8> %a0, <192 x i8> poison, <64 x i32> <i32 1, i32 3, i32 7, i32 9, i32 13, i32 15, i32 19, i32 21, i32 25, i32 27, i32 31, i32 33, i32 37, i32 39, i32 43, i32 45, i32 49, i32 51, i32 55, i32 57, i32 61, i32 63, i32 67, i32 69, i32 73, i32 75, i32 79, i32 81, i32 85, i32 87, i32 91, i32 93, i32 97, i32 99, i32 103, i32 105, i32 109, i32 111, i32 115, i32 117, i32 121, i32 123, i32 127, i32 129, i32 133, i32 135, i32 139, i32 141, i32 145, i32 147, i32 151, i32 153, i32 157, i32 159, i32 163, i32 165, i32 169, i32 171, i32 175, i32 177, i32 181, i32 183, i32 187, i32 189>148  ret <64 x i8> %r149}150 151define <64 x i8> @f2(ptr %p0) {152; AVX2-LABEL: f2:153; AVX2:       # %bb.0:154; AVX2-NEXT:    vmovdqa 128(%rdi), %ymm1155; AVX2-NEXT:    vmovdqa 32(%rdi), %ymm0156; AVX2-NEXT:    vmovdqa (%rdi), %xmm2157; AVX2-NEXT:    vmovdqa 16(%rdi), %xmm3158; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = [1,5,7,11,13,128,128,128,128,128,128,u,u,u,u,u]159; AVX2-NEXT:    vpshufb %xmm4, %xmm2, %xmm2160; AVX2-NEXT:    vmovdqa {{.*#+}} xmm5 = [128,128,128,128,128,1,3,7,9,13,15,u,u,u,u,u]161; AVX2-NEXT:    vpshufb %xmm5, %xmm3, %xmm3162; AVX2-NEXT:    vpor %xmm2, %xmm3, %xmm2163; AVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm3 = [1,5,7,11,13,0,0,0,0,0,0,3,5,9,11,15,1,5,7,11,13,0,0,0,0,0,0,3,5,9,11,15]164; AVX2-NEXT:    # ymm3 = mem[0,1,0,1]165; AVX2-NEXT:    vpshufb %ymm3, %ymm0, %ymm0166; AVX2-NEXT:    vpmovsxdq {{.*#+}} xmm6 = [18446744073709551615,16777215]167; AVX2-NEXT:    vpblendvb %ymm6, %ymm2, %ymm0, %ymm0168; AVX2-NEXT:    vmovdqa 80(%rdi), %xmm2169; AVX2-NEXT:    vmovdqa {{.*#+}} xmm7 = [u,u,u,u,u,128,128,128,128,128,128,3,5,9,11,15]170; AVX2-NEXT:    vpshufb %xmm7, %xmm2, %xmm2171; AVX2-NEXT:    vmovdqa 64(%rdi), %xmm8172; AVX2-NEXT:    vmovdqa {{.*#+}} xmm9 = [u,u,u,u,u,1,3,7,9,13,15,128,128,128,128,128]173; AVX2-NEXT:    vpshufb %xmm9, %xmm8, %xmm8174; AVX2-NEXT:    vpor %xmm2, %xmm8, %xmm2175; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2176; AVX2-NEXT:    vpmovsxwd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm8177; AVX2-NEXT:    vpblendvb %ymm8, %ymm0, %ymm2, %ymm0178; AVX2-NEXT:    vmovdqa 96(%rdi), %xmm2179; AVX2-NEXT:    vpshufb %xmm4, %xmm2, %xmm2180; AVX2-NEXT:    vmovdqa 112(%rdi), %xmm4181; AVX2-NEXT:    vpshufb %xmm5, %xmm4, %xmm4182; AVX2-NEXT:    vpor %xmm2, %xmm4, %xmm2183; AVX2-NEXT:    vpshufb %ymm3, %ymm1, %ymm1184; AVX2-NEXT:    vpblendvb %ymm6, %ymm2, %ymm1, %ymm1185; AVX2-NEXT:    vmovdqa 176(%rdi), %xmm2186; AVX2-NEXT:    vpshufb %xmm7, %xmm2, %xmm2187; AVX2-NEXT:    vmovdqa 160(%rdi), %xmm3188; AVX2-NEXT:    vpshufb %xmm9, %xmm3, %xmm3189; AVX2-NEXT:    vpor %xmm2, %xmm3, %xmm2190; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2191; AVX2-NEXT:    vpblendvb %ymm8, %ymm1, %ymm2, %ymm1192; AVX2-NEXT:    retq193;194; AVX512F-LABEL: f2:195; AVX512F:       # %bb.0:196; AVX512F-NEXT:    vmovdqa 176(%rdi), %xmm0197; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm1 = [u,u,u,u,u,128,128,128,128,128,128,3,5,9,11,15]198; AVX512F-NEXT:    vpshufb %xmm1, %xmm0, %xmm0199; AVX512F-NEXT:    vmovdqa 160(%rdi), %xmm2200; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm3 = [u,u,u,u,u,1,3,7,9,13,15,128,128,128,128,128]201; AVX512F-NEXT:    vpshufb %xmm3, %xmm2, %xmm2202; AVX512F-NEXT:    vpor %xmm0, %xmm2, %xmm0203; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0204; AVX512F-NEXT:    vmovdqa (%rdi), %xmm2205; AVX512F-NEXT:    vmovdqa 16(%rdi), %xmm4206; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm5 = [1,5,7,11,13,128,128,128,128,128,128,u,u,u,u,u]207; AVX512F-NEXT:    vpshufb %xmm5, %xmm2, %xmm2208; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm6 = [128,128,128,128,128,1,3,7,9,13,15,u,u,u,u,u]209; AVX512F-NEXT:    vpshufb %xmm6, %xmm4, %xmm4210; AVX512F-NEXT:    vpor %xmm2, %xmm4, %xmm2211; AVX512F-NEXT:    vinserti64x4 $1, %ymm0, %zmm2, %zmm0212; AVX512F-NEXT:    vmovdqa 32(%rdi), %ymm2213; AVX512F-NEXT:    vpshufb {{.*#+}} ymm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm2[3,5,9,11,15,17,21,23,27,29,u,u,u,u,u,u,u,u,u,u,u]214; AVX512F-NEXT:    vmovdqa 128(%rdi), %ymm4215; AVX512F-NEXT:    vpshufb {{.*#+}} ymm4 = ymm4[u,u,u,u,u,u,u,u,u,u,u,3,5,9,11,15,17,21,23,27,29],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero216; AVX512F-NEXT:    vinserti64x4 $1, %ymm4, %zmm2, %zmm2217; AVX512F-NEXT:    vpternlogq {{.*#+}} zmm2 = zmm2 | (zmm0 & mem)218; AVX512F-NEXT:    vmovdqa 96(%rdi), %xmm0219; AVX512F-NEXT:    vpshufb %xmm5, %xmm0, %xmm0220; AVX512F-NEXT:    vmovdqa 112(%rdi), %xmm4221; AVX512F-NEXT:    vpshufb %xmm6, %xmm4, %xmm4222; AVX512F-NEXT:    vpor %xmm0, %xmm4, %xmm0223; AVX512F-NEXT:    vinserti32x4 $2, %xmm0, %zmm0, %zmm0224; AVX512F-NEXT:    vmovdqa 80(%rdi), %xmm4225; AVX512F-NEXT:    vpshufb %xmm1, %xmm4, %xmm1226; AVX512F-NEXT:    vmovdqa 64(%rdi), %xmm4227; AVX512F-NEXT:    vpshufb %xmm3, %xmm4, %xmm3228; AVX512F-NEXT:    vpor %xmm1, %xmm3, %xmm1229; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm1230; AVX512F-NEXT:    vshufi64x2 {{.*#+}} zmm0 = zmm1[0,1,2,3],zmm0[4,5,6,7]231; AVX512F-NEXT:    vpternlogq {{.*#+}} zmm0 = zmm0 ^ (mem & (zmm0 ^ zmm2))232; AVX512F-NEXT:    retq233;234; AVX512BW-LABEL: f2:235; AVX512BW:       # %bb.0:236; AVX512BW-NEXT:    vmovdqa 176(%rdi), %xmm0237; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm1 = [u,u,u,u,u,128,128,128,128,128,128,3,5,9,11,15]238; AVX512BW-NEXT:    vpshufb %xmm1, %xmm0, %xmm0239; AVX512BW-NEXT:    vmovdqa 160(%rdi), %xmm2240; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm3 = [u,u,u,u,u,1,3,7,9,13,15,128,128,128,128,128]241; AVX512BW-NEXT:    vpshufb %xmm3, %xmm2, %xmm2242; AVX512BW-NEXT:    vpor %xmm0, %xmm2, %xmm0243; AVX512BW-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0244; AVX512BW-NEXT:    vmovdqa (%rdi), %xmm2245; AVX512BW-NEXT:    vmovdqa 16(%rdi), %xmm4246; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm5 = [1,5,7,11,13,128,128,128,128,128,128,u,u,u,u,u]247; AVX512BW-NEXT:    vpshufb %xmm5, %xmm2, %xmm2248; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm6 = [128,128,128,128,128,1,3,7,9,13,15,u,u,u,u,u]249; AVX512BW-NEXT:    vpshufb %xmm6, %xmm4, %xmm4250; AVX512BW-NEXT:    vpor %xmm2, %xmm4, %xmm2251; AVX512BW-NEXT:    vinserti64x4 $1, %ymm0, %zmm2, %zmm0252; AVX512BW-NEXT:    vmovdqa 32(%rdi), %ymm2253; AVX512BW-NEXT:    vinserti64x4 $1, 128(%rdi), %zmm2, %zmm2254; AVX512BW-NEXT:    movabsq $8998403163813888, %rax # imm = 0x1FF800001FF800255; AVX512BW-NEXT:    kmovq %rax, %k1256; AVX512BW-NEXT:    vpshufb {{.*#+}} zmm0 {%k1} = zmm2[u,u,u,u,u,u,u,u,u,u,u,3,5,9,11,15,17,21,23,27,29,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,35,37,41,43,47,49,53,55,59,61,u,u,u,u,u,u,u,u,u,u,u]257; AVX512BW-NEXT:    vmovdqa 96(%rdi), %xmm2258; AVX512BW-NEXT:    vpshufb %xmm5, %xmm2, %xmm2259; AVX512BW-NEXT:    vmovdqa 112(%rdi), %xmm4260; AVX512BW-NEXT:    vpshufb %xmm6, %xmm4, %xmm4261; AVX512BW-NEXT:    vpor %xmm2, %xmm4, %xmm2262; AVX512BW-NEXT:    vinserti32x4 $2, %xmm2, %zmm0, %zmm2263; AVX512BW-NEXT:    vmovdqa 80(%rdi), %xmm4264; AVX512BW-NEXT:    vpshufb %xmm1, %xmm4, %xmm1265; AVX512BW-NEXT:    vmovdqa 64(%rdi), %xmm4266; AVX512BW-NEXT:    vpshufb %xmm3, %xmm4, %xmm3267; AVX512BW-NEXT:    vpor %xmm1, %xmm3, %xmm1268; AVX512BW-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm1269; AVX512BW-NEXT:    vshufi64x2 {{.*#+}} zmm1 = zmm1[0,1,2,3],zmm2[4,5,6,7]270; AVX512BW-NEXT:    movabsq $8796090925056, %rax # imm = 0x7FFFFE00000271; AVX512BW-NEXT:    kmovq %rax, %k1272; AVX512BW-NEXT:    vmovdqu8 %zmm1, %zmm0 {%k1}273; AVX512BW-NEXT:    retq274;275; AVX512VBMI-LABEL: f2:276; AVX512VBMI:       # %bb.0:277; AVX512VBMI-NEXT:    vmovdqa64 64(%rdi), %zmm0278; AVX512VBMI-NEXT:    vmovdqa64 {{.*#+}} zmm1 = [65,69,71,75,77,81,83,87,89,93,95,99,101,105,107,111,113,117,119,123,125,1,3,7,9,13,15,19,21,25,27,31,33,37,39,43,45,49,51,55,57,61,63,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u]279; AVX512VBMI-NEXT:    vpermi2b (%rdi), %zmm0, %zmm1280; AVX512VBMI-NEXT:    vmovdqa64 {{.*#+}} zmm0 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,67,69,73,75,79,81,85,87,91,93,97,99,103,105,109,111,115,117,121,123,127]281; AVX512VBMI-NEXT:    vpermi2b 128(%rdi), %zmm1, %zmm0282; AVX512VBMI-NEXT:    retq283  %a0 = load <192 x i8>, ptr %p0284  %r = shufflevector <192 x i8> %a0, <192 x i8> poison, <64 x i32> <i32 1, i32 5, i32 7, i32 11, i32 13, i32 17, i32 19, i32 23, i32 25, i32 29, i32 31, i32 35, i32 37, i32 41, i32 43, i32 47, i32 49, i32 53, i32 55, i32 59, i32 61, i32 65, i32 67, i32 71, i32 73, i32 77, i32 79, i32 83, i32 85, i32 89, i32 91, i32 95, i32 97, i32 101, i32 103, i32 107, i32 109, i32 113, i32 115, i32 119, i32 121, i32 125, i32 127, i32 131, i32 133, i32 137, i32 139, i32 143, i32 145, i32 149, i32 151, i32 155, i32 157, i32 161, i32 163, i32 167, i32 169, i32 173, i32 175, i32 179, i32 181, i32 185, i32 187, i32 191>285  ret <64 x i8> %r286}287 288define <64 x i8> @f3(ptr %p0) {289; AVX2-LABEL: f3:290; AVX2:       # %bb.0:291; AVX2-NEXT:    vmovdqa 128(%rdi), %ymm1292; AVX2-NEXT:    vmovdqa 32(%rdi), %ymm0293; AVX2-NEXT:    vmovdqa 64(%rdi), %xmm2294; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [u,u,u,u,u,0,4,6,10,12,128,128,128,128,128,128]295; AVX2-NEXT:    vpshufb %xmm3, %xmm2, %xmm2296; AVX2-NEXT:    vmovdqa 80(%rdi), %xmm4297; AVX2-NEXT:    vmovdqa {{.*#+}} xmm5 = [u,u,u,u,u,128,128,128,128,128,0,2,6,8,12,14]298; AVX2-NEXT:    vpshufb %xmm5, %xmm4, %xmm4299; AVX2-NEXT:    vpor %xmm2, %xmm4, %xmm2300; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2301; AVX2-NEXT:    vmovdqa (%rdi), %xmm4302; AVX2-NEXT:    vmovdqa 16(%rdi), %xmm6303; AVX2-NEXT:    vmovdqa {{.*#+}} xmm7 = [128,128,128,128,128,0,4,6,10,12,u,u,u,u,u,u]304; AVX2-NEXT:    vpshufb %xmm7, %xmm6, %xmm6305; AVX2-NEXT:    vmovdqa {{.*#+}} xmm8 = [2,4,8,10,14,128,128,128,128,128,u,u,u,u,u,u]306; AVX2-NEXT:    vpshufb %xmm8, %xmm4, %xmm4307; AVX2-NEXT:    vpor %xmm6, %xmm4, %xmm4308; AVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm6 = [2,4,8,10,14,0,0,0,0,0,0,2,6,8,12,14,2,4,8,10,14,0,0,0,0,0,0,2,6,8,12,14]309; AVX2-NEXT:    # ymm6 = mem[0,1,0,1]310; AVX2-NEXT:    vpshufb %ymm6, %ymm0, %ymm0311; AVX2-NEXT:    vpblendw {{.*#+}} xmm4 = xmm4[0,1,2,3,4],xmm0[5,6,7]312; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm4[0,1,2,3],ymm0[4,5,6,7]313; AVX2-NEXT:    vpmovsxwd {{.*#+}} ymm4 = [4294967295,4294967295,4294967295,4294967295,4294967295,255,0,0]314; AVX2-NEXT:    vpblendvb %ymm4, %ymm0, %ymm2, %ymm0315; AVX2-NEXT:    vmovdqa 160(%rdi), %xmm2316; AVX2-NEXT:    vpshufb %xmm3, %xmm2, %xmm2317; AVX2-NEXT:    vmovdqa 176(%rdi), %xmm3318; AVX2-NEXT:    vpshufb %xmm5, %xmm3, %xmm3319; AVX2-NEXT:    vpor %xmm2, %xmm3, %xmm2320; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2321; AVX2-NEXT:    vmovdqa 112(%rdi), %xmm3322; AVX2-NEXT:    vpshufb %xmm7, %xmm3, %xmm3323; AVX2-NEXT:    vmovdqa 96(%rdi), %xmm5324; AVX2-NEXT:    vpshufb %xmm8, %xmm5, %xmm5325; AVX2-NEXT:    vpor %xmm3, %xmm5, %xmm3326; AVX2-NEXT:    vpshufb %ymm6, %ymm1, %ymm1327; AVX2-NEXT:    vpblendw {{.*#+}} xmm3 = xmm3[0,1,2,3,4],xmm1[5,6,7]328; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]329; AVX2-NEXT:    vpblendvb %ymm4, %ymm1, %ymm2, %ymm1330; AVX2-NEXT:    retq331;332; AVX512F-LABEL: f3:333; AVX512F:       # %bb.0:334; AVX512F-NEXT:    vmovdqa 160(%rdi), %xmm0335; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm1 = [u,u,u,u,u,0,4,6,10,12,128,128,128,128,128,128]336; AVX512F-NEXT:    vpshufb %xmm1, %xmm0, %xmm0337; AVX512F-NEXT:    vmovdqa 176(%rdi), %xmm2338; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm3 = [u,u,u,u,u,128,128,128,128,128,0,2,6,8,12,14]339; AVX512F-NEXT:    vpshufb %xmm3, %xmm2, %xmm2340; AVX512F-NEXT:    vpor %xmm0, %xmm2, %xmm0341; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0342; AVX512F-NEXT:    vmovdqa 128(%rdi), %ymm2343; AVX512F-NEXT:    vbroadcasti128 {{.*#+}} ymm4 = [2,4,8,10,14,0,0,0,0,0,0,2,6,8,12,14,2,4,8,10,14,0,0,0,0,0,0,2,6,8,12,14]344; AVX512F-NEXT:    # ymm4 = mem[0,1,0,1]345; AVX512F-NEXT:    vpshufb %ymm4, %ymm2, %ymm2346; AVX512F-NEXT:    vpmovsxwd {{.*#+}} ymm5 = [4294967295,4294967295,4294967295,4294967295,4294967295,255,0,0]347; AVX512F-NEXT:    vpternlogq {{.*#+}} ymm0 = ymm0 ^ (ymm5 & (ymm0 ^ ymm2))348; AVX512F-NEXT:    vmovdqa 112(%rdi), %xmm6349; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm7 = [128,128,128,128,128,0,4,6,10,12,u,u,u,u,u,u]350; AVX512F-NEXT:    vpshufb %xmm7, %xmm6, %xmm6351; AVX512F-NEXT:    vmovdqa 96(%rdi), %xmm8352; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm9 = [2,4,8,10,14,128,128,128,128,128,u,u,u,u,u,u]353; AVX512F-NEXT:    vpshufb %xmm9, %xmm8, %xmm8354; AVX512F-NEXT:    vpor %xmm6, %xmm8, %xmm6355; AVX512F-NEXT:    vpblendw {{.*#+}} xmm2 = xmm6[0,1,2,3,4],xmm2[5,6,7]356; AVX512F-NEXT:    vpblendd {{.*#+}} ymm0 = ymm2[0,1,2,3],ymm0[4,5,6,7]357; AVX512F-NEXT:    vmovdqa 64(%rdi), %xmm2358; AVX512F-NEXT:    vpshufb %xmm1, %xmm2, %xmm1359; AVX512F-NEXT:    vmovdqa 80(%rdi), %xmm2360; AVX512F-NEXT:    vpshufb %xmm3, %xmm2, %xmm2361; AVX512F-NEXT:    vpor %xmm1, %xmm2, %xmm1362; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm1363; AVX512F-NEXT:    vmovdqa (%rdi), %xmm2364; AVX512F-NEXT:    vmovdqa 16(%rdi), %xmm3365; AVX512F-NEXT:    vpshufb %xmm7, %xmm3, %xmm3366; AVX512F-NEXT:    vpshufb %xmm9, %xmm2, %xmm2367; AVX512F-NEXT:    vpor %xmm3, %xmm2, %xmm2368; AVX512F-NEXT:    vmovdqa 32(%rdi), %ymm3369; AVX512F-NEXT:    vpshufb %ymm4, %ymm3, %ymm3370; AVX512F-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1,2,3,4],xmm3[5,6,7]371; AVX512F-NEXT:    vpblendd {{.*#+}} ymm2 = ymm2[0,1,2,3],ymm3[4,5,6,7]372; AVX512F-NEXT:    vpternlogq {{.*#+}} ymm2 = ymm1 ^ (ymm5 & (ymm2 ^ ymm1))373; AVX512F-NEXT:    vinserti64x4 $1, %ymm0, %zmm2, %zmm0374; AVX512F-NEXT:    retq375;376; AVX512BW-LABEL: f3:377; AVX512BW:       # %bb.0:378; AVX512BW-NEXT:    vmovdqa 64(%rdi), %xmm0379; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm1 = [u,u,u,u,u,0,4,6,10,12,128,128,128,128,128,128]380; AVX512BW-NEXT:    vpshufb %xmm1, %xmm0, %xmm0381; AVX512BW-NEXT:    vmovdqa 80(%rdi), %xmm2382; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm3 = [u,u,u,u,u,128,128,128,128,128,0,2,6,8,12,14]383; AVX512BW-NEXT:    vpshufb %xmm3, %xmm2, %xmm2384; AVX512BW-NEXT:    vpor %xmm0, %xmm2, %xmm0385; AVX512BW-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0386; AVX512BW-NEXT:    vmovdqa (%rdi), %xmm2387; AVX512BW-NEXT:    vmovdqa 16(%rdi), %xmm4388; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm5 = [128,128,128,128,128,0,4,6,10,12,u,u,u,u,u,u]389; AVX512BW-NEXT:    vpshufb %xmm5, %xmm4, %xmm4390; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm6 = [2,4,8,10,14,128,128,128,128,128,u,u,u,u,u,u]391; AVX512BW-NEXT:    vpshufb %xmm6, %xmm2, %xmm2392; AVX512BW-NEXT:    vpor %xmm4, %xmm2, %xmm2393; AVX512BW-NEXT:    vmovdqa 32(%rdi), %ymm4394; AVX512BW-NEXT:    vbroadcasti128 {{.*#+}} ymm7 = [2,4,8,10,14,0,0,0,0,0,0,2,6,8,12,14,2,4,8,10,14,0,0,0,0,0,0,2,6,8,12,14]395; AVX512BW-NEXT:    # ymm7 = mem[0,1,0,1]396; AVX512BW-NEXT:    vpshufb %ymm7, %ymm4, %ymm4397; AVX512BW-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1,2,3,4],xmm4[5,6,7]398; AVX512BW-NEXT:    vpblendd {{.*#+}} ymm2 = ymm2[0,1,2,3],ymm4[4,5,6,7]399; AVX512BW-NEXT:    movl $-2097152, %eax # imm = 0xFFE00000400; AVX512BW-NEXT:    kmovd %eax, %k1401; AVX512BW-NEXT:    vmovdqu8 %ymm0, %ymm2 {%k1}402; AVX512BW-NEXT:    vmovdqa 112(%rdi), %xmm0403; AVX512BW-NEXT:    vpshufb %xmm5, %xmm0, %xmm0404; AVX512BW-NEXT:    vmovdqa 96(%rdi), %xmm4405; AVX512BW-NEXT:    vpshufb %xmm6, %xmm4, %xmm4406; AVX512BW-NEXT:    vpor %xmm0, %xmm4, %xmm0407; AVX512BW-NEXT:    vmovdqa 160(%rdi), %xmm4408; AVX512BW-NEXT:    vpshufb %xmm1, %xmm4, %xmm1409; AVX512BW-NEXT:    vmovdqa 176(%rdi), %xmm4410; AVX512BW-NEXT:    vpshufb %xmm3, %xmm4, %xmm3411; AVX512BW-NEXT:    vpor %xmm1, %xmm3, %xmm1412; AVX512BW-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm1413; AVX512BW-NEXT:    vmovdqa 128(%rdi), %ymm3414; AVX512BW-NEXT:    vpshufb %ymm7, %ymm3, %ymm3415; AVX512BW-NEXT:    vmovdqu8 %ymm1, %ymm3 {%k1}416; AVX512BW-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4],xmm3[5,6,7]417; AVX512BW-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm3[4,5,6,7]418; AVX512BW-NEXT:    vinserti64x4 $1, %ymm0, %zmm2, %zmm0419; AVX512BW-NEXT:    retq420;421; AVX512VBMI-LABEL: f3:422; AVX512VBMI:       # %bb.0:423; AVX512VBMI-NEXT:    vmovdqa64 (%rdi), %zmm0424; AVX512VBMI-NEXT:    vmovdqa64 {{.*#+}} zmm1 = [2,4,8,10,14,16,20,22,26,28,32,34,38,40,44,46,50,52,56,58,62,64,68,70,74,76,80,82,86,88,92,94,98,100,104,106,110,112,116,118,122,124,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u]425; AVX512VBMI-NEXT:    vpermi2b 64(%rdi), %zmm0, %zmm1426; AVX512VBMI-NEXT:    vmovdqa64 {{.*#+}} zmm0 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,64,66,70,72,76,78,82,84,88,90,94,96,100,102,106,108,112,114,118,120,124,126]427; AVX512VBMI-NEXT:    vpermi2b 128(%rdi), %zmm1, %zmm0428; AVX512VBMI-NEXT:    retq429  %a0 = load <192 x i8>, ptr %p0430  %r = shufflevector <192 x i8> %a0, <192 x i8> poison, <64 x i32> <i32 2, i32 4, i32 8, i32 10, i32 14, i32 16, i32 20, i32 22, i32 26, i32 28, i32 32, i32 34, i32 38, i32 40, i32 44, i32 46, i32 50, i32 52, i32 56, i32 58, i32 62, i32 64, i32 68, i32 70, i32 74, i32 76, i32 80, i32 82, i32 86, i32 88, i32 92, i32 94, i32 98, i32 100, i32 104, i32 106, i32 110, i32 112, i32 116, i32 118, i32 122, i32 124, i32 128, i32 130, i32 134, i32 136, i32 140, i32 142, i32 146, i32 148, i32 152, i32 154, i32 158, i32 160, i32 164, i32 166, i32 170, i32 172, i32 176, i32 178, i32 182, i32 184, i32 188, i32 190>431  ret <64 x i8> %r432}433 434define <64 x i8> @f4(ptr %p0) {435; AVX2-LABEL: f4:436; AVX2:       # %bb.0:437; AVX2-NEXT:    vmovdqa 128(%rdi), %ymm1438; AVX2-NEXT:    vmovdqa 32(%rdi), %ymm0439; AVX2-NEXT:    vmovdqa (%rdi), %xmm2440; AVX2-NEXT:    vmovdqa 16(%rdi), %xmm3441; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = [0,4,6,10,12,128,128,128,128,128,128,u,u,u,u,u]442; AVX2-NEXT:    vpshufb %xmm4, %xmm2, %xmm2443; AVX2-NEXT:    vmovdqa {{.*#+}} xmm5 = [128,128,128,128,128,0,2,6,8,12,14,u,u,u,u,u]444; AVX2-NEXT:    vpshufb %xmm5, %xmm3, %xmm3445; AVX2-NEXT:    vpor %xmm2, %xmm3, %xmm2446; AVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm3 = [0,4,6,10,12,0,0,0,0,0,0,2,4,8,10,14,0,4,6,10,12,0,0,0,0,0,0,2,4,8,10,14]447; AVX2-NEXT:    # ymm3 = mem[0,1,0,1]448; AVX2-NEXT:    vpshufb %ymm3, %ymm0, %ymm0449; AVX2-NEXT:    vpmovsxdq {{.*#+}} xmm6 = [18446744073709551615,16777215]450; AVX2-NEXT:    vpblendvb %ymm6, %ymm2, %ymm0, %ymm0451; AVX2-NEXT:    vmovdqa 80(%rdi), %xmm2452; AVX2-NEXT:    vmovdqa {{.*#+}} xmm7 = [u,u,u,u,u,128,128,128,128,128,128,2,4,8,10,14]453; AVX2-NEXT:    vpshufb %xmm7, %xmm2, %xmm2454; AVX2-NEXT:    vmovdqa 64(%rdi), %xmm8455; AVX2-NEXT:    vmovdqa {{.*#+}} xmm9 = [u,u,u,u,u,0,2,6,8,12,14,128,128,128,128,128]456; AVX2-NEXT:    vpshufb %xmm9, %xmm8, %xmm8457; AVX2-NEXT:    vpor %xmm2, %xmm8, %xmm2458; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2459; AVX2-NEXT:    vpmovsxwd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm8460; AVX2-NEXT:    vpblendvb %ymm8, %ymm0, %ymm2, %ymm0461; AVX2-NEXT:    vmovdqa 96(%rdi), %xmm2462; AVX2-NEXT:    vpshufb %xmm4, %xmm2, %xmm2463; AVX2-NEXT:    vmovdqa 112(%rdi), %xmm4464; AVX2-NEXT:    vpshufb %xmm5, %xmm4, %xmm4465; AVX2-NEXT:    vpor %xmm2, %xmm4, %xmm2466; AVX2-NEXT:    vpshufb %ymm3, %ymm1, %ymm1467; AVX2-NEXT:    vpblendvb %ymm6, %ymm2, %ymm1, %ymm1468; AVX2-NEXT:    vmovdqa 176(%rdi), %xmm2469; AVX2-NEXT:    vpshufb %xmm7, %xmm2, %xmm2470; AVX2-NEXT:    vmovdqa 160(%rdi), %xmm3471; AVX2-NEXT:    vpshufb %xmm9, %xmm3, %xmm3472; AVX2-NEXT:    vpor %xmm2, %xmm3, %xmm2473; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2474; AVX2-NEXT:    vpblendvb %ymm8, %ymm1, %ymm2, %ymm1475; AVX2-NEXT:    retq476;477; AVX512F-LABEL: f4:478; AVX512F:       # %bb.0:479; AVX512F-NEXT:    vmovdqa 176(%rdi), %xmm0480; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm1 = [u,u,u,u,u,128,128,128,128,128,128,2,4,8,10,14]481; AVX512F-NEXT:    vpshufb %xmm1, %xmm0, %xmm0482; AVX512F-NEXT:    vmovdqa 160(%rdi), %xmm2483; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm3 = [u,u,u,u,u,0,2,6,8,12,14,128,128,128,128,128]484; AVX512F-NEXT:    vpshufb %xmm3, %xmm2, %xmm2485; AVX512F-NEXT:    vpor %xmm0, %xmm2, %xmm0486; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0487; AVX512F-NEXT:    vmovdqa (%rdi), %xmm2488; AVX512F-NEXT:    vmovdqa 16(%rdi), %xmm4489; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm5 = [0,4,6,10,12,128,128,128,128,128,128,u,u,u,u,u]490; AVX512F-NEXT:    vpshufb %xmm5, %xmm2, %xmm2491; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm6 = [128,128,128,128,128,0,2,6,8,12,14,u,u,u,u,u]492; AVX512F-NEXT:    vpshufb %xmm6, %xmm4, %xmm4493; AVX512F-NEXT:    vpor %xmm2, %xmm4, %xmm2494; AVX512F-NEXT:    vinserti64x4 $1, %ymm0, %zmm2, %zmm0495; AVX512F-NEXT:    vmovdqa 32(%rdi), %ymm2496; AVX512F-NEXT:    vpshufb {{.*#+}} ymm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm2[2,4,8,10,14,16,20,22,26,28,u,u,u,u,u,u,u,u,u,u,u]497; AVX512F-NEXT:    vmovdqa 128(%rdi), %ymm4498; AVX512F-NEXT:    vpshufb {{.*#+}} ymm4 = ymm4[u,u,u,u,u,u,u,u,u,u,u,2,4,8,10,14,16,20,22,26,28],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero499; AVX512F-NEXT:    vinserti64x4 $1, %ymm4, %zmm2, %zmm2500; AVX512F-NEXT:    vpternlogq {{.*#+}} zmm2 = zmm2 | (zmm0 & mem)501; AVX512F-NEXT:    vmovdqa 96(%rdi), %xmm0502; AVX512F-NEXT:    vpshufb %xmm5, %xmm0, %xmm0503; AVX512F-NEXT:    vmovdqa 112(%rdi), %xmm4504; AVX512F-NEXT:    vpshufb %xmm6, %xmm4, %xmm4505; AVX512F-NEXT:    vpor %xmm0, %xmm4, %xmm0506; AVX512F-NEXT:    vinserti32x4 $2, %xmm0, %zmm0, %zmm0507; AVX512F-NEXT:    vmovdqa 80(%rdi), %xmm4508; AVX512F-NEXT:    vpshufb %xmm1, %xmm4, %xmm1509; AVX512F-NEXT:    vmovdqa 64(%rdi), %xmm4510; AVX512F-NEXT:    vpshufb %xmm3, %xmm4, %xmm3511; AVX512F-NEXT:    vpor %xmm1, %xmm3, %xmm1512; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm1513; AVX512F-NEXT:    vshufi64x2 {{.*#+}} zmm0 = zmm1[0,1,2,3],zmm0[4,5,6,7]514; AVX512F-NEXT:    vpternlogq {{.*#+}} zmm0 = zmm0 ^ (mem & (zmm0 ^ zmm2))515; AVX512F-NEXT:    retq516;517; AVX512BW-LABEL: f4:518; AVX512BW:       # %bb.0:519; AVX512BW-NEXT:    vmovdqa 176(%rdi), %xmm0520; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm1 = [u,u,u,u,u,128,128,128,128,128,128,2,4,8,10,14]521; AVX512BW-NEXT:    vpshufb %xmm1, %xmm0, %xmm0522; AVX512BW-NEXT:    vmovdqa 160(%rdi), %xmm2523; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm3 = [u,u,u,u,u,0,2,6,8,12,14,128,128,128,128,128]524; AVX512BW-NEXT:    vpshufb %xmm3, %xmm2, %xmm2525; AVX512BW-NEXT:    vpor %xmm0, %xmm2, %xmm0526; AVX512BW-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0527; AVX512BW-NEXT:    vmovdqa (%rdi), %xmm2528; AVX512BW-NEXT:    vmovdqa 16(%rdi), %xmm4529; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm5 = [0,4,6,10,12,128,128,128,128,128,128,u,u,u,u,u]530; AVX512BW-NEXT:    vpshufb %xmm5, %xmm2, %xmm2531; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm6 = [128,128,128,128,128,0,2,6,8,12,14,u,u,u,u,u]532; AVX512BW-NEXT:    vpshufb %xmm6, %xmm4, %xmm4533; AVX512BW-NEXT:    vpor %xmm2, %xmm4, %xmm2534; AVX512BW-NEXT:    vinserti64x4 $1, %ymm0, %zmm2, %zmm0535; AVX512BW-NEXT:    vmovdqa 32(%rdi), %ymm2536; AVX512BW-NEXT:    vinserti64x4 $1, 128(%rdi), %zmm2, %zmm2537; AVX512BW-NEXT:    movabsq $8998403163813888, %rax # imm = 0x1FF800001FF800538; AVX512BW-NEXT:    kmovq %rax, %k1539; AVX512BW-NEXT:    vpshufb {{.*#+}} zmm0 {%k1} = zmm2[u,u,u,u,u,u,u,u,u,u,u,2,4,8,10,14,16,20,22,26,28,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,34,36,40,42,46,48,52,54,58,60,u,u,u,u,u,u,u,u,u,u,u]540; AVX512BW-NEXT:    vmovdqa 96(%rdi), %xmm2541; AVX512BW-NEXT:    vpshufb %xmm5, %xmm2, %xmm2542; AVX512BW-NEXT:    vmovdqa 112(%rdi), %xmm4543; AVX512BW-NEXT:    vpshufb %xmm6, %xmm4, %xmm4544; AVX512BW-NEXT:    vpor %xmm2, %xmm4, %xmm2545; AVX512BW-NEXT:    vinserti32x4 $2, %xmm2, %zmm0, %zmm2546; AVX512BW-NEXT:    vmovdqa 80(%rdi), %xmm4547; AVX512BW-NEXT:    vpshufb %xmm1, %xmm4, %xmm1548; AVX512BW-NEXT:    vmovdqa 64(%rdi), %xmm4549; AVX512BW-NEXT:    vpshufb %xmm3, %xmm4, %xmm3550; AVX512BW-NEXT:    vpor %xmm1, %xmm3, %xmm1551; AVX512BW-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm1552; AVX512BW-NEXT:    vshufi64x2 {{.*#+}} zmm1 = zmm1[0,1,2,3],zmm2[4,5,6,7]553; AVX512BW-NEXT:    movabsq $8796090925056, %rax # imm = 0x7FFFFE00000554; AVX512BW-NEXT:    kmovq %rax, %k1555; AVX512BW-NEXT:    vmovdqu8 %zmm1, %zmm0 {%k1}556; AVX512BW-NEXT:    retq557;558; AVX512VBMI-LABEL: f4:559; AVX512VBMI:       # %bb.0:560; AVX512VBMI-NEXT:    vmovdqa64 64(%rdi), %zmm0561; AVX512VBMI-NEXT:    vmovdqa64 {{.*#+}} zmm1 = [64,68,70,74,76,80,82,86,88,92,94,98,100,104,106,110,112,116,118,122,124,0,2,6,8,12,14,18,20,24,26,30,32,36,38,42,44,48,50,54,56,60,62,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u]562; AVX512VBMI-NEXT:    vpermi2b (%rdi), %zmm0, %zmm1563; AVX512VBMI-NEXT:    vmovdqa64 {{.*#+}} zmm0 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,66,68,72,74,78,80,84,86,90,92,96,98,102,104,108,110,114,116,120,122,126]564; AVX512VBMI-NEXT:    vpermi2b 128(%rdi), %zmm1, %zmm0565; AVX512VBMI-NEXT:    retq566  %a0 = load <192 x i8>, ptr %p0567  %r = shufflevector <192 x i8> %a0, <192 x i8> poison, <64 x i32> <i32 0, i32 4, i32 6, i32 10, i32 12, i32 16, i32 18, i32 22, i32 24, i32 28, i32 30, i32 34, i32 36, i32 40, i32 42, i32 46, i32 48, i32 52, i32 54, i32 58, i32 60, i32 64, i32 66, i32 70, i32 72, i32 76, i32 78, i32 82, i32 84, i32 88, i32 90, i32 94, i32 96, i32 100, i32 102, i32 106, i32 108, i32 112, i32 114, i32 118, i32 120, i32 124, i32 126, i32 130, i32 132, i32 136, i32 138, i32 142, i32 144, i32 148, i32 150, i32 154, i32 156, i32 160, i32 162, i32 166, i32 168, i32 172, i32 174, i32 178, i32 180, i32 184, i32 186, i32 190>568  ret <64 x i8> %r569}570