3060 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=ALL --check-prefix=KNL3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vl,+avx512dq,+avx512bw | FileCheck %s --check-prefix=ALL --check-prefix=AVX512DQ --check-prefix=SKX4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vl,+avx512dq | FileCheck %s --check-prefix=ALL --check-prefix=AVX512DQ --check-prefix=AVX512DQNOBW5 6define <8 x i16> @zext_8x8mem_to_8x16(ptr%i , <8 x i1> %mask) nounwind readnone {7; KNL-LABEL: zext_8x8mem_to_8x16:8; KNL: # %bb.0:9; KNL-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero10; KNL-NEXT: vpmovzxbw {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero11; KNL-NEXT: vpsllw $15, %xmm0, %xmm012; KNL-NEXT: vpsraw $15, %xmm0, %xmm013; KNL-NEXT: vpand %xmm1, %xmm0, %xmm014; KNL-NEXT: retq15;16; SKX-LABEL: zext_8x8mem_to_8x16:17; SKX: # %bb.0:18; SKX-NEXT: vpsllw $15, %xmm0, %xmm019; SKX-NEXT: vpmovw2m %xmm0, %k120; SKX-NEXT: vpmovzxbw {{.*#+}} xmm0 {%k1} {z} = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero21; SKX-NEXT: retq22;23; AVX512DQNOBW-LABEL: zext_8x8mem_to_8x16:24; AVX512DQNOBW: # %bb.0:25; AVX512DQNOBW-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero26; AVX512DQNOBW-NEXT: vpmovzxbw {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero27; AVX512DQNOBW-NEXT: vpsllw $15, %xmm0, %xmm028; AVX512DQNOBW-NEXT: vpsraw $15, %xmm0, %xmm029; AVX512DQNOBW-NEXT: vpand %xmm1, %xmm0, %xmm030; AVX512DQNOBW-NEXT: retq31 %a = load <8 x i8>,ptr%i,align 132 %x = zext <8 x i8> %a to <8 x i16>33 %ret = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> zeroinitializer34 ret <8 x i16> %ret35}36 37define <8 x i16> @sext_8x8mem_to_8x16(ptr%i , <8 x i1> %mask) nounwind readnone {38; KNL-LABEL: sext_8x8mem_to_8x16:39; KNL: # %bb.0:40; KNL-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero41; KNL-NEXT: vpmovsxbw %xmm1, %xmm142; KNL-NEXT: vpsllw $15, %xmm0, %xmm043; KNL-NEXT: vpsraw $15, %xmm0, %xmm044; KNL-NEXT: vpand %xmm1, %xmm0, %xmm045; KNL-NEXT: retq46;47; SKX-LABEL: sext_8x8mem_to_8x16:48; SKX: # %bb.0:49; SKX-NEXT: vpsllw $15, %xmm0, %xmm050; SKX-NEXT: vpmovw2m %xmm0, %k151; SKX-NEXT: vpmovsxbw (%rdi), %xmm0 {%k1} {z}52; SKX-NEXT: retq53;54; AVX512DQNOBW-LABEL: sext_8x8mem_to_8x16:55; AVX512DQNOBW: # %bb.0:56; AVX512DQNOBW-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero57; AVX512DQNOBW-NEXT: vpmovsxbw %xmm1, %xmm158; AVX512DQNOBW-NEXT: vpsllw $15, %xmm0, %xmm059; AVX512DQNOBW-NEXT: vpsraw $15, %xmm0, %xmm060; AVX512DQNOBW-NEXT: vpand %xmm1, %xmm0, %xmm061; AVX512DQNOBW-NEXT: retq62 %a = load <8 x i8>,ptr%i,align 163 %x = sext <8 x i8> %a to <8 x i16>64 %ret = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> zeroinitializer65 ret <8 x i16> %ret66}67 68 69define <16 x i16> @zext_16x8mem_to_16x16(ptr%i , <16 x i1> %mask) nounwind readnone {70; KNL-LABEL: zext_16x8mem_to_16x16:71; KNL: # %bb.0:72; KNL-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero73; KNL-NEXT: vpmovzxbw {{.*#+}} ymm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero,mem[8],zero,mem[9],zero,mem[10],zero,mem[11],zero,mem[12],zero,mem[13],zero,mem[14],zero,mem[15],zero74; KNL-NEXT: vpsllw $15, %ymm0, %ymm075; KNL-NEXT: vpsraw $15, %ymm0, %ymm076; KNL-NEXT: vpand %ymm1, %ymm0, %ymm077; KNL-NEXT: retq78;79; SKX-LABEL: zext_16x8mem_to_16x16:80; SKX: # %bb.0:81; SKX-NEXT: vpsllw $7, %xmm0, %xmm082; SKX-NEXT: vpmovb2m %xmm0, %k183; SKX-NEXT: vpmovzxbw {{.*#+}} ymm0 {%k1} {z} = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero,mem[8],zero,mem[9],zero,mem[10],zero,mem[11],zero,mem[12],zero,mem[13],zero,mem[14],zero,mem[15],zero84; SKX-NEXT: retq85;86; AVX512DQNOBW-LABEL: zext_16x8mem_to_16x16:87; AVX512DQNOBW: # %bb.0:88; AVX512DQNOBW-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero89; AVX512DQNOBW-NEXT: vpmovzxbw {{.*#+}} ymm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero,mem[8],zero,mem[9],zero,mem[10],zero,mem[11],zero,mem[12],zero,mem[13],zero,mem[14],zero,mem[15],zero90; AVX512DQNOBW-NEXT: vpsllw $15, %ymm0, %ymm091; AVX512DQNOBW-NEXT: vpsraw $15, %ymm0, %ymm092; AVX512DQNOBW-NEXT: vpand %ymm1, %ymm0, %ymm093; AVX512DQNOBW-NEXT: retq94 %a = load <16 x i8>,ptr%i,align 195 %x = zext <16 x i8> %a to <16 x i16>96 %ret = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> zeroinitializer97 ret <16 x i16> %ret98}99 100define <16 x i16> @sext_16x8mem_to_16x16(ptr%i , <16 x i1> %mask) nounwind readnone {101; KNL-LABEL: sext_16x8mem_to_16x16:102; KNL: # %bb.0:103; KNL-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero104; KNL-NEXT: vpmovsxbw (%rdi), %ymm1105; KNL-NEXT: vpsllw $15, %ymm0, %ymm0106; KNL-NEXT: vpsraw $15, %ymm0, %ymm0107; KNL-NEXT: vpand %ymm1, %ymm0, %ymm0108; KNL-NEXT: retq109;110; SKX-LABEL: sext_16x8mem_to_16x16:111; SKX: # %bb.0:112; SKX-NEXT: vpsllw $7, %xmm0, %xmm0113; SKX-NEXT: vpmovb2m %xmm0, %k1114; SKX-NEXT: vpmovsxbw (%rdi), %ymm0 {%k1} {z}115; SKX-NEXT: retq116;117; AVX512DQNOBW-LABEL: sext_16x8mem_to_16x16:118; AVX512DQNOBW: # %bb.0:119; AVX512DQNOBW-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero120; AVX512DQNOBW-NEXT: vpmovsxbw (%rdi), %ymm1121; AVX512DQNOBW-NEXT: vpsllw $15, %ymm0, %ymm0122; AVX512DQNOBW-NEXT: vpsraw $15, %ymm0, %ymm0123; AVX512DQNOBW-NEXT: vpand %ymm1, %ymm0, %ymm0124; AVX512DQNOBW-NEXT: retq125 %a = load <16 x i8>,ptr%i,align 1126 %x = sext <16 x i8> %a to <16 x i16>127 %ret = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> zeroinitializer128 ret <16 x i16> %ret129}130 131define <16 x i16> @zext_16x8_to_16x16(<16 x i8> %a ) nounwind readnone {132; ALL-LABEL: zext_16x8_to_16x16:133; ALL: # %bb.0:134; ALL-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero135; ALL-NEXT: retq136 %x = zext <16 x i8> %a to <16 x i16>137 ret <16 x i16> %x138}139 140define <16 x i16> @zext_16x8_to_16x16_mask(<16 x i8> %a ,<16 x i1> %mask) nounwind readnone {141; KNL-LABEL: zext_16x8_to_16x16_mask:142; KNL: # %bb.0:143; KNL-NEXT: vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero144; KNL-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero145; KNL-NEXT: vpsllw $15, %ymm1, %ymm1146; KNL-NEXT: vpsraw $15, %ymm1, %ymm1147; KNL-NEXT: vpand %ymm0, %ymm1, %ymm0148; KNL-NEXT: retq149;150; SKX-LABEL: zext_16x8_to_16x16_mask:151; SKX: # %bb.0:152; SKX-NEXT: vpsllw $7, %xmm1, %xmm1153; SKX-NEXT: vpmovb2m %xmm1, %k1154; SKX-NEXT: vpmovzxbw {{.*#+}} ymm0 {%k1} {z} = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero155; SKX-NEXT: retq156;157; AVX512DQNOBW-LABEL: zext_16x8_to_16x16_mask:158; AVX512DQNOBW: # %bb.0:159; AVX512DQNOBW-NEXT: vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero160; AVX512DQNOBW-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero161; AVX512DQNOBW-NEXT: vpsllw $15, %ymm1, %ymm1162; AVX512DQNOBW-NEXT: vpsraw $15, %ymm1, %ymm1163; AVX512DQNOBW-NEXT: vpand %ymm0, %ymm1, %ymm0164; AVX512DQNOBW-NEXT: retq165 %x = zext <16 x i8> %a to <16 x i16>166 %ret = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> zeroinitializer167 ret <16 x i16> %ret168}169 170define <16 x i16> @sext_16x8_to_16x16(<16 x i8> %a ) nounwind readnone {171; ALL-LABEL: sext_16x8_to_16x16:172; ALL: # %bb.0:173; ALL-NEXT: vpmovsxbw %xmm0, %ymm0174; ALL-NEXT: retq175 %x = sext <16 x i8> %a to <16 x i16>176 ret <16 x i16> %x177}178 179define <16 x i16> @sext_16x8_to_16x16_mask(<16 x i8> %a ,<16 x i1> %mask) nounwind readnone {180; KNL-LABEL: sext_16x8_to_16x16_mask:181; KNL: # %bb.0:182; KNL-NEXT: vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero183; KNL-NEXT: vpmovsxbw %xmm0, %ymm0184; KNL-NEXT: vpsllw $15, %ymm1, %ymm1185; KNL-NEXT: vpsraw $15, %ymm1, %ymm1186; KNL-NEXT: vpand %ymm0, %ymm1, %ymm0187; KNL-NEXT: retq188;189; SKX-LABEL: sext_16x8_to_16x16_mask:190; SKX: # %bb.0:191; SKX-NEXT: vpsllw $7, %xmm1, %xmm1192; SKX-NEXT: vpmovb2m %xmm1, %k1193; SKX-NEXT: vpmovsxbw %xmm0, %ymm0 {%k1} {z}194; SKX-NEXT: retq195;196; AVX512DQNOBW-LABEL: sext_16x8_to_16x16_mask:197; AVX512DQNOBW: # %bb.0:198; AVX512DQNOBW-NEXT: vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero199; AVX512DQNOBW-NEXT: vpmovsxbw %xmm0, %ymm0200; AVX512DQNOBW-NEXT: vpsllw $15, %ymm1, %ymm1201; AVX512DQNOBW-NEXT: vpsraw $15, %ymm1, %ymm1202; AVX512DQNOBW-NEXT: vpand %ymm0, %ymm1, %ymm0203; AVX512DQNOBW-NEXT: retq204 %x = sext <16 x i8> %a to <16 x i16>205 %ret = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> zeroinitializer206 ret <16 x i16> %ret207}208 209define <32 x i16> @zext_32x8mem_to_32x16(ptr%i , <32 x i1> %mask) nounwind readnone {210; KNL-LABEL: zext_32x8mem_to_32x16:211; KNL: # %bb.0:212; KNL-NEXT: vextracti128 $1, %ymm0, %xmm1213; KNL-NEXT: vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero214; KNL-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero215; KNL-NEXT: vmovdqu (%rdi), %ymm2216; KNL-NEXT: vpmovzxbw {{.*#+}} ymm3 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero,xmm2[8],zero,xmm2[9],zero,xmm2[10],zero,xmm2[11],zero,xmm2[12],zero,xmm2[13],zero,xmm2[14],zero,xmm2[15],zero217; KNL-NEXT: vextracti128 $1, %ymm2, %xmm2218; KNL-NEXT: vpmovzxbw {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero,xmm2[8],zero,xmm2[9],zero,xmm2[10],zero,xmm2[11],zero,xmm2[12],zero,xmm2[13],zero,xmm2[14],zero,xmm2[15],zero219; KNL-NEXT: vinserti64x4 $1, %ymm2, %zmm3, %zmm2220; KNL-NEXT: vpsllw $15, %ymm0, %ymm0221; KNL-NEXT: vpsraw $15, %ymm0, %ymm0222; KNL-NEXT: vpsllw $15, %ymm1, %ymm1223; KNL-NEXT: vpsraw $15, %ymm1, %ymm1224; KNL-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0225; KNL-NEXT: vpandq %zmm2, %zmm0, %zmm0226; KNL-NEXT: retq227;228; SKX-LABEL: zext_32x8mem_to_32x16:229; SKX: # %bb.0:230; SKX-NEXT: vpsllw $7, %ymm0, %ymm0231; SKX-NEXT: vpmovb2m %ymm0, %k1232; SKX-NEXT: vpmovzxbw {{.*#+}} zmm0 {%k1} {z} = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero,mem[8],zero,mem[9],zero,mem[10],zero,mem[11],zero,mem[12],zero,mem[13],zero,mem[14],zero,mem[15],zero,mem[16],zero,mem[17],zero,mem[18],zero,mem[19],zero,mem[20],zero,mem[21],zero,mem[22],zero,mem[23],zero,mem[24],zero,mem[25],zero,mem[26],zero,mem[27],zero,mem[28],zero,mem[29],zero,mem[30],zero,mem[31],zero233; SKX-NEXT: retq234;235; AVX512DQNOBW-LABEL: zext_32x8mem_to_32x16:236; AVX512DQNOBW: # %bb.0:237; AVX512DQNOBW-NEXT: vextracti128 $1, %ymm0, %xmm1238; AVX512DQNOBW-NEXT: vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero239; AVX512DQNOBW-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero240; AVX512DQNOBW-NEXT: vmovdqu (%rdi), %ymm2241; AVX512DQNOBW-NEXT: vpmovzxbw {{.*#+}} ymm3 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero,xmm2[8],zero,xmm2[9],zero,xmm2[10],zero,xmm2[11],zero,xmm2[12],zero,xmm2[13],zero,xmm2[14],zero,xmm2[15],zero242; AVX512DQNOBW-NEXT: vextracti128 $1, %ymm2, %xmm2243; AVX512DQNOBW-NEXT: vpmovzxbw {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero,xmm2[8],zero,xmm2[9],zero,xmm2[10],zero,xmm2[11],zero,xmm2[12],zero,xmm2[13],zero,xmm2[14],zero,xmm2[15],zero244; AVX512DQNOBW-NEXT: vinserti64x4 $1, %ymm2, %zmm3, %zmm2245; AVX512DQNOBW-NEXT: vpsllw $15, %ymm0, %ymm0246; AVX512DQNOBW-NEXT: vpsraw $15, %ymm0, %ymm0247; AVX512DQNOBW-NEXT: vpsllw $15, %ymm1, %ymm1248; AVX512DQNOBW-NEXT: vpsraw $15, %ymm1, %ymm1249; AVX512DQNOBW-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0250; AVX512DQNOBW-NEXT: vpandq %zmm2, %zmm0, %zmm0251; AVX512DQNOBW-NEXT: retq252 %a = load <32 x i8>,ptr%i,align 1253 %x = zext <32 x i8> %a to <32 x i16>254 %ret = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> zeroinitializer255 ret <32 x i16> %ret256}257 258define <32 x i16> @sext_32x8mem_to_32x16(ptr%i , <32 x i1> %mask) nounwind readnone {259; KNL-LABEL: sext_32x8mem_to_32x16:260; KNL: # %bb.0:261; KNL-NEXT: vextracti128 $1, %ymm0, %xmm1262; KNL-NEXT: vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero263; KNL-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero264; KNL-NEXT: vmovdqu (%rdi), %ymm2265; KNL-NEXT: vpmovsxbw %xmm2, %ymm3266; KNL-NEXT: vextracti128 $1, %ymm2, %xmm2267; KNL-NEXT: vpmovsxbw %xmm2, %ymm2268; KNL-NEXT: vinserti64x4 $1, %ymm2, %zmm3, %zmm2269; KNL-NEXT: vpsllw $15, %ymm0, %ymm0270; KNL-NEXT: vpsraw $15, %ymm0, %ymm0271; KNL-NEXT: vpsllw $15, %ymm1, %ymm1272; KNL-NEXT: vpsraw $15, %ymm1, %ymm1273; KNL-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0274; KNL-NEXT: vpandq %zmm2, %zmm0, %zmm0275; KNL-NEXT: retq276;277; SKX-LABEL: sext_32x8mem_to_32x16:278; SKX: # %bb.0:279; SKX-NEXT: vpsllw $7, %ymm0, %ymm0280; SKX-NEXT: vpmovb2m %ymm0, %k1281; SKX-NEXT: vpmovsxbw (%rdi), %zmm0 {%k1} {z}282; SKX-NEXT: retq283;284; AVX512DQNOBW-LABEL: sext_32x8mem_to_32x16:285; AVX512DQNOBW: # %bb.0:286; AVX512DQNOBW-NEXT: vextracti128 $1, %ymm0, %xmm1287; AVX512DQNOBW-NEXT: vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero288; AVX512DQNOBW-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero289; AVX512DQNOBW-NEXT: vmovdqu (%rdi), %ymm2290; AVX512DQNOBW-NEXT: vpmovsxbw %xmm2, %ymm3291; AVX512DQNOBW-NEXT: vextracti128 $1, %ymm2, %xmm2292; AVX512DQNOBW-NEXT: vpmovsxbw %xmm2, %ymm2293; AVX512DQNOBW-NEXT: vinserti64x4 $1, %ymm2, %zmm3, %zmm2294; AVX512DQNOBW-NEXT: vpsllw $15, %ymm0, %ymm0295; AVX512DQNOBW-NEXT: vpsraw $15, %ymm0, %ymm0296; AVX512DQNOBW-NEXT: vpsllw $15, %ymm1, %ymm1297; AVX512DQNOBW-NEXT: vpsraw $15, %ymm1, %ymm1298; AVX512DQNOBW-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0299; AVX512DQNOBW-NEXT: vpandq %zmm2, %zmm0, %zmm0300; AVX512DQNOBW-NEXT: retq301 %a = load <32 x i8>,ptr%i,align 1302 %x = sext <32 x i8> %a to <32 x i16>303 %ret = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> zeroinitializer304 ret <32 x i16> %ret305}306 307define <32 x i16> @zext_32x8_to_32x16(<32 x i8> %a ) nounwind readnone {308; KNL-LABEL: zext_32x8_to_32x16:309; KNL: # %bb.0:310; KNL-NEXT: vpmovzxbw {{.*#+}} ymm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero311; KNL-NEXT: vextracti128 $1, %ymm0, %xmm0312; KNL-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero313; KNL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0314; KNL-NEXT: retq315;316; SKX-LABEL: zext_32x8_to_32x16:317; SKX: # %bb.0:318; SKX-NEXT: vpmovzxbw {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero,ymm0[16],zero,ymm0[17],zero,ymm0[18],zero,ymm0[19],zero,ymm0[20],zero,ymm0[21],zero,ymm0[22],zero,ymm0[23],zero,ymm0[24],zero,ymm0[25],zero,ymm0[26],zero,ymm0[27],zero,ymm0[28],zero,ymm0[29],zero,ymm0[30],zero,ymm0[31],zero319; SKX-NEXT: retq320;321; AVX512DQNOBW-LABEL: zext_32x8_to_32x16:322; AVX512DQNOBW: # %bb.0:323; AVX512DQNOBW-NEXT: vpmovzxbw {{.*#+}} ymm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero324; AVX512DQNOBW-NEXT: vextracti128 $1, %ymm0, %xmm0325; AVX512DQNOBW-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero326; AVX512DQNOBW-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0327; AVX512DQNOBW-NEXT: retq328 %x = zext <32 x i8> %a to <32 x i16>329 ret <32 x i16> %x330}331 332define <32 x i16> @zext_32x8_to_32x16_mask(<32 x i8> %a ,<32 x i1> %mask) nounwind readnone {333; KNL-LABEL: zext_32x8_to_32x16_mask:334; KNL: # %bb.0:335; KNL-NEXT: vextracti128 $1, %ymm1, %xmm2336; KNL-NEXT: vpmovzxbw {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero,xmm2[8],zero,xmm2[9],zero,xmm2[10],zero,xmm2[11],zero,xmm2[12],zero,xmm2[13],zero,xmm2[14],zero,xmm2[15],zero337; KNL-NEXT: vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero338; KNL-NEXT: vpmovzxbw {{.*#+}} ymm3 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero339; KNL-NEXT: vextracti128 $1, %ymm0, %xmm0340; KNL-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero341; KNL-NEXT: vinserti64x4 $1, %ymm0, %zmm3, %zmm0342; KNL-NEXT: vpsllw $15, %ymm1, %ymm1343; KNL-NEXT: vpsraw $15, %ymm1, %ymm1344; KNL-NEXT: vpsllw $15, %ymm2, %ymm2345; KNL-NEXT: vpsraw $15, %ymm2, %ymm2346; KNL-NEXT: vinserti64x4 $1, %ymm2, %zmm1, %zmm1347; KNL-NEXT: vpandq %zmm0, %zmm1, %zmm0348; KNL-NEXT: retq349;350; SKX-LABEL: zext_32x8_to_32x16_mask:351; SKX: # %bb.0:352; SKX-NEXT: vpsllw $7, %ymm1, %ymm1353; SKX-NEXT: vpmovb2m %ymm1, %k1354; SKX-NEXT: vpmovzxbw {{.*#+}} zmm0 {%k1} {z} = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero,ymm0[16],zero,ymm0[17],zero,ymm0[18],zero,ymm0[19],zero,ymm0[20],zero,ymm0[21],zero,ymm0[22],zero,ymm0[23],zero,ymm0[24],zero,ymm0[25],zero,ymm0[26],zero,ymm0[27],zero,ymm0[28],zero,ymm0[29],zero,ymm0[30],zero,ymm0[31],zero355; SKX-NEXT: retq356;357; AVX512DQNOBW-LABEL: zext_32x8_to_32x16_mask:358; AVX512DQNOBW: # %bb.0:359; AVX512DQNOBW-NEXT: vextracti128 $1, %ymm1, %xmm2360; AVX512DQNOBW-NEXT: vpmovzxbw {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero,xmm2[8],zero,xmm2[9],zero,xmm2[10],zero,xmm2[11],zero,xmm2[12],zero,xmm2[13],zero,xmm2[14],zero,xmm2[15],zero361; AVX512DQNOBW-NEXT: vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero362; AVX512DQNOBW-NEXT: vpmovzxbw {{.*#+}} ymm3 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero363; AVX512DQNOBW-NEXT: vextracti128 $1, %ymm0, %xmm0364; AVX512DQNOBW-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero365; AVX512DQNOBW-NEXT: vinserti64x4 $1, %ymm0, %zmm3, %zmm0366; AVX512DQNOBW-NEXT: vpsllw $15, %ymm1, %ymm1367; AVX512DQNOBW-NEXT: vpsraw $15, %ymm1, %ymm1368; AVX512DQNOBW-NEXT: vpsllw $15, %ymm2, %ymm2369; AVX512DQNOBW-NEXT: vpsraw $15, %ymm2, %ymm2370; AVX512DQNOBW-NEXT: vinserti64x4 $1, %ymm2, %zmm1, %zmm1371; AVX512DQNOBW-NEXT: vpandq %zmm0, %zmm1, %zmm0372; AVX512DQNOBW-NEXT: retq373 %x = zext <32 x i8> %a to <32 x i16>374 %ret = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> zeroinitializer375 ret <32 x i16> %ret376}377 378define <32 x i16> @sext_32x8_to_32x16(<32 x i8> %a ) nounwind readnone {379; KNL-LABEL: sext_32x8_to_32x16:380; KNL: # %bb.0:381; KNL-NEXT: vpmovsxbw %xmm0, %ymm1382; KNL-NEXT: vextracti128 $1, %ymm0, %xmm0383; KNL-NEXT: vpmovsxbw %xmm0, %ymm0384; KNL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0385; KNL-NEXT: retq386;387; SKX-LABEL: sext_32x8_to_32x16:388; SKX: # %bb.0:389; SKX-NEXT: vpmovsxbw %ymm0, %zmm0390; SKX-NEXT: retq391;392; AVX512DQNOBW-LABEL: sext_32x8_to_32x16:393; AVX512DQNOBW: # %bb.0:394; AVX512DQNOBW-NEXT: vpmovsxbw %xmm0, %ymm1395; AVX512DQNOBW-NEXT: vextracti128 $1, %ymm0, %xmm0396; AVX512DQNOBW-NEXT: vpmovsxbw %xmm0, %ymm0397; AVX512DQNOBW-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0398; AVX512DQNOBW-NEXT: retq399 %x = sext <32 x i8> %a to <32 x i16>400 ret <32 x i16> %x401}402 403define <32 x i16> @sext_32x8_to_32x16_mask(<32 x i8> %a ,<32 x i1> %mask) nounwind readnone {404; KNL-LABEL: sext_32x8_to_32x16_mask:405; KNL: # %bb.0:406; KNL-NEXT: vextracti128 $1, %ymm1, %xmm2407; KNL-NEXT: vpmovzxbw {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero,xmm2[8],zero,xmm2[9],zero,xmm2[10],zero,xmm2[11],zero,xmm2[12],zero,xmm2[13],zero,xmm2[14],zero,xmm2[15],zero408; KNL-NEXT: vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero409; KNL-NEXT: vpmovsxbw %xmm0, %ymm3410; KNL-NEXT: vextracti128 $1, %ymm0, %xmm0411; KNL-NEXT: vpmovsxbw %xmm0, %ymm0412; KNL-NEXT: vinserti64x4 $1, %ymm0, %zmm3, %zmm0413; KNL-NEXT: vpsllw $15, %ymm1, %ymm1414; KNL-NEXT: vpsraw $15, %ymm1, %ymm1415; KNL-NEXT: vpsllw $15, %ymm2, %ymm2416; KNL-NEXT: vpsraw $15, %ymm2, %ymm2417; KNL-NEXT: vinserti64x4 $1, %ymm2, %zmm1, %zmm1418; KNL-NEXT: vpandq %zmm0, %zmm1, %zmm0419; KNL-NEXT: retq420;421; SKX-LABEL: sext_32x8_to_32x16_mask:422; SKX: # %bb.0:423; SKX-NEXT: vpsllw $7, %ymm1, %ymm1424; SKX-NEXT: vpmovb2m %ymm1, %k1425; SKX-NEXT: vpmovsxbw %ymm0, %zmm0 {%k1} {z}426; SKX-NEXT: retq427;428; AVX512DQNOBW-LABEL: sext_32x8_to_32x16_mask:429; AVX512DQNOBW: # %bb.0:430; AVX512DQNOBW-NEXT: vextracti128 $1, %ymm1, %xmm2431; AVX512DQNOBW-NEXT: vpmovzxbw {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero,xmm2[8],zero,xmm2[9],zero,xmm2[10],zero,xmm2[11],zero,xmm2[12],zero,xmm2[13],zero,xmm2[14],zero,xmm2[15],zero432; AVX512DQNOBW-NEXT: vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero433; AVX512DQNOBW-NEXT: vpmovsxbw %xmm0, %ymm3434; AVX512DQNOBW-NEXT: vextracti128 $1, %ymm0, %xmm0435; AVX512DQNOBW-NEXT: vpmovsxbw %xmm0, %ymm0436; AVX512DQNOBW-NEXT: vinserti64x4 $1, %ymm0, %zmm3, %zmm0437; AVX512DQNOBW-NEXT: vpsllw $15, %ymm1, %ymm1438; AVX512DQNOBW-NEXT: vpsraw $15, %ymm1, %ymm1439; AVX512DQNOBW-NEXT: vpsllw $15, %ymm2, %ymm2440; AVX512DQNOBW-NEXT: vpsraw $15, %ymm2, %ymm2441; AVX512DQNOBW-NEXT: vinserti64x4 $1, %ymm2, %zmm1, %zmm1442; AVX512DQNOBW-NEXT: vpandq %zmm0, %zmm1, %zmm0443; AVX512DQNOBW-NEXT: retq444 %x = sext <32 x i8> %a to <32 x i16>445 %ret = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> zeroinitializer446 ret <32 x i16> %ret447}448 449define <4 x i32> @zext_4x8mem_to_4x32(ptr%i , <4 x i1> %mask) nounwind readnone {450; KNL-LABEL: zext_4x8mem_to_4x32:451; KNL: # %bb.0:452; KNL-NEXT: vpslld $31, %xmm0, %xmm0453; KNL-NEXT: vptestmd %zmm0, %zmm0, %k1454; KNL-NEXT: vpmovzxbd {{.*#+}} xmm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero455; KNL-NEXT: vmovdqa32 %zmm0, %zmm0 {%k1} {z}456; KNL-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0457; KNL-NEXT: vzeroupper458; KNL-NEXT: retq459;460; AVX512DQ-LABEL: zext_4x8mem_to_4x32:461; AVX512DQ: # %bb.0:462; AVX512DQ-NEXT: vpslld $31, %xmm0, %xmm0463; AVX512DQ-NEXT: vpmovd2m %xmm0, %k1464; AVX512DQ-NEXT: vpmovzxbd {{.*#+}} xmm0 {%k1} {z} = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero465; AVX512DQ-NEXT: retq466 %a = load <4 x i8>,ptr%i,align 1467 %x = zext <4 x i8> %a to <4 x i32>468 %ret = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> zeroinitializer469 ret <4 x i32> %ret470}471 472define <4 x i32> @sext_4x8mem_to_4x32(ptr%i , <4 x i1> %mask) nounwind readnone {473; KNL-LABEL: sext_4x8mem_to_4x32:474; KNL: # %bb.0:475; KNL-NEXT: vpslld $31, %xmm0, %xmm0476; KNL-NEXT: vptestmd %zmm0, %zmm0, %k1477; KNL-NEXT: vpmovsxbd (%rdi), %xmm0478; KNL-NEXT: vmovdqa32 %zmm0, %zmm0 {%k1} {z}479; KNL-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0480; KNL-NEXT: vzeroupper481; KNL-NEXT: retq482;483; AVX512DQ-LABEL: sext_4x8mem_to_4x32:484; AVX512DQ: # %bb.0:485; AVX512DQ-NEXT: vpslld $31, %xmm0, %xmm0486; AVX512DQ-NEXT: vpmovd2m %xmm0, %k1487; AVX512DQ-NEXT: vpmovsxbd (%rdi), %xmm0 {%k1} {z}488; AVX512DQ-NEXT: retq489 %a = load <4 x i8>,ptr%i,align 1490 %x = sext <4 x i8> %a to <4 x i32>491 %ret = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> zeroinitializer492 ret <4 x i32> %ret493}494 495define <8 x i32> @zext_8x8mem_to_8x32(ptr%i , <8 x i1> %mask) nounwind readnone {496; KNL-LABEL: zext_8x8mem_to_8x32:497; KNL: # %bb.0:498; KNL-NEXT: vpmovsxwq %xmm0, %zmm0499; KNL-NEXT: vpsllq $63, %zmm0, %zmm0500; KNL-NEXT: vptestmq %zmm0, %zmm0, %k1501; KNL-NEXT: vpmovzxbd {{.*#+}} ymm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero502; KNL-NEXT: vmovdqa32 %zmm0, %zmm0 {%k1} {z}503; KNL-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0504; KNL-NEXT: retq505;506; SKX-LABEL: zext_8x8mem_to_8x32:507; SKX: # %bb.0:508; SKX-NEXT: vpsllw $15, %xmm0, %xmm0509; SKX-NEXT: vpmovw2m %xmm0, %k1510; SKX-NEXT: vpmovzxbd {{.*#+}} ymm0 {%k1} {z} = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero511; SKX-NEXT: retq512;513; AVX512DQNOBW-LABEL: zext_8x8mem_to_8x32:514; AVX512DQNOBW: # %bb.0:515; AVX512DQNOBW-NEXT: vpmovsxwd %xmm0, %ymm0516; AVX512DQNOBW-NEXT: vpslld $31, %ymm0, %ymm0517; AVX512DQNOBW-NEXT: vpmovd2m %ymm0, %k1518; AVX512DQNOBW-NEXT: vpmovzxbd {{.*#+}} ymm0 {%k1} {z} = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero519; AVX512DQNOBW-NEXT: retq520 %a = load <8 x i8>,ptr%i,align 1521 %x = zext <8 x i8> %a to <8 x i32>522 %ret = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> zeroinitializer523 ret <8 x i32> %ret524}525 526define <8 x i32> @sext_8x8mem_to_8x32(ptr%i , <8 x i1> %mask) nounwind readnone {527; KNL-LABEL: sext_8x8mem_to_8x32:528; KNL: # %bb.0:529; KNL-NEXT: vpmovsxwq %xmm0, %zmm0530; KNL-NEXT: vpsllq $63, %zmm0, %zmm0531; KNL-NEXT: vptestmq %zmm0, %zmm0, %k1532; KNL-NEXT: vpmovsxbd (%rdi), %ymm0533; KNL-NEXT: vmovdqa32 %zmm0, %zmm0 {%k1} {z}534; KNL-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0535; KNL-NEXT: retq536;537; SKX-LABEL: sext_8x8mem_to_8x32:538; SKX: # %bb.0:539; SKX-NEXT: vpsllw $15, %xmm0, %xmm0540; SKX-NEXT: vpmovw2m %xmm0, %k1541; SKX-NEXT: vpmovsxbd (%rdi), %ymm0 {%k1} {z}542; SKX-NEXT: retq543;544; AVX512DQNOBW-LABEL: sext_8x8mem_to_8x32:545; AVX512DQNOBW: # %bb.0:546; AVX512DQNOBW-NEXT: vpmovsxwd %xmm0, %ymm0547; AVX512DQNOBW-NEXT: vpslld $31, %ymm0, %ymm0548; AVX512DQNOBW-NEXT: vpmovd2m %ymm0, %k1549; AVX512DQNOBW-NEXT: vpmovsxbd (%rdi), %ymm0 {%k1} {z}550; AVX512DQNOBW-NEXT: retq551 %a = load <8 x i8>,ptr%i,align 1552 %x = sext <8 x i8> %a to <8 x i32>553 %ret = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> zeroinitializer554 ret <8 x i32> %ret555}556 557define <16 x i32> @zext_16x8mem_to_16x32(ptr%i , <16 x i1> %mask) nounwind readnone {558; KNL-LABEL: zext_16x8mem_to_16x32:559; KNL: # %bb.0:560; KNL-NEXT: vpmovsxbd %xmm0, %zmm0561; KNL-NEXT: vpslld $31, %zmm0, %zmm0562; KNL-NEXT: vptestmd %zmm0, %zmm0, %k1563; KNL-NEXT: vpmovzxbd {{.*#+}} zmm0 {%k1} {z} = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero,mem[8],zero,zero,zero,mem[9],zero,zero,zero,mem[10],zero,zero,zero,mem[11],zero,zero,zero,mem[12],zero,zero,zero,mem[13],zero,zero,zero,mem[14],zero,zero,zero,mem[15],zero,zero,zero564; KNL-NEXT: retq565;566; SKX-LABEL: zext_16x8mem_to_16x32:567; SKX: # %bb.0:568; SKX-NEXT: vpsllw $7, %xmm0, %xmm0569; SKX-NEXT: vpmovb2m %xmm0, %k1570; SKX-NEXT: vpmovzxbd {{.*#+}} zmm0 {%k1} {z} = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero,mem[8],zero,zero,zero,mem[9],zero,zero,zero,mem[10],zero,zero,zero,mem[11],zero,zero,zero,mem[12],zero,zero,zero,mem[13],zero,zero,zero,mem[14],zero,zero,zero,mem[15],zero,zero,zero571; SKX-NEXT: retq572;573; AVX512DQNOBW-LABEL: zext_16x8mem_to_16x32:574; AVX512DQNOBW: # %bb.0:575; AVX512DQNOBW-NEXT: vpmovsxbd %xmm0, %zmm0576; AVX512DQNOBW-NEXT: vpslld $31, %zmm0, %zmm0577; AVX512DQNOBW-NEXT: vpmovd2m %zmm0, %k1578; AVX512DQNOBW-NEXT: vpmovzxbd {{.*#+}} zmm0 {%k1} {z} = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero,mem[8],zero,zero,zero,mem[9],zero,zero,zero,mem[10],zero,zero,zero,mem[11],zero,zero,zero,mem[12],zero,zero,zero,mem[13],zero,zero,zero,mem[14],zero,zero,zero,mem[15],zero,zero,zero579; AVX512DQNOBW-NEXT: retq580 %a = load <16 x i8>,ptr%i,align 1581 %x = zext <16 x i8> %a to <16 x i32>582 %ret = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> zeroinitializer583 ret <16 x i32> %ret584}585 586define <16 x i32> @sext_16x8mem_to_16x32(ptr%i , <16 x i1> %mask) nounwind readnone {587; KNL-LABEL: sext_16x8mem_to_16x32:588; KNL: # %bb.0:589; KNL-NEXT: vpmovsxbd %xmm0, %zmm0590; KNL-NEXT: vpslld $31, %zmm0, %zmm0591; KNL-NEXT: vptestmd %zmm0, %zmm0, %k1592; KNL-NEXT: vpmovsxbd (%rdi), %zmm0 {%k1} {z}593; KNL-NEXT: retq594;595; SKX-LABEL: sext_16x8mem_to_16x32:596; SKX: # %bb.0:597; SKX-NEXT: vpsllw $7, %xmm0, %xmm0598; SKX-NEXT: vpmovb2m %xmm0, %k1599; SKX-NEXT: vpmovsxbd (%rdi), %zmm0 {%k1} {z}600; SKX-NEXT: retq601;602; AVX512DQNOBW-LABEL: sext_16x8mem_to_16x32:603; AVX512DQNOBW: # %bb.0:604; AVX512DQNOBW-NEXT: vpmovsxbd %xmm0, %zmm0605; AVX512DQNOBW-NEXT: vpslld $31, %zmm0, %zmm0606; AVX512DQNOBW-NEXT: vpmovd2m %zmm0, %k1607; AVX512DQNOBW-NEXT: vpmovsxbd (%rdi), %zmm0 {%k1} {z}608; AVX512DQNOBW-NEXT: retq609 %a = load <16 x i8>,ptr%i,align 1610 %x = sext <16 x i8> %a to <16 x i32>611 %ret = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> zeroinitializer612 ret <16 x i32> %ret613}614 615define <16 x i32> @zext_16x8_to_16x32_mask(<16 x i8> %a , <16 x i1> %mask) nounwind readnone {616; KNL-LABEL: zext_16x8_to_16x32_mask:617; KNL: # %bb.0:618; KNL-NEXT: vpmovsxbd %xmm1, %zmm1619; KNL-NEXT: vpslld $31, %zmm1, %zmm1620; KNL-NEXT: vptestmd %zmm1, %zmm1, %k1621; KNL-NEXT: vpmovzxbd {{.*#+}} zmm0 {%k1} {z} = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero622; KNL-NEXT: retq623;624; SKX-LABEL: zext_16x8_to_16x32_mask:625; SKX: # %bb.0:626; SKX-NEXT: vpsllw $7, %xmm1, %xmm1627; SKX-NEXT: vpmovb2m %xmm1, %k1628; SKX-NEXT: vpmovzxbd {{.*#+}} zmm0 {%k1} {z} = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero629; SKX-NEXT: retq630;631; AVX512DQNOBW-LABEL: zext_16x8_to_16x32_mask:632; AVX512DQNOBW: # %bb.0:633; AVX512DQNOBW-NEXT: vpmovsxbd %xmm1, %zmm1634; AVX512DQNOBW-NEXT: vpslld $31, %zmm1, %zmm1635; AVX512DQNOBW-NEXT: vpmovd2m %zmm1, %k1636; AVX512DQNOBW-NEXT: vpmovzxbd {{.*#+}} zmm0 {%k1} {z} = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero637; AVX512DQNOBW-NEXT: retq638 %x = zext <16 x i8> %a to <16 x i32>639 %ret = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> zeroinitializer640 ret <16 x i32> %ret641}642 643define <16 x i32> @sext_16x8_to_16x32_mask(<16 x i8> %a , <16 x i1> %mask) nounwind readnone {644; KNL-LABEL: sext_16x8_to_16x32_mask:645; KNL: # %bb.0:646; KNL-NEXT: vpmovsxbd %xmm1, %zmm1647; KNL-NEXT: vpslld $31, %zmm1, %zmm1648; KNL-NEXT: vptestmd %zmm1, %zmm1, %k1649; KNL-NEXT: vpmovsxbd %xmm0, %zmm0 {%k1} {z}650; KNL-NEXT: retq651;652; SKX-LABEL: sext_16x8_to_16x32_mask:653; SKX: # %bb.0:654; SKX-NEXT: vpsllw $7, %xmm1, %xmm1655; SKX-NEXT: vpmovb2m %xmm1, %k1656; SKX-NEXT: vpmovsxbd %xmm0, %zmm0 {%k1} {z}657; SKX-NEXT: retq658;659; AVX512DQNOBW-LABEL: sext_16x8_to_16x32_mask:660; AVX512DQNOBW: # %bb.0:661; AVX512DQNOBW-NEXT: vpmovsxbd %xmm1, %zmm1662; AVX512DQNOBW-NEXT: vpslld $31, %zmm1, %zmm1663; AVX512DQNOBW-NEXT: vpmovd2m %zmm1, %k1664; AVX512DQNOBW-NEXT: vpmovsxbd %xmm0, %zmm0 {%k1} {z}665; AVX512DQNOBW-NEXT: retq666 %x = sext <16 x i8> %a to <16 x i32>667 %ret = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> zeroinitializer668 ret <16 x i32> %ret669}670 671define <16 x i32> @zext_16x8_to_16x32(<16 x i8> %i) nounwind readnone {672; ALL-LABEL: zext_16x8_to_16x32:673; ALL: # %bb.0:674; ALL-NEXT: vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero675; ALL-NEXT: retq676 %x = zext <16 x i8> %i to <16 x i32>677 ret <16 x i32> %x678}679 680define <16 x i32> @sext_16x8_to_16x32(<16 x i8> %i) nounwind readnone {681; ALL-LABEL: sext_16x8_to_16x32:682; ALL: # %bb.0:683; ALL-NEXT: vpmovsxbd %xmm0, %zmm0684; ALL-NEXT: retq685 %x = sext <16 x i8> %i to <16 x i32>686 ret <16 x i32> %x687}688 689define <2 x i64> @zext_2x8mem_to_2x64(ptr%i , <2 x i1> %mask) nounwind readnone {690; KNL-LABEL: zext_2x8mem_to_2x64:691; KNL: # %bb.0:692; KNL-NEXT: vpsllq $63, %xmm0, %xmm0693; KNL-NEXT: vptestmq %zmm0, %zmm0, %k1694; KNL-NEXT: vpmovzxbq {{.*#+}} xmm0 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero695; KNL-NEXT: vmovdqa64 %zmm0, %zmm0 {%k1} {z}696; KNL-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0697; KNL-NEXT: vzeroupper698; KNL-NEXT: retq699;700; AVX512DQ-LABEL: zext_2x8mem_to_2x64:701; AVX512DQ: # %bb.0:702; AVX512DQ-NEXT: vpsllq $63, %xmm0, %xmm0703; AVX512DQ-NEXT: vpmovq2m %xmm0, %k1704; AVX512DQ-NEXT: vpmovzxbq {{.*#+}} xmm0 {%k1} {z} = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero705; AVX512DQ-NEXT: retq706 %a = load <2 x i8>,ptr%i,align 1707 %x = zext <2 x i8> %a to <2 x i64>708 %ret = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> zeroinitializer709 ret <2 x i64> %ret710}711define <2 x i64> @sext_2x8mem_to_2x64mask(ptr%i , <2 x i1> %mask) nounwind readnone {712; KNL-LABEL: sext_2x8mem_to_2x64mask:713; KNL: # %bb.0:714; KNL-NEXT: vpsllq $63, %xmm0, %xmm0715; KNL-NEXT: vptestmq %zmm0, %zmm0, %k1716; KNL-NEXT: vpmovsxbq (%rdi), %xmm0717; KNL-NEXT: vmovdqa64 %zmm0, %zmm0 {%k1} {z}718; KNL-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0719; KNL-NEXT: vzeroupper720; KNL-NEXT: retq721;722; AVX512DQ-LABEL: sext_2x8mem_to_2x64mask:723; AVX512DQ: # %bb.0:724; AVX512DQ-NEXT: vpsllq $63, %xmm0, %xmm0725; AVX512DQ-NEXT: vpmovq2m %xmm0, %k1726; AVX512DQ-NEXT: vpmovsxbq (%rdi), %xmm0 {%k1} {z}727; AVX512DQ-NEXT: retq728 %a = load <2 x i8>,ptr%i,align 1729 %x = sext <2 x i8> %a to <2 x i64>730 %ret = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> zeroinitializer731 ret <2 x i64> %ret732}733define <2 x i64> @sext_2x8mem_to_2x64(ptr%i) nounwind readnone {734; ALL-LABEL: sext_2x8mem_to_2x64:735; ALL: # %bb.0:736; ALL-NEXT: vpmovsxbq (%rdi), %xmm0737; ALL-NEXT: retq738 %a = load <2 x i8>,ptr%i,align 1739 %x = sext <2 x i8> %a to <2 x i64>740 ret <2 x i64> %x741}742 743define <4 x i64> @zext_4x8mem_to_4x64(ptr%i , <4 x i1> %mask) nounwind readnone {744; KNL-LABEL: zext_4x8mem_to_4x64:745; KNL: # %bb.0:746; KNL-NEXT: vpslld $31, %xmm0, %xmm0747; KNL-NEXT: vptestmd %zmm0, %zmm0, %k1748; KNL-NEXT: vpmovzxbq {{.*#+}} ymm0 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero,mem[2],zero,zero,zero,zero,zero,zero,zero,mem[3],zero,zero,zero,zero,zero,zero,zero749; KNL-NEXT: vmovdqa64 %zmm0, %zmm0 {%k1} {z}750; KNL-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0751; KNL-NEXT: retq752;753; AVX512DQ-LABEL: zext_4x8mem_to_4x64:754; AVX512DQ: # %bb.0:755; AVX512DQ-NEXT: vpslld $31, %xmm0, %xmm0756; AVX512DQ-NEXT: vpmovd2m %xmm0, %k1757; AVX512DQ-NEXT: vpmovzxbq {{.*#+}} ymm0 {%k1} {z} = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero,mem[2],zero,zero,zero,zero,zero,zero,zero,mem[3],zero,zero,zero,zero,zero,zero,zero758; AVX512DQ-NEXT: retq759 %a = load <4 x i8>,ptr%i,align 1760 %x = zext <4 x i8> %a to <4 x i64>761 %ret = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> zeroinitializer762 ret <4 x i64> %ret763}764 765define <4 x i64> @sext_4x8mem_to_4x64mask(ptr%i , <4 x i1> %mask) nounwind readnone {766; KNL-LABEL: sext_4x8mem_to_4x64mask:767; KNL: # %bb.0:768; KNL-NEXT: vpslld $31, %xmm0, %xmm0769; KNL-NEXT: vptestmd %zmm0, %zmm0, %k1770; KNL-NEXT: vpmovsxbq (%rdi), %ymm0771; KNL-NEXT: vmovdqa64 %zmm0, %zmm0 {%k1} {z}772; KNL-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0773; KNL-NEXT: retq774;775; AVX512DQ-LABEL: sext_4x8mem_to_4x64mask:776; AVX512DQ: # %bb.0:777; AVX512DQ-NEXT: vpslld $31, %xmm0, %xmm0778; AVX512DQ-NEXT: vpmovd2m %xmm0, %k1779; AVX512DQ-NEXT: vpmovsxbq (%rdi), %ymm0 {%k1} {z}780; AVX512DQ-NEXT: retq781 %a = load <4 x i8>,ptr%i,align 1782 %x = sext <4 x i8> %a to <4 x i64>783 %ret = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> zeroinitializer784 ret <4 x i64> %ret785}786 787define <4 x i64> @sext_4x8mem_to_4x64(ptr%i) nounwind readnone {788; ALL-LABEL: sext_4x8mem_to_4x64:789; ALL: # %bb.0:790; ALL-NEXT: vpmovsxbq (%rdi), %ymm0791; ALL-NEXT: retq792 %a = load <4 x i8>,ptr%i,align 1793 %x = sext <4 x i8> %a to <4 x i64>794 ret <4 x i64> %x795}796 797define <8 x i64> @zext_8x8mem_to_8x64(ptr%i , <8 x i1> %mask) nounwind readnone {798; KNL-LABEL: zext_8x8mem_to_8x64:799; KNL: # %bb.0:800; KNL-NEXT: vpmovsxwq %xmm0, %zmm0801; KNL-NEXT: vpsllq $63, %zmm0, %zmm0802; KNL-NEXT: vptestmq %zmm0, %zmm0, %k1803; KNL-NEXT: vpmovzxbq {{.*#+}} zmm0 {%k1} {z} = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero,mem[2],zero,zero,zero,zero,zero,zero,zero,mem[3],zero,zero,zero,zero,zero,zero,zero,mem[4],zero,zero,zero,zero,zero,zero,zero,mem[5],zero,zero,zero,zero,zero,zero,zero,mem[6],zero,zero,zero,zero,zero,zero,zero,mem[7],zero,zero,zero,zero,zero,zero,zero804; KNL-NEXT: retq805;806; SKX-LABEL: zext_8x8mem_to_8x64:807; SKX: # %bb.0:808; SKX-NEXT: vpsllw $15, %xmm0, %xmm0809; SKX-NEXT: vpmovw2m %xmm0, %k1810; SKX-NEXT: vpmovzxbq {{.*#+}} zmm0 {%k1} {z} = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero,mem[2],zero,zero,zero,zero,zero,zero,zero,mem[3],zero,zero,zero,zero,zero,zero,zero,mem[4],zero,zero,zero,zero,zero,zero,zero,mem[5],zero,zero,zero,zero,zero,zero,zero,mem[6],zero,zero,zero,zero,zero,zero,zero,mem[7],zero,zero,zero,zero,zero,zero,zero811; SKX-NEXT: retq812;813; AVX512DQNOBW-LABEL: zext_8x8mem_to_8x64:814; AVX512DQNOBW: # %bb.0:815; AVX512DQNOBW-NEXT: vpmovsxwd %xmm0, %ymm0816; AVX512DQNOBW-NEXT: vpslld $31, %ymm0, %ymm0817; AVX512DQNOBW-NEXT: vpmovd2m %ymm0, %k1818; AVX512DQNOBW-NEXT: vpmovzxbq {{.*#+}} zmm0 {%k1} {z} = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero,mem[2],zero,zero,zero,zero,zero,zero,zero,mem[3],zero,zero,zero,zero,zero,zero,zero,mem[4],zero,zero,zero,zero,zero,zero,zero,mem[5],zero,zero,zero,zero,zero,zero,zero,mem[6],zero,zero,zero,zero,zero,zero,zero,mem[7],zero,zero,zero,zero,zero,zero,zero819; AVX512DQNOBW-NEXT: retq820 %a = load <8 x i8>,ptr%i,align 1821 %x = zext <8 x i8> %a to <8 x i64>822 %ret = select <8 x i1> %mask, <8 x i64> %x, <8 x i64> zeroinitializer823 ret <8 x i64> %ret824}825 826define <8 x i64> @sext_8x8mem_to_8x64mask(ptr%i , <8 x i1> %mask) nounwind readnone {827; KNL-LABEL: sext_8x8mem_to_8x64mask:828; KNL: # %bb.0:829; KNL-NEXT: vpmovsxwq %xmm0, %zmm0830; KNL-NEXT: vpsllq $63, %zmm0, %zmm0831; KNL-NEXT: vptestmq %zmm0, %zmm0, %k1832; KNL-NEXT: vpmovsxbq (%rdi), %zmm0 {%k1} {z}833; KNL-NEXT: retq834;835; SKX-LABEL: sext_8x8mem_to_8x64mask:836; SKX: # %bb.0:837; SKX-NEXT: vpsllw $15, %xmm0, %xmm0838; SKX-NEXT: vpmovw2m %xmm0, %k1839; SKX-NEXT: vpmovsxbq (%rdi), %zmm0 {%k1} {z}840; SKX-NEXT: retq841;842; AVX512DQNOBW-LABEL: sext_8x8mem_to_8x64mask:843; AVX512DQNOBW: # %bb.0:844; AVX512DQNOBW-NEXT: vpmovsxwd %xmm0, %ymm0845; AVX512DQNOBW-NEXT: vpslld $31, %ymm0, %ymm0846; AVX512DQNOBW-NEXT: vpmovd2m %ymm0, %k1847; AVX512DQNOBW-NEXT: vpmovsxbq (%rdi), %zmm0 {%k1} {z}848; AVX512DQNOBW-NEXT: retq849 %a = load <8 x i8>,ptr%i,align 1850 %x = sext <8 x i8> %a to <8 x i64>851 %ret = select <8 x i1> %mask, <8 x i64> %x, <8 x i64> zeroinitializer852 ret <8 x i64> %ret853}854 855define <8 x i64> @sext_8x8mem_to_8x64(ptr%i) nounwind readnone {856; ALL-LABEL: sext_8x8mem_to_8x64:857; ALL: # %bb.0:858; ALL-NEXT: vpmovsxbq (%rdi), %zmm0859; ALL-NEXT: retq860 %a = load <8 x i8>,ptr%i,align 1861 %x = sext <8 x i8> %a to <8 x i64>862 ret <8 x i64> %x863}864 865define <4 x i32> @zext_4x16mem_to_4x32(ptr%i , <4 x i1> %mask) nounwind readnone {866; KNL-LABEL: zext_4x16mem_to_4x32:867; KNL: # %bb.0:868; KNL-NEXT: vpslld $31, %xmm0, %xmm0869; KNL-NEXT: vptestmd %zmm0, %zmm0, %k1870; KNL-NEXT: vpmovzxwd {{.*#+}} xmm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero871; KNL-NEXT: vmovdqa32 %zmm0, %zmm0 {%k1} {z}872; KNL-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0873; KNL-NEXT: vzeroupper874; KNL-NEXT: retq875;876; AVX512DQ-LABEL: zext_4x16mem_to_4x32:877; AVX512DQ: # %bb.0:878; AVX512DQ-NEXT: vpslld $31, %xmm0, %xmm0879; AVX512DQ-NEXT: vpmovd2m %xmm0, %k1880; AVX512DQ-NEXT: vpmovzxwd {{.*#+}} xmm0 {%k1} {z} = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero881; AVX512DQ-NEXT: retq882 %a = load <4 x i16>,ptr%i,align 1883 %x = zext <4 x i16> %a to <4 x i32>884 %ret = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> zeroinitializer885 ret <4 x i32> %ret886}887 888define <4 x i32> @sext_4x16mem_to_4x32mask(ptr%i , <4 x i1> %mask) nounwind readnone {889; KNL-LABEL: sext_4x16mem_to_4x32mask:890; KNL: # %bb.0:891; KNL-NEXT: vpslld $31, %xmm0, %xmm0892; KNL-NEXT: vptestmd %zmm0, %zmm0, %k1893; KNL-NEXT: vpmovsxwd (%rdi), %xmm0894; KNL-NEXT: vmovdqa32 %zmm0, %zmm0 {%k1} {z}895; KNL-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0896; KNL-NEXT: vzeroupper897; KNL-NEXT: retq898;899; AVX512DQ-LABEL: sext_4x16mem_to_4x32mask:900; AVX512DQ: # %bb.0:901; AVX512DQ-NEXT: vpslld $31, %xmm0, %xmm0902; AVX512DQ-NEXT: vpmovd2m %xmm0, %k1903; AVX512DQ-NEXT: vpmovsxwd (%rdi), %xmm0 {%k1} {z}904; AVX512DQ-NEXT: retq905 %a = load <4 x i16>,ptr%i,align 1906 %x = sext <4 x i16> %a to <4 x i32>907 %ret = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> zeroinitializer908 ret <4 x i32> %ret909}910 911define <4 x i32> @sext_4x16mem_to_4x32(ptr%i) nounwind readnone {912; ALL-LABEL: sext_4x16mem_to_4x32:913; ALL: # %bb.0:914; ALL-NEXT: vpmovsxwd (%rdi), %xmm0915; ALL-NEXT: retq916 %a = load <4 x i16>,ptr%i,align 1917 %x = sext <4 x i16> %a to <4 x i32>918 ret <4 x i32> %x919}920 921 922define <8 x i32> @zext_8x16mem_to_8x32(ptr%i , <8 x i1> %mask) nounwind readnone {923; KNL-LABEL: zext_8x16mem_to_8x32:924; KNL: # %bb.0:925; KNL-NEXT: vpmovsxwq %xmm0, %zmm0926; KNL-NEXT: vpsllq $63, %zmm0, %zmm0927; KNL-NEXT: vptestmq %zmm0, %zmm0, %k1928; KNL-NEXT: vpmovzxwd {{.*#+}} ymm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero929; KNL-NEXT: vmovdqa32 %zmm0, %zmm0 {%k1} {z}930; KNL-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0931; KNL-NEXT: retq932;933; SKX-LABEL: zext_8x16mem_to_8x32:934; SKX: # %bb.0:935; SKX-NEXT: vpsllw $15, %xmm0, %xmm0936; SKX-NEXT: vpmovw2m %xmm0, %k1937; SKX-NEXT: vpmovzxwd {{.*#+}} ymm0 {%k1} {z} = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero938; SKX-NEXT: retq939;940; AVX512DQNOBW-LABEL: zext_8x16mem_to_8x32:941; AVX512DQNOBW: # %bb.0:942; AVX512DQNOBW-NEXT: vpmovsxwd %xmm0, %ymm0943; AVX512DQNOBW-NEXT: vpslld $31, %ymm0, %ymm0944; AVX512DQNOBW-NEXT: vpmovd2m %ymm0, %k1945; AVX512DQNOBW-NEXT: vpmovzxwd {{.*#+}} ymm0 {%k1} {z} = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero946; AVX512DQNOBW-NEXT: retq947 %a = load <8 x i16>,ptr%i,align 1948 %x = zext <8 x i16> %a to <8 x i32>949 %ret = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> zeroinitializer950 ret <8 x i32> %ret951}952 953define <8 x i32> @sext_8x16mem_to_8x32mask(ptr%i , <8 x i1> %mask) nounwind readnone {954; KNL-LABEL: sext_8x16mem_to_8x32mask:955; KNL: # %bb.0:956; KNL-NEXT: vpmovsxwq %xmm0, %zmm0957; KNL-NEXT: vpsllq $63, %zmm0, %zmm0958; KNL-NEXT: vptestmq %zmm0, %zmm0, %k1959; KNL-NEXT: vpmovsxwd (%rdi), %ymm0960; KNL-NEXT: vmovdqa32 %zmm0, %zmm0 {%k1} {z}961; KNL-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0962; KNL-NEXT: retq963;964; SKX-LABEL: sext_8x16mem_to_8x32mask:965; SKX: # %bb.0:966; SKX-NEXT: vpsllw $15, %xmm0, %xmm0967; SKX-NEXT: vpmovw2m %xmm0, %k1968; SKX-NEXT: vpmovsxwd (%rdi), %ymm0 {%k1} {z}969; SKX-NEXT: retq970;971; AVX512DQNOBW-LABEL: sext_8x16mem_to_8x32mask:972; AVX512DQNOBW: # %bb.0:973; AVX512DQNOBW-NEXT: vpmovsxwd %xmm0, %ymm0974; AVX512DQNOBW-NEXT: vpslld $31, %ymm0, %ymm0975; AVX512DQNOBW-NEXT: vpmovd2m %ymm0, %k1976; AVX512DQNOBW-NEXT: vpmovsxwd (%rdi), %ymm0 {%k1} {z}977; AVX512DQNOBW-NEXT: retq978 %a = load <8 x i16>,ptr%i,align 1979 %x = sext <8 x i16> %a to <8 x i32>980 %ret = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> zeroinitializer981 ret <8 x i32> %ret982}983 984define <8 x i32> @sext_8x16mem_to_8x32(ptr%i) nounwind readnone {985; ALL-LABEL: sext_8x16mem_to_8x32:986; ALL: # %bb.0:987; ALL-NEXT: vpmovsxwd (%rdi), %ymm0988; ALL-NEXT: retq989 %a = load <8 x i16>,ptr%i,align 1990 %x = sext <8 x i16> %a to <8 x i32>991 ret <8 x i32> %x992}993 994define <8 x i32> @zext_8x16_to_8x32mask(<8 x i16> %a , <8 x i1> %mask) nounwind readnone {995; KNL-LABEL: zext_8x16_to_8x32mask:996; KNL: # %bb.0:997; KNL-NEXT: vpmovsxwq %xmm1, %zmm1998; KNL-NEXT: vpsllq $63, %zmm1, %zmm1999; KNL-NEXT: vptestmq %zmm1, %zmm1, %k11000; KNL-NEXT: vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero1001; KNL-NEXT: vmovdqa32 %zmm0, %zmm0 {%k1} {z}1002; KNL-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm01003; KNL-NEXT: retq1004;1005; SKX-LABEL: zext_8x16_to_8x32mask:1006; SKX: # %bb.0:1007; SKX-NEXT: vpsllw $15, %xmm1, %xmm11008; SKX-NEXT: vpmovw2m %xmm1, %k11009; SKX-NEXT: vpmovzxwd {{.*#+}} ymm0 {%k1} {z} = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero1010; SKX-NEXT: retq1011;1012; AVX512DQNOBW-LABEL: zext_8x16_to_8x32mask:1013; AVX512DQNOBW: # %bb.0:1014; AVX512DQNOBW-NEXT: vpmovsxwd %xmm1, %ymm11015; AVX512DQNOBW-NEXT: vpslld $31, %ymm1, %ymm11016; AVX512DQNOBW-NEXT: vpmovd2m %ymm1, %k11017; AVX512DQNOBW-NEXT: vpmovzxwd {{.*#+}} ymm0 {%k1} {z} = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero1018; AVX512DQNOBW-NEXT: retq1019 %x = zext <8 x i16> %a to <8 x i32>1020 %ret = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> zeroinitializer1021 ret <8 x i32> %ret1022}1023 1024define <8 x i32> @zext_8x16_to_8x32(<8 x i16> %a ) nounwind readnone {1025; ALL-LABEL: zext_8x16_to_8x32:1026; ALL: # %bb.0:1027; ALL-NEXT: vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero1028; ALL-NEXT: retq1029 %x = zext <8 x i16> %a to <8 x i32>1030 ret <8 x i32> %x1031}1032 1033define <16 x i32> @zext_16x16mem_to_16x32(ptr%i , <16 x i1> %mask) nounwind readnone {1034; KNL-LABEL: zext_16x16mem_to_16x32:1035; KNL: # %bb.0:1036; KNL-NEXT: vpmovsxbd %xmm0, %zmm01037; KNL-NEXT: vpslld $31, %zmm0, %zmm01038; KNL-NEXT: vptestmd %zmm0, %zmm0, %k11039; KNL-NEXT: vpmovzxwd {{.*#+}} zmm0 {%k1} {z} = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero,mem[8],zero,mem[9],zero,mem[10],zero,mem[11],zero,mem[12],zero,mem[13],zero,mem[14],zero,mem[15],zero1040; KNL-NEXT: retq1041;1042; SKX-LABEL: zext_16x16mem_to_16x32:1043; SKX: # %bb.0:1044; SKX-NEXT: vpsllw $7, %xmm0, %xmm01045; SKX-NEXT: vpmovb2m %xmm0, %k11046; SKX-NEXT: vpmovzxwd {{.*#+}} zmm0 {%k1} {z} = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero,mem[8],zero,mem[9],zero,mem[10],zero,mem[11],zero,mem[12],zero,mem[13],zero,mem[14],zero,mem[15],zero1047; SKX-NEXT: retq1048;1049; AVX512DQNOBW-LABEL: zext_16x16mem_to_16x32:1050; AVX512DQNOBW: # %bb.0:1051; AVX512DQNOBW-NEXT: vpmovsxbd %xmm0, %zmm01052; AVX512DQNOBW-NEXT: vpslld $31, %zmm0, %zmm01053; AVX512DQNOBW-NEXT: vpmovd2m %zmm0, %k11054; AVX512DQNOBW-NEXT: vpmovzxwd {{.*#+}} zmm0 {%k1} {z} = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero,mem[8],zero,mem[9],zero,mem[10],zero,mem[11],zero,mem[12],zero,mem[13],zero,mem[14],zero,mem[15],zero1055; AVX512DQNOBW-NEXT: retq1056 %a = load <16 x i16>,ptr%i,align 11057 %x = zext <16 x i16> %a to <16 x i32>1058 %ret = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> zeroinitializer1059 ret <16 x i32> %ret1060}1061 1062define <16 x i32> @sext_16x16mem_to_16x32mask(ptr%i , <16 x i1> %mask) nounwind readnone {1063; KNL-LABEL: sext_16x16mem_to_16x32mask:1064; KNL: # %bb.0:1065; KNL-NEXT: vpmovsxbd %xmm0, %zmm01066; KNL-NEXT: vpslld $31, %zmm0, %zmm01067; KNL-NEXT: vptestmd %zmm0, %zmm0, %k11068; KNL-NEXT: vpmovsxwd (%rdi), %zmm0 {%k1} {z}1069; KNL-NEXT: retq1070;1071; SKX-LABEL: sext_16x16mem_to_16x32mask:1072; SKX: # %bb.0:1073; SKX-NEXT: vpsllw $7, %xmm0, %xmm01074; SKX-NEXT: vpmovb2m %xmm0, %k11075; SKX-NEXT: vpmovsxwd (%rdi), %zmm0 {%k1} {z}1076; SKX-NEXT: retq1077;1078; AVX512DQNOBW-LABEL: sext_16x16mem_to_16x32mask:1079; AVX512DQNOBW: # %bb.0:1080; AVX512DQNOBW-NEXT: vpmovsxbd %xmm0, %zmm01081; AVX512DQNOBW-NEXT: vpslld $31, %zmm0, %zmm01082; AVX512DQNOBW-NEXT: vpmovd2m %zmm0, %k11083; AVX512DQNOBW-NEXT: vpmovsxwd (%rdi), %zmm0 {%k1} {z}1084; AVX512DQNOBW-NEXT: retq1085 %a = load <16 x i16>,ptr%i,align 11086 %x = sext <16 x i16> %a to <16 x i32>1087 %ret = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> zeroinitializer1088 ret <16 x i32> %ret1089}1090 1091define <16 x i32> @sext_16x16mem_to_16x32(ptr%i) nounwind readnone {1092; ALL-LABEL: sext_16x16mem_to_16x32:1093; ALL: # %bb.0:1094; ALL-NEXT: vpmovsxwd (%rdi), %zmm01095; ALL-NEXT: retq1096 %a = load <16 x i16>,ptr%i,align 11097 %x = sext <16 x i16> %a to <16 x i32>1098 ret <16 x i32> %x1099}1100define <16 x i32> @zext_16x16_to_16x32mask(<16 x i16> %a , <16 x i1> %mask) nounwind readnone {1101; KNL-LABEL: zext_16x16_to_16x32mask:1102; KNL: # %bb.0:1103; KNL-NEXT: vpmovsxbd %xmm1, %zmm11104; KNL-NEXT: vpslld $31, %zmm1, %zmm11105; KNL-NEXT: vptestmd %zmm1, %zmm1, %k11106; KNL-NEXT: vpmovzxwd {{.*#+}} zmm0 {%k1} {z} = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero1107; KNL-NEXT: retq1108;1109; SKX-LABEL: zext_16x16_to_16x32mask:1110; SKX: # %bb.0:1111; SKX-NEXT: vpsllw $7, %xmm1, %xmm11112; SKX-NEXT: vpmovb2m %xmm1, %k11113; SKX-NEXT: vpmovzxwd {{.*#+}} zmm0 {%k1} {z} = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero1114; SKX-NEXT: retq1115;1116; AVX512DQNOBW-LABEL: zext_16x16_to_16x32mask:1117; AVX512DQNOBW: # %bb.0:1118; AVX512DQNOBW-NEXT: vpmovsxbd %xmm1, %zmm11119; AVX512DQNOBW-NEXT: vpslld $31, %zmm1, %zmm11120; AVX512DQNOBW-NEXT: vpmovd2m %zmm1, %k11121; AVX512DQNOBW-NEXT: vpmovzxwd {{.*#+}} zmm0 {%k1} {z} = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero1122; AVX512DQNOBW-NEXT: retq1123 %x = zext <16 x i16> %a to <16 x i32>1124 %ret = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> zeroinitializer1125 ret <16 x i32> %ret1126}1127 1128define <16 x i32> @zext_16x16_to_16x32(<16 x i16> %a ) nounwind readnone {1129; ALL-LABEL: zext_16x16_to_16x32:1130; ALL: # %bb.0:1131; ALL-NEXT: vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero1132; ALL-NEXT: retq1133 %x = zext <16 x i16> %a to <16 x i32>1134 ret <16 x i32> %x1135}1136 1137define <2 x i64> @zext_2x16mem_to_2x64(ptr%i , <2 x i1> %mask) nounwind readnone {1138; KNL-LABEL: zext_2x16mem_to_2x64:1139; KNL: # %bb.0:1140; KNL-NEXT: vpsllq $63, %xmm0, %xmm01141; KNL-NEXT: vptestmq %zmm0, %zmm0, %k11142; KNL-NEXT: vpmovzxwq {{.*#+}} xmm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero1143; KNL-NEXT: vmovdqa64 %zmm0, %zmm0 {%k1} {z}1144; KNL-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm01145; KNL-NEXT: vzeroupper1146; KNL-NEXT: retq1147;1148; AVX512DQ-LABEL: zext_2x16mem_to_2x64:1149; AVX512DQ: # %bb.0:1150; AVX512DQ-NEXT: vpsllq $63, %xmm0, %xmm01151; AVX512DQ-NEXT: vpmovq2m %xmm0, %k11152; AVX512DQ-NEXT: vpmovzxwq {{.*#+}} xmm0 {%k1} {z} = mem[0],zero,zero,zero,mem[1],zero,zero,zero1153; AVX512DQ-NEXT: retq1154 %a = load <2 x i16>,ptr%i,align 11155 %x = zext <2 x i16> %a to <2 x i64>1156 %ret = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> zeroinitializer1157 ret <2 x i64> %ret1158}1159 1160define <2 x i64> @sext_2x16mem_to_2x64mask(ptr%i , <2 x i1> %mask) nounwind readnone {1161; KNL-LABEL: sext_2x16mem_to_2x64mask:1162; KNL: # %bb.0:1163; KNL-NEXT: vpsllq $63, %xmm0, %xmm01164; KNL-NEXT: vptestmq %zmm0, %zmm0, %k11165; KNL-NEXT: vpmovsxwq (%rdi), %xmm01166; KNL-NEXT: vmovdqa64 %zmm0, %zmm0 {%k1} {z}1167; KNL-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm01168; KNL-NEXT: vzeroupper1169; KNL-NEXT: retq1170;1171; AVX512DQ-LABEL: sext_2x16mem_to_2x64mask:1172; AVX512DQ: # %bb.0:1173; AVX512DQ-NEXT: vpsllq $63, %xmm0, %xmm01174; AVX512DQ-NEXT: vpmovq2m %xmm0, %k11175; AVX512DQ-NEXT: vpmovsxwq (%rdi), %xmm0 {%k1} {z}1176; AVX512DQ-NEXT: retq1177 %a = load <2 x i16>,ptr%i,align 11178 %x = sext <2 x i16> %a to <2 x i64>1179 %ret = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> zeroinitializer1180 ret <2 x i64> %ret1181}1182 1183define <2 x i64> @sext_2x16mem_to_2x64(ptr%i) nounwind readnone {1184; ALL-LABEL: sext_2x16mem_to_2x64:1185; ALL: # %bb.0:1186; ALL-NEXT: vpmovsxwq (%rdi), %xmm01187; ALL-NEXT: retq1188 %a = load <2 x i16>,ptr%i,align 11189 %x = sext <2 x i16> %a to <2 x i64>1190 ret <2 x i64> %x1191}1192 1193define <4 x i64> @zext_4x16mem_to_4x64(ptr%i , <4 x i1> %mask) nounwind readnone {1194; KNL-LABEL: zext_4x16mem_to_4x64:1195; KNL: # %bb.0:1196; KNL-NEXT: vpslld $31, %xmm0, %xmm01197; KNL-NEXT: vptestmd %zmm0, %zmm0, %k11198; KNL-NEXT: vpmovzxwq {{.*#+}} ymm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero1199; KNL-NEXT: vmovdqa64 %zmm0, %zmm0 {%k1} {z}1200; KNL-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm01201; KNL-NEXT: retq1202;1203; AVX512DQ-LABEL: zext_4x16mem_to_4x64:1204; AVX512DQ: # %bb.0:1205; AVX512DQ-NEXT: vpslld $31, %xmm0, %xmm01206; AVX512DQ-NEXT: vpmovd2m %xmm0, %k11207; AVX512DQ-NEXT: vpmovzxwq {{.*#+}} ymm0 {%k1} {z} = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero1208; AVX512DQ-NEXT: retq1209 %a = load <4 x i16>,ptr%i,align 11210 %x = zext <4 x i16> %a to <4 x i64>1211 %ret = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> zeroinitializer1212 ret <4 x i64> %ret1213}1214 1215define <4 x i64> @sext_4x16mem_to_4x64mask(ptr%i , <4 x i1> %mask) nounwind readnone {1216; KNL-LABEL: sext_4x16mem_to_4x64mask:1217; KNL: # %bb.0:1218; KNL-NEXT: vpslld $31, %xmm0, %xmm01219; KNL-NEXT: vptestmd %zmm0, %zmm0, %k11220; KNL-NEXT: vpmovsxwq (%rdi), %ymm01221; KNL-NEXT: vmovdqa64 %zmm0, %zmm0 {%k1} {z}1222; KNL-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm01223; KNL-NEXT: retq1224;1225; AVX512DQ-LABEL: sext_4x16mem_to_4x64mask:1226; AVX512DQ: # %bb.0:1227; AVX512DQ-NEXT: vpslld $31, %xmm0, %xmm01228; AVX512DQ-NEXT: vpmovd2m %xmm0, %k11229; AVX512DQ-NEXT: vpmovsxwq (%rdi), %ymm0 {%k1} {z}1230; AVX512DQ-NEXT: retq1231 %a = load <4 x i16>,ptr%i,align 11232 %x = sext <4 x i16> %a to <4 x i64>1233 %ret = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> zeroinitializer1234 ret <4 x i64> %ret1235}1236 1237define <4 x i64> @sext_4x16mem_to_4x64(ptr%i) nounwind readnone {1238; ALL-LABEL: sext_4x16mem_to_4x64:1239; ALL: # %bb.0:1240; ALL-NEXT: vpmovsxwq (%rdi), %ymm01241; ALL-NEXT: retq1242 %a = load <4 x i16>,ptr%i,align 11243 %x = sext <4 x i16> %a to <4 x i64>1244 ret <4 x i64> %x1245}1246 1247define <8 x i64> @zext_8x16mem_to_8x64(ptr%i , <8 x i1> %mask) nounwind readnone {1248; KNL-LABEL: zext_8x16mem_to_8x64:1249; KNL: # %bb.0:1250; KNL-NEXT: vpmovsxwq %xmm0, %zmm01251; KNL-NEXT: vpsllq $63, %zmm0, %zmm01252; KNL-NEXT: vptestmq %zmm0, %zmm0, %k11253; KNL-NEXT: vpmovzxwq {{.*#+}} zmm0 {%k1} {z} = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero1254; KNL-NEXT: retq1255;1256; SKX-LABEL: zext_8x16mem_to_8x64:1257; SKX: # %bb.0:1258; SKX-NEXT: vpsllw $15, %xmm0, %xmm01259; SKX-NEXT: vpmovw2m %xmm0, %k11260; SKX-NEXT: vpmovzxwq {{.*#+}} zmm0 {%k1} {z} = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero1261; SKX-NEXT: retq1262;1263; AVX512DQNOBW-LABEL: zext_8x16mem_to_8x64:1264; AVX512DQNOBW: # %bb.0:1265; AVX512DQNOBW-NEXT: vpmovsxwd %xmm0, %ymm01266; AVX512DQNOBW-NEXT: vpslld $31, %ymm0, %ymm01267; AVX512DQNOBW-NEXT: vpmovd2m %ymm0, %k11268; AVX512DQNOBW-NEXT: vpmovzxwq {{.*#+}} zmm0 {%k1} {z} = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero1269; AVX512DQNOBW-NEXT: retq1270 %a = load <8 x i16>,ptr%i,align 11271 %x = zext <8 x i16> %a to <8 x i64>1272 %ret = select <8 x i1> %mask, <8 x i64> %x, <8 x i64> zeroinitializer1273 ret <8 x i64> %ret1274}1275 1276define <8 x i64> @sext_8x16mem_to_8x64mask(ptr%i , <8 x i1> %mask) nounwind readnone {1277; KNL-LABEL: sext_8x16mem_to_8x64mask:1278; KNL: # %bb.0:1279; KNL-NEXT: vpmovsxwq %xmm0, %zmm01280; KNL-NEXT: vpsllq $63, %zmm0, %zmm01281; KNL-NEXT: vptestmq %zmm0, %zmm0, %k11282; KNL-NEXT: vpmovsxwq (%rdi), %zmm0 {%k1} {z}1283; KNL-NEXT: retq1284;1285; SKX-LABEL: sext_8x16mem_to_8x64mask:1286; SKX: # %bb.0:1287; SKX-NEXT: vpsllw $15, %xmm0, %xmm01288; SKX-NEXT: vpmovw2m %xmm0, %k11289; SKX-NEXT: vpmovsxwq (%rdi), %zmm0 {%k1} {z}1290; SKX-NEXT: retq1291;1292; AVX512DQNOBW-LABEL: sext_8x16mem_to_8x64mask:1293; AVX512DQNOBW: # %bb.0:1294; AVX512DQNOBW-NEXT: vpmovsxwd %xmm0, %ymm01295; AVX512DQNOBW-NEXT: vpslld $31, %ymm0, %ymm01296; AVX512DQNOBW-NEXT: vpmovd2m %ymm0, %k11297; AVX512DQNOBW-NEXT: vpmovsxwq (%rdi), %zmm0 {%k1} {z}1298; AVX512DQNOBW-NEXT: retq1299 %a = load <8 x i16>,ptr%i,align 11300 %x = sext <8 x i16> %a to <8 x i64>1301 %ret = select <8 x i1> %mask, <8 x i64> %x, <8 x i64> zeroinitializer1302 ret <8 x i64> %ret1303}1304 1305define <8 x i64> @sext_8x16mem_to_8x64(ptr%i) nounwind readnone {1306; ALL-LABEL: sext_8x16mem_to_8x64:1307; ALL: # %bb.0:1308; ALL-NEXT: vpmovsxwq (%rdi), %zmm01309; ALL-NEXT: retq1310 %a = load <8 x i16>,ptr%i,align 11311 %x = sext <8 x i16> %a to <8 x i64>1312 ret <8 x i64> %x1313}1314 1315define <8 x i64> @zext_8x16_to_8x64mask(<8 x i16> %a , <8 x i1> %mask) nounwind readnone {1316; KNL-LABEL: zext_8x16_to_8x64mask:1317; KNL: # %bb.0:1318; KNL-NEXT: vpmovsxwq %xmm1, %zmm11319; KNL-NEXT: vpsllq $63, %zmm1, %zmm11320; KNL-NEXT: vptestmq %zmm1, %zmm1, %k11321; KNL-NEXT: vpmovzxwq {{.*#+}} zmm0 {%k1} {z} = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero1322; KNL-NEXT: retq1323;1324; SKX-LABEL: zext_8x16_to_8x64mask:1325; SKX: # %bb.0:1326; SKX-NEXT: vpsllw $15, %xmm1, %xmm11327; SKX-NEXT: vpmovw2m %xmm1, %k11328; SKX-NEXT: vpmovzxwq {{.*#+}} zmm0 {%k1} {z} = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero1329; SKX-NEXT: retq1330;1331; AVX512DQNOBW-LABEL: zext_8x16_to_8x64mask:1332; AVX512DQNOBW: # %bb.0:1333; AVX512DQNOBW-NEXT: vpmovsxwd %xmm1, %ymm11334; AVX512DQNOBW-NEXT: vpslld $31, %ymm1, %ymm11335; AVX512DQNOBW-NEXT: vpmovd2m %ymm1, %k11336; AVX512DQNOBW-NEXT: vpmovzxwq {{.*#+}} zmm0 {%k1} {z} = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero1337; AVX512DQNOBW-NEXT: retq1338 %x = zext <8 x i16> %a to <8 x i64>1339 %ret = select <8 x i1> %mask, <8 x i64> %x, <8 x i64> zeroinitializer1340 ret <8 x i64> %ret1341}1342 1343define <8 x i64> @zext_8x16_to_8x64(<8 x i16> %a) nounwind readnone {1344; ALL-LABEL: zext_8x16_to_8x64:1345; ALL: # %bb.0:1346; ALL-NEXT: vpmovzxwq {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero1347; ALL-NEXT: retq1348 %ret = zext <8 x i16> %a to <8 x i64>1349 ret <8 x i64> %ret1350}1351 1352define <2 x i64> @zext_2x32mem_to_2x64(ptr%i , <2 x i1> %mask) nounwind readnone {1353; KNL-LABEL: zext_2x32mem_to_2x64:1354; KNL: # %bb.0:1355; KNL-NEXT: vpsllq $63, %xmm0, %xmm01356; KNL-NEXT: vptestmq %zmm0, %zmm0, %k11357; KNL-NEXT: vpmovzxdq {{.*#+}} xmm0 = mem[0],zero,mem[1],zero1358; KNL-NEXT: vmovdqa64 %zmm0, %zmm0 {%k1} {z}1359; KNL-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm01360; KNL-NEXT: vzeroupper1361; KNL-NEXT: retq1362;1363; AVX512DQ-LABEL: zext_2x32mem_to_2x64:1364; AVX512DQ: # %bb.0:1365; AVX512DQ-NEXT: vpsllq $63, %xmm0, %xmm01366; AVX512DQ-NEXT: vpmovq2m %xmm0, %k11367; AVX512DQ-NEXT: vpmovzxdq {{.*#+}} xmm0 {%k1} {z} = mem[0],zero,mem[1],zero1368; AVX512DQ-NEXT: retq1369 %a = load <2 x i32>,ptr%i,align 11370 %x = zext <2 x i32> %a to <2 x i64>1371 %ret = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> zeroinitializer1372 ret <2 x i64> %ret1373}1374 1375define <2 x i64> @sext_2x32mem_to_2x64mask(ptr%i , <2 x i1> %mask) nounwind readnone {1376; KNL-LABEL: sext_2x32mem_to_2x64mask:1377; KNL: # %bb.0:1378; KNL-NEXT: vpsllq $63, %xmm0, %xmm01379; KNL-NEXT: vptestmq %zmm0, %zmm0, %k11380; KNL-NEXT: vpmovsxdq (%rdi), %xmm01381; KNL-NEXT: vmovdqa64 %zmm0, %zmm0 {%k1} {z}1382; KNL-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm01383; KNL-NEXT: vzeroupper1384; KNL-NEXT: retq1385;1386; AVX512DQ-LABEL: sext_2x32mem_to_2x64mask:1387; AVX512DQ: # %bb.0:1388; AVX512DQ-NEXT: vpsllq $63, %xmm0, %xmm01389; AVX512DQ-NEXT: vpmovq2m %xmm0, %k11390; AVX512DQ-NEXT: vpmovsxdq (%rdi), %xmm0 {%k1} {z}1391; AVX512DQ-NEXT: retq1392 %a = load <2 x i32>,ptr%i,align 11393 %x = sext <2 x i32> %a to <2 x i64>1394 %ret = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> zeroinitializer1395 ret <2 x i64> %ret1396}1397 1398define <2 x i64> @sext_2x32mem_to_2x64(ptr%i) nounwind readnone {1399; ALL-LABEL: sext_2x32mem_to_2x64:1400; ALL: # %bb.0:1401; ALL-NEXT: vpmovsxdq (%rdi), %xmm01402; ALL-NEXT: retq1403 %a = load <2 x i32>,ptr%i,align 11404 %x = sext <2 x i32> %a to <2 x i64>1405 ret <2 x i64> %x1406}1407 1408define <4 x i64> @zext_4x32mem_to_4x64(ptr%i , <4 x i1> %mask) nounwind readnone {1409; KNL-LABEL: zext_4x32mem_to_4x64:1410; KNL: # %bb.0:1411; KNL-NEXT: vpslld $31, %xmm0, %xmm01412; KNL-NEXT: vptestmd %zmm0, %zmm0, %k11413; KNL-NEXT: vpmovzxdq {{.*#+}} ymm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero1414; KNL-NEXT: vmovdqa64 %zmm0, %zmm0 {%k1} {z}1415; KNL-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm01416; KNL-NEXT: retq1417;1418; AVX512DQ-LABEL: zext_4x32mem_to_4x64:1419; AVX512DQ: # %bb.0:1420; AVX512DQ-NEXT: vpslld $31, %xmm0, %xmm01421; AVX512DQ-NEXT: vpmovd2m %xmm0, %k11422; AVX512DQ-NEXT: vpmovzxdq {{.*#+}} ymm0 {%k1} {z} = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero1423; AVX512DQ-NEXT: retq1424 %a = load <4 x i32>,ptr%i,align 11425 %x = zext <4 x i32> %a to <4 x i64>1426 %ret = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> zeroinitializer1427 ret <4 x i64> %ret1428}1429 1430define <4 x i64> @sext_4x32mem_to_4x64mask(ptr%i , <4 x i1> %mask) nounwind readnone {1431; KNL-LABEL: sext_4x32mem_to_4x64mask:1432; KNL: # %bb.0:1433; KNL-NEXT: vpslld $31, %xmm0, %xmm01434; KNL-NEXT: vptestmd %zmm0, %zmm0, %k11435; KNL-NEXT: vpmovsxdq (%rdi), %ymm01436; KNL-NEXT: vmovdqa64 %zmm0, %zmm0 {%k1} {z}1437; KNL-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm01438; KNL-NEXT: retq1439;1440; AVX512DQ-LABEL: sext_4x32mem_to_4x64mask:1441; AVX512DQ: # %bb.0:1442; AVX512DQ-NEXT: vpslld $31, %xmm0, %xmm01443; AVX512DQ-NEXT: vpmovd2m %xmm0, %k11444; AVX512DQ-NEXT: vpmovsxdq (%rdi), %ymm0 {%k1} {z}1445; AVX512DQ-NEXT: retq1446 %a = load <4 x i32>,ptr%i,align 11447 %x = sext <4 x i32> %a to <4 x i64>1448 %ret = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> zeroinitializer1449 ret <4 x i64> %ret1450}1451 1452define <4 x i64> @sext_4x32mem_to_4x64(ptr%i) nounwind readnone {1453; ALL-LABEL: sext_4x32mem_to_4x64:1454; ALL: # %bb.0:1455; ALL-NEXT: vpmovsxdq (%rdi), %ymm01456; ALL-NEXT: retq1457 %a = load <4 x i32>,ptr%i,align 11458 %x = sext <4 x i32> %a to <4 x i64>1459 ret <4 x i64> %x1460}1461 1462define <4 x i64> @sext_4x32_to_4x64(<4 x i32> %a) nounwind readnone {1463; ALL-LABEL: sext_4x32_to_4x64:1464; ALL: # %bb.0:1465; ALL-NEXT: vpmovsxdq %xmm0, %ymm01466; ALL-NEXT: retq1467 %x = sext <4 x i32> %a to <4 x i64>1468 ret <4 x i64> %x1469}1470 1471define <4 x i64> @zext_4x32_to_4x64mask(<4 x i32> %a , <4 x i1> %mask) nounwind readnone {1472; KNL-LABEL: zext_4x32_to_4x64mask:1473; KNL: # %bb.0:1474; KNL-NEXT: vpslld $31, %xmm1, %xmm11475; KNL-NEXT: vptestmd %zmm1, %zmm1, %k11476; KNL-NEXT: vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero1477; KNL-NEXT: vmovdqa64 %zmm0, %zmm0 {%k1} {z}1478; KNL-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm01479; KNL-NEXT: retq1480;1481; AVX512DQ-LABEL: zext_4x32_to_4x64mask:1482; AVX512DQ: # %bb.0:1483; AVX512DQ-NEXT: vpslld $31, %xmm1, %xmm11484; AVX512DQ-NEXT: vpmovd2m %xmm1, %k11485; AVX512DQ-NEXT: vpmovzxdq {{.*#+}} ymm0 {%k1} {z} = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero1486; AVX512DQ-NEXT: retq1487 %x = zext <4 x i32> %a to <4 x i64>1488 %ret = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> zeroinitializer1489 ret <4 x i64> %ret1490}1491 1492define <8 x i64> @zext_8x32mem_to_8x64(ptr%i , <8 x i1> %mask) nounwind readnone {1493; KNL-LABEL: zext_8x32mem_to_8x64:1494; KNL: # %bb.0:1495; KNL-NEXT: vpmovsxwq %xmm0, %zmm01496; KNL-NEXT: vpsllq $63, %zmm0, %zmm01497; KNL-NEXT: vptestmq %zmm0, %zmm0, %k11498; KNL-NEXT: vpmovzxdq {{.*#+}} zmm0 {%k1} {z} = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero1499; KNL-NEXT: retq1500;1501; SKX-LABEL: zext_8x32mem_to_8x64:1502; SKX: # %bb.0:1503; SKX-NEXT: vpsllw $15, %xmm0, %xmm01504; SKX-NEXT: vpmovw2m %xmm0, %k11505; SKX-NEXT: vpmovzxdq {{.*#+}} zmm0 {%k1} {z} = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero1506; SKX-NEXT: retq1507;1508; AVX512DQNOBW-LABEL: zext_8x32mem_to_8x64:1509; AVX512DQNOBW: # %bb.0:1510; AVX512DQNOBW-NEXT: vpmovsxwd %xmm0, %ymm01511; AVX512DQNOBW-NEXT: vpslld $31, %ymm0, %ymm01512; AVX512DQNOBW-NEXT: vpmovd2m %ymm0, %k11513; AVX512DQNOBW-NEXT: vpmovzxdq {{.*#+}} zmm0 {%k1} {z} = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero1514; AVX512DQNOBW-NEXT: retq1515 %a = load <8 x i32>,ptr%i,align 11516 %x = zext <8 x i32> %a to <8 x i64>1517 %ret = select <8 x i1> %mask, <8 x i64> %x, <8 x i64> zeroinitializer1518 ret <8 x i64> %ret1519}1520 1521define <8 x i64> @sext_8x32mem_to_8x64mask(ptr%i , <8 x i1> %mask) nounwind readnone {1522; KNL-LABEL: sext_8x32mem_to_8x64mask:1523; KNL: # %bb.0:1524; KNL-NEXT: vpmovsxwq %xmm0, %zmm01525; KNL-NEXT: vpsllq $63, %zmm0, %zmm01526; KNL-NEXT: vptestmq %zmm0, %zmm0, %k11527; KNL-NEXT: vpmovsxdq (%rdi), %zmm0 {%k1} {z}1528; KNL-NEXT: retq1529;1530; SKX-LABEL: sext_8x32mem_to_8x64mask:1531; SKX: # %bb.0:1532; SKX-NEXT: vpsllw $15, %xmm0, %xmm01533; SKX-NEXT: vpmovw2m %xmm0, %k11534; SKX-NEXT: vpmovsxdq (%rdi), %zmm0 {%k1} {z}1535; SKX-NEXT: retq1536;1537; AVX512DQNOBW-LABEL: sext_8x32mem_to_8x64mask:1538; AVX512DQNOBW: # %bb.0:1539; AVX512DQNOBW-NEXT: vpmovsxwd %xmm0, %ymm01540; AVX512DQNOBW-NEXT: vpslld $31, %ymm0, %ymm01541; AVX512DQNOBW-NEXT: vpmovd2m %ymm0, %k11542; AVX512DQNOBW-NEXT: vpmovsxdq (%rdi), %zmm0 {%k1} {z}1543; AVX512DQNOBW-NEXT: retq1544 %a = load <8 x i32>,ptr%i,align 11545 %x = sext <8 x i32> %a to <8 x i64>1546 %ret = select <8 x i1> %mask, <8 x i64> %x, <8 x i64> zeroinitializer1547 ret <8 x i64> %ret1548}1549 1550define <8 x i64> @sext_8x32mem_to_8x64(ptr%i) nounwind readnone {1551; ALL-LABEL: sext_8x32mem_to_8x64:1552; ALL: # %bb.0:1553; ALL-NEXT: vpmovsxdq (%rdi), %zmm01554; ALL-NEXT: retq1555 %a = load <8 x i32>,ptr%i,align 11556 %x = sext <8 x i32> %a to <8 x i64>1557 ret <8 x i64> %x1558}1559 1560define <8 x i64> @sext_8x32_to_8x64(<8 x i32> %a) nounwind readnone {1561; ALL-LABEL: sext_8x32_to_8x64:1562; ALL: # %bb.0:1563; ALL-NEXT: vpmovsxdq %ymm0, %zmm01564; ALL-NEXT: retq1565 %x = sext <8 x i32> %a to <8 x i64>1566 ret <8 x i64> %x1567}1568 1569define <8 x i64> @zext_8x32_to_8x64mask(<8 x i32> %a , <8 x i1> %mask) nounwind readnone {1570; KNL-LABEL: zext_8x32_to_8x64mask:1571; KNL: # %bb.0:1572; KNL-NEXT: vpmovsxwq %xmm1, %zmm11573; KNL-NEXT: vpsllq $63, %zmm1, %zmm11574; KNL-NEXT: vptestmq %zmm1, %zmm1, %k11575; KNL-NEXT: vpmovzxdq {{.*#+}} zmm0 {%k1} {z} = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero1576; KNL-NEXT: retq1577;1578; SKX-LABEL: zext_8x32_to_8x64mask:1579; SKX: # %bb.0:1580; SKX-NEXT: vpsllw $15, %xmm1, %xmm11581; SKX-NEXT: vpmovw2m %xmm1, %k11582; SKX-NEXT: vpmovzxdq {{.*#+}} zmm0 {%k1} {z} = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero1583; SKX-NEXT: retq1584;1585; AVX512DQNOBW-LABEL: zext_8x32_to_8x64mask:1586; AVX512DQNOBW: # %bb.0:1587; AVX512DQNOBW-NEXT: vpmovsxwd %xmm1, %ymm11588; AVX512DQNOBW-NEXT: vpslld $31, %ymm1, %ymm11589; AVX512DQNOBW-NEXT: vpmovd2m %ymm1, %k11590; AVX512DQNOBW-NEXT: vpmovzxdq {{.*#+}} zmm0 {%k1} {z} = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero1591; AVX512DQNOBW-NEXT: retq1592 %x = zext <8 x i32> %a to <8 x i64>1593 %ret = select <8 x i1> %mask, <8 x i64> %x, <8 x i64> zeroinitializer1594 ret <8 x i64> %ret1595}1596define <8 x float> @fptrunc_test(<8 x double> %a) nounwind readnone {1597; ALL-LABEL: fptrunc_test:1598; ALL: # %bb.0:1599; ALL-NEXT: vcvtpd2ps %zmm0, %ymm01600; ALL-NEXT: retq1601 %b = fptrunc <8 x double> %a to <8 x float>1602 ret <8 x float> %b1603}1604 1605define <8 x double> @fpext_test(<8 x float> %a) nounwind readnone {1606; ALL-LABEL: fpext_test:1607; ALL: # %bb.0:1608; ALL-NEXT: vcvtps2pd %ymm0, %zmm01609; ALL-NEXT: retq1610 %b = fpext <8 x float> %a to <8 x double>1611 ret <8 x double> %b1612}1613 1614define <16 x i32> @zext_16i1_to_16xi32(i16 %b) {1615; KNL-LABEL: zext_16i1_to_16xi32:1616; KNL: # %bb.0:1617; KNL-NEXT: kmovw %edi, %k11618; KNL-NEXT: vpternlogd {{.*#+}} zmm0 {%k1} {z} = -11619; KNL-NEXT: vpsrld $31, %zmm0, %zmm01620; KNL-NEXT: retq1621;1622; SKX-LABEL: zext_16i1_to_16xi32:1623; SKX: # %bb.0:1624; SKX-NEXT: kmovd %edi, %k01625; SKX-NEXT: vpmovm2d %k0, %zmm01626; SKX-NEXT: vpsrld $31, %zmm0, %zmm01627; SKX-NEXT: retq1628;1629; AVX512DQNOBW-LABEL: zext_16i1_to_16xi32:1630; AVX512DQNOBW: # %bb.0:1631; AVX512DQNOBW-NEXT: kmovw %edi, %k01632; AVX512DQNOBW-NEXT: vpmovm2d %k0, %zmm01633; AVX512DQNOBW-NEXT: vpsrld $31, %zmm0, %zmm01634; AVX512DQNOBW-NEXT: retq1635 %a = bitcast i16 %b to <16 x i1>1636 %c = zext <16 x i1> %a to <16 x i32>1637 ret <16 x i32> %c1638}1639 1640define <8 x i64> @zext_8i1_to_8xi64(i8 %b) {1641; KNL-LABEL: zext_8i1_to_8xi64:1642; KNL: # %bb.0:1643; KNL-NEXT: kmovw %edi, %k11644; KNL-NEXT: vpternlogq {{.*#+}} zmm0 {%k1} {z} = -11645; KNL-NEXT: vpsrlq $63, %zmm0, %zmm01646; KNL-NEXT: retq1647;1648; SKX-LABEL: zext_8i1_to_8xi64:1649; SKX: # %bb.0:1650; SKX-NEXT: kmovd %edi, %k01651; SKX-NEXT: vpmovm2q %k0, %zmm01652; SKX-NEXT: vpsrlq $63, %zmm0, %zmm01653; SKX-NEXT: retq1654;1655; AVX512DQNOBW-LABEL: zext_8i1_to_8xi64:1656; AVX512DQNOBW: # %bb.0:1657; AVX512DQNOBW-NEXT: kmovw %edi, %k01658; AVX512DQNOBW-NEXT: vpmovm2q %k0, %zmm01659; AVX512DQNOBW-NEXT: vpsrlq $63, %zmm0, %zmm01660; AVX512DQNOBW-NEXT: retq1661 %a = bitcast i8 %b to <8 x i1>1662 %c = zext <8 x i1> %a to <8 x i64>1663 ret <8 x i64> %c1664}1665 1666define i16 @trunc_16i8_to_16i1(<16 x i8> %a) {1667; ALL-LABEL: trunc_16i8_to_16i1:1668; ALL: # %bb.0:1669; ALL-NEXT: vpsllw $7, %xmm0, %xmm01670; ALL-NEXT: vpmovmskb %xmm0, %eax1671; ALL-NEXT: # kill: def $ax killed $ax killed $eax1672; ALL-NEXT: retq1673 %mask_b = trunc <16 x i8>%a to <16 x i1>1674 %mask = bitcast <16 x i1> %mask_b to i161675 ret i16 %mask1676}1677 1678define i16 @trunc_16i32_to_16i1(<16 x i32> %a) {1679; KNL-LABEL: trunc_16i32_to_16i1:1680; KNL: # %bb.0:1681; KNL-NEXT: vpslld $31, %zmm0, %zmm01682; KNL-NEXT: vptestmd %zmm0, %zmm0, %k01683; KNL-NEXT: kmovw %k0, %eax1684; KNL-NEXT: # kill: def $ax killed $ax killed $eax1685; KNL-NEXT: vzeroupper1686; KNL-NEXT: retq1687;1688; SKX-LABEL: trunc_16i32_to_16i1:1689; SKX: # %bb.0:1690; SKX-NEXT: vpslld $31, %zmm0, %zmm01691; SKX-NEXT: vpmovd2m %zmm0, %k01692; SKX-NEXT: kmovd %k0, %eax1693; SKX-NEXT: # kill: def $ax killed $ax killed $eax1694; SKX-NEXT: vzeroupper1695; SKX-NEXT: retq1696;1697; AVX512DQNOBW-LABEL: trunc_16i32_to_16i1:1698; AVX512DQNOBW: # %bb.0:1699; AVX512DQNOBW-NEXT: vpslld $31, %zmm0, %zmm01700; AVX512DQNOBW-NEXT: vpmovd2m %zmm0, %k01701; AVX512DQNOBW-NEXT: kmovw %k0, %eax1702; AVX512DQNOBW-NEXT: # kill: def $ax killed $ax killed $eax1703; AVX512DQNOBW-NEXT: vzeroupper1704; AVX512DQNOBW-NEXT: retq1705 %mask_b = trunc <16 x i32>%a to <16 x i1>1706 %mask = bitcast <16 x i1> %mask_b to i161707 ret i16 %mask1708}1709 1710define <4 x i32> @trunc_4i32_to_4i1(<4 x i32> %a, <4 x i32> %b) {1711; ALL-LABEL: trunc_4i32_to_4i1:1712; ALL: # %bb.0:1713; ALL-NEXT: vpand %xmm1, %xmm0, %xmm01714; ALL-NEXT: vpslld $31, %xmm0, %xmm01715; ALL-NEXT: vpsrad $31, %xmm0, %xmm01716; ALL-NEXT: retq1717 %mask_a = trunc <4 x i32>%a to <4 x i1>1718 %mask_b = trunc <4 x i32>%b to <4 x i1>1719 %a_and_b = and <4 x i1>%mask_a, %mask_b1720 %res = sext <4 x i1>%a_and_b to <4 x i32>1721 ret <4 x i32>%res1722}1723 1724 1725define i8 @trunc_8i16_to_8i1(<8 x i16> %a) {1726; KNL-LABEL: trunc_8i16_to_8i1:1727; KNL: # %bb.0:1728; KNL-NEXT: vpmovsxwq %xmm0, %zmm01729; KNL-NEXT: vpsllq $63, %zmm0, %zmm01730; KNL-NEXT: vptestmq %zmm0, %zmm0, %k01731; KNL-NEXT: kmovw %k0, %eax1732; KNL-NEXT: # kill: def $al killed $al killed $eax1733; KNL-NEXT: vzeroupper1734; KNL-NEXT: retq1735;1736; SKX-LABEL: trunc_8i16_to_8i1:1737; SKX: # %bb.0:1738; SKX-NEXT: vpsllw $15, %xmm0, %xmm01739; SKX-NEXT: vpmovw2m %xmm0, %k01740; SKX-NEXT: kmovd %k0, %eax1741; SKX-NEXT: # kill: def $al killed $al killed $eax1742; SKX-NEXT: retq1743;1744; AVX512DQNOBW-LABEL: trunc_8i16_to_8i1:1745; AVX512DQNOBW: # %bb.0:1746; AVX512DQNOBW-NEXT: vpmovsxwd %xmm0, %ymm01747; AVX512DQNOBW-NEXT: vpslld $31, %ymm0, %ymm01748; AVX512DQNOBW-NEXT: vpmovd2m %ymm0, %k01749; AVX512DQNOBW-NEXT: kmovw %k0, %eax1750; AVX512DQNOBW-NEXT: # kill: def $al killed $al killed $eax1751; AVX512DQNOBW-NEXT: vzeroupper1752; AVX512DQNOBW-NEXT: retq1753 %mask_b = trunc <8 x i16>%a to <8 x i1>1754 %mask = bitcast <8 x i1> %mask_b to i81755 ret i8 %mask1756}1757 1758define <8 x i32> @sext_8i1_8i32(<8 x i32> %a1, <8 x i32> %a2) nounwind {1759; KNL-LABEL: sext_8i1_8i32:1760; KNL: # %bb.0:1761; KNL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm01762; KNL-NEXT: vpternlogq {{.*#+}} zmm0 = ~zmm01763; KNL-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm01764; KNL-NEXT: retq1765;1766; AVX512DQ-LABEL: sext_8i1_8i32:1767; AVX512DQ: # %bb.0:1768; AVX512DQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm01769; AVX512DQ-NEXT: vpternlogq {{.*#+}} ymm0 = ~ymm01770; AVX512DQ-NEXT: retq1771 %x = icmp slt <8 x i32> %a1, %a21772 %x1 = xor <8 x i1>%x, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>1773 %y = sext <8 x i1> %x1 to <8 x i32>1774 ret <8 x i32> %y1775}1776 1777 1778define i16 @trunc_i32_to_i1(i32 %a) {1779; KNL-LABEL: trunc_i32_to_i1:1780; KNL: # %bb.0:1781; KNL-NEXT: andl $1, %edi1782; KNL-NEXT: kmovw %edi, %k01783; KNL-NEXT: movw $-4, %ax1784; KNL-NEXT: kmovw %eax, %k11785; KNL-NEXT: kshiftrw $1, %k1, %k11786; KNL-NEXT: kshiftlw $1, %k1, %k11787; KNL-NEXT: korw %k0, %k1, %k01788; KNL-NEXT: kmovw %k0, %eax1789; KNL-NEXT: # kill: def $ax killed $ax killed $eax1790; KNL-NEXT: retq1791;1792; SKX-LABEL: trunc_i32_to_i1:1793; SKX: # %bb.0:1794; SKX-NEXT: andl $1, %edi1795; SKX-NEXT: kmovw %edi, %k01796; SKX-NEXT: movw $-4, %ax1797; SKX-NEXT: kmovd %eax, %k11798; SKX-NEXT: kshiftrw $1, %k1, %k11799; SKX-NEXT: kshiftlw $1, %k1, %k11800; SKX-NEXT: korw %k0, %k1, %k01801; SKX-NEXT: kmovd %k0, %eax1802; SKX-NEXT: # kill: def $ax killed $ax killed $eax1803; SKX-NEXT: retq1804;1805; AVX512DQNOBW-LABEL: trunc_i32_to_i1:1806; AVX512DQNOBW: # %bb.0:1807; AVX512DQNOBW-NEXT: andl $1, %edi1808; AVX512DQNOBW-NEXT: kmovw %edi, %k01809; AVX512DQNOBW-NEXT: movw $-4, %ax1810; AVX512DQNOBW-NEXT: kmovw %eax, %k11811; AVX512DQNOBW-NEXT: kshiftrw $1, %k1, %k11812; AVX512DQNOBW-NEXT: kshiftlw $1, %k1, %k11813; AVX512DQNOBW-NEXT: korw %k0, %k1, %k01814; AVX512DQNOBW-NEXT: kmovw %k0, %eax1815; AVX512DQNOBW-NEXT: # kill: def $ax killed $ax killed $eax1816; AVX512DQNOBW-NEXT: retq1817 %a_i = trunc i32 %a to i11818 %maskv = insertelement <16 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, i1 %a_i, i32 01819 %res = bitcast <16 x i1> %maskv to i161820 ret i16 %res1821}1822 1823define <8 x i16> @sext_8i1_8i16(<8 x i32> %a1, <8 x i32> %a2) nounwind {1824; KNL-LABEL: sext_8i1_8i16:1825; KNL: # %bb.0:1826; KNL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm01827; KNL-NEXT: vpmovdw %zmm0, %ymm01828; KNL-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm01829; KNL-NEXT: vzeroupper1830; KNL-NEXT: retq1831;1832; SKX-LABEL: sext_8i1_8i16:1833; SKX: # %bb.0:1834; SKX-NEXT: vpcmpgtd %ymm0, %ymm1, %k01835; SKX-NEXT: vpmovm2w %k0, %xmm01836; SKX-NEXT: vzeroupper1837; SKX-NEXT: retq1838;1839; AVX512DQNOBW-LABEL: sext_8i1_8i16:1840; AVX512DQNOBW: # %bb.0:1841; AVX512DQNOBW-NEXT: vpcmpgtd %ymm0, %ymm1, %k01842; AVX512DQNOBW-NEXT: vpmovm2d %k0, %ymm01843; AVX512DQNOBW-NEXT: vpmovdw %ymm0, %xmm01844; AVX512DQNOBW-NEXT: vzeroupper1845; AVX512DQNOBW-NEXT: retq1846 %x = icmp slt <8 x i32> %a1, %a21847 %y = sext <8 x i1> %x to <8 x i16>1848 ret <8 x i16> %y1849}1850 1851define <16 x i32> @sext_16i1_16i32(<16 x i32> %a1, <16 x i32> %a2) nounwind {1852; KNL-LABEL: sext_16i1_16i32:1853; KNL: # %bb.0:1854; KNL-NEXT: vpcmpgtd %zmm0, %zmm1, %k11855; KNL-NEXT: vpternlogd {{.*#+}} zmm0 {%k1} {z} = -11856; KNL-NEXT: retq1857;1858; AVX512DQ-LABEL: sext_16i1_16i32:1859; AVX512DQ: # %bb.0:1860; AVX512DQ-NEXT: vpcmpgtd %zmm0, %zmm1, %k01861; AVX512DQ-NEXT: vpmovm2d %k0, %zmm01862; AVX512DQ-NEXT: retq1863 %x = icmp slt <16 x i32> %a1, %a21864 %y = sext <16 x i1> %x to <16 x i32>1865 ret <16 x i32> %y1866}1867 1868define <8 x i64> @sext_8i1_8i64(<8 x i32> %a1, <8 x i32> %a2) nounwind {1869; KNL-LABEL: sext_8i1_8i64:1870; KNL: # %bb.0:1871; KNL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm01872; KNL-NEXT: vpmovsxdq %ymm0, %zmm01873; KNL-NEXT: retq1874;1875; AVX512DQ-LABEL: sext_8i1_8i64:1876; AVX512DQ: # %bb.0:1877; AVX512DQ-NEXT: vpcmpgtd %ymm0, %ymm1, %k01878; AVX512DQ-NEXT: vpmovm2q %k0, %zmm01879; AVX512DQ-NEXT: retq1880 %x = icmp slt <8 x i32> %a1, %a21881 %y = sext <8 x i1> %x to <8 x i64>1882 ret <8 x i64> %y1883}1884 1885define void @extload_v8i64(ptr %a, ptr %res) {1886; ALL-LABEL: extload_v8i64:1887; ALL: # %bb.0:1888; ALL-NEXT: vpmovsxbq (%rdi), %zmm01889; ALL-NEXT: vmovdqa64 %zmm0, (%rsi)1890; ALL-NEXT: vzeroupper1891; ALL-NEXT: retq1892 %sign_load = load <8 x i8>, ptr %a1893 %c = sext <8 x i8> %sign_load to <8 x i64>1894 store <8 x i64> %c, ptr %res1895 ret void1896}1897 1898define <64 x i16> @test21(<64 x i16> %x , <64 x i1> %mask) nounwind readnone {1899; KNL-LABEL: test21:1900; KNL: # %bb.0:1901; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax1902; KNL-NEXT: andl $1, %eax1903; KNL-NEXT: kmovw %eax, %k01904; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax1905; KNL-NEXT: kmovw %eax, %k11906; KNL-NEXT: kshiftlw $15, %k1, %k11907; KNL-NEXT: kshiftrw $14, %k1, %k11908; KNL-NEXT: korw %k1, %k0, %k01909; KNL-NEXT: movw $-5, %ax1910; KNL-NEXT: kmovw %eax, %k11911; KNL-NEXT: kandw %k1, %k0, %k01912; KNL-NEXT: kmovw %k1, %k21913; KNL-NEXT: kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill1914; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax1915; KNL-NEXT: kmovw %eax, %k11916; KNL-NEXT: kshiftlw $15, %k1, %k11917; KNL-NEXT: kshiftrw $13, %k1, %k11918; KNL-NEXT: korw %k1, %k0, %k01919; KNL-NEXT: movw $-9, %ax1920; KNL-NEXT: kmovw %eax, %k11921; KNL-NEXT: kandw %k1, %k0, %k01922; KNL-NEXT: kmovw %k1, %k71923; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax1924; KNL-NEXT: kmovw %eax, %k11925; KNL-NEXT: kshiftlw $15, %k1, %k11926; KNL-NEXT: kshiftrw $12, %k1, %k11927; KNL-NEXT: korw %k1, %k0, %k01928; KNL-NEXT: movw $-17, %ax1929; KNL-NEXT: kmovw %eax, %k11930; KNL-NEXT: kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill1931; KNL-NEXT: kandw %k1, %k0, %k01932; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax1933; KNL-NEXT: kmovw %eax, %k11934; KNL-NEXT: kshiftlw $15, %k1, %k11935; KNL-NEXT: kshiftrw $11, %k1, %k11936; KNL-NEXT: korw %k1, %k0, %k01937; KNL-NEXT: movw $-33, %ax1938; KNL-NEXT: kmovw %eax, %k11939; KNL-NEXT: kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill1940; KNL-NEXT: kandw %k1, %k0, %k01941; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax1942; KNL-NEXT: kmovw %eax, %k11943; KNL-NEXT: kshiftlw $15, %k1, %k11944; KNL-NEXT: kshiftrw $10, %k1, %k11945; KNL-NEXT: korw %k1, %k0, %k01946; KNL-NEXT: movw $-65, %ax1947; KNL-NEXT: kmovw %eax, %k11948; KNL-NEXT: kandw %k1, %k0, %k01949; KNL-NEXT: kmovw %k1, %k31950; KNL-NEXT: kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill1951; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax1952; KNL-NEXT: kmovw %eax, %k11953; KNL-NEXT: kshiftlw $15, %k1, %k11954; KNL-NEXT: kshiftrw $9, %k1, %k11955; KNL-NEXT: korw %k1, %k0, %k01956; KNL-NEXT: movw $-129, %ax1957; KNL-NEXT: kmovw %eax, %k11958; KNL-NEXT: kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill1959; KNL-NEXT: kandw %k1, %k0, %k01960; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax1961; KNL-NEXT: kmovw %eax, %k11962; KNL-NEXT: kshiftlw $15, %k1, %k11963; KNL-NEXT: kshiftrw $8, %k1, %k11964; KNL-NEXT: korw %k1, %k0, %k01965; KNL-NEXT: movw $-257, %ax # imm = 0xFEFF1966; KNL-NEXT: kmovw %eax, %k11967; KNL-NEXT: kandw %k1, %k0, %k01968; KNL-NEXT: kmovw %k1, %k41969; KNL-NEXT: kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill1970; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax1971; KNL-NEXT: kmovw %eax, %k11972; KNL-NEXT: kshiftlw $15, %k1, %k11973; KNL-NEXT: kshiftrw $7, %k1, %k11974; KNL-NEXT: korw %k1, %k0, %k01975; KNL-NEXT: movw $-513, %ax # imm = 0xFDFF1976; KNL-NEXT: kmovw %eax, %k51977; KNL-NEXT: kandw %k5, %k0, %k01978; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax1979; KNL-NEXT: kmovw %eax, %k11980; KNL-NEXT: kshiftlw $15, %k1, %k11981; KNL-NEXT: kshiftrw $6, %k1, %k11982; KNL-NEXT: korw %k1, %k0, %k01983; KNL-NEXT: movw $-1025, %ax # imm = 0xFBFF1984; KNL-NEXT: kmovw %eax, %k11985; KNL-NEXT: kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill1986; KNL-NEXT: kandw %k1, %k0, %k01987; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax1988; KNL-NEXT: kmovw %eax, %k11989; KNL-NEXT: kshiftlw $15, %k1, %k11990; KNL-NEXT: kshiftrw $5, %k1, %k11991; KNL-NEXT: korw %k1, %k0, %k01992; KNL-NEXT: movw $-2049, %ax # imm = 0xF7FF1993; KNL-NEXT: kmovw %eax, %k11994; KNL-NEXT: kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill1995; KNL-NEXT: kandw %k1, %k0, %k01996; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax1997; KNL-NEXT: kmovw %eax, %k11998; KNL-NEXT: kshiftlw $15, %k1, %k11999; KNL-NEXT: kshiftrw $4, %k1, %k12000; KNL-NEXT: korw %k1, %k0, %k02001; KNL-NEXT: movw $-4097, %ax # imm = 0xEFFF2002; KNL-NEXT: kmovw %eax, %k12003; KNL-NEXT: kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill2004; KNL-NEXT: kandw %k1, %k0, %k02005; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2006; KNL-NEXT: kmovw %eax, %k12007; KNL-NEXT: kshiftlw $15, %k1, %k12008; KNL-NEXT: kshiftrw $3, %k1, %k12009; KNL-NEXT: korw %k1, %k0, %k02010; KNL-NEXT: movw $-8193, %ax # imm = 0xDFFF2011; KNL-NEXT: kmovw %eax, %k12012; KNL-NEXT: kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill2013; KNL-NEXT: kandw %k1, %k0, %k02014; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2015; KNL-NEXT: kmovw %eax, %k12016; KNL-NEXT: kshiftlw $15, %k1, %k12017; KNL-NEXT: kshiftrw $2, %k1, %k12018; KNL-NEXT: korw %k1, %k0, %k12019; KNL-NEXT: movw $-16385, %ax # imm = 0xBFFF2020; KNL-NEXT: kmovw %eax, %k02021; KNL-NEXT: kmovw %k0, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill2022; KNL-NEXT: kandw %k0, %k1, %k12023; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2024; KNL-NEXT: kmovw %eax, %k62025; KNL-NEXT: kshiftlw $14, %k6, %k62026; KNL-NEXT: korw %k6, %k1, %k12027; KNL-NEXT: kshiftlw $1, %k1, %k12028; KNL-NEXT: kshiftrw $1, %k1, %k12029; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2030; KNL-NEXT: kmovw %eax, %k62031; KNL-NEXT: kshiftlw $15, %k6, %k62032; KNL-NEXT: korw %k6, %k1, %k12033; KNL-NEXT: kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill2034; KNL-NEXT: andl $1, %edi2035; KNL-NEXT: kmovw %esi, %k12036; KNL-NEXT: kshiftlw $15, %k1, %k12037; KNL-NEXT: kshiftrw $14, %k1, %k12038; KNL-NEXT: kmovw %edi, %k62039; KNL-NEXT: korw %k1, %k6, %k12040; KNL-NEXT: kandw %k2, %k1, %k12041; KNL-NEXT: kmovw %edx, %k62042; KNL-NEXT: kshiftlw $15, %k6, %k62043; KNL-NEXT: kshiftrw $13, %k6, %k62044; KNL-NEXT: korw %k6, %k1, %k12045; KNL-NEXT: kmovw %k7, %k02046; KNL-NEXT: kmovw %k7, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill2047; KNL-NEXT: kandw %k7, %k1, %k12048; KNL-NEXT: kmovw %ecx, %k62049; KNL-NEXT: kshiftlw $15, %k6, %k62050; KNL-NEXT: kshiftrw $12, %k6, %k62051; KNL-NEXT: korw %k6, %k1, %k12052; KNL-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k2 # 2-byte Reload2053; KNL-NEXT: kandw %k2, %k1, %k12054; KNL-NEXT: kmovw %r8d, %k62055; KNL-NEXT: kshiftlw $15, %k6, %k62056; KNL-NEXT: kshiftrw $11, %k6, %k62057; KNL-NEXT: korw %k6, %k1, %k12058; KNL-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k7 # 2-byte Reload2059; KNL-NEXT: kandw %k7, %k1, %k12060; KNL-NEXT: kmovw %r9d, %k62061; KNL-NEXT: kshiftlw $15, %k6, %k62062; KNL-NEXT: kshiftrw $10, %k6, %k62063; KNL-NEXT: korw %k6, %k1, %k12064; KNL-NEXT: kandw %k3, %k1, %k12065; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2066; KNL-NEXT: kmovw %eax, %k62067; KNL-NEXT: kshiftlw $15, %k6, %k62068; KNL-NEXT: kshiftrw $9, %k6, %k62069; KNL-NEXT: korw %k6, %k1, %k12070; KNL-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k3 # 2-byte Reload2071; KNL-NEXT: kandw %k3, %k1, %k12072; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2073; KNL-NEXT: kmovw %eax, %k62074; KNL-NEXT: kshiftlw $15, %k6, %k62075; KNL-NEXT: kshiftrw $8, %k6, %k62076; KNL-NEXT: korw %k6, %k1, %k12077; KNL-NEXT: kandw %k4, %k1, %k12078; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2079; KNL-NEXT: kmovw %eax, %k62080; KNL-NEXT: kshiftlw $15, %k6, %k62081; KNL-NEXT: kshiftrw $7, %k6, %k62082; KNL-NEXT: korw %k6, %k1, %k12083; KNL-NEXT: kandw %k5, %k1, %k12084; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2085; KNL-NEXT: kmovw %eax, %k62086; KNL-NEXT: kshiftlw $15, %k6, %k62087; KNL-NEXT: kshiftrw $6, %k6, %k62088; KNL-NEXT: korw %k6, %k1, %k12089; KNL-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k4 # 2-byte Reload2090; KNL-NEXT: kandw %k4, %k1, %k12091; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2092; KNL-NEXT: kmovw %eax, %k62093; KNL-NEXT: kshiftlw $15, %k6, %k62094; KNL-NEXT: kshiftrw $5, %k6, %k62095; KNL-NEXT: korw %k6, %k1, %k12096; KNL-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k6 # 2-byte Reload2097; KNL-NEXT: kandw %k6, %k1, %k12098; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2099; KNL-NEXT: kmovw %eax, %k62100; KNL-NEXT: kshiftlw $15, %k6, %k62101; KNL-NEXT: kshiftrw $4, %k6, %k62102; KNL-NEXT: korw %k6, %k1, %k12103; KNL-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k6 # 2-byte Reload2104; KNL-NEXT: kandw %k6, %k1, %k12105; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2106; KNL-NEXT: kmovw %eax, %k62107; KNL-NEXT: kshiftlw $15, %k6, %k62108; KNL-NEXT: kshiftrw $3, %k6, %k62109; KNL-NEXT: korw %k6, %k1, %k12110; KNL-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k6 # 2-byte Reload2111; KNL-NEXT: kandw %k6, %k1, %k12112; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2113; KNL-NEXT: kmovw %eax, %k62114; KNL-NEXT: kshiftlw $15, %k6, %k62115; KNL-NEXT: kshiftrw $2, %k6, %k62116; KNL-NEXT: korw %k6, %k1, %k12117; KNL-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k6 # 2-byte Reload2118; KNL-NEXT: kandw %k6, %k1, %k12119; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2120; KNL-NEXT: kmovw %eax, %k62121; KNL-NEXT: kshiftlw $14, %k6, %k62122; KNL-NEXT: korw %k6, %k1, %k12123; KNL-NEXT: kshiftlw $1, %k1, %k12124; KNL-NEXT: kshiftrw $1, %k1, %k12125; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2126; KNL-NEXT: kmovw %eax, %k62127; KNL-NEXT: kshiftlw $15, %k6, %k62128; KNL-NEXT: korw %k6, %k1, %k12129; KNL-NEXT: kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill2130; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2131; KNL-NEXT: andl $1, %eax2132; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %ecx2133; KNL-NEXT: kmovw %ecx, %k12134; KNL-NEXT: kshiftlw $15, %k1, %k12135; KNL-NEXT: kshiftrw $14, %k1, %k12136; KNL-NEXT: kmovw %eax, %k62137; KNL-NEXT: korw %k1, %k6, %k12138; KNL-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k6 # 2-byte Reload2139; KNL-NEXT: kandw %k6, %k1, %k12140; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2141; KNL-NEXT: kmovw %eax, %k62142; KNL-NEXT: kshiftlw $15, %k6, %k62143; KNL-NEXT: kshiftrw $13, %k6, %k62144; KNL-NEXT: korw %k6, %k1, %k12145; KNL-NEXT: kandw %k0, %k1, %k12146; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2147; KNL-NEXT: kmovw %eax, %k62148; KNL-NEXT: kshiftlw $15, %k6, %k62149; KNL-NEXT: kshiftrw $12, %k6, %k62150; KNL-NEXT: korw %k6, %k1, %k12151; KNL-NEXT: kandw %k2, %k1, %k12152; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2153; KNL-NEXT: kmovw %eax, %k62154; KNL-NEXT: kshiftlw $15, %k6, %k62155; KNL-NEXT: kshiftrw $11, %k6, %k62156; KNL-NEXT: korw %k6, %k1, %k12157; KNL-NEXT: kandw %k7, %k1, %k12158; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2159; KNL-NEXT: kmovw %eax, %k62160; KNL-NEXT: kshiftlw $15, %k6, %k62161; KNL-NEXT: kshiftrw $10, %k6, %k62162; KNL-NEXT: korw %k6, %k1, %k12163; KNL-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k0 # 2-byte Reload2164; KNL-NEXT: kandw %k0, %k1, %k12165; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2166; KNL-NEXT: kmovw %eax, %k62167; KNL-NEXT: kshiftlw $15, %k6, %k62168; KNL-NEXT: kshiftrw $9, %k6, %k62169; KNL-NEXT: korw %k6, %k1, %k12170; KNL-NEXT: kandw %k3, %k1, %k12171; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2172; KNL-NEXT: kmovw %eax, %k62173; KNL-NEXT: kshiftlw $15, %k6, %k62174; KNL-NEXT: kshiftrw $8, %k6, %k62175; KNL-NEXT: korw %k6, %k1, %k12176; KNL-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k3 # 2-byte Reload2177; KNL-NEXT: kandw %k3, %k1, %k12178; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2179; KNL-NEXT: kmovw %eax, %k62180; KNL-NEXT: kshiftlw $15, %k6, %k62181; KNL-NEXT: kshiftrw $7, %k6, %k62182; KNL-NEXT: korw %k6, %k1, %k12183; KNL-NEXT: kandw %k5, %k1, %k12184; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2185; KNL-NEXT: kmovw %eax, %k62186; KNL-NEXT: kshiftlw $15, %k6, %k62187; KNL-NEXT: kshiftrw $6, %k6, %k62188; KNL-NEXT: korw %k6, %k1, %k12189; KNL-NEXT: kandw %k4, %k1, %k12190; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2191; KNL-NEXT: kmovw %eax, %k62192; KNL-NEXT: kshiftlw $15, %k6, %k62193; KNL-NEXT: kshiftrw $5, %k6, %k62194; KNL-NEXT: korw %k6, %k1, %k12195; KNL-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k0 # 2-byte Reload2196; KNL-NEXT: kandw %k0, %k1, %k12197; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2198; KNL-NEXT: kmovw %eax, %k62199; KNL-NEXT: kshiftlw $15, %k6, %k62200; KNL-NEXT: kshiftrw $4, %k6, %k62201; KNL-NEXT: korw %k6, %k1, %k12202; KNL-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k2 # 2-byte Reload2203; KNL-NEXT: kandw %k2, %k1, %k12204; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2205; KNL-NEXT: kmovw %eax, %k62206; KNL-NEXT: kshiftlw $15, %k6, %k62207; KNL-NEXT: kshiftrw $3, %k6, %k62208; KNL-NEXT: korw %k6, %k1, %k12209; KNL-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k6 # 2-byte Reload2210; KNL-NEXT: kandw %k6, %k1, %k12211; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2212; KNL-NEXT: kmovw %eax, %k62213; KNL-NEXT: kshiftlw $15, %k6, %k62214; KNL-NEXT: kshiftrw $2, %k6, %k62215; KNL-NEXT: korw %k6, %k1, %k12216; KNL-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k6 # 2-byte Reload2217; KNL-NEXT: kandw %k6, %k1, %k12218; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2219; KNL-NEXT: kmovw %eax, %k62220; KNL-NEXT: kshiftlw $14, %k6, %k62221; KNL-NEXT: korw %k6, %k1, %k12222; KNL-NEXT: kshiftlw $1, %k1, %k12223; KNL-NEXT: kshiftrw $1, %k1, %k12224; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2225; KNL-NEXT: kmovw %eax, %k62226; KNL-NEXT: kshiftlw $15, %k6, %k62227; KNL-NEXT: korw %k6, %k1, %k12228; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2229; KNL-NEXT: andl $1, %eax2230; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %ecx2231; KNL-NEXT: kmovw %ecx, %k62232; KNL-NEXT: kshiftlw $15, %k6, %k62233; KNL-NEXT: kshiftrw $14, %k6, %k62234; KNL-NEXT: kmovw %eax, %k72235; KNL-NEXT: korw %k6, %k7, %k62236; KNL-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k7 # 2-byte Reload2237; KNL-NEXT: kandw %k7, %k6, %k62238; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2239; KNL-NEXT: kmovw %eax, %k72240; KNL-NEXT: kshiftlw $15, %k7, %k72241; KNL-NEXT: kshiftrw $13, %k7, %k72242; KNL-NEXT: korw %k7, %k6, %k62243; KNL-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k7 # 2-byte Reload2244; KNL-NEXT: kandw %k7, %k6, %k62245; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2246; KNL-NEXT: kmovw %eax, %k72247; KNL-NEXT: kshiftlw $15, %k7, %k72248; KNL-NEXT: kshiftrw $12, %k7, %k72249; KNL-NEXT: korw %k7, %k6, %k62250; KNL-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k7 # 2-byte Reload2251; KNL-NEXT: kandw %k7, %k6, %k62252; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2253; KNL-NEXT: kmovw %eax, %k72254; KNL-NEXT: kshiftlw $15, %k7, %k72255; KNL-NEXT: kshiftrw $11, %k7, %k72256; KNL-NEXT: korw %k7, %k6, %k62257; KNL-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k7 # 2-byte Reload2258; KNL-NEXT: kandw %k7, %k6, %k62259; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2260; KNL-NEXT: kmovw %eax, %k72261; KNL-NEXT: kshiftlw $15, %k7, %k72262; KNL-NEXT: kshiftrw $10, %k7, %k72263; KNL-NEXT: korw %k7, %k6, %k62264; KNL-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k7 # 2-byte Reload2265; KNL-NEXT: kandw %k7, %k6, %k62266; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2267; KNL-NEXT: kmovw %eax, %k72268; KNL-NEXT: kshiftlw $15, %k7, %k72269; KNL-NEXT: kshiftrw $9, %k7, %k72270; KNL-NEXT: korw %k7, %k6, %k62271; KNL-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k7 # 2-byte Reload2272; KNL-NEXT: kandw %k7, %k6, %k62273; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2274; KNL-NEXT: kmovw %eax, %k72275; KNL-NEXT: kshiftlw $15, %k7, %k72276; KNL-NEXT: kshiftrw $8, %k7, %k72277; KNL-NEXT: korw %k7, %k6, %k62278; KNL-NEXT: kandw %k3, %k6, %k62279; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2280; KNL-NEXT: kmovw %eax, %k72281; KNL-NEXT: kshiftlw $15, %k7, %k72282; KNL-NEXT: kshiftrw $7, %k7, %k72283; KNL-NEXT: korw %k7, %k6, %k62284; KNL-NEXT: kandw %k5, %k6, %k62285; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2286; KNL-NEXT: kmovw %eax, %k72287; KNL-NEXT: kshiftlw $15, %k7, %k72288; KNL-NEXT: kshiftrw $6, %k7, %k72289; KNL-NEXT: korw %k7, %k6, %k62290; KNL-NEXT: kandw %k4, %k6, %k52291; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2292; KNL-NEXT: kmovw %eax, %k62293; KNL-NEXT: kshiftlw $15, %k6, %k62294; KNL-NEXT: kshiftrw $5, %k6, %k62295; KNL-NEXT: korw %k6, %k5, %k52296; KNL-NEXT: kandw %k0, %k5, %k42297; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2298; KNL-NEXT: kmovw %eax, %k52299; KNL-NEXT: kshiftlw $15, %k5, %k52300; KNL-NEXT: kshiftrw $4, %k5, %k52301; KNL-NEXT: korw %k5, %k4, %k42302; KNL-NEXT: kandw %k2, %k4, %k32303; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2304; KNL-NEXT: kmovw %eax, %k42305; KNL-NEXT: kshiftlw $15, %k4, %k42306; KNL-NEXT: kshiftrw $3, %k4, %k42307; KNL-NEXT: korw %k4, %k3, %k32308; KNL-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k0 # 2-byte Reload2309; KNL-NEXT: kandw %k0, %k3, %k22310; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2311; KNL-NEXT: kmovw %eax, %k32312; KNL-NEXT: kshiftlw $15, %k3, %k32313; KNL-NEXT: kshiftrw $2, %k3, %k32314; KNL-NEXT: korw %k3, %k2, %k22315; KNL-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k0 # 2-byte Reload2316; KNL-NEXT: kandw %k0, %k2, %k02317; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2318; KNL-NEXT: kmovw %eax, %k22319; KNL-NEXT: kshiftlw $14, %k2, %k22320; KNL-NEXT: korw %k2, %k0, %k02321; KNL-NEXT: kshiftlw $1, %k0, %k02322; KNL-NEXT: kshiftrw $1, %k0, %k02323; KNL-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2324; KNL-NEXT: kmovw %eax, %k22325; KNL-NEXT: kshiftlw $15, %k2, %k22326; KNL-NEXT: korw %k2, %k0, %k22327; KNL-NEXT: vpternlogd {{.*#+}} zmm2 {%k2} {z} = -12328; KNL-NEXT: vpternlogd {{.*#+}} zmm3 {%k1} {z} = -12329; KNL-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k1 # 2-byte Reload2330; KNL-NEXT: vpternlogd {{.*#+}} zmm4 {%k1} {z} = -12331; KNL-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k1 # 2-byte Reload2332; KNL-NEXT: vpternlogd {{.*#+}} zmm5 {%k1} {z} = -12333; KNL-NEXT: vpmovdw %zmm2, %ymm22334; KNL-NEXT: vpmovdw %zmm3, %ymm32335; KNL-NEXT: vinserti64x4 $1, %ymm3, %zmm2, %zmm22336; KNL-NEXT: vpandq %zmm1, %zmm2, %zmm12337; KNL-NEXT: vpmovdw %zmm4, %ymm22338; KNL-NEXT: vpmovdw %zmm5, %ymm32339; KNL-NEXT: vinserti64x4 $1, %ymm3, %zmm2, %zmm22340; KNL-NEXT: vpandq %zmm0, %zmm2, %zmm02341; KNL-NEXT: retq2342;2343; SKX-LABEL: test21:2344; SKX: # %bb.0:2345; SKX-NEXT: vpsllw $7, %zmm2, %zmm22346; SKX-NEXT: vpmovb2m %zmm2, %k12347; SKX-NEXT: vmovdqu16 %zmm0, %zmm0 {%k1} {z}2348; SKX-NEXT: kshiftrq $32, %k1, %k12349; SKX-NEXT: vmovdqu16 %zmm1, %zmm1 {%k1} {z}2350; SKX-NEXT: retq2351;2352; AVX512DQNOBW-LABEL: test21:2353; AVX512DQNOBW: # %bb.0:2354; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2355; AVX512DQNOBW-NEXT: andl $1, %eax2356; AVX512DQNOBW-NEXT: kmovw %eax, %k02357; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2358; AVX512DQNOBW-NEXT: kmovw %eax, %k12359; AVX512DQNOBW-NEXT: kshiftlw $15, %k1, %k12360; AVX512DQNOBW-NEXT: kshiftrw $14, %k1, %k12361; AVX512DQNOBW-NEXT: korw %k1, %k0, %k02362; AVX512DQNOBW-NEXT: movw $-5, %ax2363; AVX512DQNOBW-NEXT: kmovw %eax, %k12364; AVX512DQNOBW-NEXT: kandw %k1, %k0, %k02365; AVX512DQNOBW-NEXT: kmovw %k1, %k22366; AVX512DQNOBW-NEXT: kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill2367; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2368; AVX512DQNOBW-NEXT: kmovw %eax, %k12369; AVX512DQNOBW-NEXT: kshiftlw $15, %k1, %k12370; AVX512DQNOBW-NEXT: kshiftrw $13, %k1, %k12371; AVX512DQNOBW-NEXT: korw %k1, %k0, %k02372; AVX512DQNOBW-NEXT: movw $-9, %ax2373; AVX512DQNOBW-NEXT: kmovw %eax, %k12374; AVX512DQNOBW-NEXT: kandw %k1, %k0, %k02375; AVX512DQNOBW-NEXT: kmovw %k1, %k72376; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2377; AVX512DQNOBW-NEXT: kmovw %eax, %k12378; AVX512DQNOBW-NEXT: kshiftlw $15, %k1, %k12379; AVX512DQNOBW-NEXT: kshiftrw $12, %k1, %k12380; AVX512DQNOBW-NEXT: korw %k1, %k0, %k02381; AVX512DQNOBW-NEXT: movw $-17, %ax2382; AVX512DQNOBW-NEXT: kmovw %eax, %k12383; AVX512DQNOBW-NEXT: kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill2384; AVX512DQNOBW-NEXT: kandw %k1, %k0, %k02385; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2386; AVX512DQNOBW-NEXT: kmovw %eax, %k12387; AVX512DQNOBW-NEXT: kshiftlw $15, %k1, %k12388; AVX512DQNOBW-NEXT: kshiftrw $11, %k1, %k12389; AVX512DQNOBW-NEXT: korw %k1, %k0, %k02390; AVX512DQNOBW-NEXT: movw $-33, %ax2391; AVX512DQNOBW-NEXT: kmovw %eax, %k12392; AVX512DQNOBW-NEXT: kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill2393; AVX512DQNOBW-NEXT: kandw %k1, %k0, %k02394; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2395; AVX512DQNOBW-NEXT: kmovw %eax, %k12396; AVX512DQNOBW-NEXT: kshiftlw $15, %k1, %k12397; AVX512DQNOBW-NEXT: kshiftrw $10, %k1, %k12398; AVX512DQNOBW-NEXT: korw %k1, %k0, %k02399; AVX512DQNOBW-NEXT: movw $-65, %ax2400; AVX512DQNOBW-NEXT: kmovw %eax, %k12401; AVX512DQNOBW-NEXT: kandw %k1, %k0, %k02402; AVX512DQNOBW-NEXT: kmovw %k1, %k32403; AVX512DQNOBW-NEXT: kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill2404; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2405; AVX512DQNOBW-NEXT: kmovw %eax, %k12406; AVX512DQNOBW-NEXT: kshiftlw $15, %k1, %k12407; AVX512DQNOBW-NEXT: kshiftrw $9, %k1, %k12408; AVX512DQNOBW-NEXT: korw %k1, %k0, %k02409; AVX512DQNOBW-NEXT: movw $-129, %ax2410; AVX512DQNOBW-NEXT: kmovw %eax, %k12411; AVX512DQNOBW-NEXT: kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill2412; AVX512DQNOBW-NEXT: kandw %k1, %k0, %k02413; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2414; AVX512DQNOBW-NEXT: kmovw %eax, %k12415; AVX512DQNOBW-NEXT: kshiftlw $15, %k1, %k12416; AVX512DQNOBW-NEXT: kshiftrw $8, %k1, %k12417; AVX512DQNOBW-NEXT: korw %k1, %k0, %k02418; AVX512DQNOBW-NEXT: movw $-257, %ax # imm = 0xFEFF2419; AVX512DQNOBW-NEXT: kmovw %eax, %k12420; AVX512DQNOBW-NEXT: kandw %k1, %k0, %k02421; AVX512DQNOBW-NEXT: kmovw %k1, %k42422; AVX512DQNOBW-NEXT: kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill2423; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2424; AVX512DQNOBW-NEXT: kmovw %eax, %k12425; AVX512DQNOBW-NEXT: kshiftlw $15, %k1, %k12426; AVX512DQNOBW-NEXT: kshiftrw $7, %k1, %k12427; AVX512DQNOBW-NEXT: korw %k1, %k0, %k02428; AVX512DQNOBW-NEXT: movw $-513, %ax # imm = 0xFDFF2429; AVX512DQNOBW-NEXT: kmovw %eax, %k52430; AVX512DQNOBW-NEXT: kandw %k5, %k0, %k02431; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2432; AVX512DQNOBW-NEXT: kmovw %eax, %k12433; AVX512DQNOBW-NEXT: kshiftlw $15, %k1, %k12434; AVX512DQNOBW-NEXT: kshiftrw $6, %k1, %k12435; AVX512DQNOBW-NEXT: korw %k1, %k0, %k02436; AVX512DQNOBW-NEXT: movw $-1025, %ax # imm = 0xFBFF2437; AVX512DQNOBW-NEXT: kmovw %eax, %k12438; AVX512DQNOBW-NEXT: kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill2439; AVX512DQNOBW-NEXT: kandw %k1, %k0, %k02440; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2441; AVX512DQNOBW-NEXT: kmovw %eax, %k12442; AVX512DQNOBW-NEXT: kshiftlw $15, %k1, %k12443; AVX512DQNOBW-NEXT: kshiftrw $5, %k1, %k12444; AVX512DQNOBW-NEXT: korw %k1, %k0, %k02445; AVX512DQNOBW-NEXT: movw $-2049, %ax # imm = 0xF7FF2446; AVX512DQNOBW-NEXT: kmovw %eax, %k12447; AVX512DQNOBW-NEXT: kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill2448; AVX512DQNOBW-NEXT: kandw %k1, %k0, %k02449; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2450; AVX512DQNOBW-NEXT: kmovw %eax, %k12451; AVX512DQNOBW-NEXT: kshiftlw $15, %k1, %k12452; AVX512DQNOBW-NEXT: kshiftrw $4, %k1, %k12453; AVX512DQNOBW-NEXT: korw %k1, %k0, %k02454; AVX512DQNOBW-NEXT: movw $-4097, %ax # imm = 0xEFFF2455; AVX512DQNOBW-NEXT: kmovw %eax, %k12456; AVX512DQNOBW-NEXT: kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill2457; AVX512DQNOBW-NEXT: kandw %k1, %k0, %k02458; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2459; AVX512DQNOBW-NEXT: kmovw %eax, %k12460; AVX512DQNOBW-NEXT: kshiftlw $15, %k1, %k12461; AVX512DQNOBW-NEXT: kshiftrw $3, %k1, %k12462; AVX512DQNOBW-NEXT: korw %k1, %k0, %k02463; AVX512DQNOBW-NEXT: movw $-8193, %ax # imm = 0xDFFF2464; AVX512DQNOBW-NEXT: kmovw %eax, %k12465; AVX512DQNOBW-NEXT: kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill2466; AVX512DQNOBW-NEXT: kandw %k1, %k0, %k02467; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2468; AVX512DQNOBW-NEXT: kmovw %eax, %k12469; AVX512DQNOBW-NEXT: kshiftlw $15, %k1, %k12470; AVX512DQNOBW-NEXT: kshiftrw $2, %k1, %k12471; AVX512DQNOBW-NEXT: korw %k1, %k0, %k12472; AVX512DQNOBW-NEXT: movw $-16385, %ax # imm = 0xBFFF2473; AVX512DQNOBW-NEXT: kmovw %eax, %k02474; AVX512DQNOBW-NEXT: kmovw %k0, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill2475; AVX512DQNOBW-NEXT: kandw %k0, %k1, %k12476; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2477; AVX512DQNOBW-NEXT: kmovw %eax, %k62478; AVX512DQNOBW-NEXT: kshiftlw $14, %k6, %k62479; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12480; AVX512DQNOBW-NEXT: kshiftlw $1, %k1, %k12481; AVX512DQNOBW-NEXT: kshiftrw $1, %k1, %k12482; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2483; AVX512DQNOBW-NEXT: kmovw %eax, %k62484; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62485; AVX512DQNOBW-NEXT: korw %k6, %k1, %k02486; AVX512DQNOBW-NEXT: kmovw %k0, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill2487; AVX512DQNOBW-NEXT: andl $1, %edi2488; AVX512DQNOBW-NEXT: kmovw %esi, %k12489; AVX512DQNOBW-NEXT: kshiftlw $15, %k1, %k12490; AVX512DQNOBW-NEXT: kshiftrw $14, %k1, %k12491; AVX512DQNOBW-NEXT: kmovw %edi, %k62492; AVX512DQNOBW-NEXT: korw %k1, %k6, %k12493; AVX512DQNOBW-NEXT: kandw %k2, %k1, %k12494; AVX512DQNOBW-NEXT: kmovw %edx, %k62495; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62496; AVX512DQNOBW-NEXT: kshiftrw $13, %k6, %k62497; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12498; AVX512DQNOBW-NEXT: kmovw %k7, %k02499; AVX512DQNOBW-NEXT: kmovw %k7, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill2500; AVX512DQNOBW-NEXT: kandw %k7, %k1, %k12501; AVX512DQNOBW-NEXT: kmovw %ecx, %k62502; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62503; AVX512DQNOBW-NEXT: kshiftrw $12, %k6, %k62504; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12505; AVX512DQNOBW-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k2 # 2-byte Reload2506; AVX512DQNOBW-NEXT: kandw %k2, %k1, %k12507; AVX512DQNOBW-NEXT: kmovw %r8d, %k62508; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62509; AVX512DQNOBW-NEXT: kshiftrw $11, %k6, %k62510; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12511; AVX512DQNOBW-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k7 # 2-byte Reload2512; AVX512DQNOBW-NEXT: kandw %k7, %k1, %k12513; AVX512DQNOBW-NEXT: kmovw %r9d, %k62514; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62515; AVX512DQNOBW-NEXT: kshiftrw $10, %k6, %k62516; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12517; AVX512DQNOBW-NEXT: kandw %k3, %k1, %k12518; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2519; AVX512DQNOBW-NEXT: kmovw %eax, %k62520; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62521; AVX512DQNOBW-NEXT: kshiftrw $9, %k6, %k62522; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12523; AVX512DQNOBW-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k3 # 2-byte Reload2524; AVX512DQNOBW-NEXT: kandw %k3, %k1, %k12525; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2526; AVX512DQNOBW-NEXT: kmovw %eax, %k62527; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62528; AVX512DQNOBW-NEXT: kshiftrw $8, %k6, %k62529; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12530; AVX512DQNOBW-NEXT: kandw %k4, %k1, %k12531; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2532; AVX512DQNOBW-NEXT: kmovw %eax, %k62533; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62534; AVX512DQNOBW-NEXT: kshiftrw $7, %k6, %k62535; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12536; AVX512DQNOBW-NEXT: kandw %k5, %k1, %k12537; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2538; AVX512DQNOBW-NEXT: kmovw %eax, %k62539; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62540; AVX512DQNOBW-NEXT: kshiftrw $6, %k6, %k62541; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12542; AVX512DQNOBW-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k4 # 2-byte Reload2543; AVX512DQNOBW-NEXT: kandw %k4, %k1, %k12544; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2545; AVX512DQNOBW-NEXT: kmovw %eax, %k62546; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62547; AVX512DQNOBW-NEXT: kshiftrw $5, %k6, %k62548; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12549; AVX512DQNOBW-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k6 # 2-byte Reload2550; AVX512DQNOBW-NEXT: kandw %k6, %k1, %k12551; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2552; AVX512DQNOBW-NEXT: kmovw %eax, %k62553; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62554; AVX512DQNOBW-NEXT: kshiftrw $4, %k6, %k62555; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12556; AVX512DQNOBW-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k6 # 2-byte Reload2557; AVX512DQNOBW-NEXT: kandw %k6, %k1, %k12558; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2559; AVX512DQNOBW-NEXT: kmovw %eax, %k62560; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62561; AVX512DQNOBW-NEXT: kshiftrw $3, %k6, %k62562; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12563; AVX512DQNOBW-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k6 # 2-byte Reload2564; AVX512DQNOBW-NEXT: kandw %k6, %k1, %k12565; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2566; AVX512DQNOBW-NEXT: kmovw %eax, %k62567; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62568; AVX512DQNOBW-NEXT: kshiftrw $2, %k6, %k62569; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12570; AVX512DQNOBW-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k6 # 2-byte Reload2571; AVX512DQNOBW-NEXT: kandw %k6, %k1, %k12572; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2573; AVX512DQNOBW-NEXT: kmovw %eax, %k62574; AVX512DQNOBW-NEXT: kshiftlw $14, %k6, %k62575; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12576; AVX512DQNOBW-NEXT: kshiftlw $1, %k1, %k12577; AVX512DQNOBW-NEXT: kshiftrw $1, %k1, %k12578; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2579; AVX512DQNOBW-NEXT: kmovw %eax, %k62580; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62581; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12582; AVX512DQNOBW-NEXT: kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill2583; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2584; AVX512DQNOBW-NEXT: andl $1, %eax2585; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %ecx2586; AVX512DQNOBW-NEXT: kmovw %ecx, %k12587; AVX512DQNOBW-NEXT: kshiftlw $15, %k1, %k12588; AVX512DQNOBW-NEXT: kshiftrw $14, %k1, %k12589; AVX512DQNOBW-NEXT: kmovw %eax, %k62590; AVX512DQNOBW-NEXT: korw %k1, %k6, %k12591; AVX512DQNOBW-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k6 # 2-byte Reload2592; AVX512DQNOBW-NEXT: kandw %k6, %k1, %k12593; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2594; AVX512DQNOBW-NEXT: kmovw %eax, %k62595; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62596; AVX512DQNOBW-NEXT: kshiftrw $13, %k6, %k62597; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12598; AVX512DQNOBW-NEXT: kandw %k0, %k1, %k12599; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2600; AVX512DQNOBW-NEXT: kmovw %eax, %k62601; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62602; AVX512DQNOBW-NEXT: kshiftrw $12, %k6, %k62603; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12604; AVX512DQNOBW-NEXT: kandw %k2, %k1, %k12605; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2606; AVX512DQNOBW-NEXT: kmovw %eax, %k62607; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62608; AVX512DQNOBW-NEXT: kshiftrw $11, %k6, %k62609; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12610; AVX512DQNOBW-NEXT: kandw %k7, %k1, %k12611; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2612; AVX512DQNOBW-NEXT: kmovw %eax, %k62613; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62614; AVX512DQNOBW-NEXT: kshiftrw $10, %k6, %k62615; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12616; AVX512DQNOBW-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k0 # 2-byte Reload2617; AVX512DQNOBW-NEXT: kandw %k0, %k1, %k12618; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2619; AVX512DQNOBW-NEXT: kmovw %eax, %k62620; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62621; AVX512DQNOBW-NEXT: kshiftrw $9, %k6, %k62622; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12623; AVX512DQNOBW-NEXT: kandw %k3, %k1, %k12624; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2625; AVX512DQNOBW-NEXT: kmovw %eax, %k62626; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62627; AVX512DQNOBW-NEXT: kshiftrw $8, %k6, %k62628; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12629; AVX512DQNOBW-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k3 # 2-byte Reload2630; AVX512DQNOBW-NEXT: kandw %k3, %k1, %k12631; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2632; AVX512DQNOBW-NEXT: kmovw %eax, %k62633; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62634; AVX512DQNOBW-NEXT: kshiftrw $7, %k6, %k62635; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12636; AVX512DQNOBW-NEXT: kandw %k5, %k1, %k12637; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2638; AVX512DQNOBW-NEXT: kmovw %eax, %k62639; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62640; AVX512DQNOBW-NEXT: kshiftrw $6, %k6, %k62641; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12642; AVX512DQNOBW-NEXT: kandw %k4, %k1, %k12643; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2644; AVX512DQNOBW-NEXT: kmovw %eax, %k62645; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62646; AVX512DQNOBW-NEXT: kshiftrw $5, %k6, %k62647; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12648; AVX512DQNOBW-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k0 # 2-byte Reload2649; AVX512DQNOBW-NEXT: kandw %k0, %k1, %k12650; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2651; AVX512DQNOBW-NEXT: kmovw %eax, %k62652; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62653; AVX512DQNOBW-NEXT: kshiftrw $4, %k6, %k62654; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12655; AVX512DQNOBW-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k2 # 2-byte Reload2656; AVX512DQNOBW-NEXT: kandw %k2, %k1, %k12657; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2658; AVX512DQNOBW-NEXT: kmovw %eax, %k62659; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62660; AVX512DQNOBW-NEXT: kshiftrw $3, %k6, %k62661; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12662; AVX512DQNOBW-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k6 # 2-byte Reload2663; AVX512DQNOBW-NEXT: kandw %k6, %k1, %k12664; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2665; AVX512DQNOBW-NEXT: kmovw %eax, %k62666; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62667; AVX512DQNOBW-NEXT: kshiftrw $2, %k6, %k62668; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12669; AVX512DQNOBW-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k6 # 2-byte Reload2670; AVX512DQNOBW-NEXT: kandw %k6, %k1, %k12671; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2672; AVX512DQNOBW-NEXT: kmovw %eax, %k62673; AVX512DQNOBW-NEXT: kshiftlw $14, %k6, %k62674; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12675; AVX512DQNOBW-NEXT: kshiftlw $1, %k1, %k12676; AVX512DQNOBW-NEXT: kshiftrw $1, %k1, %k12677; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2678; AVX512DQNOBW-NEXT: kmovw %eax, %k62679; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62680; AVX512DQNOBW-NEXT: korw %k6, %k1, %k12681; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2682; AVX512DQNOBW-NEXT: andl $1, %eax2683; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %ecx2684; AVX512DQNOBW-NEXT: kmovw %ecx, %k62685; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62686; AVX512DQNOBW-NEXT: kshiftrw $14, %k6, %k62687; AVX512DQNOBW-NEXT: kmovw %eax, %k72688; AVX512DQNOBW-NEXT: korw %k6, %k7, %k62689; AVX512DQNOBW-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k7 # 2-byte Reload2690; AVX512DQNOBW-NEXT: kandw %k7, %k6, %k62691; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2692; AVX512DQNOBW-NEXT: kmovw %eax, %k72693; AVX512DQNOBW-NEXT: kshiftlw $15, %k7, %k72694; AVX512DQNOBW-NEXT: kshiftrw $13, %k7, %k72695; AVX512DQNOBW-NEXT: korw %k7, %k6, %k62696; AVX512DQNOBW-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k7 # 2-byte Reload2697; AVX512DQNOBW-NEXT: kandw %k7, %k6, %k62698; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2699; AVX512DQNOBW-NEXT: kmovw %eax, %k72700; AVX512DQNOBW-NEXT: kshiftlw $15, %k7, %k72701; AVX512DQNOBW-NEXT: kshiftrw $12, %k7, %k72702; AVX512DQNOBW-NEXT: korw %k7, %k6, %k62703; AVX512DQNOBW-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k7 # 2-byte Reload2704; AVX512DQNOBW-NEXT: kandw %k7, %k6, %k62705; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2706; AVX512DQNOBW-NEXT: kmovw %eax, %k72707; AVX512DQNOBW-NEXT: kshiftlw $15, %k7, %k72708; AVX512DQNOBW-NEXT: kshiftrw $11, %k7, %k72709; AVX512DQNOBW-NEXT: korw %k7, %k6, %k62710; AVX512DQNOBW-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k7 # 2-byte Reload2711; AVX512DQNOBW-NEXT: kandw %k7, %k6, %k62712; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2713; AVX512DQNOBW-NEXT: kmovw %eax, %k72714; AVX512DQNOBW-NEXT: kshiftlw $15, %k7, %k72715; AVX512DQNOBW-NEXT: kshiftrw $10, %k7, %k72716; AVX512DQNOBW-NEXT: korw %k7, %k6, %k62717; AVX512DQNOBW-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k7 # 2-byte Reload2718; AVX512DQNOBW-NEXT: kandw %k7, %k6, %k62719; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2720; AVX512DQNOBW-NEXT: kmovw %eax, %k72721; AVX512DQNOBW-NEXT: kshiftlw $15, %k7, %k72722; AVX512DQNOBW-NEXT: kshiftrw $9, %k7, %k72723; AVX512DQNOBW-NEXT: korw %k7, %k6, %k62724; AVX512DQNOBW-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k7 # 2-byte Reload2725; AVX512DQNOBW-NEXT: kandw %k7, %k6, %k62726; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2727; AVX512DQNOBW-NEXT: kmovw %eax, %k72728; AVX512DQNOBW-NEXT: kshiftlw $15, %k7, %k72729; AVX512DQNOBW-NEXT: kshiftrw $8, %k7, %k72730; AVX512DQNOBW-NEXT: korw %k7, %k6, %k62731; AVX512DQNOBW-NEXT: kandw %k3, %k6, %k62732; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2733; AVX512DQNOBW-NEXT: kmovw %eax, %k72734; AVX512DQNOBW-NEXT: kshiftlw $15, %k7, %k72735; AVX512DQNOBW-NEXT: kshiftrw $7, %k7, %k72736; AVX512DQNOBW-NEXT: korw %k7, %k6, %k62737; AVX512DQNOBW-NEXT: kandw %k5, %k6, %k62738; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2739; AVX512DQNOBW-NEXT: kmovw %eax, %k72740; AVX512DQNOBW-NEXT: kshiftlw $15, %k7, %k72741; AVX512DQNOBW-NEXT: kshiftrw $6, %k7, %k72742; AVX512DQNOBW-NEXT: korw %k7, %k6, %k62743; AVX512DQNOBW-NEXT: kandw %k4, %k6, %k52744; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2745; AVX512DQNOBW-NEXT: kmovw %eax, %k62746; AVX512DQNOBW-NEXT: kshiftlw $15, %k6, %k62747; AVX512DQNOBW-NEXT: kshiftrw $5, %k6, %k62748; AVX512DQNOBW-NEXT: korw %k6, %k5, %k52749; AVX512DQNOBW-NEXT: kandw %k0, %k5, %k42750; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2751; AVX512DQNOBW-NEXT: kmovw %eax, %k52752; AVX512DQNOBW-NEXT: kshiftlw $15, %k5, %k52753; AVX512DQNOBW-NEXT: kshiftrw $4, %k5, %k52754; AVX512DQNOBW-NEXT: korw %k5, %k4, %k42755; AVX512DQNOBW-NEXT: kandw %k2, %k4, %k32756; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2757; AVX512DQNOBW-NEXT: kmovw %eax, %k42758; AVX512DQNOBW-NEXT: kshiftlw $15, %k4, %k42759; AVX512DQNOBW-NEXT: kshiftrw $3, %k4, %k42760; AVX512DQNOBW-NEXT: korw %k4, %k3, %k32761; AVX512DQNOBW-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k0 # 2-byte Reload2762; AVX512DQNOBW-NEXT: kandw %k0, %k3, %k22763; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2764; AVX512DQNOBW-NEXT: kmovw %eax, %k32765; AVX512DQNOBW-NEXT: kshiftlw $15, %k3, %k32766; AVX512DQNOBW-NEXT: kshiftrw $2, %k3, %k32767; AVX512DQNOBW-NEXT: korw %k3, %k2, %k22768; AVX512DQNOBW-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k0 # 2-byte Reload2769; AVX512DQNOBW-NEXT: kandw %k0, %k2, %k02770; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2771; AVX512DQNOBW-NEXT: kmovw %eax, %k22772; AVX512DQNOBW-NEXT: kshiftlw $14, %k2, %k22773; AVX512DQNOBW-NEXT: korw %k2, %k0, %k02774; AVX512DQNOBW-NEXT: kshiftlw $1, %k0, %k02775; AVX512DQNOBW-NEXT: kshiftrw $1, %k0, %k02776; AVX512DQNOBW-NEXT: movzbl {{[0-9]+}}(%rsp), %eax2777; AVX512DQNOBW-NEXT: kmovw %eax, %k22778; AVX512DQNOBW-NEXT: kshiftlw $15, %k2, %k22779; AVX512DQNOBW-NEXT: korw %k2, %k0, %k02780; AVX512DQNOBW-NEXT: vpmovm2d %k0, %zmm22781; AVX512DQNOBW-NEXT: vpmovm2d %k1, %zmm32782; AVX512DQNOBW-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k0 # 2-byte Reload2783; AVX512DQNOBW-NEXT: vpmovm2d %k0, %zmm42784; AVX512DQNOBW-NEXT: kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k0 # 2-byte Reload2785; AVX512DQNOBW-NEXT: vpmovm2d %k0, %zmm52786; AVX512DQNOBW-NEXT: vpmovdw %zmm2, %ymm22787; AVX512DQNOBW-NEXT: vpmovdw %zmm3, %ymm32788; AVX512DQNOBW-NEXT: vinserti64x4 $1, %ymm3, %zmm2, %zmm22789; AVX512DQNOBW-NEXT: vpandq %zmm1, %zmm2, %zmm12790; AVX512DQNOBW-NEXT: vpmovdw %zmm4, %ymm22791; AVX512DQNOBW-NEXT: vpmovdw %zmm5, %ymm32792; AVX512DQNOBW-NEXT: vinserti64x4 $1, %ymm3, %zmm2, %zmm22793; AVX512DQNOBW-NEXT: vpandq %zmm0, %zmm2, %zmm02794; AVX512DQNOBW-NEXT: retq2795 %ret = select <64 x i1> %mask, <64 x i16> %x, <64 x i16> zeroinitializer2796 ret <64 x i16> %ret2797}2798 2799define <16 x i16> @shuffle_zext_16x8_to_16x16(<16 x i8> %a) nounwind readnone {2800; ALL-LABEL: shuffle_zext_16x8_to_16x16:2801; ALL: # %bb.0:2802; ALL-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero2803; ALL-NEXT: retq2804 %1 = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <32 x i32> <i32 0, i32 16, i32 1, i32 16, i32 2, i32 16, i32 3, i32 16, i32 4, i32 16, i32 5, i32 16, i32 6, i32 16, i32 7, i32 16, i32 8, i32 16, i32 9, i32 16, i32 10, i32 16, i32 11, i32 16, i32 12, i32 16, i32 13, i32 16, i32 14, i32 16, i32 15, i32 16>2805 %2 = bitcast <32 x i8> %1 to <16 x i16>2806 ret <16 x i16> %22807}2808 2809define <16 x i16> @shuffle_zext_16x8_to_16x16_mask(<16 x i8> %a, <16 x i1> %mask) nounwind readnone {2810; KNL-LABEL: shuffle_zext_16x8_to_16x16_mask:2811; KNL: # %bb.0:2812; KNL-NEXT: vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero2813; KNL-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero2814; KNL-NEXT: vpsllw $15, %ymm1, %ymm12815; KNL-NEXT: vpsraw $15, %ymm1, %ymm12816; KNL-NEXT: vpand %ymm0, %ymm1, %ymm02817; KNL-NEXT: retq2818;2819; SKX-LABEL: shuffle_zext_16x8_to_16x16_mask:2820; SKX: # %bb.0:2821; SKX-NEXT: vpsllw $7, %xmm1, %xmm12822; SKX-NEXT: vpmovb2m %xmm1, %k12823; SKX-NEXT: vpmovzxbw {{.*#+}} ymm0 {%k1} {z} = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero2824; SKX-NEXT: retq2825;2826; AVX512DQNOBW-LABEL: shuffle_zext_16x8_to_16x16_mask:2827; AVX512DQNOBW: # %bb.0:2828; AVX512DQNOBW-NEXT: vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero2829; AVX512DQNOBW-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero2830; AVX512DQNOBW-NEXT: vpsllw $15, %ymm1, %ymm12831; AVX512DQNOBW-NEXT: vpsraw $15, %ymm1, %ymm12832; AVX512DQNOBW-NEXT: vpand %ymm0, %ymm1, %ymm02833; AVX512DQNOBW-NEXT: retq2834 %x = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <32 x i32> <i32 0, i32 16, i32 1, i32 16, i32 2, i32 16, i32 3, i32 16, i32 4, i32 16, i32 5, i32 16, i32 6, i32 16, i32 7, i32 16, i32 8, i32 16, i32 9, i32 16, i32 10, i32 16, i32 11, i32 16, i32 12, i32 16, i32 13, i32 16, i32 14, i32 16, i32 15, i32 16>2835 %bc = bitcast <32 x i8> %x to <16 x i16>2836 %ret = select <16 x i1> %mask, <16 x i16> %bc, <16 x i16> zeroinitializer2837 ret <16 x i16> %ret2838}2839 2840define <16 x i16> @zext_32x8_to_16x16(<32 x i8> %a) {2841; ALL-LABEL: zext_32x8_to_16x16:2842; ALL: # %bb.0:2843; ALL-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero2844; ALL-NEXT: retq2845 %1 = shufflevector <32 x i8> %a, <32 x i8> zeroinitializer, <32 x i32> <i32 0, i32 32, i32 1, i32 32, i32 2, i32 32, i32 3, i32 32, i32 4, i32 32, i32 5, i32 32, i32 6, i32 32, i32 7, i32 32, i32 8, i32 32, i32 9, i32 32, i32 10, i32 32, i32 11, i32 32, i32 12, i32 32, i32 13, i32 32, i32 14, i32 32, i32 15, i32 32>2846 %2 = bitcast <32 x i8> %1 to <16 x i16>2847 ret <16 x i16> %22848}2849 2850define <8 x i32> @zext_32x8_to_8x32(<32 x i8> %a) {2851; ALL-LABEL: zext_32x8_to_8x32:2852; ALL: # %bb.0:2853; ALL-NEXT: vpmovzxbd {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero2854; ALL-NEXT: retq2855 %1 = shufflevector <32 x i8> %a, <32 x i8> zeroinitializer, <32 x i32> <i32 0, i32 32, i32 32, i32 32, i32 1, i32 32, i32 32, i32 32, i32 2, i32 32, i32 32, i32 32, i32 3, i32 32, i32 32, i32 32, i32 4, i32 32, i32 32, i32 32, i32 5, i32 32, i32 32, i32 32, i32 6, i32 32, i32 32, i32 32, i32 7, i32 32, i32 32, i32 32>2856 %2 = bitcast <32 x i8> %1 to <8 x i32>2857 ret <8 x i32> %22858}2859 2860define <4 x i64> @zext_32x8_to_4x64(<32 x i8> %a) {2861; ALL-LABEL: zext_32x8_to_4x64:2862; ALL: # %bb.0:2863; ALL-NEXT: vpmovzxbq {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero,xmm0[2],zero,zero,zero,zero,zero,zero,zero,xmm0[3],zero,zero,zero,zero,zero,zero,zero2864; ALL-NEXT: retq2865 %1 = shufflevector <32 x i8> %a, <32 x i8> zeroinitializer, <32 x i32> <i32 0, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 1, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 2, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 3, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32>2866 %2 = bitcast <32 x i8> %1 to <4 x i64>2867 ret <4 x i64> %22868}2869 2870define <8 x i32> @zext_16x16_to_8x32(<16 x i16> %a) {2871; ALL-LABEL: zext_16x16_to_8x32:2872; ALL: # %bb.0:2873; ALL-NEXT: vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero2874; ALL-NEXT: retq2875 %1 = shufflevector <16 x i16> %a, <16 x i16> zeroinitializer, <16 x i32> <i32 0, i32 16, i32 1, i32 16, i32 2, i32 16, i32 3, i32 16, i32 4, i32 16, i32 5, i32 16, i32 6, i32 16, i32 7, i32 16>2876 %2 = bitcast <16 x i16> %1 to <8 x i32>2877 ret <8 x i32> %22878}2879 2880define <4 x i64> @zext_16x16_to_4x64(<16 x i16> %a) {2881; ALL-LABEL: zext_16x16_to_4x64:2882; ALL: # %bb.0:2883; ALL-NEXT: vpmovzxwq {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero2884; ALL-NEXT: retq2885 %1 = shufflevector <16 x i16> %a, <16 x i16> zeroinitializer, <16 x i32> <i32 0, i32 16, i32 16, i32 16, i32 1, i32 16, i32 16, i32 16, i32 2, i32 16, i32 16, i32 16, i32 3, i32 16, i32 16, i32 16>2886 %2 = bitcast <16 x i16> %1 to <4 x i64>2887 ret <4 x i64> %22888}2889 2890define <4 x i64> @zext_8x32_to_4x64(<8 x i32> %a) {2891; ALL-LABEL: zext_8x32_to_4x64:2892; ALL: # %bb.0:2893; ALL-NEXT: vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero2894; ALL-NEXT: retq2895 %1 = shufflevector <8 x i32> %a, <8 x i32> zeroinitializer, <8 x i32> <i32 0, i32 8, i32 1, i32 8, i32 2, i32 8, i32 3, i32 8>2896 %2 = bitcast <8 x i32> %1 to <4 x i64>2897 ret <4 x i64> %22898}2899 2900define <64 x i8> @zext_64xi1_to_64xi8(<64 x i8> %x, <64 x i8> %y) #0 {2901; KNL-LABEL: zext_64xi1_to_64xi8:2902; KNL: # %bb.0:2903; KNL-NEXT: vextracti64x4 $1, %zmm1, %ymm22904; KNL-NEXT: vextracti64x4 $1, %zmm0, %ymm32905; KNL-NEXT: vpcmpeqb %ymm2, %ymm3, %ymm22906; KNL-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm02907; KNL-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm02908; KNL-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm02909; KNL-NEXT: retq2910;2911; SKX-LABEL: zext_64xi1_to_64xi8:2912; SKX: # %bb.0:2913; SKX-NEXT: vpcmpeqb %zmm1, %zmm0, %k12914; SKX-NEXT: vmovdqu8 {{.*#+}} zmm0 {%k1} {z} = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]2915; SKX-NEXT: retq2916;2917; AVX512DQNOBW-LABEL: zext_64xi1_to_64xi8:2918; AVX512DQNOBW: # %bb.0:2919; AVX512DQNOBW-NEXT: vextracti64x4 $1, %zmm1, %ymm22920; AVX512DQNOBW-NEXT: vextracti64x4 $1, %zmm0, %ymm32921; AVX512DQNOBW-NEXT: vpcmpeqb %ymm2, %ymm3, %ymm22922; AVX512DQNOBW-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm02923; AVX512DQNOBW-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm02924; AVX512DQNOBW-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm02925; AVX512DQNOBW-NEXT: retq2926 %mask = icmp eq <64 x i8> %x, %y2927 %1 = zext <64 x i1> %mask to <64 x i8>2928 ret <64 x i8> %12929}2930 2931define <32 x i16> @zext_32xi1_to_32xi16(<32 x i16> %x, <32 x i16> %y) #0 {2932; KNL-LABEL: zext_32xi1_to_32xi16:2933; KNL: # %bb.0:2934; KNL-NEXT: vextracti64x4 $1, %zmm1, %ymm22935; KNL-NEXT: vextracti64x4 $1, %zmm0, %ymm32936; KNL-NEXT: vpcmpeqw %ymm2, %ymm3, %ymm22937; KNL-NEXT: vpcmpeqw %ymm1, %ymm0, %ymm02938; KNL-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm02939; KNL-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm02940; KNL-NEXT: retq2941;2942; SKX-LABEL: zext_32xi1_to_32xi16:2943; SKX: # %bb.0:2944; SKX-NEXT: vpcmpeqw %zmm1, %zmm0, %k02945; SKX-NEXT: vpmovm2w %k0, %zmm02946; SKX-NEXT: vpsrlw $15, %zmm0, %zmm02947; SKX-NEXT: retq2948;2949; AVX512DQNOBW-LABEL: zext_32xi1_to_32xi16:2950; AVX512DQNOBW: # %bb.0:2951; AVX512DQNOBW-NEXT: vextracti64x4 $1, %zmm1, %ymm22952; AVX512DQNOBW-NEXT: vextracti64x4 $1, %zmm0, %ymm32953; AVX512DQNOBW-NEXT: vpcmpeqw %ymm2, %ymm3, %ymm22954; AVX512DQNOBW-NEXT: vpcmpeqw %ymm1, %ymm0, %ymm02955; AVX512DQNOBW-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm02956; AVX512DQNOBW-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm02957; AVX512DQNOBW-NEXT: retq2958 %mask = icmp eq <32 x i16> %x, %y2959 %1 = zext <32 x i1> %mask to <32 x i16>2960 ret <32 x i16> %12961}2962 2963define <16 x i16> @zext_16xi1_to_16xi16(<16 x i16> %x, <16 x i16> %y) #0 {2964; ALL-LABEL: zext_16xi1_to_16xi16:2965; ALL: # %bb.0:2966; ALL-NEXT: vpcmpeqw %ymm1, %ymm0, %ymm02967; ALL-NEXT: vpsrlw $15, %ymm0, %ymm02968; ALL-NEXT: retq2969 %mask = icmp eq <16 x i16> %x, %y2970 %1 = zext <16 x i1> %mask to <16 x i16>2971 ret <16 x i16> %12972}2973 2974 2975define <32 x i8> @zext_32xi1_to_32xi8(<32 x i16> %x, <32 x i16> %y) #0 {2976; KNL-LABEL: zext_32xi1_to_32xi8:2977; KNL: # %bb.0:2978; KNL-NEXT: vextracti64x4 $1, %zmm1, %ymm22979; KNL-NEXT: vextracti64x4 $1, %zmm0, %ymm32980; KNL-NEXT: vpcmpeqw %ymm2, %ymm3, %ymm22981; KNL-NEXT: vpcmpeqw %ymm1, %ymm0, %ymm02982; KNL-NEXT: vpacksswb %ymm2, %ymm0, %ymm02983; KNL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]2984; KNL-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02985; KNL-NEXT: retq2986;2987; SKX-LABEL: zext_32xi1_to_32xi8:2988; SKX: # %bb.0:2989; SKX-NEXT: vpcmpeqw %zmm1, %zmm0, %k12990; SKX-NEXT: vmovdqu8 {{.*#+}} ymm0 {%k1} {z} = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]2991; SKX-NEXT: retq2992;2993; AVX512DQNOBW-LABEL: zext_32xi1_to_32xi8:2994; AVX512DQNOBW: # %bb.0:2995; AVX512DQNOBW-NEXT: vextracti64x4 $1, %zmm1, %ymm22996; AVX512DQNOBW-NEXT: vextracti64x4 $1, %zmm0, %ymm32997; AVX512DQNOBW-NEXT: vpcmpeqw %ymm2, %ymm3, %ymm22998; AVX512DQNOBW-NEXT: vpcmpeqw %ymm1, %ymm0, %ymm02999; AVX512DQNOBW-NEXT: vpacksswb %ymm2, %ymm0, %ymm03000; AVX512DQNOBW-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]3001; AVX512DQNOBW-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm03002; AVX512DQNOBW-NEXT: retq3003 %mask = icmp eq <32 x i16> %x, %y3004 %1 = zext <32 x i1> %mask to <32 x i8>3005 ret <32 x i8> %13006}3007 3008define <4 x i32> @zext_4xi1_to_4x32(<4 x i8> %x, <4 x i8> %y) #0 {3009; KNL-LABEL: zext_4xi1_to_4x32:3010; KNL: # %bb.0:3011; KNL-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm03012; KNL-NEXT: vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero3013; KNL-NEXT: vpbroadcastd {{.*#+}} xmm1 = [1,1,1,1]3014; KNL-NEXT: vpand %xmm1, %xmm0, %xmm03015; KNL-NEXT: retq3016;3017; SKX-LABEL: zext_4xi1_to_4x32:3018; SKX: # %bb.0:3019; SKX-NEXT: vpcmpeqb %xmm1, %xmm0, %k03020; SKX-NEXT: vpmovm2d %k0, %xmm03021; SKX-NEXT: vpsrld $31, %xmm0, %xmm03022; SKX-NEXT: retq3023;3024; AVX512DQNOBW-LABEL: zext_4xi1_to_4x32:3025; AVX512DQNOBW: # %bb.0:3026; AVX512DQNOBW-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm03027; AVX512DQNOBW-NEXT: vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero3028; AVX512DQNOBW-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm03029; AVX512DQNOBW-NEXT: retq3030 %mask = icmp eq <4 x i8> %x, %y3031 %1 = zext <4 x i1> %mask to <4 x i32>3032 ret <4 x i32> %13033}3034 3035define <2 x i64> @zext_2xi1_to_2xi64(<2 x i8> %x, <2 x i8> %y) #0 {3036; KNL-LABEL: zext_2xi1_to_2xi64:3037; KNL: # %bb.0:3038; KNL-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm03039; KNL-NEXT: vpmovzxbq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero3040; KNL-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm03041; KNL-NEXT: retq3042;3043; SKX-LABEL: zext_2xi1_to_2xi64:3044; SKX: # %bb.0:3045; SKX-NEXT: vpcmpeqb %xmm1, %xmm0, %k03046; SKX-NEXT: vpmovm2q %k0, %xmm03047; SKX-NEXT: vpsrlq $63, %xmm0, %xmm03048; SKX-NEXT: retq3049;3050; AVX512DQNOBW-LABEL: zext_2xi1_to_2xi64:3051; AVX512DQNOBW: # %bb.0:3052; AVX512DQNOBW-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm03053; AVX512DQNOBW-NEXT: vpmovzxbq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero3054; AVX512DQNOBW-NEXT: vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm03055; AVX512DQNOBW-NEXT: retq3056 %mask = icmp eq <2 x i8> %x, %y3057 %1 = zext <2 x i1> %mask to <2 x i64>3058 ret <2 x i64> %13059}3060