brintos

brintos / llvm-project-archived public Read only

0
0
Text · 43.3 KiB · 2b89590 Raw
949 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=AVX512F3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefix=AVX512VL --check-prefix=AVX512VL-FAST-ALL4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+fast-variable-perlane-shuffle | FileCheck %s --check-prefix=AVX512VL --check-prefix=AVX512VL-FAST-PERLANE5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl,+avx512dq,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefix=VL_BW_DQ --check-prefix=VL_BW_DQ-FAST-ALL6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl,+avx512dq,+fast-variable-perlane-shuffle | FileCheck %s --check-prefix=VL_BW_DQ --check-prefix=VL_BW_DQ-FAST-PERLANE7 8define <2 x i1> @shuf2i1_1_0(<2 x i1> %a) {9; AVX512F-LABEL: shuf2i1_1_0:10; AVX512F:       # %bb.0:11; AVX512F-NEXT:    vpsllq $63, %xmm0, %xmm012; AVX512F-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]13; AVX512F-NEXT:    vptestmq %zmm0, %zmm0, %k114; AVX512F-NEXT:    vpternlogq {{.*#+}} zmm0 {%k1} {z} = -115; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm016; AVX512F-NEXT:    vzeroupper17; AVX512F-NEXT:    retq18;19; AVX512VL-LABEL: shuf2i1_1_0:20; AVX512VL:       # %bb.0:21; AVX512VL-NEXT:    vpsllq $63, %xmm0, %xmm022; AVX512VL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]23; AVX512VL-NEXT:    vptestmq %xmm0, %xmm0, %k124; AVX512VL-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm025; AVX512VL-NEXT:    vmovdqa64 %xmm0, %xmm0 {%k1} {z}26; AVX512VL-NEXT:    retq27;28; VL_BW_DQ-LABEL: shuf2i1_1_0:29; VL_BW_DQ:       # %bb.0:30; VL_BW_DQ-NEXT:    vpsllq $63, %xmm0, %xmm031; VL_BW_DQ-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]32; VL_BW_DQ-NEXT:    vpmovq2m %xmm0, %k033; VL_BW_DQ-NEXT:    vpmovm2q %k0, %xmm034; VL_BW_DQ-NEXT:    retq35  %b = shufflevector <2 x i1> %a, <2 x i1> undef, <2 x i32> <i32 1, i32 0>36  ret <2 x i1> %b37}38 39define <2 x i1> @shuf2i1_1_2(<2 x i1> %a) {40; AVX512F-LABEL: shuf2i1_1_2:41; AVX512F:       # %bb.0:42; AVX512F-NEXT:    vpsllq $63, %xmm0, %xmm043; AVX512F-NEXT:    vptestmq %zmm0, %zmm0, %k144; AVX512F-NEXT:    vpternlogq {{.*#+}} zmm0 {%k1} {z} = -145; AVX512F-NEXT:    vpmovsxbq {{.*#+}} xmm1 = [18446744073709551615,0]46; AVX512F-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7]47; AVX512F-NEXT:    vptestmq %zmm0, %zmm0, %k148; AVX512F-NEXT:    vpternlogq {{.*#+}} zmm0 {%k1} {z} = -149; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm050; AVX512F-NEXT:    vzeroupper51; AVX512F-NEXT:    retq52;53; AVX512VL-LABEL: shuf2i1_1_2:54; AVX512VL:       # %bb.0:55; AVX512VL-NEXT:    vpsllq $63, %xmm0, %xmm056; AVX512VL-NEXT:    vptestmq %xmm0, %xmm0, %k157; AVX512VL-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm058; AVX512VL-NEXT:    vmovdqa64 %xmm0, %xmm1 {%k1} {z}59; AVX512VL-NEXT:    vpmovsxbq {{.*#+}} xmm2 = [18446744073709551615,0]60; AVX512VL-NEXT:    vpalignr {{.*#+}} xmm1 = xmm1[8,9,10,11,12,13,14,15],xmm2[0,1,2,3,4,5,6,7]61; AVX512VL-NEXT:    vptestmq %xmm1, %xmm1, %k162; AVX512VL-NEXT:    vmovdqa64 %xmm0, %xmm0 {%k1} {z}63; AVX512VL-NEXT:    retq64;65; VL_BW_DQ-LABEL: shuf2i1_1_2:66; VL_BW_DQ:       # %bb.0:67; VL_BW_DQ-NEXT:    vpsllq $63, %xmm0, %xmm068; VL_BW_DQ-NEXT:    vpmovq2m %xmm0, %k069; VL_BW_DQ-NEXT:    vpmovm2q %k0, %xmm070; VL_BW_DQ-NEXT:    vpmovsxbq {{.*#+}} xmm1 = [18446744073709551615,0]71; VL_BW_DQ-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7]72; VL_BW_DQ-NEXT:    vpmovq2m %xmm0, %k073; VL_BW_DQ-NEXT:    vpmovm2q %k0, %xmm074; VL_BW_DQ-NEXT:    retq75  %b = shufflevector <2 x i1> %a, <2 x i1> <i1 1, i1 0>, <2 x i32> <i32 1, i32 2>76  ret <2 x i1> %b77}78 79 80define <4 x i1> @shuf4i1_3_2_10(<4 x i1> %a) {81; AVX512F-LABEL: shuf4i1_3_2_10:82; AVX512F:       # %bb.0:83; AVX512F-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[3,2,1,0]84; AVX512F-NEXT:    vpslld $31, %xmm0, %xmm085; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k186; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -187; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm088; AVX512F-NEXT:    vzeroupper89; AVX512F-NEXT:    retq90;91; AVX512VL-LABEL: shuf4i1_3_2_10:92; AVX512VL:       # %bb.0:93; AVX512VL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[3,2,1,0]94; AVX512VL-NEXT:    vpslld $31, %xmm0, %xmm095; AVX512VL-NEXT:    vptestmd %xmm0, %xmm0, %k196; AVX512VL-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm097; AVX512VL-NEXT:    vmovdqa32 %xmm0, %xmm0 {%k1} {z}98; AVX512VL-NEXT:    retq99;100; VL_BW_DQ-LABEL: shuf4i1_3_2_10:101; VL_BW_DQ:       # %bb.0:102; VL_BW_DQ-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[3,2,1,0]103; VL_BW_DQ-NEXT:    vpslld $31, %xmm0, %xmm0104; VL_BW_DQ-NEXT:    vpmovd2m %xmm0, %k0105; VL_BW_DQ-NEXT:    vpmovm2d %k0, %xmm0106; VL_BW_DQ-NEXT:    retq107  %b = shufflevector <4 x i1> %a, <4 x i1> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>108  ret <4 x i1> %b109}110 111define <8 x i1> @shuf8i1_3_6_1_0_3_7_7_0(<8 x i64> %a, <8 x i64> %b, <8 x i64> %a1, <8 x i64> %b1) {112; AVX512F-LABEL: shuf8i1_3_6_1_0_3_7_7_0:113; AVX512F:       # %bb.0:114; AVX512F-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [3,6,1,0,3,7,7,0]115; AVX512F-NEXT:    vpermq %zmm2, %zmm1, %zmm2116; AVX512F-NEXT:    vpermq %zmm0, %zmm1, %zmm0117; AVX512F-NEXT:    vpcmpeqq %zmm2, %zmm0, %k1118; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1119; AVX512F-NEXT:    vpmovdw %zmm0, %ymm0120; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0121; AVX512F-NEXT:    vzeroupper122; AVX512F-NEXT:    retq123;124; AVX512VL-LABEL: shuf8i1_3_6_1_0_3_7_7_0:125; AVX512VL:       # %bb.0:126; AVX512VL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [3,6,1,0,3,7,7,0]127; AVX512VL-NEXT:    vpermq %zmm2, %zmm1, %zmm2128; AVX512VL-NEXT:    vpermq %zmm0, %zmm1, %zmm0129; AVX512VL-NEXT:    vpcmpeqq %zmm2, %zmm0, %k1130; AVX512VL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0131; AVX512VL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}132; AVX512VL-NEXT:    vpmovdw %ymm0, %xmm0133; AVX512VL-NEXT:    vzeroupper134; AVX512VL-NEXT:    retq135;136; VL_BW_DQ-LABEL: shuf8i1_3_6_1_0_3_7_7_0:137; VL_BW_DQ:       # %bb.0:138; VL_BW_DQ-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [3,6,1,0,3,7,7,0]139; VL_BW_DQ-NEXT:    vpermq %zmm2, %zmm1, %zmm2140; VL_BW_DQ-NEXT:    vpermq %zmm0, %zmm1, %zmm0141; VL_BW_DQ-NEXT:    vpcmpeqq %zmm2, %zmm0, %k0142; VL_BW_DQ-NEXT:    vpmovm2w %k0, %xmm0143; VL_BW_DQ-NEXT:    vzeroupper144; VL_BW_DQ-NEXT:    retq145  %a2 = icmp eq <8 x i64> %a, %a1146  %b2 = icmp eq <8 x i64> %b, %b1147  %c = shufflevector <8 x i1> %a2, <8 x i1> %b2, <8 x i32> <i32 3, i32 6, i32 1, i32 0, i32 3, i32 7, i32 7, i32 0>148  ret <8 x i1> %c149}150 151define <16 x i1> @shuf16i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0(<16 x i32> %a, <16 x i32> %b, <16 x i32> %a1, <16 x i32> %b1) {152; AVX512F-LABEL: shuf16i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0:153; AVX512F:       # %bb.0:154; AVX512F-NEXT:    vpcmpeqd %zmm2, %zmm0, %k1155; AVX512F-NEXT:    vpcmpeqd %zmm3, %zmm1, %k2156; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 {%k2} {z} = -1157; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm1 {%k1} {z} = -1158; AVX512F-NEXT:    vpmovsxbd {{.*#+}} zmm2 = [3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0]159; AVX512F-NEXT:    vpermi2d %zmm0, %zmm1, %zmm2160; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k1161; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1162; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0163; AVX512F-NEXT:    vzeroupper164; AVX512F-NEXT:    retq165;166; AVX512VL-LABEL: shuf16i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0:167; AVX512VL:       # %bb.0:168; AVX512VL-NEXT:    vpcmpeqd %zmm2, %zmm0, %k1169; AVX512VL-NEXT:    vpcmpeqd %zmm3, %zmm1, %k2170; AVX512VL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k2} {z} = -1171; AVX512VL-NEXT:    vpternlogd {{.*#+}} zmm1 {%k1} {z} = -1172; AVX512VL-NEXT:    vpmovsxbd {{.*#+}} zmm2 = [3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0]173; AVX512VL-NEXT:    vpermi2d %zmm0, %zmm1, %zmm2174; AVX512VL-NEXT:    vptestmd %zmm2, %zmm2, %k1175; AVX512VL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1176; AVX512VL-NEXT:    vpmovdb %zmm0, %xmm0177; AVX512VL-NEXT:    vzeroupper178; AVX512VL-NEXT:    retq179;180; VL_BW_DQ-LABEL: shuf16i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0:181; VL_BW_DQ:       # %bb.0:182; VL_BW_DQ-NEXT:    vpcmpeqd %zmm2, %zmm0, %k0183; VL_BW_DQ-NEXT:    vpcmpeqd %zmm3, %zmm1, %k1184; VL_BW_DQ-NEXT:    vpmovm2d %k1, %zmm0185; VL_BW_DQ-NEXT:    vpmovm2d %k0, %zmm1186; VL_BW_DQ-NEXT:    vpmovsxbd {{.*#+}} zmm2 = [3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0]187; VL_BW_DQ-NEXT:    vpermi2d %zmm0, %zmm1, %zmm2188; VL_BW_DQ-NEXT:    vpmovd2m %zmm2, %k0189; VL_BW_DQ-NEXT:    vpmovm2b %k0, %xmm0190; VL_BW_DQ-NEXT:    vzeroupper191; VL_BW_DQ-NEXT:    retq192  %a2 = icmp eq <16 x i32> %a, %a1193  %b2 = icmp eq <16 x i32> %b, %b1194  %c = shufflevector <16 x i1> %a2, <16 x i1> %b2, <16 x i32> <i32 3, i32 6, i32 22, i32 12, i32 3, i32 7, i32 7, i32 0, i32 3, i32 6, i32 1, i32 13, i32 3, i32 21, i32 7, i32 0>195  ret <16 x i1> %c196}197 198define <32 x i1> @shuf32i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0(<32 x i1> %a) {199; AVX512F-LABEL: shuf32i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0:200; AVX512F:       # %bb.0:201; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm1202; AVX512F-NEXT:    vpslld $31, %zmm1, %zmm1203; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k1204; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm0205; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0206; AVX512F-NEXT:    vpslld $31, %zmm0, %zmm0207; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k2208; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 {%k2} {z} = -1209; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm1 {%k1} {z} = -1210; AVX512F-NEXT:    vpmovsxbd {{.*#+}} zmm2 = [3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0]211; AVX512F-NEXT:    vpermi2d %zmm0, %zmm1, %zmm2212; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k1213; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1214; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0215; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0216; AVX512F-NEXT:    retq217;218; AVX512VL-LABEL: shuf32i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0:219; AVX512VL:       # %bb.0:220; AVX512VL-NEXT:    vpmovsxbd %xmm0, %zmm1221; AVX512VL-NEXT:    vpslld $31, %zmm1, %zmm1222; AVX512VL-NEXT:    vptestmd %zmm1, %zmm1, %k1223; AVX512VL-NEXT:    vextracti128 $1, %ymm0, %xmm0224; AVX512VL-NEXT:    vpmovsxbd %xmm0, %zmm0225; AVX512VL-NEXT:    vpslld $31, %zmm0, %zmm0226; AVX512VL-NEXT:    vptestmd %zmm0, %zmm0, %k2227; AVX512VL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k2} {z} = -1228; AVX512VL-NEXT:    vpternlogd {{.*#+}} zmm1 {%k1} {z} = -1229; AVX512VL-NEXT:    vpmovsxbd {{.*#+}} zmm2 = [3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0]230; AVX512VL-NEXT:    vpermi2d %zmm0, %zmm1, %zmm2231; AVX512VL-NEXT:    vptestmd %zmm2, %zmm2, %k1232; AVX512VL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1233; AVX512VL-NEXT:    vpmovdb %zmm0, %xmm0234; AVX512VL-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0235; AVX512VL-NEXT:    retq236;237; VL_BW_DQ-LABEL: shuf32i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0:238; VL_BW_DQ:       # %bb.0:239; VL_BW_DQ-NEXT:    vpsllw $7, %ymm0, %ymm0240; VL_BW_DQ-NEXT:    vpmovb2m %ymm0, %k0241; VL_BW_DQ-NEXT:    vpmovm2w %k0, %zmm0242; VL_BW_DQ-NEXT:    vbroadcasti64x4 {{.*#+}} zmm1 = [3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0,3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0]243; VL_BW_DQ-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3]244; VL_BW_DQ-NEXT:    vpermw %zmm0, %zmm1, %zmm0245; VL_BW_DQ-NEXT:    vpmovw2m %zmm0, %k0246; VL_BW_DQ-NEXT:    vpmovm2b %k0, %ymm0247; VL_BW_DQ-NEXT:    retq248  %b = shufflevector <32 x i1> %a, <32 x i1> undef, <32 x i32> <i32 3, i32 6, i32 22, i32 12, i32 3, i32 7, i32 7, i32 0, i32 3, i32 6, i32 1, i32 13, i32 3, i32 21, i32 7, i32 0, i32 3, i32 6, i32 22, i32 12, i32 3, i32 7, i32 7, i32 0, i32 3, i32 6, i32 1, i32 13, i32 3, i32 21, i32 7, i32 0>249  ret <32 x i1> %b250}251 252define <32 x i16> @shuf32i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_icmp_v32i16(<32 x i16> %a, <32 x i16> %c, <32 x i16> %d) {253; AVX512F-LABEL: shuf32i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_icmp_v32i16:254; AVX512F:       # %bb.0:255; AVX512F-NEXT:    vpxor %xmm3, %xmm3, %xmm3256; AVX512F-NEXT:    vpcmpeqw %ymm3, %ymm0, %ymm4257; AVX512F-NEXT:    vpmovsxwd %ymm4, %zmm4258; AVX512F-NEXT:    vptestmd %zmm4, %zmm4, %k1259; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm0260; AVX512F-NEXT:    vpcmpeqw %ymm3, %ymm0, %ymm0261; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0262; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k2263; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 {%k2} {z} = -1264; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm3 {%k1} {z} = -1265; AVX512F-NEXT:    vpmovsxbd {{.*#+}} zmm4 = [3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0]266; AVX512F-NEXT:    vpermi2d %zmm0, %zmm3, %zmm4267; AVX512F-NEXT:    vptestmd %zmm4, %zmm4, %k1268; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1269; AVX512F-NEXT:    vpmovdw %zmm0, %ymm0270; AVX512F-NEXT:    vinserti64x4 $1, %ymm0, %zmm0, %zmm0271; AVX512F-NEXT:    vpternlogq {{.*#+}} zmm0 = zmm2 ^ (zmm0 & (zmm1 ^ zmm2))272; AVX512F-NEXT:    retq273;274; AVX512VL-LABEL: shuf32i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_icmp_v32i16:275; AVX512VL:       # %bb.0:276; AVX512VL-NEXT:    vpxor %xmm3, %xmm3, %xmm3277; AVX512VL-NEXT:    vpcmpeqw %ymm3, %ymm0, %ymm4278; AVX512VL-NEXT:    vpmovsxwd %ymm4, %zmm4279; AVX512VL-NEXT:    vptestmd %zmm4, %zmm4, %k1280; AVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm0281; AVX512VL-NEXT:    vpcmpeqw %ymm3, %ymm0, %ymm0282; AVX512VL-NEXT:    vpmovsxwd %ymm0, %zmm0283; AVX512VL-NEXT:    vptestmd %zmm0, %zmm0, %k2284; AVX512VL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k2} {z} = -1285; AVX512VL-NEXT:    vpternlogd {{.*#+}} zmm3 {%k1} {z} = -1286; AVX512VL-NEXT:    vpmovsxbd {{.*#+}} zmm4 = [3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0]287; AVX512VL-NEXT:    vpermi2d %zmm0, %zmm3, %zmm4288; AVX512VL-NEXT:    vptestmd %zmm4, %zmm4, %k1289; AVX512VL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1290; AVX512VL-NEXT:    vpmovdw %zmm0, %ymm0291; AVX512VL-NEXT:    vinserti64x4 $1, %ymm0, %zmm0, %zmm0292; AVX512VL-NEXT:    vpternlogq {{.*#+}} zmm0 = zmm2 ^ (zmm0 & (zmm1 ^ zmm2))293; AVX512VL-NEXT:    retq294;295; VL_BW_DQ-LABEL: shuf32i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_icmp_v32i16:296; VL_BW_DQ:       # %bb.0:297; VL_BW_DQ-NEXT:    vptestnmw %zmm0, %zmm0, %k0298; VL_BW_DQ-NEXT:    vpmovm2w %k0, %zmm0299; VL_BW_DQ-NEXT:    vbroadcasti64x4 {{.*#+}} zmm3 = [3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0,3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0]300; VL_BW_DQ-NEXT:    # zmm3 = mem[0,1,2,3,0,1,2,3]301; VL_BW_DQ-NEXT:    vpermw %zmm0, %zmm3, %zmm0302; VL_BW_DQ-NEXT:    vpmovw2m %zmm0, %k1303; VL_BW_DQ-NEXT:    vpblendmw %zmm1, %zmm2, %zmm0 {%k1}304; VL_BW_DQ-NEXT:    retq305  %cmp = icmp eq <32 x i16> %a, zeroinitializer306  %shuf = shufflevector <32 x i1> %cmp, <32 x i1> undef, <32 x i32> <i32 3, i32 6, i32 22, i32 12, i32 3, i32 7, i32 7, i32 0, i32 3, i32 6, i32 1, i32 13, i32 3, i32 21, i32 7, i32 0, i32 3, i32 6, i32 22, i32 12, i32 3, i32 7, i32 7, i32 0, i32 3, i32 6, i32 1, i32 13, i32 3, i32 21, i32 7, i32 0>307  %sel = select <32 x i1> %shuf, <32 x i16> %c, <32 x i16> %d308  ret <32 x i16> %sel309}310 311define <32 x i8> @shuf32i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_icmp_v32i8(<32 x i8> %a, <32 x i8> %c, <32 x i8> %d) {312; AVX512F-LABEL: shuf32i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_icmp_v32i8:313; AVX512F:       # %bb.0:314; AVX512F-NEXT:    vpxor %xmm3, %xmm3, %xmm3315; AVX512F-NEXT:    vpcmpeqb %ymm3, %ymm0, %ymm0316; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm3317; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k1318; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm0319; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0320; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k2321; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 {%k2} {z} = -1322; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm3 {%k1} {z} = -1323; AVX512F-NEXT:    vpmovsxbd {{.*#+}} zmm4 = [3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0]324; AVX512F-NEXT:    vpermi2d %zmm0, %zmm3, %zmm4325; AVX512F-NEXT:    vptestmd %zmm4, %zmm4, %k1326; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1327; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0328; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0329; AVX512F-NEXT:    vpblendvb %ymm0, %ymm1, %ymm2, %ymm0330; AVX512F-NEXT:    retq331;332; AVX512VL-LABEL: shuf32i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_icmp_v32i8:333; AVX512VL:       # %bb.0:334; AVX512VL-NEXT:    vpxor %xmm3, %xmm3, %xmm3335; AVX512VL-NEXT:    vpcmpeqb %ymm3, %ymm0, %ymm0336; AVX512VL-NEXT:    vpmovsxbd %xmm0, %zmm3337; AVX512VL-NEXT:    vptestmd %zmm3, %zmm3, %k1338; AVX512VL-NEXT:    vextracti128 $1, %ymm0, %xmm0339; AVX512VL-NEXT:    vpmovsxbd %xmm0, %zmm0340; AVX512VL-NEXT:    vptestmd %zmm0, %zmm0, %k2341; AVX512VL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k2} {z} = -1342; AVX512VL-NEXT:    vpternlogd {{.*#+}} zmm3 {%k1} {z} = -1343; AVX512VL-NEXT:    vpmovsxbd {{.*#+}} zmm4 = [3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0]344; AVX512VL-NEXT:    vpermi2d %zmm0, %zmm3, %zmm4345; AVX512VL-NEXT:    vptestmd %zmm4, %zmm4, %k1346; AVX512VL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1347; AVX512VL-NEXT:    vpmovdb %zmm0, %xmm0348; AVX512VL-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0349; AVX512VL-NEXT:    vpternlogq {{.*#+}} ymm0 = ymm2 ^ (ymm0 & (ymm1 ^ ymm2))350; AVX512VL-NEXT:    retq351;352; VL_BW_DQ-LABEL: shuf32i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_icmp_v32i8:353; VL_BW_DQ:       # %bb.0:354; VL_BW_DQ-NEXT:    vptestnmb %ymm0, %ymm0, %k0355; VL_BW_DQ-NEXT:    vpmovm2w %k0, %zmm0356; VL_BW_DQ-NEXT:    vbroadcasti64x4 {{.*#+}} zmm3 = [3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0,3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0]357; VL_BW_DQ-NEXT:    # zmm3 = mem[0,1,2,3,0,1,2,3]358; VL_BW_DQ-NEXT:    vpermw %zmm0, %zmm3, %zmm0359; VL_BW_DQ-NEXT:    vpmovw2m %zmm0, %k1360; VL_BW_DQ-NEXT:    vpblendmb %ymm1, %ymm2, %ymm0 {%k1}361; VL_BW_DQ-NEXT:    retq362  %cmp = icmp eq <32 x i8> %a, zeroinitializer363  %shuf = shufflevector <32 x i1> %cmp, <32 x i1> undef, <32 x i32> <i32 3, i32 6, i32 22, i32 12, i32 3, i32 7, i32 7, i32 0, i32 3, i32 6, i32 1, i32 13, i32 3, i32 21, i32 7, i32 0, i32 3, i32 6, i32 22, i32 12, i32 3, i32 7, i32 7, i32 0, i32 3, i32 6, i32 1, i32 13, i32 3, i32 21, i32 7, i32 0>364  %sel = select <32 x i1> %shuf, <32 x i8> %c, <32 x i8> %d365  ret <32 x i8> %sel366}367 368define <32 x i16> @shuf32i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_icmp_v32i16_split(<16 x i32> %a, <16 x i32> %b, <32 x i16> %c, <32 x i16> %d) {369; AVX512F-LABEL: shuf32i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_icmp_v32i16_split:370; AVX512F:       # %bb.0:371; AVX512F-NEXT:    vptestnmd %zmm0, %zmm0, %k1372; AVX512F-NEXT:    vptestnmd %zmm1, %zmm1, %k2373; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 {%k2} {z} = -1374; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm1 {%k1} {z} = -1375; AVX512F-NEXT:    vpmovsxbd {{.*#+}} zmm4 = [3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0]376; AVX512F-NEXT:    vpermi2d %zmm0, %zmm1, %zmm4377; AVX512F-NEXT:    vptestmd %zmm4, %zmm4, %k1378; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1379; AVX512F-NEXT:    vpmovdw %zmm0, %ymm0380; AVX512F-NEXT:    vinserti64x4 $1, %ymm0, %zmm0, %zmm0381; AVX512F-NEXT:    vpternlogq {{.*#+}} zmm0 = zmm3 ^ (zmm0 & (zmm2 ^ zmm3))382; AVX512F-NEXT:    retq383;384; AVX512VL-LABEL: shuf32i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_icmp_v32i16_split:385; AVX512VL:       # %bb.0:386; AVX512VL-NEXT:    vptestnmd %zmm0, %zmm0, %k1387; AVX512VL-NEXT:    vptestnmd %zmm1, %zmm1, %k2388; AVX512VL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k2} {z} = -1389; AVX512VL-NEXT:    vpternlogd {{.*#+}} zmm1 {%k1} {z} = -1390; AVX512VL-NEXT:    vpmovsxbd {{.*#+}} zmm4 = [3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0]391; AVX512VL-NEXT:    vpermi2d %zmm0, %zmm1, %zmm4392; AVX512VL-NEXT:    vptestmd %zmm4, %zmm4, %k1393; AVX512VL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1394; AVX512VL-NEXT:    vpmovdw %zmm0, %ymm0395; AVX512VL-NEXT:    vinserti64x4 $1, %ymm0, %zmm0, %zmm0396; AVX512VL-NEXT:    vpternlogq {{.*#+}} zmm0 = zmm3 ^ (zmm0 & (zmm2 ^ zmm3))397; AVX512VL-NEXT:    retq398;399; VL_BW_DQ-LABEL: shuf32i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_icmp_v32i16_split:400; VL_BW_DQ:       # %bb.0:401; VL_BW_DQ-NEXT:    vptestnmd %zmm0, %zmm0, %k0402; VL_BW_DQ-NEXT:    vptestnmd %zmm1, %zmm1, %k1403; VL_BW_DQ-NEXT:    kunpckwd %k0, %k1, %k0404; VL_BW_DQ-NEXT:    vpmovm2w %k0, %zmm0405; VL_BW_DQ-NEXT:    vbroadcasti64x4 {{.*#+}} zmm1 = [3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0,3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0]406; VL_BW_DQ-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3]407; VL_BW_DQ-NEXT:    vpermw %zmm0, %zmm1, %zmm0408; VL_BW_DQ-NEXT:    vpmovw2m %zmm0, %k1409; VL_BW_DQ-NEXT:    vpblendmw %zmm2, %zmm3, %zmm0 {%k1}410; VL_BW_DQ-NEXT:    retq411  %cmp1 = icmp eq <16 x i32> %a, zeroinitializer412  %cmp2 = icmp eq <16 x i32> %b, zeroinitializer413  %concat = shufflevector <16 x i1> %cmp1, <16 x i1> %cmp2, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>414  %shuf = shufflevector <32 x i1> %concat, <32 x i1> undef, <32 x i32> <i32 3, i32 6, i32 22, i32 12, i32 3, i32 7, i32 7, i32 0, i32 3, i32 6, i32 1, i32 13, i32 3, i32 21, i32 7, i32 0, i32 3, i32 6, i32 22, i32 12, i32 3, i32 7, i32 7, i32 0, i32 3, i32 6, i32 1, i32 13, i32 3, i32 21, i32 7, i32 0>415  %sel = select <32 x i1> %shuf, <32 x i16> %c, <32 x i16> %d416  ret <32 x i16> %sel417}418 419define <32 x i8> @shuf32i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_icmp_v32i8_split(<16 x i32> %a, <16 x i32> %b, <32 x i8> %c, <32 x i8> %d) {420; AVX512F-LABEL: shuf32i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_icmp_v32i8_split:421; AVX512F:       # %bb.0:422; AVX512F-NEXT:    vptestnmd %zmm0, %zmm0, %k1423; AVX512F-NEXT:    vptestnmd %zmm1, %zmm1, %k2424; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 {%k2} {z} = -1425; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm1 {%k1} {z} = -1426; AVX512F-NEXT:    vpmovsxbd {{.*#+}} zmm4 = [3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0]427; AVX512F-NEXT:    vpermi2d %zmm0, %zmm1, %zmm4428; AVX512F-NEXT:    vptestmd %zmm4, %zmm4, %k1429; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1430; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0431; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0432; AVX512F-NEXT:    vpblendvb %ymm0, %ymm2, %ymm3, %ymm0433; AVX512F-NEXT:    retq434;435; AVX512VL-LABEL: shuf32i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_icmp_v32i8_split:436; AVX512VL:       # %bb.0:437; AVX512VL-NEXT:    vptestnmd %zmm0, %zmm0, %k1438; AVX512VL-NEXT:    vptestnmd %zmm1, %zmm1, %k2439; AVX512VL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k2} {z} = -1440; AVX512VL-NEXT:    vpternlogd {{.*#+}} zmm1 {%k1} {z} = -1441; AVX512VL-NEXT:    vpmovsxbd {{.*#+}} zmm4 = [3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0]442; AVX512VL-NEXT:    vpermi2d %zmm0, %zmm1, %zmm4443; AVX512VL-NEXT:    vptestmd %zmm4, %zmm4, %k1444; AVX512VL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1445; AVX512VL-NEXT:    vpmovdb %zmm0, %xmm0446; AVX512VL-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0447; AVX512VL-NEXT:    vpternlogq {{.*#+}} ymm0 = ymm3 ^ (ymm0 & (ymm2 ^ ymm3))448; AVX512VL-NEXT:    retq449;450; VL_BW_DQ-LABEL: shuf32i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_icmp_v32i8_split:451; VL_BW_DQ:       # %bb.0:452; VL_BW_DQ-NEXT:    vptestnmd %zmm0, %zmm0, %k0453; VL_BW_DQ-NEXT:    vptestnmd %zmm1, %zmm1, %k1454; VL_BW_DQ-NEXT:    kunpckwd %k0, %k1, %k0455; VL_BW_DQ-NEXT:    vpmovm2w %k0, %zmm0456; VL_BW_DQ-NEXT:    vbroadcasti64x4 {{.*#+}} zmm1 = [3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0,3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0]457; VL_BW_DQ-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3]458; VL_BW_DQ-NEXT:    vpermw %zmm0, %zmm1, %zmm0459; VL_BW_DQ-NEXT:    vpmovw2m %zmm0, %k1460; VL_BW_DQ-NEXT:    vpblendmb %ymm2, %ymm3, %ymm0 {%k1}461; VL_BW_DQ-NEXT:    retq462  %cmp1 = icmp eq <16 x i32> %a, zeroinitializer463  %cmp2 = icmp eq <16 x i32> %b, zeroinitializer464  %concat = shufflevector <16 x i1> %cmp1, <16 x i1> %cmp2, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>465  %shuf = shufflevector <32 x i1> %concat, <32 x i1> undef, <32 x i32> <i32 3, i32 6, i32 22, i32 12, i32 3, i32 7, i32 7, i32 0, i32 3, i32 6, i32 1, i32 13, i32 3, i32 21, i32 7, i32 0, i32 3, i32 6, i32 22, i32 12, i32 3, i32 7, i32 7, i32 0, i32 3, i32 6, i32 1, i32 13, i32 3, i32 21, i32 7, i32 0>466  %sel = select <32 x i1> %shuf, <32 x i8> %c, <32 x i8> %d467  ret <32 x i8> %sel468}469 470define <8 x i1> @shuf8i1_u_2_u_u_2_u_2_u(i8 %a) {471; AVX512F-LABEL: shuf8i1_u_2_u_u_2_u_2_u:472; AVX512F:       # %bb.0:473; AVX512F-NEXT:    kmovw %edi, %k1474; AVX512F-NEXT:    vpternlogq {{.*#+}} zmm0 {%k1} {z} = -1475; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm0476; AVX512F-NEXT:    vpbroadcastq %xmm0, %zmm0477; AVX512F-NEXT:    vpsllq $63, %zmm0, %zmm0478; AVX512F-NEXT:    vptestmq %zmm0, %zmm0, %k1479; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1480; AVX512F-NEXT:    vpmovdw %zmm0, %ymm0481; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0482; AVX512F-NEXT:    vzeroupper483; AVX512F-NEXT:    retq484;485; AVX512VL-FAST-ALL-LABEL: shuf8i1_u_2_u_u_2_u_2_u:486; AVX512VL-FAST-ALL:       # %bb.0:487; AVX512VL-FAST-ALL-NEXT:    kmovw %edi, %k1488; AVX512VL-FAST-ALL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0489; AVX512VL-FAST-ALL-NEXT:    vmovdqa32 %ymm0, %ymm1 {%k1} {z}490; AVX512VL-FAST-ALL-NEXT:    vpbroadcastd {{.*#+}} ymm2 = [2,2,2,2,2,2,2,2]491; AVX512VL-FAST-ALL-NEXT:    vpermd %ymm1, %ymm2, %ymm1492; AVX512VL-FAST-ALL-NEXT:    vpslld $31, %ymm1, %ymm1493; AVX512VL-FAST-ALL-NEXT:    vptestmd %ymm1, %ymm1, %k1494; AVX512VL-FAST-ALL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}495; AVX512VL-FAST-ALL-NEXT:    vpmovdw %ymm0, %xmm0496; AVX512VL-FAST-ALL-NEXT:    vzeroupper497; AVX512VL-FAST-ALL-NEXT:    retq498;499; AVX512VL-FAST-PERLANE-LABEL: shuf8i1_u_2_u_u_2_u_2_u:500; AVX512VL-FAST-PERLANE:       # %bb.0:501; AVX512VL-FAST-PERLANE-NEXT:    kmovw %edi, %k1502; AVX512VL-FAST-PERLANE-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0503; AVX512VL-FAST-PERLANE-NEXT:    vmovdqa32 %ymm0, %ymm1 {%k1} {z}504; AVX512VL-FAST-PERLANE-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]505; AVX512VL-FAST-PERLANE-NEXT:    vpbroadcastd %xmm1, %ymm1506; AVX512VL-FAST-PERLANE-NEXT:    vpslld $31, %ymm1, %ymm1507; AVX512VL-FAST-PERLANE-NEXT:    vptestmd %ymm1, %ymm1, %k1508; AVX512VL-FAST-PERLANE-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}509; AVX512VL-FAST-PERLANE-NEXT:    vpmovdw %ymm0, %xmm0510; AVX512VL-FAST-PERLANE-NEXT:    vzeroupper511; AVX512VL-FAST-PERLANE-NEXT:    retq512;513; VL_BW_DQ-FAST-ALL-LABEL: shuf8i1_u_2_u_u_2_u_2_u:514; VL_BW_DQ-FAST-ALL:       # %bb.0:515; VL_BW_DQ-FAST-ALL-NEXT:    kmovd %edi, %k0516; VL_BW_DQ-FAST-ALL-NEXT:    vpmovm2d %k0, %ymm0517; VL_BW_DQ-FAST-ALL-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [2,2,2,2,2,2,2,2]518; VL_BW_DQ-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm0519; VL_BW_DQ-FAST-ALL-NEXT:    vpmovd2m %ymm0, %k0520; VL_BW_DQ-FAST-ALL-NEXT:    vpmovm2w %k0, %xmm0521; VL_BW_DQ-FAST-ALL-NEXT:    vzeroupper522; VL_BW_DQ-FAST-ALL-NEXT:    retq523;524; VL_BW_DQ-FAST-PERLANE-LABEL: shuf8i1_u_2_u_u_2_u_2_u:525; VL_BW_DQ-FAST-PERLANE:       # %bb.0:526; VL_BW_DQ-FAST-PERLANE-NEXT:    kmovd %edi, %k0527; VL_BW_DQ-FAST-PERLANE-NEXT:    vpmovm2d %k0, %ymm0528; VL_BW_DQ-FAST-PERLANE-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]529; VL_BW_DQ-FAST-PERLANE-NEXT:    vpbroadcastd %xmm0, %ymm0530; VL_BW_DQ-FAST-PERLANE-NEXT:    vpmovd2m %ymm0, %k0531; VL_BW_DQ-FAST-PERLANE-NEXT:    vpmovm2w %k0, %xmm0532; VL_BW_DQ-FAST-PERLANE-NEXT:    vzeroupper533; VL_BW_DQ-FAST-PERLANE-NEXT:    retq534  %b = bitcast i8 %a to <8 x i1>535  %c = shufflevector < 8 x i1> %b, <8 x i1>undef, <8 x i32> <i32 undef, i32 2, i32 undef, i32 undef, i32 2, i32 undef, i32 2, i32 undef>536  ret <8 x i1> %c537}538 539define i8 @shuf8i1_10_2_9_u_3_u_2_u(i8 %a) {540; AVX512F-LABEL: shuf8i1_10_2_9_u_3_u_2_u:541; AVX512F:       # %bb.0:542; AVX512F-NEXT:    kmovw %edi, %k1543; AVX512F-NEXT:    vpternlogq {{.*#+}} zmm0 {%k1} {z} = -1544; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1545; AVX512F-NEXT:    vpmovsxbq {{.*#+}} zmm2 = [8,2,10,0,3,0,2,0]546; AVX512F-NEXT:    vpermi2q %zmm1, %zmm0, %zmm2547; AVX512F-NEXT:    vpsllq $63, %zmm2, %zmm0548; AVX512F-NEXT:    vptestmq %zmm0, %zmm0, %k0549; AVX512F-NEXT:    kmovw %k0, %eax550; AVX512F-NEXT:    # kill: def $al killed $al killed $eax551; AVX512F-NEXT:    vzeroupper552; AVX512F-NEXT:    retq553;554; AVX512VL-LABEL: shuf8i1_10_2_9_u_3_u_2_u:555; AVX512VL:       # %bb.0:556; AVX512VL-NEXT:    kmovw %edi, %k1557; AVX512VL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0558; AVX512VL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}559; AVX512VL-NEXT:    vpxor %xmm1, %xmm1, %xmm1560; AVX512VL-NEXT:    vpmovsxbd {{.*#+}} ymm2 = [8,2,10,3,3,2,2,3]561; AVX512VL-NEXT:    vpermi2d %ymm1, %ymm0, %ymm2562; AVX512VL-NEXT:    vpslld $31, %ymm2, %ymm0563; AVX512VL-NEXT:    vptestmd %ymm0, %ymm0, %k0564; AVX512VL-NEXT:    kmovw %k0, %eax565; AVX512VL-NEXT:    # kill: def $al killed $al killed $eax566; AVX512VL-NEXT:    vzeroupper567; AVX512VL-NEXT:    retq568;569; VL_BW_DQ-LABEL: shuf8i1_10_2_9_u_3_u_2_u:570; VL_BW_DQ:       # %bb.0:571; VL_BW_DQ-NEXT:    kmovd %edi, %k0572; VL_BW_DQ-NEXT:    vpmovm2d %k0, %ymm0573; VL_BW_DQ-NEXT:    vpxor %xmm1, %xmm1, %xmm1574; VL_BW_DQ-NEXT:    vpmovsxbd {{.*#+}} ymm2 = [8,2,10,3,3,2,2,3]575; VL_BW_DQ-NEXT:    vpermi2d %ymm1, %ymm0, %ymm2576; VL_BW_DQ-NEXT:    vpmovd2m %ymm2, %k0577; VL_BW_DQ-NEXT:    kmovd %k0, %eax578; VL_BW_DQ-NEXT:    # kill: def $al killed $al killed $eax579; VL_BW_DQ-NEXT:    vzeroupper580; VL_BW_DQ-NEXT:    retq581  %b = bitcast i8 %a to <8 x i1>582  %c = shufflevector < 8 x i1> %b, <8 x i1> zeroinitializer, <8 x i32> <i32 10, i32 2, i32 9, i32 undef, i32 3, i32 undef, i32 2, i32 undef>583  %d = bitcast <8 x i1> %c to i8584  ret i8 %d585}586 587define i8 @shuf8i1_0_1_4_5_u_u_u_u(i8 %a) {588; AVX512F-LABEL: shuf8i1_0_1_4_5_u_u_u_u:589; AVX512F:       # %bb.0:590; AVX512F-NEXT:    kmovw %edi, %k1591; AVX512F-NEXT:    vpternlogq {{.*#+}} zmm0 {%k1} {z} = -1592; AVX512F-NEXT:    vshufi64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5,4,5,6,7]593; AVX512F-NEXT:    vpsllq $63, %zmm0, %zmm0594; AVX512F-NEXT:    vptestmq %zmm0, %zmm0, %k0595; AVX512F-NEXT:    kmovw %k0, %eax596; AVX512F-NEXT:    # kill: def $al killed $al killed $eax597; AVX512F-NEXT:    vzeroupper598; AVX512F-NEXT:    retq599;600; AVX512VL-LABEL: shuf8i1_0_1_4_5_u_u_u_u:601; AVX512VL:       # %bb.0:602; AVX512VL-NEXT:    kmovw %edi, %k1603; AVX512VL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0604; AVX512VL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}605; AVX512VL-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]606; AVX512VL-NEXT:    vpslld $31, %ymm0, %ymm0607; AVX512VL-NEXT:    vptestmd %ymm0, %ymm0, %k0608; AVX512VL-NEXT:    kmovw %k0, %eax609; AVX512VL-NEXT:    # kill: def $al killed $al killed $eax610; AVX512VL-NEXT:    vzeroupper611; AVX512VL-NEXT:    retq612;613; VL_BW_DQ-LABEL: shuf8i1_0_1_4_5_u_u_u_u:614; VL_BW_DQ:       # %bb.0:615; VL_BW_DQ-NEXT:    kmovd %edi, %k0616; VL_BW_DQ-NEXT:    vpmovm2d %k0, %ymm0617; VL_BW_DQ-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]618; VL_BW_DQ-NEXT:    vpmovd2m %ymm0, %k0619; VL_BW_DQ-NEXT:    kmovd %k0, %eax620; VL_BW_DQ-NEXT:    # kill: def $al killed $al killed $eax621; VL_BW_DQ-NEXT:    vzeroupper622; VL_BW_DQ-NEXT:    retq623  %b = bitcast i8 %a to <8 x i1>624  %c = shufflevector < 8 x i1> %b, <8 x i1> undef, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 undef, i32 undef, i32 undef, i32 undef>625  %d = bitcast <8 x i1> %c to i8626  ret i8 %d627}628 629define i8 @shuf8i1_9_6_1_0_3_7_7_0(i8 %a) {630; AVX512F-LABEL: shuf8i1_9_6_1_0_3_7_7_0:631; AVX512F:       # %bb.0:632; AVX512F-NEXT:    kmovw %edi, %k1633; AVX512F-NEXT:    vpternlogq {{.*#+}} zmm0 {%k1} {z} = -1634; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1635; AVX512F-NEXT:    vpmovsxbq {{.*#+}} zmm2 = [8,6,1,0,3,7,7,0]636; AVX512F-NEXT:    vpermi2q %zmm1, %zmm0, %zmm2637; AVX512F-NEXT:    vptestmq %zmm2, %zmm2, %k0638; AVX512F-NEXT:    kmovw %k0, %eax639; AVX512F-NEXT:    # kill: def $al killed $al killed $eax640; AVX512F-NEXT:    vzeroupper641; AVX512F-NEXT:    retq642;643; AVX512VL-LABEL: shuf8i1_9_6_1_0_3_7_7_0:644; AVX512VL:       # %bb.0:645; AVX512VL-NEXT:    kmovw %edi, %k1646; AVX512VL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0647; AVX512VL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}648; AVX512VL-NEXT:    vpxor %xmm1, %xmm1, %xmm1649; AVX512VL-NEXT:    vpmovsxbd {{.*#+}} ymm2 = [8,6,1,0,3,7,7,0]650; AVX512VL-NEXT:    vpermi2d %ymm1, %ymm0, %ymm2651; AVX512VL-NEXT:    vptestmd %ymm2, %ymm2, %k0652; AVX512VL-NEXT:    kmovw %k0, %eax653; AVX512VL-NEXT:    # kill: def $al killed $al killed $eax654; AVX512VL-NEXT:    vzeroupper655; AVX512VL-NEXT:    retq656;657; VL_BW_DQ-LABEL: shuf8i1_9_6_1_0_3_7_7_0:658; VL_BW_DQ:       # %bb.0:659; VL_BW_DQ-NEXT:    kmovd %edi, %k0660; VL_BW_DQ-NEXT:    vpmovm2d %k0, %ymm0661; VL_BW_DQ-NEXT:    vpxor %xmm1, %xmm1, %xmm1662; VL_BW_DQ-NEXT:    vpmovsxbd {{.*#+}} ymm2 = [8,6,1,0,3,7,7,0]663; VL_BW_DQ-NEXT:    vpermi2d %ymm1, %ymm0, %ymm2664; VL_BW_DQ-NEXT:    vpmovd2m %ymm2, %k0665; VL_BW_DQ-NEXT:    kmovd %k0, %eax666; VL_BW_DQ-NEXT:    # kill: def $al killed $al killed $eax667; VL_BW_DQ-NEXT:    vzeroupper668; VL_BW_DQ-NEXT:    retq669  %b = bitcast i8 %a to <8 x i1>670  %c = shufflevector <8 x i1> %b, <8 x i1> zeroinitializer, <8 x i32> <i32 9, i32 6, i32 1, i32 0, i32 3, i32 7, i32 7, i32 0>671  %d = bitcast <8 x i1>%c to i8672  ret i8 %d673}674 675define i8 @shuf8i1_9_6_1_10_3_7_7_0(i8 %a) {676; AVX512F-LABEL: shuf8i1_9_6_1_10_3_7_7_0:677; AVX512F:       # %bb.0:678; AVX512F-NEXT:    kmovw %edi, %k1679; AVX512F-NEXT:    vpternlogq {{.*#+}} zmm0 {%k1} {z} = -1680; AVX512F-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [9,1,2,10,4,5,6,7]681; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2682; AVX512F-NEXT:    vpermt2q %zmm0, %zmm1, %zmm2683; AVX512F-NEXT:    vptestmq %zmm2, %zmm2, %k0684; AVX512F-NEXT:    kmovw %k0, %eax685; AVX512F-NEXT:    # kill: def $al killed $al killed $eax686; AVX512F-NEXT:    vzeroupper687; AVX512F-NEXT:    retq688;689; AVX512VL-LABEL: shuf8i1_9_6_1_10_3_7_7_0:690; AVX512VL:       # %bb.0:691; AVX512VL-NEXT:    kmovw %edi, %k1692; AVX512VL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0693; AVX512VL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}694; AVX512VL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[4,5,6,7],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[8,9,10,11],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero695; AVX512VL-NEXT:    vptestmd %ymm0, %ymm0, %k0696; AVX512VL-NEXT:    kmovw %k0, %eax697; AVX512VL-NEXT:    # kill: def $al killed $al killed $eax698; AVX512VL-NEXT:    vzeroupper699; AVX512VL-NEXT:    retq700;701; VL_BW_DQ-LABEL: shuf8i1_9_6_1_10_3_7_7_0:702; VL_BW_DQ:       # %bb.0:703; VL_BW_DQ-NEXT:    kmovd %edi, %k0704; VL_BW_DQ-NEXT:    vpmovm2d %k0, %ymm0705; VL_BW_DQ-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[4,5,6,7],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[8,9,10,11],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero706; VL_BW_DQ-NEXT:    vpmovd2m %ymm0, %k0707; VL_BW_DQ-NEXT:    kmovd %k0, %eax708; VL_BW_DQ-NEXT:    # kill: def $al killed $al killed $eax709; VL_BW_DQ-NEXT:    vzeroupper710; VL_BW_DQ-NEXT:    retq711  %b = bitcast i8 %a to <8 x i1>712  %c = shufflevector <8 x i1> zeroinitializer, <8 x i1> %b, <8 x i32> <i32 9, i32 6, i32 1, i32 10, i32 3, i32 7, i32 7, i32 0>713  %d = bitcast <8 x i1>%c to i8714  ret i8 %d715}716 717define i8 @shuf8i1__9_6_1_10_3_7_7_1(i8 %a) {718; AVX512F-LABEL: shuf8i1__9_6_1_10_3_7_7_1:719; AVX512F:       # %bb.0:720; AVX512F-NEXT:    kmovw %edi, %k1721; AVX512F-NEXT:    vpternlogq {{.*#+}} zmm0 {%k1} {z} = -1722; AVX512F-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [1,14,9,8,11,15,15,9]723; AVX512F-NEXT:    vpermi2q {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm1724; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k0725; AVX512F-NEXT:    kmovw %k0, %eax726; AVX512F-NEXT:    # kill: def $al killed $al killed $eax727; AVX512F-NEXT:    vzeroupper728; AVX512F-NEXT:    retq729;730; AVX512VL-LABEL: shuf8i1__9_6_1_10_3_7_7_1:731; AVX512VL:       # %bb.0:732; AVX512VL-NEXT:    kmovw %edi, %k1733; AVX512VL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0734; AVX512VL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}735; AVX512VL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]736; AVX512VL-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0],mem[1,2,3,4,5,6,7]737; AVX512VL-NEXT:    vptestmd %ymm0, %ymm0, %k0738; AVX512VL-NEXT:    kmovw %k0, %eax739; AVX512VL-NEXT:    # kill: def $al killed $al killed $eax740; AVX512VL-NEXT:    vzeroupper741; AVX512VL-NEXT:    retq742;743; VL_BW_DQ-LABEL: shuf8i1__9_6_1_10_3_7_7_1:744; VL_BW_DQ:       # %bb.0:745; VL_BW_DQ-NEXT:    kmovd %edi, %k0746; VL_BW_DQ-NEXT:    vpmovm2d %k0, %ymm0747; VL_BW_DQ-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]748; VL_BW_DQ-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0],mem[1,2,3,4,5,6,7]749; VL_BW_DQ-NEXT:    vpmovd2m %ymm0, %k0750; VL_BW_DQ-NEXT:    kmovd %k0, %eax751; VL_BW_DQ-NEXT:    # kill: def $al killed $al killed $eax752; VL_BW_DQ-NEXT:    vzeroupper753; VL_BW_DQ-NEXT:    retq754  %b = bitcast i8 %a to <8 x i1>755  %c = shufflevector <8 x i1> <i1 1, i1 1, i1 0, i1 0, i1 1, i1 1, i1 0, i1 0>, <8 x i1> %b, <8 x i32> <i32 9, i32 6, i32 1, i32 0, i32 3, i32 7, i32 7, i32 1>756  %c1 = bitcast <8 x i1>%c to i8757  ret i8 %c1758}759 760define i8 @shuf8i1_9_6_1_10_3_7_7_0_all_ones(<8 x i1> %a) {761; AVX512F-LABEL: shuf8i1_9_6_1_10_3_7_7_0_all_ones:762; AVX512F:       # %bb.0:763; AVX512F-NEXT:    vpmovsxwq %xmm0, %zmm0764; AVX512F-NEXT:    vpsllq $63, %zmm0, %zmm0765; AVX512F-NEXT:    vptestmq %zmm0, %zmm0, %k1766; AVX512F-NEXT:    vpternlogq {{.*#+}} zmm0 {%k1} {z} = -1767; AVX512F-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [9,1,2,3,4,5,6,7]768; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm2 = -1769; AVX512F-NEXT:    vpermt2q %zmm0, %zmm1, %zmm2770; AVX512F-NEXT:    vptestmq %zmm2, %zmm2, %k0771; AVX512F-NEXT:    kmovw %k0, %eax772; AVX512F-NEXT:    # kill: def $al killed $al killed $eax773; AVX512F-NEXT:    vzeroupper774; AVX512F-NEXT:    retq775;776; AVX512VL-LABEL: shuf8i1_9_6_1_10_3_7_7_0_all_ones:777; AVX512VL:       # %bb.0:778; AVX512VL-NEXT:    vpmovsxwd %xmm0, %ymm0779; AVX512VL-NEXT:    vpslld $31, %ymm0, %ymm0780; AVX512VL-NEXT:    vptestmd %ymm0, %ymm0, %k1781; AVX512VL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0782; AVX512VL-NEXT:    vmovdqa32 %ymm0, %ymm1 {%k1} {z}783; AVX512VL-NEXT:    vpmovsxbd {{.*#+}} ymm2 = [9,1,2,3,4,5,6,7]784; AVX512VL-NEXT:    vpermi2d %ymm1, %ymm0, %ymm2785; AVX512VL-NEXT:    vptestmd %ymm2, %ymm2, %k0786; AVX512VL-NEXT:    kmovw %k0, %eax787; AVX512VL-NEXT:    # kill: def $al killed $al killed $eax788; AVX512VL-NEXT:    vzeroupper789; AVX512VL-NEXT:    retq790;791; VL_BW_DQ-LABEL: shuf8i1_9_6_1_10_3_7_7_0_all_ones:792; VL_BW_DQ:       # %bb.0:793; VL_BW_DQ-NEXT:    vpsllw $15, %xmm0, %xmm0794; VL_BW_DQ-NEXT:    vpmovw2m %xmm0, %k0795; VL_BW_DQ-NEXT:    vpmovm2d %k0, %ymm0796; VL_BW_DQ-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [9,1,2,3,4,5,6,7]797; VL_BW_DQ-NEXT:    vpcmpeqd %ymm2, %ymm2, %ymm2798; VL_BW_DQ-NEXT:    vpermt2d %ymm0, %ymm1, %ymm2799; VL_BW_DQ-NEXT:    vpmovd2m %ymm2, %k0800; VL_BW_DQ-NEXT:    kmovd %k0, %eax801; VL_BW_DQ-NEXT:    # kill: def $al killed $al killed $eax802; VL_BW_DQ-NEXT:    vzeroupper803; VL_BW_DQ-NEXT:    retq804  %c = shufflevector <8 x i1> <i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1>, <8 x i1> %a, <8 x i32> <i32 9, i32 6, i32 1, i32 0, i32 3, i32 7, i32 7, i32 0>805  %c1 = bitcast <8 x i1>%c to i8806  ret i8 %c1807}808 809define i16 @shuf16i1_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0(i16 %a) {810; AVX512F-LABEL: shuf16i1_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0:811; AVX512F:       # %bb.0:812; AVX512F-NEXT:    kmovw %edi, %k1813; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1814; AVX512F-NEXT:    vpbroadcastd %xmm0, %zmm0815; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k0816; AVX512F-NEXT:    kmovw %k0, %eax817; AVX512F-NEXT:    # kill: def $ax killed $ax killed $eax818; AVX512F-NEXT:    vzeroupper819; AVX512F-NEXT:    retq820;821; AVX512VL-LABEL: shuf16i1_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0:822; AVX512VL:       # %bb.0:823; AVX512VL-NEXT:    kmovw %edi, %k1824; AVX512VL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1825; AVX512VL-NEXT:    vpbroadcastd %xmm0, %zmm0826; AVX512VL-NEXT:    vptestmd %zmm0, %zmm0, %k0827; AVX512VL-NEXT:    kmovw %k0, %eax828; AVX512VL-NEXT:    # kill: def $ax killed $ax killed $eax829; AVX512VL-NEXT:    vzeroupper830; AVX512VL-NEXT:    retq831;832; VL_BW_DQ-LABEL: shuf16i1_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0:833; VL_BW_DQ:       # %bb.0:834; VL_BW_DQ-NEXT:    kmovd %edi, %k0835; VL_BW_DQ-NEXT:    vpmovm2d %k0, %zmm0836; VL_BW_DQ-NEXT:    vpbroadcastd %xmm0, %zmm0837; VL_BW_DQ-NEXT:    vpmovd2m %zmm0, %k0838; VL_BW_DQ-NEXT:    kmovd %k0, %eax839; VL_BW_DQ-NEXT:    # kill: def $ax killed $ax killed $eax840; VL_BW_DQ-NEXT:    vzeroupper841; VL_BW_DQ-NEXT:    retq842  %b = bitcast i16 %a to <16 x i1>843  %c = shufflevector < 16 x i1> %b, <16 x i1> undef, <16 x i32> zeroinitializer844  %d = bitcast <16 x i1> %c to i16845  ret i16 %d846}847 848define i64 @shuf64i1_zero(i64 %a) {849; AVX512F-LABEL: shuf64i1_zero:850; AVX512F:       # %bb.0:851; AVX512F-NEXT:    kmovw %edi, %k1852; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1853; AVX512F-NEXT:    vpbroadcastd %xmm0, %zmm0854; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k0855; AVX512F-NEXT:    kmovw %k0, %eax856; AVX512F-NEXT:    kmovw %k0, %ecx857; AVX512F-NEXT:    shll $16, %ecx858; AVX512F-NEXT:    orl %eax, %ecx859; AVX512F-NEXT:    movq %rcx, %rax860; AVX512F-NEXT:    shlq $32, %rax861; AVX512F-NEXT:    orq %rcx, %rax862; AVX512F-NEXT:    vzeroupper863; AVX512F-NEXT:    retq864;865; AVX512VL-LABEL: shuf64i1_zero:866; AVX512VL:       # %bb.0:867; AVX512VL-NEXT:    kmovw %edi, %k1868; AVX512VL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1869; AVX512VL-NEXT:    vpbroadcastd %xmm0, %zmm0870; AVX512VL-NEXT:    vptestmd %zmm0, %zmm0, %k0871; AVX512VL-NEXT:    kmovw %k0, %eax872; AVX512VL-NEXT:    kmovw %k0, %ecx873; AVX512VL-NEXT:    shll $16, %ecx874; AVX512VL-NEXT:    orl %eax, %ecx875; AVX512VL-NEXT:    movq %rcx, %rax876; AVX512VL-NEXT:    shlq $32, %rax877; AVX512VL-NEXT:    orq %rcx, %rax878; AVX512VL-NEXT:    vzeroupper879; AVX512VL-NEXT:    retq880;881; VL_BW_DQ-LABEL: shuf64i1_zero:882; VL_BW_DQ:       # %bb.0:883; VL_BW_DQ-NEXT:    kmovq %rdi, %k0884; VL_BW_DQ-NEXT:    vpmovm2b %k0, %zmm0885; VL_BW_DQ-NEXT:    vpbroadcastb %xmm0, %zmm0886; VL_BW_DQ-NEXT:    vpmovb2m %zmm0, %k0887; VL_BW_DQ-NEXT:    kmovq %k0, %rax888; VL_BW_DQ-NEXT:    vzeroupper889; VL_BW_DQ-NEXT:    retq890  %b = bitcast i64 %a to <64 x i1>891  %c = shufflevector < 64 x i1> %b, <64 x i1> undef, <64 x i32> zeroinitializer892  %d = bitcast <64 x i1> %c to i64893  ret i64 %d894}895 896define <16 x i1> @PR52500(<16 x i1> %msk, i32 %in) {897; AVX512F-LABEL: PR52500:898; AVX512F:       # %bb.0:899; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0900; AVX512F-NEXT:    vpslld $31, %zmm0, %zmm0901; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k1902; AVX512F-NEXT:    vmovd %edi, %xmm0903; AVX512F-NEXT:    movl $789, %eax # imm = 0x315904; AVX512F-NEXT:    vmovd %eax, %xmm1905; AVX512F-NEXT:    vpmulld %xmm1, %xmm0, %xmm0906; AVX512F-NEXT:    vpbroadcastd %xmm0, %zmm0907; AVX512F-NEXT:    vptestnmd %zmm0, %zmm0, %k1 {%k1}908; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1909; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0910; AVX512F-NEXT:    vzeroupper911; AVX512F-NEXT:    retq912;913; AVX512VL-LABEL: PR52500:914; AVX512VL:       # %bb.0:915; AVX512VL-NEXT:    vpmovsxbd %xmm0, %zmm0916; AVX512VL-NEXT:    vpslld $31, %zmm0, %zmm0917; AVX512VL-NEXT:    vptestmd %zmm0, %zmm0, %k1918; AVX512VL-NEXT:    vmovd %edi, %xmm0919; AVX512VL-NEXT:    movl $789, %eax # imm = 0x315920; AVX512VL-NEXT:    vmovd %eax, %xmm1921; AVX512VL-NEXT:    vpmulld %xmm1, %xmm0, %xmm0922; AVX512VL-NEXT:    vpbroadcastd %xmm0, %zmm0923; AVX512VL-NEXT:    vptestnmd %zmm0, %zmm0, %k1 {%k1}924; AVX512VL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1925; AVX512VL-NEXT:    vpmovdb %zmm0, %xmm0926; AVX512VL-NEXT:    vzeroupper927; AVX512VL-NEXT:    retq928;929; VL_BW_DQ-LABEL: PR52500:930; VL_BW_DQ:       # %bb.0:931; VL_BW_DQ-NEXT:    vpsllw $7, %xmm0, %xmm0932; VL_BW_DQ-NEXT:    vpmovb2m %xmm0, %k1933; VL_BW_DQ-NEXT:    vmovd %edi, %xmm0934; VL_BW_DQ-NEXT:    movl $789, %eax # imm = 0x315935; VL_BW_DQ-NEXT:    vmovd %eax, %xmm1936; VL_BW_DQ-NEXT:    vpmulld %xmm1, %xmm0, %xmm0937; VL_BW_DQ-NEXT:    vpbroadcastd %xmm0, %zmm0938; VL_BW_DQ-NEXT:    vptestnmd %zmm0, %zmm0, %k0 {%k1}939; VL_BW_DQ-NEXT:    vpmovm2b %k0, %xmm0940; VL_BW_DQ-NEXT:    vzeroupper941; VL_BW_DQ-NEXT:    retq942  %insrt = insertelement <16 x i32> undef, i32 %in, i32 0943  %mul = mul <16 x i32> %insrt, <i32 789, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>944  %eq = icmp eq <16 x i32> %mul, zeroinitializer945  %cmp1 = shufflevector <16 x i1> %eq, <16 x i1> poison, <16 x i32> zeroinitializer946  %and = and <16 x i1> %cmp1, %msk947  ret <16 x i1> %and948}949