brintos

brintos / llvm-project-archived public Read only

0
0
Text · 139.0 KiB · 7b0f1c9 Raw
2737 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE23; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+ssse3 | FileCheck %s --check-prefix=SSE --check-prefix=SSSE34; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=SSE --check-prefix=SSE415; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX16; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=AVX --check-prefix=AVX2 --check-prefix=AVX2-SLOW7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefix=AVX --check-prefix=AVX2 --check-prefix=AVX2-FAST8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-perlane-shuffle | FileCheck %s --check-prefix=AVX --check-prefix=AVX2 --check-prefix=AVX2-FAST9; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512F10; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX512,AVX512BW11; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX512,AVX512BW12 13define <8 x i16> @zext_16i8_to_8i16(<16 x i8> %A) nounwind uwtable readnone ssp {14; SSE2-LABEL: zext_16i8_to_8i16:15; SSE2:       # %bb.0: # %entry16; SSE2-NEXT:    pxor %xmm1, %xmm117; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]18; SSE2-NEXT:    retq19;20; SSSE3-LABEL: zext_16i8_to_8i16:21; SSSE3:       # %bb.0: # %entry22; SSSE3-NEXT:    pxor %xmm1, %xmm123; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]24; SSSE3-NEXT:    retq25;26; SSE41-LABEL: zext_16i8_to_8i16:27; SSE41:       # %bb.0: # %entry28; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero29; SSE41-NEXT:    retq30;31; AVX-LABEL: zext_16i8_to_8i16:32; AVX:       # %bb.0: # %entry33; AVX-NEXT:    vpmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero34; AVX-NEXT:    retq35entry:36  %B = shufflevector <16 x i8> %A, <16 x i8> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>37  %C = zext <8 x i8> %B to <8 x i16>38  ret <8 x i16> %C39}40 41; PR1765442define <16 x i16> @zext_16i8_to_16i16(<16 x i8> %A) {43; SSE2-LABEL: zext_16i8_to_16i16:44; SSE2:       # %bb.0: # %entry45; SSE2-NEXT:    movdqa %xmm0, %xmm146; SSE2-NEXT:    pxor %xmm2, %xmm247; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]48; SSE2-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm2[8],xmm1[9],xmm2[9],xmm1[10],xmm2[10],xmm1[11],xmm2[11],xmm1[12],xmm2[12],xmm1[13],xmm2[13],xmm1[14],xmm2[14],xmm1[15],xmm2[15]49; SSE2-NEXT:    retq50;51; SSSE3-LABEL: zext_16i8_to_16i16:52; SSSE3:       # %bb.0: # %entry53; SSSE3-NEXT:    movdqa %xmm0, %xmm154; SSSE3-NEXT:    pxor %xmm2, %xmm255; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]56; SSSE3-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm2[8],xmm1[9],xmm2[9],xmm1[10],xmm2[10],xmm1[11],xmm2[11],xmm1[12],xmm2[12],xmm1[13],xmm2[13],xmm1[14],xmm2[14],xmm1[15],xmm2[15]57; SSSE3-NEXT:    retq58;59; SSE41-LABEL: zext_16i8_to_16i16:60; SSE41:       # %bb.0: # %entry61; SSE41-NEXT:    movdqa %xmm0, %xmm162; SSE41-NEXT:    pxor %xmm2, %xmm263; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero64; SSE41-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm2[8],xmm1[9],xmm2[9],xmm1[10],xmm2[10],xmm1[11],xmm2[11],xmm1[12],xmm2[12],xmm1[13],xmm2[13],xmm1[14],xmm2[14],xmm1[15],xmm2[15]65; SSE41-NEXT:    retq66;67; AVX1-LABEL: zext_16i8_to_16i16:68; AVX1:       # %bb.0: # %entry69; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm170; AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm1 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]71; AVX1-NEXT:    vpmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero72; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm073; AVX1-NEXT:    retq74;75; AVX2-LABEL: zext_16i8_to_16i16:76; AVX2:       # %bb.0: # %entry77; AVX2-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],zero78; AVX2-NEXT:    retq79;80; AVX512-LABEL: zext_16i8_to_16i16:81; AVX512:       # %bb.0: # %entry82; AVX512-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],zero83; AVX512-NEXT:    retq84entry:85  %B = zext <16 x i8> %A to <16 x i16>86  ret <16 x i16> %B87}88 89define <32 x i16> @zext_32i8_to_32i16(<32 x i8> %A) {90; SSE2-LABEL: zext_32i8_to_32i16:91; SSE2:       # %bb.0: # %entry92; SSE2-NEXT:    movdqa %xmm1, %xmm393; SSE2-NEXT:    movdqa %xmm0, %xmm194; SSE2-NEXT:    pxor %xmm4, %xmm495; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7]96; SSE2-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm4[8],xmm1[9],xmm4[9],xmm1[10],xmm4[10],xmm1[11],xmm4[11],xmm1[12],xmm4[12],xmm1[13],xmm4[13],xmm1[14],xmm4[14],xmm1[15],xmm4[15]97; SSE2-NEXT:    movdqa %xmm3, %xmm298; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1],xmm2[2],xmm4[2],xmm2[3],xmm4[3],xmm2[4],xmm4[4],xmm2[5],xmm4[5],xmm2[6],xmm4[6],xmm2[7],xmm4[7]99; SSE2-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm4[8],xmm3[9],xmm4[9],xmm3[10],xmm4[10],xmm3[11],xmm4[11],xmm3[12],xmm4[12],xmm3[13],xmm4[13],xmm3[14],xmm4[14],xmm3[15],xmm4[15]100; SSE2-NEXT:    retq101;102; SSSE3-LABEL: zext_32i8_to_32i16:103; SSSE3:       # %bb.0: # %entry104; SSSE3-NEXT:    movdqa %xmm1, %xmm3105; SSSE3-NEXT:    movdqa %xmm0, %xmm1106; SSSE3-NEXT:    pxor %xmm4, %xmm4107; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7]108; SSSE3-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm4[8],xmm1[9],xmm4[9],xmm1[10],xmm4[10],xmm1[11],xmm4[11],xmm1[12],xmm4[12],xmm1[13],xmm4[13],xmm1[14],xmm4[14],xmm1[15],xmm4[15]109; SSSE3-NEXT:    movdqa %xmm3, %xmm2110; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1],xmm2[2],xmm4[2],xmm2[3],xmm4[3],xmm2[4],xmm4[4],xmm2[5],xmm4[5],xmm2[6],xmm4[6],xmm2[7],xmm4[7]111; SSSE3-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm4[8],xmm3[9],xmm4[9],xmm3[10],xmm4[10],xmm3[11],xmm4[11],xmm3[12],xmm4[12],xmm3[13],xmm4[13],xmm3[14],xmm4[14],xmm3[15],xmm4[15]112; SSSE3-NEXT:    retq113;114; SSE41-LABEL: zext_32i8_to_32i16:115; SSE41:       # %bb.0: # %entry116; SSE41-NEXT:    movdqa %xmm1, %xmm3117; SSE41-NEXT:    movdqa %xmm0, %xmm1118; SSE41-NEXT:    pxor %xmm4, %xmm4119; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero120; SSE41-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm4[8],xmm1[9],xmm4[9],xmm1[10],xmm4[10],xmm1[11],xmm4[11],xmm1[12],xmm4[12],xmm1[13],xmm4[13],xmm1[14],xmm4[14],xmm1[15],xmm4[15]121; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm2 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero,xmm3[4],zero,xmm3[5],zero,xmm3[6],zero,xmm3[7],zero122; SSE41-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm4[8],xmm3[9],xmm4[9],xmm3[10],xmm4[10],xmm3[11],xmm4[11],xmm3[12],xmm4[12],xmm3[13],xmm4[13],xmm3[14],xmm4[14],xmm3[15],xmm4[15]123; SSE41-NEXT:    retq124;125; AVX1-LABEL: zext_32i8_to_32i16:126; AVX1:       # %bb.0: # %entry127; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1128; AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm2 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]129; AVX1-NEXT:    vpmovzxbw {{.*#+}} xmm3 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero130; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2131; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0132; AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm1 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]133; AVX1-NEXT:    vpmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero134; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm1135; AVX1-NEXT:    vmovaps %ymm2, %ymm0136; AVX1-NEXT:    retq137;138; AVX2-LABEL: zext_32i8_to_32i16:139; AVX2:       # %bb.0: # %entry140; AVX2-NEXT:    vpmovzxbw {{.*#+}} ymm2 = 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],zero141; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0142; AVX2-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],zero143; AVX2-NEXT:    vmovdqa %ymm2, %ymm0144; AVX2-NEXT:    retq145;146; AVX512F-LABEL: zext_32i8_to_32i16:147; AVX512F:       # %bb.0: # %entry148; AVX512F-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],zero149; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm0150; AVX512F-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],zero151; AVX512F-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0152; AVX512F-NEXT:    retq153;154; AVX512BW-LABEL: zext_32i8_to_32i16:155; AVX512BW:       # %bb.0: # %entry156; AVX512BW-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],zero157; AVX512BW-NEXT:    retq158entry:159  %B = zext <32 x i8> %A to <32 x i16>160  ret <32 x i16> %B161}162 163define <4 x i32> @zext_16i8_to_4i32(<16 x i8> %A) nounwind uwtable readnone ssp {164; SSE2-LABEL: zext_16i8_to_4i32:165; SSE2:       # %bb.0: # %entry166; SSE2-NEXT:    pxor %xmm1, %xmm1167; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]168; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]169; SSE2-NEXT:    retq170;171; SSSE3-LABEL: zext_16i8_to_4i32:172; SSSE3:       # %bb.0: # %entry173; SSSE3-NEXT:    pxor %xmm1, %xmm1174; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]175; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]176; SSSE3-NEXT:    retq177;178; SSE41-LABEL: zext_16i8_to_4i32:179; SSE41:       # %bb.0: # %entry180; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero181; SSE41-NEXT:    retq182;183; AVX-LABEL: zext_16i8_to_4i32:184; AVX:       # %bb.0: # %entry185; AVX-NEXT:    vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero186; AVX-NEXT:    retq187entry:188  %B = shufflevector <16 x i8> %A, <16 x i8> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>189  %C = zext <4 x i8> %B to <4 x i32>190  ret <4 x i32> %C191}192 193define <8 x i32> @zext_16i8_to_8i32(<16 x i8> %A) nounwind uwtable readnone ssp {194; SSE2-LABEL: zext_16i8_to_8i32:195; SSE2:       # %bb.0: # %entry196; SSE2-NEXT:    movdqa %xmm0, %xmm1197; SSE2-NEXT:    pxor %xmm2, %xmm2198; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]199; SSE2-NEXT:    movdqa %xmm1, %xmm0200; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]201; SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]202; SSE2-NEXT:    retq203;204; SSSE3-LABEL: zext_16i8_to_8i32:205; SSSE3:       # %bb.0: # %entry206; SSSE3-NEXT:    movdqa %xmm0, %xmm1207; SSSE3-NEXT:    pxor %xmm2, %xmm2208; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]209; SSSE3-NEXT:    movdqa %xmm1, %xmm0210; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]211; SSSE3-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]212; SSSE3-NEXT:    retq213;214; SSE41-LABEL: zext_16i8_to_8i32:215; SSE41:       # %bb.0: # %entry216; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm2 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero217; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]218; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm1 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero219; SSE41-NEXT:    movdqa %xmm2, %xmm0220; SSE41-NEXT:    retq221;222; AVX1-LABEL: zext_16i8_to_8i32:223; AVX1:       # %bb.0: # %entry224; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm1 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero225; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]226; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero227; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0228; AVX1-NEXT:    retq229;230; AVX2-LABEL: zext_16i8_to_8i32:231; AVX2:       # %bb.0: # %entry232; AVX2-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,zero233; AVX2-NEXT:    retq234;235; AVX512-LABEL: zext_16i8_to_8i32:236; AVX512:       # %bb.0: # %entry237; AVX512-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,zero238; AVX512-NEXT:    retq239entry:240  %B = shufflevector <16 x i8> %A, <16 x i8> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>241  %C = zext <8 x i8> %B to <8 x i32>242  ret <8 x i32> %C243}244 245define <16 x i32> @zext_16i8_to_16i32(<16 x i8> %A) nounwind uwtable readnone ssp {246; SSE2-LABEL: zext_16i8_to_16i32:247; SSE2:       # %bb.0: # %entry248; SSE2-NEXT:    movdqa %xmm0, %xmm3249; SSE2-NEXT:    pxor %xmm4, %xmm4250; SSE2-NEXT:    movdqa %xmm0, %xmm1251; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1],xmm1[2],xmm4[2],xmm1[3],xmm4[3],xmm1[4],xmm4[4],xmm1[5],xmm4[5],xmm1[6],xmm4[6],xmm1[7],xmm4[7]252; SSE2-NEXT:    movdqa %xmm1, %xmm0253; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3]254; SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm4[4],xmm1[5],xmm4[5],xmm1[6],xmm4[6],xmm1[7],xmm4[7]255; SSE2-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm4[8],xmm3[9],xmm4[9],xmm3[10],xmm4[10],xmm3[11],xmm4[11],xmm3[12],xmm4[12],xmm3[13],xmm4[13],xmm3[14],xmm4[14],xmm3[15],xmm4[15]256; SSE2-NEXT:    movdqa %xmm3, %xmm2257; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1],xmm2[2],xmm4[2],xmm2[3],xmm4[3]258; SSE2-NEXT:    punpckhwd {{.*#+}} xmm3 = xmm3[4],xmm4[4],xmm3[5],xmm4[5],xmm3[6],xmm4[6],xmm3[7],xmm4[7]259; SSE2-NEXT:    retq260;261; SSSE3-LABEL: zext_16i8_to_16i32:262; SSSE3:       # %bb.0: # %entry263; SSSE3-NEXT:    movdqa %xmm0, %xmm3264; SSSE3-NEXT:    pxor %xmm4, %xmm4265; SSSE3-NEXT:    movdqa %xmm0, %xmm1266; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1],xmm1[2],xmm4[2],xmm1[3],xmm4[3],xmm1[4],xmm4[4],xmm1[5],xmm4[5],xmm1[6],xmm4[6],xmm1[7],xmm4[7]267; SSSE3-NEXT:    movdqa %xmm1, %xmm0268; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3]269; SSSE3-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm4[4],xmm1[5],xmm4[5],xmm1[6],xmm4[6],xmm1[7],xmm4[7]270; SSSE3-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm4[8],xmm3[9],xmm4[9],xmm3[10],xmm4[10],xmm3[11],xmm4[11],xmm3[12],xmm4[12],xmm3[13],xmm4[13],xmm3[14],xmm4[14],xmm3[15],xmm4[15]271; SSSE3-NEXT:    movdqa %xmm3, %xmm2272; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1],xmm2[2],xmm4[2],xmm2[3],xmm4[3]273; SSSE3-NEXT:    punpckhwd {{.*#+}} xmm3 = xmm3[4],xmm4[4],xmm3[5],xmm4[5],xmm3[6],xmm4[6],xmm3[7],xmm4[7]274; SSSE3-NEXT:    retq275;276; SSE41-LABEL: zext_16i8_to_16i32:277; SSE41:       # %bb.0: # %entry278; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm4 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero279; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]280; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero281; SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[2,3,2,3]282; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero283; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]284; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm3 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero285; SSE41-NEXT:    movdqa %xmm4, %xmm0286; SSE41-NEXT:    retq287;288; AVX1-LABEL: zext_16i8_to_16i32:289; AVX1:       # %bb.0: # %entry290; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm1 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero291; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm0[1,1,1,1]292; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero293; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm2294; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]295; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero296; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]297; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero298; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm1299; AVX1-NEXT:    vmovaps %ymm2, %ymm0300; AVX1-NEXT:    retq301;302; AVX2-LABEL: zext_16i8_to_16i32:303; AVX2:       # %bb.0: # %entry304; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm2 = 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,zero305; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]306; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm1 = 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,zero307; AVX2-NEXT:    vmovdqa %ymm2, %ymm0308; AVX2-NEXT:    retq309;310; AVX512-LABEL: zext_16i8_to_16i32:311; AVX512:       # %bb.0: # %entry312; AVX512-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,zero313; AVX512-NEXT:    retq314entry:315  %B = zext <16 x i8> %A to <16 x i32>316  ret <16 x i32> %B317}318 319define <2 x i64> @zext_16i8_to_2i64(<16 x i8> %A) nounwind uwtable readnone ssp {320; SSE2-LABEL: zext_16i8_to_2i64:321; SSE2:       # %bb.0: # %entry322; SSE2-NEXT:    pxor %xmm1, %xmm1323; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]324; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]325; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]326; SSE2-NEXT:    retq327;328; SSSE3-LABEL: zext_16i8_to_2i64:329; SSSE3:       # %bb.0: # %entry330; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero331; SSSE3-NEXT:    retq332;333; SSE41-LABEL: zext_16i8_to_2i64:334; SSE41:       # %bb.0: # %entry335; SSE41-NEXT:    pmovzxbq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero336; SSE41-NEXT:    retq337;338; AVX-LABEL: zext_16i8_to_2i64:339; AVX:       # %bb.0: # %entry340; AVX-NEXT:    vpmovzxbq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero341; AVX-NEXT:    retq342entry:343  %B = shufflevector <16 x i8> %A, <16 x i8> undef, <2 x i32> <i32 0, i32 1>344  %C = zext <2 x i8> %B to <2 x i64>345  ret <2 x i64> %C346}347 348define <4 x i64> @zext_16i8_to_4i64(<16 x i8> %A) nounwind uwtable readnone ssp {349; SSE2-LABEL: zext_16i8_to_4i64:350; SSE2:       # %bb.0: # %entry351; SSE2-NEXT:    movdqa %xmm0, %xmm1352; SSE2-NEXT:    pxor %xmm2, %xmm2353; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]354; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]355; SSE2-NEXT:    movdqa %xmm1, %xmm0356; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]357; SSE2-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm2[2],xmm1[3],xmm2[3]358; SSE2-NEXT:    retq359;360; SSSE3-LABEL: zext_16i8_to_4i64:361; SSSE3:       # %bb.0: # %entry362; SSSE3-NEXT:    movdqa %xmm0, %xmm1363; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero364; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[2],zero,zero,zero,zero,zero,zero,zero,xmm1[3],zero,zero,zero,zero,zero,zero,zero365; SSSE3-NEXT:    retq366;367; SSE41-LABEL: zext_16i8_to_4i64:368; SSE41:       # %bb.0: # %entry369; SSE41-NEXT:    pmovzxbq {{.*#+}} xmm2 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero370; SSE41-NEXT:    psrld $16, %xmm0371; SSE41-NEXT:    pmovzxbq {{.*#+}} xmm1 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero372; SSE41-NEXT:    movdqa %xmm2, %xmm0373; SSE41-NEXT:    retq374;375; AVX1-LABEL: zext_16i8_to_4i64:376; AVX1:       # %bb.0: # %entry377; AVX1-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero378; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm0379; AVX1-NEXT:    vpmovzxbq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero380; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0381; AVX1-NEXT:    retq382;383; AVX2-LABEL: zext_16i8_to_4i64:384; AVX2:       # %bb.0: # %entry385; AVX2-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,zero386; AVX2-NEXT:    retq387;388; AVX512-LABEL: zext_16i8_to_4i64:389; AVX512:       # %bb.0: # %entry390; AVX512-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,zero391; AVX512-NEXT:    retq392entry:393  %B = shufflevector <16 x i8> %A, <16 x i8> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>394  %C = zext <4 x i8> %B to <4 x i64>395  ret <4 x i64> %C396}397 398define <8 x i64> @zext_16i8_to_8i64(<16 x i8> %A) nounwind uwtable readnone ssp {399; SSE2-LABEL: zext_16i8_to_8i64:400; SSE2:       # %bb.0: # %entry401; SSE2-NEXT:    movdqa %xmm0, %xmm3402; SSE2-NEXT:    pxor %xmm4, %xmm4403; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1],xmm3[2],xmm4[2],xmm3[3],xmm4[3],xmm3[4],xmm4[4],xmm3[5],xmm4[5],xmm3[6],xmm4[6],xmm3[7],xmm4[7]404; SSE2-NEXT:    movdqa %xmm3, %xmm1405; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1],xmm1[2],xmm4[2],xmm1[3],xmm4[3]406; SSE2-NEXT:    movdqa %xmm1, %xmm0407; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1]408; SSE2-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm4[2],xmm1[3],xmm4[3]409; SSE2-NEXT:    punpckhwd {{.*#+}} xmm3 = xmm3[4],xmm4[4],xmm3[5],xmm4[5],xmm3[6],xmm4[6],xmm3[7],xmm4[7]410; SSE2-NEXT:    movdqa %xmm3, %xmm2411; SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1]412; SSE2-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm4[2],xmm3[3],xmm4[3]413; SSE2-NEXT:    retq414;415; SSSE3-LABEL: zext_16i8_to_8i64:416; SSSE3:       # %bb.0: # %entry417; SSSE3-NEXT:    movdqa %xmm0, %xmm3418; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero419; SSSE3-NEXT:    movdqa %xmm3, %xmm1420; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[2],zero,zero,zero,zero,zero,zero,zero,xmm1[3],zero,zero,zero,zero,zero,zero,zero421; SSSE3-NEXT:    movdqa %xmm3, %xmm2422; SSSE3-NEXT:    pshufb {{.*#+}} xmm2 = xmm2[4],zero,zero,zero,zero,zero,zero,zero,xmm2[5],zero,zero,zero,zero,zero,zero,zero423; SSSE3-NEXT:    pshufb {{.*#+}} xmm3 = xmm3[6],zero,zero,zero,zero,zero,zero,zero,xmm3[7],zero,zero,zero,zero,zero,zero,zero424; SSSE3-NEXT:    retq425;426; SSE41-LABEL: zext_16i8_to_8i64:427; SSE41:       # %bb.0: # %entry428; SSE41-NEXT:    pmovzxbq {{.*#+}} xmm4 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero429; SSE41-NEXT:    movdqa %xmm0, %xmm1430; SSE41-NEXT:    psrld $16, %xmm1431; SSE41-NEXT:    pmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero432; SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,1,1]433; SSE41-NEXT:    pmovzxbq {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,zero,zero,zero,zero,xmm2[1],zero,zero,zero,zero,zero,zero,zero434; SSE41-NEXT:    psrlq $48, %xmm0435; SSE41-NEXT:    pmovzxbq {{.*#+}} xmm3 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero436; SSE41-NEXT:    movdqa %xmm4, %xmm0437; SSE41-NEXT:    retq438;439; AVX1-LABEL: zext_16i8_to_8i64:440; AVX1:       # %bb.0: # %entry441; AVX1-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero442; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm2443; AVX1-NEXT:    vpmovzxbq {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,zero,zero,zero,zero,xmm2[1],zero,zero,zero,zero,zero,zero,zero444; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm2445; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]446; AVX1-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero447; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm0448; AVX1-NEXT:    vpmovzxbq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero449; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm1450; AVX1-NEXT:    vmovaps %ymm2, %ymm0451; AVX1-NEXT:    retq452;453; AVX2-LABEL: zext_16i8_to_8i64:454; AVX2:       # %bb.0: # %entry455; AVX2-NEXT:    vpmovzxbq {{.*#+}} ymm2 = 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,zero456; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]457; AVX2-NEXT:    vpmovzxbq {{.*#+}} ymm1 = 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,zero458; AVX2-NEXT:    vmovdqa %ymm2, %ymm0459; AVX2-NEXT:    retq460;461; AVX512-LABEL: zext_16i8_to_8i64:462; AVX512:       # %bb.0: # %entry463; AVX512-NEXT:    vpmovzxbq {{.*#+}} zmm0 = 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,zero,xmm0[4],zero,zero,zero,zero,zero,zero,zero,xmm0[5],zero,zero,zero,zero,zero,zero,zero,xmm0[6],zero,zero,zero,zero,zero,zero,zero,xmm0[7],zero,zero,zero,zero,zero,zero,zero464; AVX512-NEXT:    retq465entry:466  %B = shufflevector <16 x i8> %A, <16 x i8> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>467  %C = zext <8 x i8> %B to <8 x i64>468  ret <8 x i64> %C469}470 471define <4 x i32> @zext_8i16_to_4i32(<8 x i16> %A) nounwind uwtable readnone ssp {472; SSE2-LABEL: zext_8i16_to_4i32:473; SSE2:       # %bb.0: # %entry474; SSE2-NEXT:    pxor %xmm1, %xmm1475; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]476; SSE2-NEXT:    retq477;478; SSSE3-LABEL: zext_8i16_to_4i32:479; SSSE3:       # %bb.0: # %entry480; SSSE3-NEXT:    pxor %xmm1, %xmm1481; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]482; SSSE3-NEXT:    retq483;484; SSE41-LABEL: zext_8i16_to_4i32:485; SSE41:       # %bb.0: # %entry486; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero487; SSE41-NEXT:    retq488;489; AVX-LABEL: zext_8i16_to_4i32:490; AVX:       # %bb.0: # %entry491; AVX-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero492; AVX-NEXT:    retq493entry:494  %B = shufflevector <8 x i16> %A, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>495  %C = zext <4 x i16> %B to <4 x i32>496  ret <4 x i32> %C497}498 499define <8 x i32> @zext_8i16_to_8i32(<8 x i16> %A) nounwind uwtable readnone ssp {500; SSE2-LABEL: zext_8i16_to_8i32:501; SSE2:       # %bb.0: # %entry502; SSE2-NEXT:    movdqa %xmm0, %xmm1503; SSE2-NEXT:    pxor %xmm2, %xmm2504; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]505; SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]506; SSE2-NEXT:    retq507;508; SSSE3-LABEL: zext_8i16_to_8i32:509; SSSE3:       # %bb.0: # %entry510; SSSE3-NEXT:    movdqa %xmm0, %xmm1511; SSSE3-NEXT:    pxor %xmm2, %xmm2512; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]513; SSSE3-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]514; SSSE3-NEXT:    retq515;516; SSE41-LABEL: zext_8i16_to_8i32:517; SSE41:       # %bb.0: # %entry518; SSE41-NEXT:    movdqa %xmm0, %xmm1519; SSE41-NEXT:    pxor %xmm2, %xmm2520; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero521; SSE41-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]522; SSE41-NEXT:    retq523;524; AVX1-LABEL: zext_8i16_to_8i32:525; AVX1:       # %bb.0: # %entry526; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1527; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm1 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]528; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero529; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0530; AVX1-NEXT:    retq531;532; AVX2-LABEL: zext_8i16_to_8i32:533; AVX2:       # %bb.0: # %entry534; AVX2-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],zero535; AVX2-NEXT:    retq536;537; AVX512-LABEL: zext_8i16_to_8i32:538; AVX512:       # %bb.0: # %entry539; AVX512-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],zero540; AVX512-NEXT:    retq541entry:542  %B = zext <8 x i16> %A to <8 x i32>543  ret <8 x i32>%B544}545 546define <16 x i32> @zext_16i16_to_16i32(<16 x i16> %A) nounwind uwtable readnone ssp {547; SSE2-LABEL: zext_16i16_to_16i32:548; SSE2:       # %bb.0: # %entry549; SSE2-NEXT:    movdqa %xmm1, %xmm3550; SSE2-NEXT:    movdqa %xmm0, %xmm1551; SSE2-NEXT:    pxor %xmm4, %xmm4552; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3]553; SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm4[4],xmm1[5],xmm4[5],xmm1[6],xmm4[6],xmm1[7],xmm4[7]554; SSE2-NEXT:    movdqa %xmm3, %xmm2555; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1],xmm2[2],xmm4[2],xmm2[3],xmm4[3]556; SSE2-NEXT:    punpckhwd {{.*#+}} xmm3 = xmm3[4],xmm4[4],xmm3[5],xmm4[5],xmm3[6],xmm4[6],xmm3[7],xmm4[7]557; SSE2-NEXT:    retq558;559; SSSE3-LABEL: zext_16i16_to_16i32:560; SSSE3:       # %bb.0: # %entry561; SSSE3-NEXT:    movdqa %xmm1, %xmm3562; SSSE3-NEXT:    movdqa %xmm0, %xmm1563; SSSE3-NEXT:    pxor %xmm4, %xmm4564; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3]565; SSSE3-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm4[4],xmm1[5],xmm4[5],xmm1[6],xmm4[6],xmm1[7],xmm4[7]566; SSSE3-NEXT:    movdqa %xmm3, %xmm2567; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1],xmm2[2],xmm4[2],xmm2[3],xmm4[3]568; SSSE3-NEXT:    punpckhwd {{.*#+}} xmm3 = xmm3[4],xmm4[4],xmm3[5],xmm4[5],xmm3[6],xmm4[6],xmm3[7],xmm4[7]569; SSSE3-NEXT:    retq570;571; SSE41-LABEL: zext_16i16_to_16i32:572; SSE41:       # %bb.0: # %entry573; SSE41-NEXT:    movdqa %xmm1, %xmm3574; SSE41-NEXT:    movdqa %xmm0, %xmm1575; SSE41-NEXT:    pxor %xmm4, %xmm4576; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero577; SSE41-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm4[4],xmm1[5],xmm4[5],xmm1[6],xmm4[6],xmm1[7],xmm4[7]578; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm2 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero579; SSE41-NEXT:    punpckhwd {{.*#+}} xmm3 = xmm3[4],xmm4[4],xmm3[5],xmm4[5],xmm3[6],xmm4[6],xmm3[7],xmm4[7]580; SSE41-NEXT:    retq581;582; AVX1-LABEL: zext_16i16_to_16i32:583; AVX1:       # %bb.0: # %entry584; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1585; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm2 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]586; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm3 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero587; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2588; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0589; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm1 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]590; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero591; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm1592; AVX1-NEXT:    vmovaps %ymm2, %ymm0593; AVX1-NEXT:    retq594;595; AVX2-LABEL: zext_16i16_to_16i32:596; AVX2:       # %bb.0: # %entry597; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm2 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero598; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0599; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero600; AVX2-NEXT:    vmovdqa %ymm2, %ymm0601; AVX2-NEXT:    retq602;603; AVX512-LABEL: zext_16i16_to_16i32:604; AVX512:       # %bb.0: # %entry605; AVX512-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],zero606; AVX512-NEXT:    retq607entry:608  %B = zext <16 x i16> %A to <16 x i32>609  ret <16 x i32> %B610}611 612define <2 x i64> @zext_8i16_to_2i64(<8 x i16> %A) nounwind uwtable readnone ssp {613; SSE2-LABEL: zext_8i16_to_2i64:614; SSE2:       # %bb.0: # %entry615; SSE2-NEXT:    pxor %xmm1, %xmm1616; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]617; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]618; SSE2-NEXT:    retq619;620; SSSE3-LABEL: zext_8i16_to_2i64:621; SSSE3:       # %bb.0: # %entry622; SSSE3-NEXT:    pxor %xmm1, %xmm1623; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]624; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]625; SSSE3-NEXT:    retq626;627; SSE41-LABEL: zext_8i16_to_2i64:628; SSE41:       # %bb.0: # %entry629; SSE41-NEXT:    pmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero630; SSE41-NEXT:    retq631;632; AVX-LABEL: zext_8i16_to_2i64:633; AVX:       # %bb.0: # %entry634; AVX-NEXT:    vpmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero635; AVX-NEXT:    retq636entry:637  %B = shufflevector <8 x i16> %A, <8 x i16> undef, <2 x i32> <i32 0, i32 1>638  %C = zext <2 x i16> %B to <2 x i64>639  ret <2 x i64> %C640}641 642define <4 x i64> @zext_8i16_to_4i64(<8 x i16> %A) nounwind uwtable readnone ssp {643; SSE2-LABEL: zext_8i16_to_4i64:644; SSE2:       # %bb.0: # %entry645; SSE2-NEXT:    movdqa %xmm0, %xmm1646; SSE2-NEXT:    pxor %xmm2, %xmm2647; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]648; SSE2-NEXT:    movdqa %xmm1, %xmm0649; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]650; SSE2-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm2[2],xmm1[3],xmm2[3]651; SSE2-NEXT:    retq652;653; SSSE3-LABEL: zext_8i16_to_4i64:654; SSSE3:       # %bb.0: # %entry655; SSSE3-NEXT:    movdqa %xmm0, %xmm1656; SSSE3-NEXT:    pxor %xmm2, %xmm2657; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]658; SSSE3-NEXT:    movdqa %xmm1, %xmm0659; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]660; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm2[2],xmm1[3],xmm2[3]661; SSSE3-NEXT:    retq662;663; SSE41-LABEL: zext_8i16_to_4i64:664; SSE41:       # %bb.0: # %entry665; SSE41-NEXT:    pmovzxwq {{.*#+}} xmm2 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero666; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]667; SSE41-NEXT:    pmovzxwq {{.*#+}} xmm1 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero668; SSE41-NEXT:    movdqa %xmm2, %xmm0669; SSE41-NEXT:    retq670;671; AVX1-LABEL: zext_8i16_to_4i64:672; AVX1:       # %bb.0: # %entry673; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero674; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]675; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero676; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0677; AVX1-NEXT:    retq678;679; AVX2-LABEL: zext_8i16_to_4i64:680; AVX2:       # %bb.0: # %entry681; AVX2-NEXT:    vpmovzxwq {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero682; AVX2-NEXT:    retq683;684; AVX512-LABEL: zext_8i16_to_4i64:685; AVX512:       # %bb.0: # %entry686; AVX512-NEXT:    vpmovzxwq {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero687; AVX512-NEXT:    retq688entry:689  %B = shufflevector <8 x i16> %A, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>690  %C = zext <4 x i16> %B to <4 x i64>691  ret <4 x i64> %C692}693 694define <8 x i64> @zext_8i16_to_8i64(<8 x i16> %A) nounwind uwtable readnone ssp {695; SSE2-LABEL: zext_8i16_to_8i64:696; SSE2:       # %bb.0: # %entry697; SSE2-NEXT:    movdqa %xmm0, %xmm3698; SSE2-NEXT:    pxor %xmm4, %xmm4699; SSE2-NEXT:    movdqa %xmm0, %xmm1700; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1],xmm1[2],xmm4[2],xmm1[3],xmm4[3]701; SSE2-NEXT:    movdqa %xmm1, %xmm0702; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1]703; SSE2-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm4[2],xmm1[3],xmm4[3]704; SSE2-NEXT:    punpckhwd {{.*#+}} xmm3 = xmm3[4],xmm4[4],xmm3[5],xmm4[5],xmm3[6],xmm4[6],xmm3[7],xmm4[7]705; SSE2-NEXT:    movdqa %xmm3, %xmm2706; SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1]707; SSE2-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm4[2],xmm3[3],xmm4[3]708; SSE2-NEXT:    retq709;710; SSSE3-LABEL: zext_8i16_to_8i64:711; SSSE3:       # %bb.0: # %entry712; SSSE3-NEXT:    movdqa %xmm0, %xmm3713; SSSE3-NEXT:    pxor %xmm4, %xmm4714; SSSE3-NEXT:    movdqa %xmm0, %xmm1715; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1],xmm1[2],xmm4[2],xmm1[3],xmm4[3]716; SSSE3-NEXT:    movdqa %xmm1, %xmm0717; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1]718; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm4[2],xmm1[3],xmm4[3]719; SSSE3-NEXT:    punpckhwd {{.*#+}} xmm3 = xmm3[4],xmm4[4],xmm3[5],xmm4[5],xmm3[6],xmm4[6],xmm3[7],xmm4[7]720; SSSE3-NEXT:    movdqa %xmm3, %xmm2721; SSSE3-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1]722; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm4[2],xmm3[3],xmm4[3]723; SSSE3-NEXT:    retq724;725; SSE41-LABEL: zext_8i16_to_8i64:726; SSE41:       # %bb.0: # %entry727; SSE41-NEXT:    pmovzxwq {{.*#+}} xmm4 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero728; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]729; SSE41-NEXT:    pmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero730; SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[2,3,2,3]731; SSE41-NEXT:    pmovzxwq {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero732; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]733; SSE41-NEXT:    pmovzxwq {{.*#+}} xmm3 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero734; SSE41-NEXT:    movdqa %xmm4, %xmm0735; SSE41-NEXT:    retq736;737; AVX1-LABEL: zext_8i16_to_8i64:738; AVX1:       # %bb.0: # %entry739; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero740; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm0[1,1,1,1]741; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero742; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm2743; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]744; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero745; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]746; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero747; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm1748; AVX1-NEXT:    vmovaps %ymm2, %ymm0749; AVX1-NEXT:    retq750;751; AVX2-LABEL: zext_8i16_to_8i64:752; AVX2:       # %bb.0: # %entry753; AVX2-NEXT:    vpmovzxwq {{.*#+}} ymm2 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero754; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]755; AVX2-NEXT:    vpmovzxwq {{.*#+}} ymm1 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero756; AVX2-NEXT:    vmovdqa %ymm2, %ymm0757; AVX2-NEXT:    retq758;759; AVX512-LABEL: zext_8i16_to_8i64:760; AVX512:       # %bb.0: # %entry761; AVX512-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,zero762; AVX512-NEXT:    retq763entry:764  %B = zext <8 x i16> %A to <8 x i64>765  ret <8 x i64> %B766}767 768define <2 x i64> @zext_4i32_to_2i64(<4 x i32> %A) nounwind uwtable readnone ssp {769; SSE2-LABEL: zext_4i32_to_2i64:770; SSE2:       # %bb.0: # %entry771; SSE2-NEXT:    xorps %xmm1, %xmm1772; SSE2-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]773; SSE2-NEXT:    retq774;775; SSSE3-LABEL: zext_4i32_to_2i64:776; SSSE3:       # %bb.0: # %entry777; SSSE3-NEXT:    xorps %xmm1, %xmm1778; SSSE3-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]779; SSSE3-NEXT:    retq780;781; SSE41-LABEL: zext_4i32_to_2i64:782; SSE41:       # %bb.0: # %entry783; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero784; SSE41-NEXT:    retq785;786; AVX-LABEL: zext_4i32_to_2i64:787; AVX:       # %bb.0: # %entry788; AVX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero789; AVX-NEXT:    retq790entry:791  %B = shufflevector <4 x i32> %A, <4 x i32> undef, <2 x i32> <i32 0, i32 1>792  %C = zext <2 x i32> %B to <2 x i64>793  ret <2 x i64> %C794}795 796define <4 x i64> @zext_4i32_to_4i64(<4 x i32> %A) nounwind uwtable readnone ssp {797; SSE2-LABEL: zext_4i32_to_4i64:798; SSE2:       # %bb.0: # %entry799; SSE2-NEXT:    movaps %xmm0, %xmm1800; SSE2-NEXT:    xorps %xmm2, %xmm2801; SSE2-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]802; SSE2-NEXT:    unpckhps {{.*#+}} xmm1 = xmm1[2],xmm2[2],xmm1[3],xmm2[3]803; SSE2-NEXT:    retq804;805; SSSE3-LABEL: zext_4i32_to_4i64:806; SSSE3:       # %bb.0: # %entry807; SSSE3-NEXT:    movaps %xmm0, %xmm1808; SSSE3-NEXT:    xorps %xmm2, %xmm2809; SSSE3-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]810; SSSE3-NEXT:    unpckhps {{.*#+}} xmm1 = xmm1[2],xmm2[2],xmm1[3],xmm2[3]811; SSSE3-NEXT:    retq812;813; SSE41-LABEL: zext_4i32_to_4i64:814; SSE41:       # %bb.0: # %entry815; SSE41-NEXT:    movdqa %xmm0, %xmm1816; SSE41-NEXT:    pxor %xmm2, %xmm2817; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero818; SSE41-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm2[2],xmm1[3],xmm2[3]819; SSE41-NEXT:    retq820;821; AVX1-LABEL: zext_4i32_to_4i64:822; AVX1:       # %bb.0: # %entry823; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1824; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]825; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero826; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0827; AVX1-NEXT:    retq828;829; AVX2-LABEL: zext_4i32_to_4i64:830; AVX2:       # %bb.0: # %entry831; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero832; AVX2-NEXT:    retq833;834; AVX512-LABEL: zext_4i32_to_4i64:835; AVX512:       # %bb.0: # %entry836; AVX512-NEXT:    vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero837; AVX512-NEXT:    retq838entry:839  %B = zext <4 x i32> %A to <4 x i64>840  ret <4 x i64>%B841}842 843define <8 x i64> @zext_8i32_to_8i64(<8 x i32> %A) nounwind uwtable readnone ssp {844; SSE2-LABEL: zext_8i32_to_8i64:845; SSE2:       # %bb.0: # %entry846; SSE2-NEXT:    movaps %xmm1, %xmm3847; SSE2-NEXT:    movaps %xmm0, %xmm1848; SSE2-NEXT:    xorps %xmm4, %xmm4849; SSE2-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1]850; SSE2-NEXT:    unpckhps {{.*#+}} xmm1 = xmm1[2],xmm4[2],xmm1[3],xmm4[3]851; SSE2-NEXT:    movaps %xmm3, %xmm2852; SSE2-NEXT:    unpcklps {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1]853; SSE2-NEXT:    unpckhps {{.*#+}} xmm3 = xmm3[2],xmm4[2],xmm3[3],xmm4[3]854; SSE2-NEXT:    retq855;856; SSSE3-LABEL: zext_8i32_to_8i64:857; SSSE3:       # %bb.0: # %entry858; SSSE3-NEXT:    movaps %xmm1, %xmm3859; SSSE3-NEXT:    movaps %xmm0, %xmm1860; SSSE3-NEXT:    xorps %xmm4, %xmm4861; SSSE3-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1]862; SSSE3-NEXT:    unpckhps {{.*#+}} xmm1 = xmm1[2],xmm4[2],xmm1[3],xmm4[3]863; SSSE3-NEXT:    movaps %xmm3, %xmm2864; SSSE3-NEXT:    unpcklps {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1]865; SSSE3-NEXT:    unpckhps {{.*#+}} xmm3 = xmm3[2],xmm4[2],xmm3[3],xmm4[3]866; SSSE3-NEXT:    retq867;868; SSE41-LABEL: zext_8i32_to_8i64:869; SSE41:       # %bb.0: # %entry870; SSE41-NEXT:    movdqa %xmm1, %xmm3871; SSE41-NEXT:    movdqa %xmm0, %xmm1872; SSE41-NEXT:    pxor %xmm4, %xmm4873; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero874; SSE41-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm4[2],xmm1[3],xmm4[3]875; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm2 = xmm3[0],zero,xmm3[1],zero876; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm4[2],xmm3[3],xmm4[3]877; SSE41-NEXT:    retq878;879; AVX1-LABEL: zext_8i32_to_8i64:880; AVX1:       # %bb.0: # %entry881; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1882; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]883; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm3 = xmm0[0],zero,xmm0[1],zero884; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2885; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0886; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]887; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero888; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm1889; AVX1-NEXT:    vmovaps %ymm2, %ymm0890; AVX1-NEXT:    retq891;892; AVX2-LABEL: zext_8i32_to_8i64:893; AVX2:       # %bb.0: # %entry894; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm2 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero895; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0896; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero897; AVX2-NEXT:    vmovdqa %ymm2, %ymm0898; AVX2-NEXT:    retq899;900; AVX512-LABEL: zext_8i32_to_8i64:901; AVX512:       # %bb.0: # %entry902; AVX512-NEXT:    vpmovzxdq {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero903; AVX512-NEXT:    retq904entry:905  %B = zext <8 x i32> %A to <8 x i64>906  ret <8 x i64>%B907}908 909define <2 x i64> @load_zext_2i8_to_2i64(ptr%ptr) {910; SSE2-LABEL: load_zext_2i8_to_2i64:911; SSE2:       # %bb.0: # %entry912; SSE2-NEXT:    movzwl (%rdi), %eax913; SSE2-NEXT:    movd %eax, %xmm0914; SSE2-NEXT:    pxor %xmm1, %xmm1915; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]916; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]917; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]918; SSE2-NEXT:    retq919;920; SSSE3-LABEL: load_zext_2i8_to_2i64:921; SSSE3:       # %bb.0: # %entry922; SSSE3-NEXT:    movzwl (%rdi), %eax923; SSSE3-NEXT:    movd %eax, %xmm0924; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero925; SSSE3-NEXT:    retq926;927; SSE41-LABEL: load_zext_2i8_to_2i64:928; SSE41:       # %bb.0: # %entry929; SSE41-NEXT:    pmovzxbq {{.*#+}} xmm0 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero930; SSE41-NEXT:    retq931;932; AVX-LABEL: load_zext_2i8_to_2i64:933; AVX:       # %bb.0: # %entry934; AVX-NEXT:    vpmovzxbq {{.*#+}} xmm0 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero935; AVX-NEXT:    retq936entry:937 %X = load <2 x i8>, ptr %ptr938 %Y = zext <2 x i8> %X to <2 x i64>939 ret <2 x i64> %Y940}941 942define <4 x i32> @load_zext_4i8_to_4i32(ptr%ptr) {943; SSE2-LABEL: load_zext_4i8_to_4i32:944; SSE2:       # %bb.0: # %entry945; SSE2-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero946; SSE2-NEXT:    pxor %xmm1, %xmm1947; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]948; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]949; SSE2-NEXT:    retq950;951; SSSE3-LABEL: load_zext_4i8_to_4i32:952; SSSE3:       # %bb.0: # %entry953; SSSE3-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero954; SSSE3-NEXT:    pxor %xmm1, %xmm1955; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]956; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]957; SSSE3-NEXT:    retq958;959; SSE41-LABEL: load_zext_4i8_to_4i32:960; SSE41:       # %bb.0: # %entry961; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero962; SSE41-NEXT:    retq963;964; AVX-LABEL: load_zext_4i8_to_4i32:965; AVX:       # %bb.0: # %entry966; AVX-NEXT:    vpmovzxbd {{.*#+}} xmm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero967; AVX-NEXT:    retq968entry:969 %X = load <4 x i8>, ptr %ptr970 %Y = zext <4 x i8> %X to <4 x i32>971 ret <4 x i32> %Y972}973 974define <4 x i64> @load_zext_4i8_to_4i64(ptr%ptr) {975; SSE2-LABEL: load_zext_4i8_to_4i64:976; SSE2:       # %bb.0: # %entry977; SSE2-NEXT:    movd {{.*#+}} xmm1 = mem[0],zero,zero,zero978; SSE2-NEXT:    pxor %xmm2, %xmm2979; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]980; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]981; SSE2-NEXT:    movdqa %xmm1, %xmm0982; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]983; SSE2-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm2[2],xmm1[3],xmm2[3]984; SSE2-NEXT:    retq985;986; SSSE3-LABEL: load_zext_4i8_to_4i64:987; SSSE3:       # %bb.0: # %entry988; SSSE3-NEXT:    movd {{.*#+}} xmm1 = mem[0],zero,zero,zero989; SSSE3-NEXT:    movdqa %xmm1, %xmm0990; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero991; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[2],zero,zero,zero,zero,zero,zero,zero,xmm1[3],zero,zero,zero,zero,zero,zero,zero992; SSSE3-NEXT:    retq993;994; SSE41-LABEL: load_zext_4i8_to_4i64:995; SSE41:       # %bb.0: # %entry996; SSE41-NEXT:    pmovzxbq {{.*#+}} xmm0 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero997; SSE41-NEXT:    pmovzxbq {{.*#+}} xmm1 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero998; SSE41-NEXT:    retq999;1000; AVX1-LABEL: load_zext_4i8_to_4i64:1001; AVX1:       # %bb.0: # %entry1002; AVX1-NEXT:    vpmovzxbq {{.*#+}} xmm0 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero1003; AVX1-NEXT:    vpmovzxbq {{.*#+}} xmm1 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero1004; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01005; AVX1-NEXT:    retq1006;1007; AVX2-LABEL: load_zext_4i8_to_4i64:1008; AVX2:       # %bb.0: # %entry1009; AVX2-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,zero1010; AVX2-NEXT:    retq1011;1012; AVX512-LABEL: load_zext_4i8_to_4i64:1013; AVX512:       # %bb.0: # %entry1014; AVX512-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,zero1015; AVX512-NEXT:    retq1016entry:1017 %X = load <4 x i8>, ptr %ptr1018 %Y = zext <4 x i8> %X to <4 x i64>1019 ret <4 x i64> %Y1020}1021 1022define <8 x i16> @load_zext_8i8_to_8i16(ptr%ptr) {1023; SSE2-LABEL: load_zext_8i8_to_8i16:1024; SSE2:       # %bb.0: # %entry1025; SSE2-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero1026; SSE2-NEXT:    pxor %xmm1, %xmm11027; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]1028; SSE2-NEXT:    retq1029;1030; SSSE3-LABEL: load_zext_8i8_to_8i16:1031; SSSE3:       # %bb.0: # %entry1032; SSSE3-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero1033; SSSE3-NEXT:    pxor %xmm1, %xmm11034; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]1035; SSSE3-NEXT:    retq1036;1037; SSE41-LABEL: load_zext_8i8_to_8i16:1038; SSE41:       # %bb.0: # %entry1039; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero1040; SSE41-NEXT:    retq1041;1042; AVX-LABEL: load_zext_8i8_to_8i16:1043; AVX:       # %bb.0: # %entry1044; AVX-NEXT:    vpmovzxbw {{.*#+}} xmm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero1045; AVX-NEXT:    retq1046entry:1047 %X = load <8 x i8>, ptr %ptr1048 %Y = zext <8 x i8> %X to <8 x i16>1049 ret <8 x i16> %Y1050}1051 1052define <8 x i32> @load_zext_8i8_to_8i32(ptr%ptr) {1053; SSE2-LABEL: load_zext_8i8_to_8i32:1054; SSE2:       # %bb.0: # %entry1055; SSE2-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero1056; SSE2-NEXT:    pxor %xmm2, %xmm21057; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]1058; SSE2-NEXT:    movdqa %xmm1, %xmm01059; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]1060; SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]1061; SSE2-NEXT:    retq1062;1063; SSSE3-LABEL: load_zext_8i8_to_8i32:1064; SSSE3:       # %bb.0: # %entry1065; SSSE3-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero1066; SSSE3-NEXT:    pxor %xmm2, %xmm21067; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]1068; SSSE3-NEXT:    movdqa %xmm1, %xmm01069; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]1070; SSSE3-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]1071; SSSE3-NEXT:    retq1072;1073; SSE41-LABEL: load_zext_8i8_to_8i32:1074; SSE41:       # %bb.0: # %entry1075; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero1076; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm1 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero1077; SSE41-NEXT:    retq1078;1079; AVX1-LABEL: load_zext_8i8_to_8i32:1080; AVX1:       # %bb.0: # %entry1081; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero1082; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm1 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero1083; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01084; AVX1-NEXT:    retq1085;1086; AVX2-LABEL: load_zext_8i8_to_8i32:1087; AVX2:       # %bb.0: # %entry1088; AVX2-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,zero1089; AVX2-NEXT:    retq1090;1091; AVX512-LABEL: load_zext_8i8_to_8i32:1092; AVX512:       # %bb.0: # %entry1093; AVX512-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,zero1094; AVX512-NEXT:    retq1095entry:1096 %X = load <8 x i8>, ptr %ptr1097 %Y = zext <8 x i8> %X to <8 x i32>1098 ret <8 x i32> %Y1099}1100 1101define <8 x i32> @load_zext_16i8_to_8i32(ptr%ptr) {1102; SSE2-LABEL: load_zext_16i8_to_8i32:1103; SSE2:       # %bb.0: # %entry1104; SSE2-NEXT:    movdqa (%rdi), %xmm11105; SSE2-NEXT:    pxor %xmm2, %xmm21106; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]1107; SSE2-NEXT:    movdqa %xmm1, %xmm01108; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]1109; SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]1110; SSE2-NEXT:    retq1111;1112; SSSE3-LABEL: load_zext_16i8_to_8i32:1113; SSSE3:       # %bb.0: # %entry1114; SSSE3-NEXT:    movdqa (%rdi), %xmm11115; SSSE3-NEXT:    pxor %xmm2, %xmm21116; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]1117; SSSE3-NEXT:    movdqa %xmm1, %xmm01118; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]1119; SSSE3-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]1120; SSSE3-NEXT:    retq1121;1122; SSE41-LABEL: load_zext_16i8_to_8i32:1123; SSE41:       # %bb.0: # %entry1124; SSE41-NEXT:    movdqa (%rdi), %xmm11125; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero1126; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,1,1]1127; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero1128; SSE41-NEXT:    retq1129;1130; AVX1-LABEL: load_zext_16i8_to_8i32:1131; AVX1:       # %bb.0: # %entry1132; AVX1-NEXT:    vmovdqa (%rdi), %xmm01133; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm1 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero1134; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]1135; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero1136; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01137; AVX1-NEXT:    retq1138;1139; AVX2-LABEL: load_zext_16i8_to_8i32:1140; AVX2:       # %bb.0: # %entry1141; AVX2-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,zero1142; AVX2-NEXT:    retq1143;1144; AVX512-LABEL: load_zext_16i8_to_8i32:1145; AVX512:       # %bb.0: # %entry1146; AVX512-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,zero1147; AVX512-NEXT:    retq1148entry:1149 %X = load <16 x i8>, ptr %ptr1150 %Y = shufflevector <16 x i8> %X, <16 x i8> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1151 %Z = zext <8 x i8> %Y to <8 x i32>1152 ret <8 x i32> %Z1153}1154 1155define <8 x i64> @load_zext_8i8_to_8i64(ptr%ptr) {1156; SSE2-LABEL: load_zext_8i8_to_8i64:1157; SSE2:       # %bb.0: # %entry1158; SSE2-NEXT:    movq {{.*#+}} xmm3 = mem[0],zero1159; SSE2-NEXT:    pxor %xmm4, %xmm41160; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1],xmm3[2],xmm4[2],xmm3[3],xmm4[3],xmm3[4],xmm4[4],xmm3[5],xmm4[5],xmm3[6],xmm4[6],xmm3[7],xmm4[7]1161; SSE2-NEXT:    movdqa %xmm3, %xmm11162; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1],xmm1[2],xmm4[2],xmm1[3],xmm4[3]1163; SSE2-NEXT:    movdqa %xmm1, %xmm01164; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1]1165; SSE2-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm4[2],xmm1[3],xmm4[3]1166; SSE2-NEXT:    punpckhwd {{.*#+}} xmm3 = xmm3[4],xmm4[4],xmm3[5],xmm4[5],xmm3[6],xmm4[6],xmm3[7],xmm4[7]1167; SSE2-NEXT:    movdqa %xmm3, %xmm21168; SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1]1169; SSE2-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm4[2],xmm3[3],xmm4[3]1170; SSE2-NEXT:    retq1171;1172; SSSE3-LABEL: load_zext_8i8_to_8i64:1173; SSSE3:       # %bb.0: # %entry1174; SSSE3-NEXT:    movq {{.*#+}} xmm3 = mem[0],zero1175; SSSE3-NEXT:    movdqa %xmm3, %xmm01176; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero1177; SSSE3-NEXT:    movdqa %xmm3, %xmm11178; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[2],zero,zero,zero,zero,zero,zero,zero,xmm1[3],zero,zero,zero,zero,zero,zero,zero1179; SSSE3-NEXT:    movdqa %xmm3, %xmm21180; SSSE3-NEXT:    pshufb {{.*#+}} xmm2 = xmm2[4],zero,zero,zero,zero,zero,zero,zero,xmm2[5],zero,zero,zero,zero,zero,zero,zero1181; SSSE3-NEXT:    pshufb {{.*#+}} xmm3 = xmm3[6],zero,zero,zero,zero,zero,zero,zero,xmm3[7],zero,zero,zero,zero,zero,zero,zero1182; SSSE3-NEXT:    retq1183;1184; SSE41-LABEL: load_zext_8i8_to_8i64:1185; SSE41:       # %bb.0: # %entry1186; SSE41-NEXT:    pmovzxbq {{.*#+}} xmm0 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero1187; SSE41-NEXT:    pmovzxbq {{.*#+}} xmm1 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero1188; SSE41-NEXT:    pmovzxbq {{.*#+}} xmm2 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero1189; SSE41-NEXT:    pmovzxbq {{.*#+}} xmm3 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero1190; SSE41-NEXT:    retq1191;1192; AVX1-LABEL: load_zext_8i8_to_8i64:1193; AVX1:       # %bb.0: # %entry1194; AVX1-NEXT:    vpmovzxbq {{.*#+}} xmm1 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero1195; AVX1-NEXT:    vpmovzxbq {{.*#+}} xmm2 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero1196; AVX1-NEXT:    vpmovzxbq {{.*#+}} xmm0 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero1197; AVX1-NEXT:    vpmovzxbq {{.*#+}} xmm3 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero1198; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm3, %ymm01199; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm11200; AVX1-NEXT:    retq1201;1202; AVX2-LABEL: load_zext_8i8_to_8i64:1203; AVX2:       # %bb.0: # %entry1204; AVX2-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,zero1205; AVX2-NEXT:    vpmovzxbq {{.*#+}} ymm1 = 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,zero1206; AVX2-NEXT:    retq1207;1208; AVX512-LABEL: load_zext_8i8_to_8i64:1209; AVX512:       # %bb.0: # %entry1210; AVX512-NEXT:    vpmovzxbq {{.*#+}} zmm0 = 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,zero1211; AVX512-NEXT:    retq1212entry:1213 %X = load <8 x i8>, ptr %ptr1214 %Y = zext <8 x i8> %X to <8 x i64>1215 ret <8 x i64> %Y1216}1217 1218define <16 x i16> @load_zext_16i8_to_16i16(ptr%ptr) {1219; SSE2-LABEL: load_zext_16i8_to_16i16:1220; SSE2:       # %bb.0: # %entry1221; SSE2-NEXT:    movdqa (%rdi), %xmm11222; SSE2-NEXT:    pxor %xmm2, %xmm21223; SSE2-NEXT:    movdqa %xmm1, %xmm01224; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]1225; SSE2-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm2[8],xmm1[9],xmm2[9],xmm1[10],xmm2[10],xmm1[11],xmm2[11],xmm1[12],xmm2[12],xmm1[13],xmm2[13],xmm1[14],xmm2[14],xmm1[15],xmm2[15]1226; SSE2-NEXT:    retq1227;1228; SSSE3-LABEL: load_zext_16i8_to_16i16:1229; SSSE3:       # %bb.0: # %entry1230; SSSE3-NEXT:    movdqa (%rdi), %xmm11231; SSSE3-NEXT:    pxor %xmm2, %xmm21232; SSSE3-NEXT:    movdqa %xmm1, %xmm01233; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]1234; SSSE3-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm2[8],xmm1[9],xmm2[9],xmm1[10],xmm2[10],xmm1[11],xmm2[11],xmm1[12],xmm2[12],xmm1[13],xmm2[13],xmm1[14],xmm2[14],xmm1[15],xmm2[15]1235; SSSE3-NEXT:    retq1236;1237; SSE41-LABEL: load_zext_16i8_to_16i16:1238; SSE41:       # %bb.0: # %entry1239; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero1240; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero1241; SSE41-NEXT:    retq1242;1243; AVX1-LABEL: load_zext_16i8_to_16i16:1244; AVX1:       # %bb.0: # %entry1245; AVX1-NEXT:    vpmovzxbw {{.*#+}} xmm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero1246; AVX1-NEXT:    vpmovzxbw {{.*#+}} xmm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero1247; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01248; AVX1-NEXT:    retq1249;1250; AVX2-LABEL: load_zext_16i8_to_16i16:1251; AVX2:       # %bb.0: # %entry1252; AVX2-NEXT:    vpmovzxbw {{.*#+}} ymm0 = 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],zero1253; AVX2-NEXT:    retq1254;1255; AVX512-LABEL: load_zext_16i8_to_16i16:1256; AVX512:       # %bb.0: # %entry1257; AVX512-NEXT:    vpmovzxbw {{.*#+}} ymm0 = 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],zero1258; AVX512-NEXT:    retq1259entry:1260 %X = load <16 x i8>, ptr %ptr1261 %Y = zext <16 x i8> %X to <16 x i16>1262 ret <16 x i16> %Y1263}1264 1265define <2 x i64> @load_zext_2i16_to_2i64(ptr%ptr) {1266; SSE2-LABEL: load_zext_2i16_to_2i64:1267; SSE2:       # %bb.0: # %entry1268; SSE2-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero1269; SSE2-NEXT:    pxor %xmm1, %xmm11270; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1271; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]1272; SSE2-NEXT:    retq1273;1274; SSSE3-LABEL: load_zext_2i16_to_2i64:1275; SSSE3:       # %bb.0: # %entry1276; SSSE3-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero1277; SSSE3-NEXT:    pxor %xmm1, %xmm11278; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1279; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]1280; SSSE3-NEXT:    retq1281;1282; SSE41-LABEL: load_zext_2i16_to_2i64:1283; SSE41:       # %bb.0: # %entry1284; SSE41-NEXT:    pmovzxwq {{.*#+}} xmm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero1285; SSE41-NEXT:    retq1286;1287; AVX-LABEL: load_zext_2i16_to_2i64:1288; AVX:       # %bb.0: # %entry1289; AVX-NEXT:    vpmovzxwq {{.*#+}} xmm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero1290; AVX-NEXT:    retq1291entry:1292 %X = load <2 x i16>, ptr %ptr1293 %Y = zext <2 x i16> %X to <2 x i64>1294 ret <2 x i64> %Y1295}1296 1297define <4 x i32> @load_zext_4i16_to_4i32(ptr%ptr) {1298; SSE2-LABEL: load_zext_4i16_to_4i32:1299; SSE2:       # %bb.0: # %entry1300; SSE2-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero1301; SSE2-NEXT:    pxor %xmm1, %xmm11302; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1303; SSE2-NEXT:    retq1304;1305; SSSE3-LABEL: load_zext_4i16_to_4i32:1306; SSSE3:       # %bb.0: # %entry1307; SSSE3-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero1308; SSSE3-NEXT:    pxor %xmm1, %xmm11309; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1310; SSSE3-NEXT:    retq1311;1312; SSE41-LABEL: load_zext_4i16_to_4i32:1313; SSE41:       # %bb.0: # %entry1314; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero1315; SSE41-NEXT:    retq1316;1317; AVX-LABEL: load_zext_4i16_to_4i32:1318; AVX:       # %bb.0: # %entry1319; AVX-NEXT:    vpmovzxwd {{.*#+}} xmm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero1320; AVX-NEXT:    retq1321entry:1322 %X = load <4 x i16>, ptr %ptr1323 %Y = zext <4 x i16> %X to <4 x i32>1324 ret <4 x i32> %Y1325}1326 1327define <4 x i64> @load_zext_4i16_to_4i64(ptr%ptr) {1328; SSE2-LABEL: load_zext_4i16_to_4i64:1329; SSE2:       # %bb.0: # %entry1330; SSE2-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero1331; SSE2-NEXT:    pxor %xmm2, %xmm21332; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]1333; SSE2-NEXT:    movdqa %xmm1, %xmm01334; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]1335; SSE2-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm2[2],xmm1[3],xmm2[3]1336; SSE2-NEXT:    retq1337;1338; SSSE3-LABEL: load_zext_4i16_to_4i64:1339; SSSE3:       # %bb.0: # %entry1340; SSSE3-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero1341; SSSE3-NEXT:    pxor %xmm2, %xmm21342; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]1343; SSSE3-NEXT:    movdqa %xmm1, %xmm01344; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]1345; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm2[2],xmm1[3],xmm2[3]1346; SSSE3-NEXT:    retq1347;1348; SSE41-LABEL: load_zext_4i16_to_4i64:1349; SSE41:       # %bb.0: # %entry1350; SSE41-NEXT:    pmovzxwq {{.*#+}} xmm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero1351; SSE41-NEXT:    pmovzxwq {{.*#+}} xmm1 = mem[0],zero,zero,zero,mem[1],zero,zero,zero1352; SSE41-NEXT:    retq1353;1354; AVX1-LABEL: load_zext_4i16_to_4i64:1355; AVX1:       # %bb.0: # %entry1356; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero1357; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm1 = mem[0],zero,zero,zero,mem[1],zero,zero,zero1358; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01359; AVX1-NEXT:    retq1360;1361; AVX2-LABEL: load_zext_4i16_to_4i64:1362; AVX2:       # %bb.0: # %entry1363; AVX2-NEXT:    vpmovzxwq {{.*#+}} ymm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero1364; AVX2-NEXT:    retq1365;1366; AVX512-LABEL: load_zext_4i16_to_4i64:1367; AVX512:       # %bb.0: # %entry1368; AVX512-NEXT:    vpmovzxwq {{.*#+}} ymm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero1369; AVX512-NEXT:    retq1370entry:1371 %X = load <4 x i16>, ptr %ptr1372 %Y = zext <4 x i16> %X to <4 x i64>1373 ret <4 x i64> %Y1374}1375 1376define <8 x i32> @load_zext_8i16_to_8i32(ptr%ptr) {1377; SSE2-LABEL: load_zext_8i16_to_8i32:1378; SSE2:       # %bb.0: # %entry1379; SSE2-NEXT:    movdqa (%rdi), %xmm11380; SSE2-NEXT:    pxor %xmm2, %xmm21381; SSE2-NEXT:    movdqa %xmm1, %xmm01382; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]1383; SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]1384; SSE2-NEXT:    retq1385;1386; SSSE3-LABEL: load_zext_8i16_to_8i32:1387; SSSE3:       # %bb.0: # %entry1388; SSSE3-NEXT:    movdqa (%rdi), %xmm11389; SSSE3-NEXT:    pxor %xmm2, %xmm21390; SSSE3-NEXT:    movdqa %xmm1, %xmm01391; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]1392; SSSE3-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]1393; SSSE3-NEXT:    retq1394;1395; SSE41-LABEL: load_zext_8i16_to_8i32:1396; SSE41:       # %bb.0: # %entry1397; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero1398; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero1399; SSE41-NEXT:    retq1400;1401; AVX1-LABEL: load_zext_8i16_to_8i32:1402; AVX1:       # %bb.0: # %entry1403; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero1404; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero1405; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01406; AVX1-NEXT:    retq1407;1408; AVX2-LABEL: load_zext_8i16_to_8i32:1409; AVX2:       # %bb.0: # %entry1410; AVX2-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],zero1411; AVX2-NEXT:    retq1412;1413; AVX512-LABEL: load_zext_8i16_to_8i32:1414; AVX512:       # %bb.0: # %entry1415; AVX512-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],zero1416; AVX512-NEXT:    retq1417entry:1418 %X = load <8 x i16>, ptr %ptr1419 %Y = zext <8 x i16> %X to <8 x i32>1420 ret <8 x i32> %Y1421}1422 1423define <2 x i64> @load_zext_2i32_to_2i64(ptr%ptr) {1424; SSE2-LABEL: load_zext_2i32_to_2i64:1425; SSE2:       # %bb.0: # %entry1426; SSE2-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1427; SSE2-NEXT:    xorps %xmm1, %xmm11428; SSE2-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]1429; SSE2-NEXT:    retq1430;1431; SSSE3-LABEL: load_zext_2i32_to_2i64:1432; SSSE3:       # %bb.0: # %entry1433; SSSE3-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1434; SSSE3-NEXT:    xorps %xmm1, %xmm11435; SSSE3-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]1436; SSSE3-NEXT:    retq1437;1438; SSE41-LABEL: load_zext_2i32_to_2i64:1439; SSE41:       # %bb.0: # %entry1440; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = mem[0],zero,mem[1],zero1441; SSE41-NEXT:    retq1442;1443; AVX-LABEL: load_zext_2i32_to_2i64:1444; AVX:       # %bb.0: # %entry1445; AVX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = mem[0],zero,mem[1],zero1446; AVX-NEXT:    retq1447entry:1448 %X = load <2 x i32>, ptr %ptr1449 %Y = zext <2 x i32> %X to <2 x i64>1450 ret <2 x i64> %Y1451}1452 1453define <4 x i64> @load_zext_4i32_to_4i64(ptr%ptr) {1454; SSE2-LABEL: load_zext_4i32_to_4i64:1455; SSE2:       # %bb.0: # %entry1456; SSE2-NEXT:    movaps (%rdi), %xmm11457; SSE2-NEXT:    xorps %xmm2, %xmm21458; SSE2-NEXT:    movaps %xmm1, %xmm01459; SSE2-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]1460; SSE2-NEXT:    unpckhps {{.*#+}} xmm1 = xmm1[2],xmm2[2],xmm1[3],xmm2[3]1461; SSE2-NEXT:    retq1462;1463; SSSE3-LABEL: load_zext_4i32_to_4i64:1464; SSSE3:       # %bb.0: # %entry1465; SSSE3-NEXT:    movaps (%rdi), %xmm11466; SSSE3-NEXT:    xorps %xmm2, %xmm21467; SSSE3-NEXT:    movaps %xmm1, %xmm01468; SSSE3-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]1469; SSSE3-NEXT:    unpckhps {{.*#+}} xmm1 = xmm1[2],xmm2[2],xmm1[3],xmm2[3]1470; SSSE3-NEXT:    retq1471;1472; SSE41-LABEL: load_zext_4i32_to_4i64:1473; SSE41:       # %bb.0: # %entry1474; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = mem[0],zero,mem[1],zero1475; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = mem[0],zero,mem[1],zero1476; SSE41-NEXT:    retq1477;1478; AVX1-LABEL: load_zext_4i32_to_4i64:1479; AVX1:       # %bb.0: # %entry1480; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = mem[0],zero,mem[1],zero1481; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm1 = mem[0],zero,mem[1],zero1482; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01483; AVX1-NEXT:    retq1484;1485; AVX2-LABEL: load_zext_4i32_to_4i64:1486; AVX2:       # %bb.0: # %entry1487; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero1488; AVX2-NEXT:    retq1489;1490; AVX512-LABEL: load_zext_4i32_to_4i64:1491; AVX512:       # %bb.0: # %entry1492; AVX512-NEXT:    vpmovzxdq {{.*#+}} ymm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero1493; AVX512-NEXT:    retq1494entry:1495 %X = load <4 x i32>, ptr %ptr1496 %Y = zext <4 x i32> %X to <4 x i64>1497 ret <4 x i64> %Y1498}1499 1500define <8 x i32> @zext_8i8_to_8i32(<8 x i8> %z) {1501; SSE2-LABEL: zext_8i8_to_8i32:1502; SSE2:       # %bb.0: # %entry1503; SSE2-NEXT:    movdqa %xmm0, %xmm11504; SSE2-NEXT:    pxor %xmm2, %xmm21505; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]1506; SSE2-NEXT:    movdqa %xmm1, %xmm01507; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]1508; SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]1509; SSE2-NEXT:    retq1510;1511; SSSE3-LABEL: zext_8i8_to_8i32:1512; SSSE3:       # %bb.0: # %entry1513; SSSE3-NEXT:    movdqa %xmm0, %xmm11514; SSSE3-NEXT:    pxor %xmm2, %xmm21515; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]1516; SSSE3-NEXT:    movdqa %xmm1, %xmm01517; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]1518; SSSE3-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]1519; SSSE3-NEXT:    retq1520;1521; SSE41-LABEL: zext_8i8_to_8i32:1522; SSE41:       # %bb.0: # %entry1523; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm2 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero1524; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]1525; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm1 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero1526; SSE41-NEXT:    movdqa %xmm2, %xmm01527; SSE41-NEXT:    retq1528;1529; AVX1-LABEL: zext_8i8_to_8i32:1530; AVX1:       # %bb.0: # %entry1531; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm1 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero1532; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]1533; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero1534; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01535; AVX1-NEXT:    retq1536;1537; AVX2-LABEL: zext_8i8_to_8i32:1538; AVX2:       # %bb.0: # %entry1539; AVX2-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,zero1540; AVX2-NEXT:    retq1541;1542; AVX512-LABEL: zext_8i8_to_8i32:1543; AVX512:       # %bb.0: # %entry1544; AVX512-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,zero1545; AVX512-NEXT:    retq1546entry:1547  %t = zext <8 x i8> %z to <8 x i32>1548  ret <8 x i32> %t1549}1550 1551define <8 x i32> @shuf_zext_8i16_to_8i32(<8 x i16> %A) nounwind uwtable readnone ssp {1552; SSE2-LABEL: shuf_zext_8i16_to_8i32:1553; SSE2:       # %bb.0: # %entry1554; SSE2-NEXT:    movdqa %xmm0, %xmm11555; SSE2-NEXT:    pxor %xmm2, %xmm21556; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]1557; SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]1558; SSE2-NEXT:    retq1559;1560; SSSE3-LABEL: shuf_zext_8i16_to_8i32:1561; SSSE3:       # %bb.0: # %entry1562; SSSE3-NEXT:    movdqa %xmm0, %xmm11563; SSSE3-NEXT:    pxor %xmm2, %xmm21564; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]1565; SSSE3-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]1566; SSSE3-NEXT:    retq1567;1568; SSE41-LABEL: shuf_zext_8i16_to_8i32:1569; SSE41:       # %bb.0: # %entry1570; SSE41-NEXT:    movdqa %xmm0, %xmm11571; SSE41-NEXT:    pxor %xmm2, %xmm21572; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero1573; SSE41-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]1574; SSE41-NEXT:    retq1575;1576; AVX1-LABEL: shuf_zext_8i16_to_8i32:1577; AVX1:       # %bb.0: # %entry1578; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm11579; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm1 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]1580; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero1581; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01582; AVX1-NEXT:    retq1583;1584; AVX2-LABEL: shuf_zext_8i16_to_8i32:1585; AVX2:       # %bb.0: # %entry1586; AVX2-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],zero1587; AVX2-NEXT:    retq1588;1589; AVX512-LABEL: shuf_zext_8i16_to_8i32:1590; AVX512:       # %bb.0: # %entry1591; AVX512-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],zero1592; AVX512-NEXT:    retq1593entry:1594  %B = shufflevector <8 x i16> %A, <8 x i16> zeroinitializer, <16 x i32> <i32 0, i32 8, i32 1, i32 8, i32 2, i32 8, i32 3, i32 8, i32 4, i32 8, i32 5, i32 8, i32 6, i32 8, i32 7, i32 8>1595  %Z = bitcast <16 x i16> %B to <8 x i32>1596  ret <8 x i32> %Z1597}1598 1599define <4 x i64> @shuf_zext_4i32_to_4i64(<4 x i32> %A) nounwind uwtable readnone ssp {1600; SSE2-LABEL: shuf_zext_4i32_to_4i64:1601; SSE2:       # %bb.0: # %entry1602; SSE2-NEXT:    movaps %xmm0, %xmm11603; SSE2-NEXT:    xorps %xmm2, %xmm21604; SSE2-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]1605; SSE2-NEXT:    unpckhps {{.*#+}} xmm1 = xmm1[2],xmm2[2],xmm1[3],xmm2[3]1606; SSE2-NEXT:    retq1607;1608; SSSE3-LABEL: shuf_zext_4i32_to_4i64:1609; SSSE3:       # %bb.0: # %entry1610; SSSE3-NEXT:    movaps %xmm0, %xmm11611; SSSE3-NEXT:    xorps %xmm2, %xmm21612; SSSE3-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]1613; SSSE3-NEXT:    unpckhps {{.*#+}} xmm1 = xmm1[2],xmm2[2],xmm1[3],xmm2[3]1614; SSSE3-NEXT:    retq1615;1616; SSE41-LABEL: shuf_zext_4i32_to_4i64:1617; SSE41:       # %bb.0: # %entry1618; SSE41-NEXT:    movdqa %xmm0, %xmm11619; SSE41-NEXT:    pxor %xmm2, %xmm21620; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero1621; SSE41-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm2[2],xmm1[3],xmm2[3]1622; SSE41-NEXT:    retq1623;1624; AVX1-LABEL: shuf_zext_4i32_to_4i64:1625; AVX1:       # %bb.0: # %entry1626; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm11627; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]1628; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero1629; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01630; AVX1-NEXT:    retq1631;1632; AVX2-LABEL: shuf_zext_4i32_to_4i64:1633; AVX2:       # %bb.0: # %entry1634; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero1635; AVX2-NEXT:    retq1636;1637; AVX512-LABEL: shuf_zext_4i32_to_4i64:1638; AVX512:       # %bb.0: # %entry1639; AVX512-NEXT:    vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero1640; AVX512-NEXT:    retq1641entry:1642  %B = shufflevector <4 x i32> %A, <4 x i32> zeroinitializer, <8 x i32> <i32 0, i32 4, i32 1, i32 4, i32 2, i32 4, i32 3, i32 4>1643  %Z = bitcast <8 x i32> %B to <4 x i64>1644  ret <4 x i64> %Z1645}1646 1647define <8 x i32> @shuf_zext_8i8_to_8i32(<8 x i8> %A) {1648; SSE2-LABEL: shuf_zext_8i8_to_8i32:1649; SSE2:       # %bb.0: # %entry1650; SSE2-NEXT:    movdqa %xmm0, %xmm11651; SSE2-NEXT:    pxor %xmm2, %xmm21652; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]1653; SSE2-NEXT:    movdqa %xmm1, %xmm01654; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]1655; SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]1656; SSE2-NEXT:    retq1657;1658; SSSE3-LABEL: shuf_zext_8i8_to_8i32:1659; SSSE3:       # %bb.0: # %entry1660; SSSE3-NEXT:    movdqa %xmm0, %xmm11661; SSSE3-NEXT:    pxor %xmm2, %xmm21662; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]1663; SSSE3-NEXT:    movdqa %xmm1, %xmm01664; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]1665; SSSE3-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]1666; SSSE3-NEXT:    retq1667;1668; SSE41-LABEL: shuf_zext_8i8_to_8i32:1669; SSE41:       # %bb.0: # %entry1670; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm2 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero1671; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]1672; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm1 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero1673; SSE41-NEXT:    movdqa %xmm2, %xmm01674; SSE41-NEXT:    retq1675;1676; AVX1-LABEL: shuf_zext_8i8_to_8i32:1677; AVX1:       # %bb.0: # %entry1678; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm1 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero1679; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]1680; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero1681; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01682; AVX1-NEXT:    retq1683;1684; AVX2-LABEL: shuf_zext_8i8_to_8i32:1685; AVX2:       # %bb.0: # %entry1686; AVX2-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,zero1687; AVX2-NEXT:    retq1688;1689; AVX512-LABEL: shuf_zext_8i8_to_8i32:1690; AVX512:       # %bb.0: # %entry1691; AVX512-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,zero1692; AVX512-NEXT:    retq1693entry:1694  %B = shufflevector <8 x i8> %A, <8 x i8> zeroinitializer, <32 x i32> <i32 0, i32 8, i32 8, i32 8, i32 1, i32 8, i32 8, i32 8, i32 2, i32 8, i32 8, i32 8, i32 3, i32 8, i32 8, i32 8, i32 4, i32 8, i32 8, i32 8, i32 5, i32 8, i32 8, i32 8, i32 6, i32 8, i32 8, i32 8, i32 7, i32 8, i32 8, i32 8>1695  %Z = bitcast <32 x i8> %B to <8 x i32>1696  ret <8 x i32> %Z1697}1698 1699define <2 x i64> @shuf_zext_16i8_to_2i64_offset6(<16 x i8> %A) nounwind uwtable readnone ssp {1700; SSE2-LABEL: shuf_zext_16i8_to_2i64_offset6:1701; SSE2:       # %bb.0: # %entry1702; SSE2-NEXT:    pxor %xmm1, %xmm11703; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]1704; SSE2-NEXT:    punpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]1705; SSE2-NEXT:    punpckhdq {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]1706; SSE2-NEXT:    retq1707;1708; SSSE3-LABEL: shuf_zext_16i8_to_2i64_offset6:1709; SSSE3:       # %bb.0: # %entry1710; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[6],zero,zero,zero,zero,zero,zero,zero,xmm0[7],zero,zero,zero,zero,zero,zero,zero1711; SSSE3-NEXT:    retq1712;1713; SSE41-LABEL: shuf_zext_16i8_to_2i64_offset6:1714; SSE41:       # %bb.0: # %entry1715; SSE41-NEXT:    psrlq $48, %xmm01716; SSE41-NEXT:    pmovzxbq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero1717; SSE41-NEXT:    retq1718;1719; AVX1-LABEL: shuf_zext_16i8_to_2i64_offset6:1720; AVX1:       # %bb.0: # %entry1721; AVX1-NEXT:    vpsrlq $48, %xmm0, %xmm01722; AVX1-NEXT:    vpmovzxbq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero1723; AVX1-NEXT:    retq1724;1725; AVX2-SLOW-LABEL: shuf_zext_16i8_to_2i64_offset6:1726; AVX2-SLOW:       # %bb.0: # %entry1727; AVX2-SLOW-NEXT:    vpsrlq $48, %xmm0, %xmm01728; AVX2-SLOW-NEXT:    vpmovzxbq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero1729; AVX2-SLOW-NEXT:    retq1730;1731; AVX2-FAST-LABEL: shuf_zext_16i8_to_2i64_offset6:1732; AVX2-FAST:       # %bb.0: # %entry1733; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[6],zero,zero,zero,zero,zero,zero,zero,xmm0[7],zero,zero,zero,zero,zero,zero,zero1734; AVX2-FAST-NEXT:    retq1735;1736; AVX512F-LABEL: shuf_zext_16i8_to_2i64_offset6:1737; AVX512F:       # %bb.0: # %entry1738; AVX512F-NEXT:    vpsrlq $48, %xmm0, %xmm01739; AVX512F-NEXT:    vpmovzxbq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero1740; AVX512F-NEXT:    retq1741;1742; AVX512BW-LABEL: shuf_zext_16i8_to_2i64_offset6:1743; AVX512BW:       # %bb.0: # %entry1744; AVX512BW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[6],zero,zero,zero,zero,zero,zero,zero,xmm0[7],zero,zero,zero,zero,zero,zero,zero1745; AVX512BW-NEXT:    retq1746entry:1747  %B = shufflevector <16 x i8> %A, <16 x i8> zeroinitializer, <16 x i32> <i32 6, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 7, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>1748  %Z = bitcast <16 x i8> %B to <2 x i64>1749  ret <2 x i64> %Z1750}1751 1752define <4 x i64> @shuf_zext_16i8_to_4i64_offset11(<16 x i8> %A) nounwind uwtable readnone ssp {1753; SSE2-LABEL: shuf_zext_16i8_to_4i64_offset11:1754; SSE2:       # %bb.0: # %entry1755; SSE2-NEXT:    movdqa %xmm0, %xmm11756; SSE2-NEXT:    psrlq $8, %xmm11757; SSE2-NEXT:    pxor %xmm2, %xmm21758; SSE2-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm2[8],xmm1[9],xmm2[9],xmm1[10],xmm2[10],xmm1[11],xmm2[11],xmm1[12],xmm2[12],xmm1[13],xmm2[13],xmm1[14],xmm2[14],xmm1[15],xmm2[15]1759; SSE2-NEXT:    movdqa %xmm1, %xmm01760; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]1761; SSE2-NEXT:    punpckhdq {{.*#+}} xmm0 = xmm0[2],xmm2[2],xmm0[3],xmm2[3]1762; SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]1763; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]1764; SSE2-NEXT:    retq1765;1766; SSSE3-LABEL: shuf_zext_16i8_to_4i64_offset11:1767; SSSE3:       # %bb.0: # %entry1768; SSSE3-NEXT:    movdqa %xmm0, %xmm11769; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[11],zero,zero,zero,zero,zero,zero,zero,xmm0[12],zero,zero,zero,zero,zero,zero,zero1770; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[13],zero,zero,zero,zero,zero,zero,zero,xmm1[14],zero,zero,zero,zero,zero,zero,zero1771; SSSE3-NEXT:    retq1772;1773; SSE41-LABEL: shuf_zext_16i8_to_4i64_offset11:1774; SSE41:       # %bb.0: # %entry1775; SSE41-NEXT:    movdqa %xmm0, %xmm11776; SSE41-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1777; SSE41-NEXT:    pmovzxbq {{.*#+}} xmm2 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1778; SSE41-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1779; SSE41-NEXT:    pmovzxbq {{.*#+}} xmm1 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero1780; SSE41-NEXT:    movdqa %xmm2, %xmm01781; SSE41-NEXT:    retq1782;1783; AVX1-LABEL: shuf_zext_16i8_to_4i64_offset11:1784; AVX1:       # %bb.0: # %entry1785; AVX1-NEXT:    vpsrldq {{.*#+}} xmm1 = xmm0[11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1786; AVX1-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1787; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1788; AVX1-NEXT:    vpmovzxbq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero1789; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01790; AVX1-NEXT:    retq1791;1792; AVX2-LABEL: shuf_zext_16i8_to_4i64_offset11:1793; AVX2:       # %bb.0: # %entry1794; AVX2-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1795; AVX2-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,zero1796; AVX2-NEXT:    retq1797;1798; AVX512-LABEL: shuf_zext_16i8_to_4i64_offset11:1799; AVX512:       # %bb.0: # %entry1800; AVX512-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1801; AVX512-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,zero1802; AVX512-NEXT:    retq1803entry:1804  %B = shufflevector <16 x i8> %A, <16 x i8> zeroinitializer, <32 x i32> <i32 11, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 12, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 13, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 14, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>1805  %Z = bitcast <32 x i8> %B to <4 x i64>1806  ret <4 x i64> %Z1807}1808 1809define <2 x i64> @shuf_zext_8i16_to_2i64_offset6(<8 x i16> %A) nounwind uwtable readnone ssp {1810; SSE2-LABEL: shuf_zext_8i16_to_2i64_offset6:1811; SSE2:       # %bb.0: # %entry1812; SSE2-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[2,3,4,5,6,7,8,9,10,11,12,13,14,15],zero,zero1813; SSE2-NEXT:    pxor %xmm1, %xmm11814; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1815; SSE2-NEXT:    punpckhdq {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]1816; SSE2-NEXT:    retq1817;1818; SSSE3-LABEL: shuf_zext_8i16_to_2i64_offset6:1819; SSSE3:       # %bb.0: # %entry1820; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[6,7],zero,zero,zero,zero,zero,zero,xmm0[8,9],zero,zero,zero,zero,zero,zero1821; SSSE3-NEXT:    retq1822;1823; SSE41-LABEL: shuf_zext_8i16_to_2i64_offset6:1824; SSE41:       # %bb.0: # %entry1825; SSE41-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero1826; SSE41-NEXT:    pmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero1827; SSE41-NEXT:    retq1828;1829; AVX1-LABEL: shuf_zext_8i16_to_2i64_offset6:1830; AVX1:       # %bb.0: # %entry1831; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero1832; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero1833; AVX1-NEXT:    retq1834;1835; AVX2-SLOW-LABEL: shuf_zext_8i16_to_2i64_offset6:1836; AVX2-SLOW:       # %bb.0: # %entry1837; AVX2-SLOW-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero1838; AVX2-SLOW-NEXT:    vpmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero1839; AVX2-SLOW-NEXT:    retq1840;1841; AVX2-FAST-LABEL: shuf_zext_8i16_to_2i64_offset6:1842; AVX2-FAST:       # %bb.0: # %entry1843; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[6,7],zero,zero,zero,zero,zero,zero,xmm0[8,9],zero,zero,zero,zero,zero,zero1844; AVX2-FAST-NEXT:    retq1845;1846; AVX512F-LABEL: shuf_zext_8i16_to_2i64_offset6:1847; AVX512F:       # %bb.0: # %entry1848; AVX512F-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero1849; AVX512F-NEXT:    vpmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero1850; AVX512F-NEXT:    retq1851;1852; AVX512BW-LABEL: shuf_zext_8i16_to_2i64_offset6:1853; AVX512BW:       # %bb.0: # %entry1854; AVX512BW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[6,7],zero,zero,zero,zero,zero,zero,xmm0[8,9],zero,zero,zero,zero,zero,zero1855; AVX512BW-NEXT:    retq1856entry:1857  %B = shufflevector <8 x i16> %A, <8 x i16> zeroinitializer, <8 x i32> <i32 3, i32 8, i32 8, i32 8, i32 4, i32 8, i32 8, i32 8>1858  %Z = bitcast <8 x i16> %B to <2 x i64>1859  ret <2 x i64> %Z1860}1861 1862define <4 x i64> @shuf_zext_8i16_to_4i64_offset2(<8 x i16> %A) nounwind uwtable readnone ssp {1863; SSE2-LABEL: shuf_zext_8i16_to_4i64_offset2:1864; SSE2:       # %bb.0: # %entry1865; SSE2-NEXT:    movdqa %xmm0, %xmm11866; SSE2-NEXT:    pxor %xmm2, %xmm21867; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]1868; SSE2-NEXT:    punpckhdq {{.*#+}} xmm0 = xmm0[2],xmm2[2],xmm0[3],xmm2[3]1869; SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]1870; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]1871; SSE2-NEXT:    retq1872;1873; SSSE3-LABEL: shuf_zext_8i16_to_4i64_offset2:1874; SSSE3:       # %bb.0: # %entry1875; SSSE3-NEXT:    movdqa %xmm0, %xmm11876; SSSE3-NEXT:    pxor %xmm2, %xmm21877; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]1878; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm0 = xmm0[2],xmm2[2],xmm0[3],xmm2[3]1879; SSSE3-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]1880; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]1881; SSSE3-NEXT:    retq1882;1883; SSE41-LABEL: shuf_zext_8i16_to_4i64_offset2:1884; SSE41:       # %bb.0: # %entry1885; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1886; SSE41-NEXT:    pmovzxwq {{.*#+}} xmm2 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero1887; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]1888; SSE41-NEXT:    pmovzxwq {{.*#+}} xmm1 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero1889; SSE41-NEXT:    movdqa %xmm2, %xmm01890; SSE41-NEXT:    retq1891;1892; AVX1-LABEL: shuf_zext_8i16_to_4i64_offset2:1893; AVX1:       # %bb.0: # %entry1894; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1895; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero1896; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]1897; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero1898; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01899; AVX1-NEXT:    retq1900;1901; AVX2-LABEL: shuf_zext_8i16_to_4i64_offset2:1902; AVX2:       # %bb.0: # %entry1903; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,2,2,3]1904; AVX2-NEXT:    vpmovzxwq {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero1905; AVX2-NEXT:    retq1906;1907; AVX512-LABEL: shuf_zext_8i16_to_4i64_offset2:1908; AVX512:       # %bb.0: # %entry1909; AVX512-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,2,2,3]1910; AVX512-NEXT:    vpmovzxwq {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero1911; AVX512-NEXT:    retq1912entry:1913  %B = shufflevector <8 x i16> %A, <8 x i16> zeroinitializer, <16 x i32> <i32 2, i32 8, i32 8, i32 8, i32 3, i32 8, i32 8, i32 8, i32 4, i32 8, i32 8, i32 8, i32 5, i32 8, i32 8, i32 8>1914  %Z = bitcast <16 x i16> %B to <4 x i64>1915  ret <4 x i64> %Z1916}1917 1918define <4 x i32> @shuf_zext_8i16_to_4i32_offset1(<8 x i16> %A) nounwind uwtable readnone ssp {1919; SSE2-LABEL: shuf_zext_8i16_to_4i32_offset1:1920; SSE2:       # %bb.0: # %entry1921; SSE2-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[2,3,4,5,6,7,8,9,10,11,12,13,14,15],zero,zero1922; SSE2-NEXT:    pxor %xmm1, %xmm11923; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1924; SSE2-NEXT:    retq1925;1926; SSSE3-LABEL: shuf_zext_8i16_to_4i32_offset1:1927; SSSE3:       # %bb.0: # %entry1928; SSSE3-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[2,3,4,5,6,7,8,9,10,11,12,13,14,15],zero,zero1929; SSSE3-NEXT:    pxor %xmm1, %xmm11930; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1931; SSSE3-NEXT:    retq1932;1933; SSE41-LABEL: shuf_zext_8i16_to_4i32_offset1:1934; SSE41:       # %bb.0: # %entry1935; SSE41-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[2,3,4,5,6,7,8,9,10,11,12,13,14,15],zero,zero1936; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero1937; SSE41-NEXT:    retq1938;1939; AVX1-LABEL: shuf_zext_8i16_to_4i32_offset1:1940; AVX1:       # %bb.0: # %entry1941; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[2,3,4,5,6,7,8,9,10,11,12,13,14,15],zero,zero1942; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero1943; AVX1-NEXT:    retq1944;1945; AVX2-SLOW-LABEL: shuf_zext_8i16_to_4i32_offset1:1946; AVX2-SLOW:       # %bb.0: # %entry1947; AVX2-SLOW-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[2,3,4,5,6,7,8,9,10,11,12,13,14,15],zero,zero1948; AVX2-SLOW-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero1949; AVX2-SLOW-NEXT:    retq1950;1951; AVX2-FAST-LABEL: shuf_zext_8i16_to_4i32_offset1:1952; AVX2-FAST:       # %bb.0: # %entry1953; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[2,3],zero,zero,xmm0[4,5],zero,zero,xmm0[6,7],zero,zero,xmm0[8,9],zero,zero1954; AVX2-FAST-NEXT:    retq1955;1956; AVX512F-LABEL: shuf_zext_8i16_to_4i32_offset1:1957; AVX512F:       # %bb.0: # %entry1958; AVX512F-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[2,3,4,5,6,7,8,9,10,11,12,13,14,15],zero,zero1959; AVX512F-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero1960; AVX512F-NEXT:    retq1961;1962; AVX512BW-LABEL: shuf_zext_8i16_to_4i32_offset1:1963; AVX512BW:       # %bb.0: # %entry1964; AVX512BW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[2,3],zero,zero,xmm0[4,5],zero,zero,xmm0[6,7],zero,zero,xmm0[8,9],zero,zero1965; AVX512BW-NEXT:    retq1966entry:1967  %B = shufflevector <8 x i16> %A, <8 x i16> zeroinitializer, <8 x i32> <i32 1, i32 8, i32 2, i32 8, i32 3, i32 8, i32 4, i32 8>1968  %Z = bitcast <8 x i16> %B to <4 x i32>1969  ret <4 x i32> %Z1970}1971 1972define <8 x i32> @shuf_zext_8i16_to_8i32_offset3(<8 x i16> %A) nounwind uwtable readnone ssp {1973; SSE2-LABEL: shuf_zext_8i16_to_8i32_offset3:1974; SSE2:       # %bb.0: # %entry1975; SSE2-NEXT:    movdqa %xmm0, %xmm11976; SSE2-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero1977; SSE2-NEXT:    pxor %xmm2, %xmm21978; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]1979; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1980; SSE2-NEXT:    retq1981;1982; SSSE3-LABEL: shuf_zext_8i16_to_8i32_offset3:1983; SSSE3:       # %bb.0: # %entry1984; SSSE3-NEXT:    movdqa %xmm0, %xmm11985; SSSE3-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero1986; SSSE3-NEXT:    pxor %xmm2, %xmm21987; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]1988; SSSE3-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1989; SSSE3-NEXT:    retq1990;1991; SSE41-LABEL: shuf_zext_8i16_to_8i32_offset3:1992; SSE41:       # %bb.0: # %entry1993; SSE41-NEXT:    movdqa %xmm0, %xmm11994; SSE41-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]1995; SSE41-NEXT:    pxor %xmm2, %xmm21996; SSE41-NEXT:    punpckhwd {{.*#+}} xmm0 = xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]1997; SSE41-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1998; SSE41-NEXT:    retq1999;2000; AVX1-LABEL: shuf_zext_8i16_to_8i32_offset3:2001; AVX1:       # %bb.0: # %entry2002; AVX1-NEXT:    vpslldq {{.*#+}} xmm1 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]2003; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm22004; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]2005; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero2006; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02007; AVX1-NEXT:    retq2008;2009; AVX2-LABEL: shuf_zext_8i16_to_8i32_offset3:2010; AVX2:       # %bb.0: # %entry2011; AVX2-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero2012; AVX2-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],zero2013; AVX2-NEXT:    retq2014;2015; AVX512-LABEL: shuf_zext_8i16_to_8i32_offset3:2016; AVX512:       # %bb.0: # %entry2017; AVX512-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero2018; AVX512-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],zero2019; AVX512-NEXT:    retq2020entry:2021  %B = shufflevector <8 x i16> %A, <8 x i16> zeroinitializer, <16 x i32> <i32 3, i32 8, i32 4, i32 8, i32 5, i32 8, i32 6, i32 8, i32 7, i32 8, i32 undef, i32 8, i32 undef, i32 8, i32 undef, i32 8>2022  %Z = bitcast <16 x i16> %B to <8 x i32>2023  ret <8 x i32> %Z2024}2025 2026define <8 x i32> @shuf_zext_16i16_to_8i32_offset8(<16 x i16> %A) nounwind uwtable readnone ssp {2027; SSE2-LABEL: shuf_zext_16i16_to_8i32_offset8:2028; SSE2:       # %bb.0: # %entry2029; SSE2-NEXT:    pxor %xmm2, %xmm22030; SSE2-NEXT:    movdqa %xmm1, %xmm02031; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]2032; SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]2033; SSE2-NEXT:    retq2034;2035; SSSE3-LABEL: shuf_zext_16i16_to_8i32_offset8:2036; SSSE3:       # %bb.0: # %entry2037; SSSE3-NEXT:    pxor %xmm2, %xmm22038; SSSE3-NEXT:    movdqa %xmm1, %xmm02039; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]2040; SSSE3-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]2041; SSSE3-NEXT:    retq2042;2043; SSE41-LABEL: shuf_zext_16i16_to_8i32_offset8:2044; SSE41:       # %bb.0: # %entry2045; SSE41-NEXT:    pxor %xmm2, %xmm22046; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero2047; SSE41-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]2048; SSE41-NEXT:    retq2049;2050; AVX1-LABEL: shuf_zext_16i16_to_8i32_offset8:2051; AVX1:       # %bb.0: # %entry2052; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02053; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm12054; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm1 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2055; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero2056; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm02057; AVX1-NEXT:    retq2058;2059; AVX2-LABEL: shuf_zext_16i16_to_8i32_offset8:2060; AVX2:       # %bb.0: # %entry2061; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm02062; AVX2-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],zero2063; AVX2-NEXT:    retq2064;2065; AVX512-LABEL: shuf_zext_16i16_to_8i32_offset8:2066; AVX512:       # %bb.0: # %entry2067; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm02068; AVX512-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],zero2069; AVX512-NEXT:    retq2070entry:2071  %B = shufflevector <16 x i16> %A, <16 x i16> zeroinitializer, <16 x i32> <i32 8, i32 16, i32 9, i32 16, i32 10, i32 16, i32 11, i32 16, i32 12, i32 16, i32 undef, i32 16, i32 14, i32 16, i32 undef, i32 16>2072  %Z = bitcast <16 x i16> %B to <8 x i32>2073  ret <8 x i32> %Z2074}2075 2076define <2 x i64> @shuf_zext_4i32_to_2i64_offset2(<4 x i32> %A) nounwind uwtable readnone ssp {2077; SSE-LABEL: shuf_zext_4i32_to_2i64_offset2:2078; SSE:       # %bb.0: # %entry2079; SSE-NEXT:    xorps %xmm1, %xmm12080; SSE-NEXT:    unpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]2081; SSE-NEXT:    retq2082;2083; AVX-LABEL: shuf_zext_4i32_to_2i64_offset2:2084; AVX:       # %bb.0: # %entry2085; AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm12086; AVX-NEXT:    vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]2087; AVX-NEXT:    retq2088entry:2089  %B = shufflevector <4 x i32> %A, <4 x i32> zeroinitializer, <4 x i32> <i32 2, i32 4, i32 3, i32 4>2090  %Z = bitcast <4 x i32> %B to <2 x i64>2091  ret <2 x i64> %Z2092}2093 2094define <4 x i64> @shuf_zext_4i32_to_4i64_offset1(<4 x i32> %A) nounwind uwtable readnone ssp {2095; SSE2-LABEL: shuf_zext_4i32_to_4i64_offset1:2096; SSE2:       # %bb.0: # %entry2097; SSE2-NEXT:    movdqa %xmm0, %xmm12098; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [0,0,4294967295,0]2099; SSE2-NEXT:    pand %xmm1, %xmm02100; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero2101; SSE2-NEXT:    retq2102;2103; SSSE3-LABEL: shuf_zext_4i32_to_4i64_offset1:2104; SSSE3:       # %bb.0: # %entry2105; SSSE3-NEXT:    movdqa %xmm0, %xmm12106; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [0,0,4294967295,0]2107; SSSE3-NEXT:    pand %xmm1, %xmm02108; SSSE3-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero2109; SSSE3-NEXT:    retq2110;2111; SSE41-LABEL: shuf_zext_4i32_to_4i64_offset1:2112; SSE41:       # %bb.0: # %entry2113; SSE41-NEXT:    movdqa %xmm0, %xmm12114; SSE41-NEXT:    pxor %xmm0, %xmm02115; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5],xmm0[6,7]2116; SSE41-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero2117; SSE41-NEXT:    retq2118;2119; AVX1-LABEL: shuf_zext_4i32_to_4i64_offset1:2120; AVX1:       # %bb.0: # %entry2121; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm12122; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm0[4,5],xmm1[6,7]2123; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero2124; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02125; AVX1-NEXT:    retq2126;2127; AVX2-LABEL: shuf_zext_4i32_to_4i64_offset1:2128; AVX2:       # %bb.0: # %entry2129; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,2,3,3]2130; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero2131; AVX2-NEXT:    retq2132;2133; AVX512-LABEL: shuf_zext_4i32_to_4i64_offset1:2134; AVX512:       # %bb.0: # %entry2135; AVX512-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,2,3,3]2136; AVX512-NEXT:    vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero2137; AVX512-NEXT:    retq2138entry:2139  %B = shufflevector <4 x i32> %A, <4 x i32> zeroinitializer, <8 x i32> <i32 undef, i32 4, i32 2, i32 4, i32 3, i32 4, i32 undef, i32 4>2140  %Z = bitcast <8 x i32> %B to <4 x i64>2141  ret <4 x i64> %Z2142}2143 2144define <32 x i32> @zext_32i8_to_32i32(<32 x i8> %x) {2145; SSE2-LABEL: zext_32i8_to_32i32:2146; SSE2:       # %bb.0:2147; SSE2-NEXT:    movq %rdi, %rax2148; SSE2-NEXT:    pxor %xmm2, %xmm22149; SSE2-NEXT:    movdqa %xmm0, %xmm32150; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3],xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]2151; SSE2-NEXT:    movdqa %xmm3, %xmm42152; SSE2-NEXT:    punpcklwd {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1],xmm4[2],xmm2[2],xmm4[3],xmm2[3]2153; SSE2-NEXT:    punpckhwd {{.*#+}} xmm3 = xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]2154; SSE2-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]2155; SSE2-NEXT:    movdqa %xmm0, %xmm52156; SSE2-NEXT:    punpcklwd {{.*#+}} xmm5 = xmm5[0],xmm2[0],xmm5[1],xmm2[1],xmm5[2],xmm2[2],xmm5[3],xmm2[3]2157; SSE2-NEXT:    punpckhwd {{.*#+}} xmm0 = xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]2158; SSE2-NEXT:    movdqa %xmm1, %xmm62159; SSE2-NEXT:    punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm2[0],xmm6[1],xmm2[1],xmm6[2],xmm2[2],xmm6[3],xmm2[3],xmm6[4],xmm2[4],xmm6[5],xmm2[5],xmm6[6],xmm2[6],xmm6[7],xmm2[7]2160; SSE2-NEXT:    movdqa %xmm6, %xmm72161; SSE2-NEXT:    punpcklwd {{.*#+}} xmm7 = xmm7[0],xmm2[0],xmm7[1],xmm2[1],xmm7[2],xmm2[2],xmm7[3],xmm2[3]2162; SSE2-NEXT:    punpckhwd {{.*#+}} xmm6 = xmm6[4],xmm2[4],xmm6[5],xmm2[5],xmm6[6],xmm2[6],xmm6[7],xmm2[7]2163; SSE2-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm2[8],xmm1[9],xmm2[9],xmm1[10],xmm2[10],xmm1[11],xmm2[11],xmm1[12],xmm2[12],xmm1[13],xmm2[13],xmm1[14],xmm2[14],xmm1[15],xmm2[15]2164; SSE2-NEXT:    movdqa %xmm1, %xmm82165; SSE2-NEXT:    punpcklwd {{.*#+}} xmm8 = xmm8[0],xmm2[0],xmm8[1],xmm2[1],xmm8[2],xmm2[2],xmm8[3],xmm2[3]2166; SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]2167; SSE2-NEXT:    movdqa %xmm1, 112(%rdi)2168; SSE2-NEXT:    movdqa %xmm8, 96(%rdi)2169; SSE2-NEXT:    movdqa %xmm6, 80(%rdi)2170; SSE2-NEXT:    movdqa %xmm7, 64(%rdi)2171; SSE2-NEXT:    movdqa %xmm0, 48(%rdi)2172; SSE2-NEXT:    movdqa %xmm5, 32(%rdi)2173; SSE2-NEXT:    movdqa %xmm3, 16(%rdi)2174; SSE2-NEXT:    movdqa %xmm4, (%rdi)2175; SSE2-NEXT:    retq2176;2177; SSSE3-LABEL: zext_32i8_to_32i32:2178; SSSE3:       # %bb.0:2179; SSSE3-NEXT:    movq %rdi, %rax2180; SSSE3-NEXT:    pxor %xmm2, %xmm22181; SSSE3-NEXT:    movdqa %xmm0, %xmm32182; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3],xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]2183; SSSE3-NEXT:    movdqa %xmm3, %xmm42184; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1],xmm4[2],xmm2[2],xmm4[3],xmm2[3]2185; SSSE3-NEXT:    punpckhwd {{.*#+}} xmm3 = xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]2186; SSSE3-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]2187; SSSE3-NEXT:    movdqa %xmm0, %xmm52188; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm5 = xmm5[0],xmm2[0],xmm5[1],xmm2[1],xmm5[2],xmm2[2],xmm5[3],xmm2[3]2189; SSSE3-NEXT:    punpckhwd {{.*#+}} xmm0 = xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]2190; SSSE3-NEXT:    movdqa %xmm1, %xmm62191; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm2[0],xmm6[1],xmm2[1],xmm6[2],xmm2[2],xmm6[3],xmm2[3],xmm6[4],xmm2[4],xmm6[5],xmm2[5],xmm6[6],xmm2[6],xmm6[7],xmm2[7]2192; SSSE3-NEXT:    movdqa %xmm6, %xmm72193; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm7 = xmm7[0],xmm2[0],xmm7[1],xmm2[1],xmm7[2],xmm2[2],xmm7[3],xmm2[3]2194; SSSE3-NEXT:    punpckhwd {{.*#+}} xmm6 = xmm6[4],xmm2[4],xmm6[5],xmm2[5],xmm6[6],xmm2[6],xmm6[7],xmm2[7]2195; SSSE3-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm2[8],xmm1[9],xmm2[9],xmm1[10],xmm2[10],xmm1[11],xmm2[11],xmm1[12],xmm2[12],xmm1[13],xmm2[13],xmm1[14],xmm2[14],xmm1[15],xmm2[15]2196; SSSE3-NEXT:    movdqa %xmm1, %xmm82197; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm8 = xmm8[0],xmm2[0],xmm8[1],xmm2[1],xmm8[2],xmm2[2],xmm8[3],xmm2[3]2198; SSSE3-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]2199; SSSE3-NEXT:    movdqa %xmm1, 112(%rdi)2200; SSSE3-NEXT:    movdqa %xmm8, 96(%rdi)2201; SSSE3-NEXT:    movdqa %xmm6, 80(%rdi)2202; SSSE3-NEXT:    movdqa %xmm7, 64(%rdi)2203; SSSE3-NEXT:    movdqa %xmm0, 48(%rdi)2204; SSSE3-NEXT:    movdqa %xmm5, 32(%rdi)2205; SSSE3-NEXT:    movdqa %xmm3, 16(%rdi)2206; SSSE3-NEXT:    movdqa %xmm4, (%rdi)2207; SSSE3-NEXT:    retq2208;2209; SSE41-LABEL: zext_32i8_to_32i32:2210; SSE41:       # %bb.0:2211; SSE41-NEXT:    movq %rdi, %rax2212; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm2 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero2213; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[1,1,1,1]2214; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm3 = xmm3[0],zero,zero,zero,xmm3[1],zero,zero,zero,xmm3[2],zero,zero,zero,xmm3[3],zero,zero,zero2215; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[2,3,2,3]2216; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm4 = xmm4[0],zero,zero,zero,xmm4[1],zero,zero,zero,xmm4[2],zero,zero,zero,xmm4[3],zero,zero,zero2217; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]2218; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero2219; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm5 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero2220; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm1[1,1,1,1]2221; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm6 = xmm6[0],zero,zero,zero,xmm6[1],zero,zero,zero,xmm6[2],zero,zero,zero,xmm6[3],zero,zero,zero2222; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm1[2,3,2,3]2223; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm7 = xmm7[0],zero,zero,zero,xmm7[1],zero,zero,zero,xmm7[2],zero,zero,zero,xmm7[3],zero,zero,zero2224; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[3,3,3,3]2225; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero2226; SSE41-NEXT:    movdqa %xmm1, 112(%rdi)2227; SSE41-NEXT:    movdqa %xmm7, 96(%rdi)2228; SSE41-NEXT:    movdqa %xmm6, 80(%rdi)2229; SSE41-NEXT:    movdqa %xmm5, 64(%rdi)2230; SSE41-NEXT:    movdqa %xmm0, 48(%rdi)2231; SSE41-NEXT:    movdqa %xmm4, 32(%rdi)2232; SSE41-NEXT:    movdqa %xmm3, 16(%rdi)2233; SSE41-NEXT:    movdqa %xmm2, (%rdi)2234; SSE41-NEXT:    retq2235;2236; AVX1-LABEL: zext_32i8_to_32i32:2237; AVX1:       # %bb.0:2238; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm1 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero2239; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm0[1,1,1,1]2240; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero2241; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm42242; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm32243; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm1 = xmm3[0],zero,zero,zero,xmm3[1],zero,zero,zero,xmm3[2],zero,zero,zero,xmm3[3],zero,zero,zero2244; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm3[1,1,1,1]2245; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero2246; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm22247; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]2248; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero2249; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]2250; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero2251; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm12252; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm3[2,3,2,3]2253; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero2254; AVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm3[3,3,3,3]2255; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm3 = xmm3[0],zero,zero,zero,xmm3[1],zero,zero,zero,xmm3[2],zero,zero,zero,xmm3[3],zero,zero,zero2256; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm32257; AVX1-NEXT:    vmovaps %ymm4, %ymm02258; AVX1-NEXT:    retq2259;2260; AVX2-LABEL: zext_32i8_to_32i32:2261; AVX2:       # %bb.0:2262; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm4 = 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,zero2263; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm32264; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm2 = xmm3[0],zero,zero,zero,xmm3[1],zero,zero,zero,xmm3[2],zero,zero,zero,xmm3[3],zero,zero,zero,xmm3[4],zero,zero,zero,xmm3[5],zero,zero,zero,xmm3[6],zero,zero,zero,xmm3[7],zero,zero,zero2265; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]2266; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm1 = 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,zero2267; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm3[2,3,2,3]2268; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm3 = 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,zero2269; AVX2-NEXT:    vmovdqa %ymm4, %ymm02270; AVX2-NEXT:    retq2271;2272; AVX512-LABEL: zext_32i8_to_32i32:2273; AVX512:       # %bb.0:2274; AVX512-NEXT:    vpmovzxbd {{.*#+}} zmm2 = 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,zero2275; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm02276; AVX512-NEXT:    vpmovzxbd {{.*#+}} zmm1 = 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,zero2277; AVX512-NEXT:    vmovdqa64 %zmm2, %zmm02278; AVX512-NEXT:    retq2279  %res = zext <32 x i8>%x to <32 x i32>2280  ret <32 x i32> %res2281}2282 2283define <2 x i32> @zext_2i8_to_2i32(ptr %addr) {2284; SSE2-LABEL: zext_2i8_to_2i32:2285; SSE2:       # %bb.0:2286; SSE2-NEXT:    movzwl (%rdi), %eax2287; SSE2-NEXT:    movd %eax, %xmm02288; SSE2-NEXT:    pxor %xmm1, %xmm12289; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2290; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]2291; SSE2-NEXT:    paddd %xmm0, %xmm02292; SSE2-NEXT:    retq2293;2294; SSSE3-LABEL: zext_2i8_to_2i32:2295; SSSE3:       # %bb.0:2296; SSSE3-NEXT:    movzwl (%rdi), %eax2297; SSSE3-NEXT:    movd %eax, %xmm02298; SSSE3-NEXT:    pxor %xmm1, %xmm12299; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2300; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]2301; SSSE3-NEXT:    paddd %xmm0, %xmm02302; SSSE3-NEXT:    retq2303;2304; SSE41-LABEL: zext_2i8_to_2i32:2305; SSE41:       # %bb.0:2306; SSE41-NEXT:    movzwl (%rdi), %eax2307; SSE41-NEXT:    movd %eax, %xmm02308; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero2309; SSE41-NEXT:    paddd %xmm0, %xmm02310; SSE41-NEXT:    retq2311;2312; AVX-LABEL: zext_2i8_to_2i32:2313; AVX:       # %bb.0:2314; AVX-NEXT:    movzwl (%rdi), %eax2315; AVX-NEXT:    vmovd %eax, %xmm02316; AVX-NEXT:    vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero2317; AVX-NEXT:    vpaddd %xmm0, %xmm0, %xmm02318; AVX-NEXT:    retq2319  %x = load <2 x i8>, ptr %addr, align 12320  %y = zext <2 x i8> %x to <2 x i32>2321  %z = add <2 x i32>%y, %y2322  ret <2 x i32>%z2323}2324 2325define <4 x i32> @zext_4i17_to_4i32(ptr %ptr) {2326; SSE2-LABEL: zext_4i17_to_4i32:2327; SSE2:       # %bb.0:2328; SSE2-NEXT:    movq (%rdi), %rax2329; SSE2-NEXT:    movd %eax, %xmm02330; SSE2-NEXT:    movq %rax, %rcx2331; SSE2-NEXT:    shrq $17, %rcx2332; SSE2-NEXT:    movd %ecx, %xmm12333; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]2334; SSE2-NEXT:    movl 8(%rdi), %ecx2335; SSE2-NEXT:    shll $13, %ecx2336; SSE2-NEXT:    movq %rax, %rdx2337; SSE2-NEXT:    shrq $51, %rdx2338; SSE2-NEXT:    orl %ecx, %edx2339; SSE2-NEXT:    movd %edx, %xmm12340; SSE2-NEXT:    shrq $34, %rax2341; SSE2-NEXT:    movd %eax, %xmm22342; SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]2343; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]2344; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02345; SSE2-NEXT:    retq2346;2347; SSSE3-LABEL: zext_4i17_to_4i32:2348; SSSE3:       # %bb.0:2349; SSSE3-NEXT:    movq (%rdi), %rax2350; SSSE3-NEXT:    movd %eax, %xmm02351; SSSE3-NEXT:    movq %rax, %rcx2352; SSSE3-NEXT:    shrq $17, %rcx2353; SSSE3-NEXT:    movd %ecx, %xmm12354; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]2355; SSSE3-NEXT:    movl 8(%rdi), %ecx2356; SSSE3-NEXT:    shll $13, %ecx2357; SSSE3-NEXT:    movq %rax, %rdx2358; SSSE3-NEXT:    shrq $51, %rdx2359; SSSE3-NEXT:    orl %ecx, %edx2360; SSSE3-NEXT:    movd %edx, %xmm12361; SSSE3-NEXT:    shrq $34, %rax2362; SSSE3-NEXT:    movd %eax, %xmm22363; SSSE3-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]2364; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]2365; SSSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02366; SSSE3-NEXT:    retq2367;2368; SSE41-LABEL: zext_4i17_to_4i32:2369; SSE41:       # %bb.0:2370; SSE41-NEXT:    movl 8(%rdi), %eax2371; SSE41-NEXT:    shll $13, %eax2372; SSE41-NEXT:    movq (%rdi), %rcx2373; SSE41-NEXT:    movq %rcx, %rdx2374; SSE41-NEXT:    shrq $51, %rdx2375; SSE41-NEXT:    orl %eax, %edx2376; SSE41-NEXT:    movq %rcx, %rax2377; SSE41-NEXT:    shrq $17, %rax2378; SSE41-NEXT:    movd %ecx, %xmm02379; SSE41-NEXT:    pinsrd $1, %eax, %xmm02380; SSE41-NEXT:    shrq $34, %rcx2381; SSE41-NEXT:    pinsrd $2, %ecx, %xmm02382; SSE41-NEXT:    pinsrd $3, %edx, %xmm02383; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02384; SSE41-NEXT:    retq2385;2386; AVX1-LABEL: zext_4i17_to_4i32:2387; AVX1:       # %bb.0:2388; AVX1-NEXT:    movl 8(%rdi), %eax2389; AVX1-NEXT:    shll $13, %eax2390; AVX1-NEXT:    movq (%rdi), %rcx2391; AVX1-NEXT:    movq %rcx, %rdx2392; AVX1-NEXT:    shrq $51, %rdx2393; AVX1-NEXT:    orl %eax, %edx2394; AVX1-NEXT:    movq %rcx, %rax2395; AVX1-NEXT:    shrq $17, %rax2396; AVX1-NEXT:    vmovd %ecx, %xmm02397; AVX1-NEXT:    vpinsrd $1, %eax, %xmm0, %xmm02398; AVX1-NEXT:    shrq $34, %rcx2399; AVX1-NEXT:    vpinsrd $2, %ecx, %xmm0, %xmm02400; AVX1-NEXT:    vpinsrd $3, %edx, %xmm0, %xmm02401; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm02402; AVX1-NEXT:    retq2403;2404; AVX2-LABEL: zext_4i17_to_4i32:2405; AVX2:       # %bb.0:2406; AVX2-NEXT:    movl 8(%rdi), %eax2407; AVX2-NEXT:    shll $13, %eax2408; AVX2-NEXT:    movq (%rdi), %rcx2409; AVX2-NEXT:    movq %rcx, %rdx2410; AVX2-NEXT:    shrq $51, %rdx2411; AVX2-NEXT:    orl %eax, %edx2412; AVX2-NEXT:    movq %rcx, %rax2413; AVX2-NEXT:    shrq $17, %rax2414; AVX2-NEXT:    vmovd %ecx, %xmm02415; AVX2-NEXT:    vpinsrd $1, %eax, %xmm0, %xmm02416; AVX2-NEXT:    shrq $34, %rcx2417; AVX2-NEXT:    vpinsrd $2, %ecx, %xmm0, %xmm02418; AVX2-NEXT:    vpinsrd $3, %edx, %xmm0, %xmm02419; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [131071,131071,131071,131071]2420; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm02421; AVX2-NEXT:    retq2422;2423; AVX512-LABEL: zext_4i17_to_4i32:2424; AVX512:       # %bb.0:2425; AVX512-NEXT:    movl 8(%rdi), %eax2426; AVX512-NEXT:    shll $13, %eax2427; AVX512-NEXT:    movq (%rdi), %rcx2428; AVX512-NEXT:    movq %rcx, %rdx2429; AVX512-NEXT:    shrq $51, %rdx2430; AVX512-NEXT:    orl %eax, %edx2431; AVX512-NEXT:    movq %rcx, %rax2432; AVX512-NEXT:    shrq $17, %rax2433; AVX512-NEXT:    vmovd %ecx, %xmm02434; AVX512-NEXT:    vpinsrd $1, %eax, %xmm0, %xmm02435; AVX512-NEXT:    shrq $34, %rcx2436; AVX512-NEXT:    vpinsrd $2, %ecx, %xmm0, %xmm02437; AVX512-NEXT:    vpinsrd $3, %edx, %xmm0, %xmm02438; AVX512-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [131071,131071,131071,131071]2439; AVX512-NEXT:    vpand %xmm1, %xmm0, %xmm02440; AVX512-NEXT:    retq2441  %a = load <4 x i17>, ptr %ptr2442  %b = zext <4 x i17> %a to <4 x i32>2443  ret <4 x i32> %b2444}2445 2446define <8 x i64> @zext_8i6_to_8i64(i32 %x) nounwind uwtable readnone ssp {2447; SSE2-LABEL: zext_8i6_to_8i64:2448; SSE2:       # %bb.0: # %entry2449; SSE2-NEXT:    movd %edi, %xmm02450; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]2451; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[0,1,0,1]2452; SSE2-NEXT:    paddw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm32453; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[0,0,0,0]2454; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,5,5,5]2455; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [63,63]2456; SSE2-NEXT:    pand %xmm4, %xmm02457; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,1,1,1]2458; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,5,5,5,5]2459; SSE2-NEXT:    pand %xmm4, %xmm12460; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[2,2,2,2]2461; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,5,5,5,5]2462; SSE2-NEXT:    pand %xmm4, %xmm22463; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[3,3,3,3]2464; SSE2-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,5,5,5,5]2465; SSE2-NEXT:    pand %xmm4, %xmm32466; SSE2-NEXT:    retq2467;2468; SSSE3-LABEL: zext_8i6_to_8i64:2469; SSSE3:       # %bb.0: # %entry2470; SSSE3-NEXT:    movd %edi, %xmm02471; SSSE3-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]2472; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[0,1,0,1]2473; SSSE3-NEXT:    paddw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm32474; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[0,0,0,0]2475; SSSE3-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,5,5,5]2476; SSSE3-NEXT:    movdqa {{.*#+}} xmm4 = [63,63]2477; SSSE3-NEXT:    pand %xmm4, %xmm02478; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,1,1,1]2479; SSSE3-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,5,5,5,5]2480; SSSE3-NEXT:    pand %xmm4, %xmm12481; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[2,2,2,2]2482; SSSE3-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,5,5,5,5]2483; SSSE3-NEXT:    pand %xmm4, %xmm22484; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[3,3,3,3]2485; SSSE3-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,5,5,5,5]2486; SSSE3-NEXT:    pand %xmm4, %xmm32487; SSSE3-NEXT:    retq2488;2489; SSE41-LABEL: zext_8i6_to_8i64:2490; SSE41:       # %bb.0: # %entry2491; SSE41-NEXT:    movd %edi, %xmm02492; SSE41-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]2493; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[0,1,0,1]2494; SSE41-NEXT:    paddw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm32495; SSE41-NEXT:    pmovzxwq {{.*#+}} xmm0 = xmm3[0],zero,zero,zero,xmm3[1],zero,zero,zero2496; SSE41-NEXT:    pmovsxbq {{.*#+}} xmm4 = [63,63]2497; SSE41-NEXT:    pand %xmm4, %xmm02498; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,1,1,1]2499; SSE41-NEXT:    pmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero2500; SSE41-NEXT:    pand %xmm4, %xmm12501; SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[2,3,2,3]2502; SSE41-NEXT:    pmovzxwq {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero2503; SSE41-NEXT:    pand %xmm4, %xmm22504; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[3,3,3,3]2505; SSE41-NEXT:    pmovzxwq {{.*#+}} xmm3 = xmm3[0],zero,zero,zero,xmm3[1],zero,zero,zero2506; SSE41-NEXT:    pand %xmm4, %xmm32507; SSE41-NEXT:    retq2508;2509; AVX1-LABEL: zext_8i6_to_8i64:2510; AVX1:       # %bb.0: # %entry2511; AVX1-NEXT:    vmovd %edi, %xmm02512; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]2513; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]2514; AVX1-NEXT:    vpaddw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm02515; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm12516; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm0 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero2517; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm1[1,1,1,1]2518; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero2519; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm02520; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm1[2,3,2,3]2521; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero2522; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[3,3,3,3]2523; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero2524; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm12525; AVX1-NEXT:    retq2526;2527; AVX2-LABEL: zext_8i6_to_8i64:2528; AVX2:       # %bb.0: # %entry2529; AVX2-NEXT:    vmovd %edi, %xmm02530; AVX2-NEXT:    vpbroadcastw %xmm0, %xmm02531; AVX2-NEXT:    vpaddw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm02532; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm12533; AVX2-NEXT:    vpmovzxwq {{.*#+}} ymm0 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero2534; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]2535; AVX2-NEXT:    vpmovzxwq {{.*#+}} ymm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero2536; AVX2-NEXT:    retq2537;2538; AVX512-LABEL: zext_8i6_to_8i64:2539; AVX512:       # %bb.0: # %entry2540; AVX512-NEXT:    vmovd %edi, %xmm02541; AVX512-NEXT:    vpbroadcastw %xmm0, %xmm02542; AVX512-NEXT:    vpaddw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm02543; AVX512-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,zero2544; AVX512-NEXT:    vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm02545; AVX512-NEXT:    retq2546entry:2547  %a = trunc i32 %x to i62548  %b = insertelement <8 x i6> undef, i6 %a, i32 02549  %c = shufflevector <8 x i6> %b, <8 x i6> undef, <8 x i32> zeroinitializer2550  %d = add <8 x i6> %c, <i6 0, i6 1, i6 2, i6 3, i6 4, i6 5, i6 6, i6 7>2551  %e = zext <8 x i6> %d to <8 x i64>2552  ret <8 x i64> %e2553}2554 2555define <4 x i64> @splatshuf_zext_v4i64(<4 x i32> %x) {2556; SSE2-LABEL: splatshuf_zext_v4i64:2557; SSE2:       # %bb.0:2558; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]2559; SSE2-NEXT:    pxor %xmm1, %xmm12560; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]2561; SSE2-NEXT:    movdqa %xmm0, %xmm12562; SSE2-NEXT:    retq2563;2564; SSSE3-LABEL: splatshuf_zext_v4i64:2565; SSSE3:       # %bb.0:2566; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]2567; SSSE3-NEXT:    pxor %xmm1, %xmm12568; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]2569; SSSE3-NEXT:    movdqa %xmm0, %xmm12570; SSSE3-NEXT:    retq2571;2572; SSE41-LABEL: splatshuf_zext_v4i64:2573; SSE41:       # %bb.0:2574; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]2575; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero2576; SSE41-NEXT:    movdqa %xmm0, %xmm12577; SSE41-NEXT:    retq2578;2579; AVX1-LABEL: splatshuf_zext_v4i64:2580; AVX1:       # %bb.0:2581; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]2582; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero2583; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm02584; AVX1-NEXT:    retq2585;2586; AVX2-LABEL: splatshuf_zext_v4i64:2587; AVX2:       # %bb.0:2588; AVX2-NEXT:    vpbroadcastd %xmm0, %xmm02589; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero2590; AVX2-NEXT:    retq2591;2592; AVX512-LABEL: splatshuf_zext_v4i64:2593; AVX512:       # %bb.0:2594; AVX512-NEXT:    vpbroadcastd %xmm0, %xmm02595; AVX512-NEXT:    vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero2596; AVX512-NEXT:    retq2597  %shuf = shufflevector <4 x i32> %x, <4 x i32> undef, <4 x i32> zeroinitializer2598  %ext = zext <4 x i32> %shuf to <4 x i64>2599  ret <4 x i64> %ext2600}2601 2602define <8 x i32> @splatshuf_zext_v8i32_matching_undefs(<8 x i16> %x) {2603; SSE2-LABEL: splatshuf_zext_v8i32_matching_undefs:2604; SSE2:       # %bb.0:2605; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,1,3]2606; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,5,7,7]2607; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02608; SSE2-NEXT:    movdqa %xmm0, %xmm12609; SSE2-NEXT:    retq2610;2611; SSSE3-LABEL: splatshuf_zext_v8i32_matching_undefs:2612; SSSE3:       # %bb.0:2613; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1],zero,zero,xmm0[u,u],zero,zero,xmm0[6,7],zero,zero,xmm0[14,15],zero,zero2614; SSSE3-NEXT:    movdqa %xmm0, %xmm12615; SSSE3-NEXT:    retq2616;2617; SSE41-LABEL: splatshuf_zext_v8i32_matching_undefs:2618; SSE41:       # %bb.0:2619; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1],zero,zero,xmm0[6,7],zero,zero,xmm0[6,7],zero,zero,xmm0[14,15],zero,zero2620; SSE41-NEXT:    movdqa %xmm0, %xmm12621; SSE41-NEXT:    retq2622;2623; AVX1-LABEL: splatshuf_zext_v8i32_matching_undefs:2624; AVX1:       # %bb.0:2625; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1],zero,zero,xmm0[6,7],zero,zero,xmm0[6,7],zero,zero,xmm0[14,15],zero,zero2626; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm02627; AVX1-NEXT:    retq2628;2629; AVX2-LABEL: splatshuf_zext_v8i32_matching_undefs:2630; AVX2:       # %bb.0:2631; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,6,7,6,7,14,15,0,1,6,7,6,7,14,15]2632; AVX2-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],zero2633; AVX2-NEXT:    retq2634;2635; AVX512-LABEL: splatshuf_zext_v8i32_matching_undefs:2636; AVX512:       # %bb.0:2637; AVX512-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,6,7,6,7,14,15,0,1,6,7,6,7,14,15]2638; AVX512-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],zero2639; AVX512-NEXT:    retq2640  %shuf = shufflevector <8 x i16> %x, <8 x i16> undef, <8 x i32> <i32 0, i32 undef, i32 3, i32 7, i32 0, i32 undef, i32 3, i32 7>2641  %ext = zext <8 x i16> %shuf to <8 x i32>2642  ret <8 x i32> %ext2643}2644 2645define <8 x i32> @splatshuf_zext_v8i32_unmatched_undef(<8 x i16> %x) {2646; SSE2-LABEL: splatshuf_zext_v8i32_unmatched_undef:2647; SSE2:       # %bb.0:2648; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]2649; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,5,6,7]2650; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]2651; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,3,2,4,5,6,7]2652; SSE2-NEXT:    pxor %xmm1, %xmm12653; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]2654; SSE2-NEXT:    movdqa %xmm0, %xmm12655; SSE2-NEXT:    retq2656;2657; SSSE3-LABEL: splatshuf_zext_v8i32_unmatched_undef:2658; SSSE3:       # %bb.0:2659; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1],zero,zero,xmm0[2,3],zero,zero,xmm0[6,7],zero,zero,xmm0[14,15],zero,zero2660; SSSE3-NEXT:    movdqa %xmm0, %xmm12661; SSSE3-NEXT:    retq2662;2663; SSE41-LABEL: splatshuf_zext_v8i32_unmatched_undef:2664; SSE41:       # %bb.0:2665; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1],zero,zero,xmm0[2,3],zero,zero,xmm0[6,7],zero,zero,xmm0[14,15],zero,zero2666; SSE41-NEXT:    movdqa %xmm0, %xmm12667; SSE41-NEXT:    retq2668;2669; AVX1-LABEL: splatshuf_zext_v8i32_unmatched_undef:2670; AVX1:       # %bb.0:2671; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,6,7,14,15,0,1,6,7,6,7,14,15]2672; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm12673; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm1 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2674; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero2675; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm02676; AVX1-NEXT:    retq2677;2678; AVX2-LABEL: splatshuf_zext_v8i32_unmatched_undef:2679; AVX2:       # %bb.0:2680; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,6,7,14,15,0,1,6,7,6,7,14,15]2681; AVX2-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],zero2682; AVX2-NEXT:    retq2683;2684; AVX512-LABEL: splatshuf_zext_v8i32_unmatched_undef:2685; AVX512:       # %bb.0:2686; AVX512-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,6,7,14,15,0,1,6,7,6,7,14,15]2687; AVX512-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],zero2688; AVX512-NEXT:    retq2689  %shuf = shufflevector <8 x i16> %x, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 3, i32 7, i32 0, i32 undef, i32 3, i32 7>2690  %ext = zext <8 x i16> %shuf to <8 x i32>2691  ret <8 x i32> %ext2692}2693 2694define <16 x i16> @splatshuf_zext_v16i16(<16 x i8> %x) {2695; SSE2-LABEL: splatshuf_zext_v16i16:2696; SSE2:       # %bb.0:2697; SSE2-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2698; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,6,6,6]2699; SSE2-NEXT:    pxor %xmm1, %xmm12700; SSE2-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]2701; SSE2-NEXT:    movdqa %xmm0, %xmm12702; SSE2-NEXT:    retq2703;2704; SSSE3-LABEL: splatshuf_zext_v16i16:2705; SSSE3:       # %bb.0:2706; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[14],zero,xmm0[14],zero,xmm0[14],zero,xmm0[14],zero,xmm0[14],zero,xmm0[14],zero,xmm0[14],zero,xmm0[14],zero2707; SSSE3-NEXT:    movdqa %xmm0, %xmm12708; SSSE3-NEXT:    retq2709;2710; SSE41-LABEL: splatshuf_zext_v16i16:2711; SSE41:       # %bb.0:2712; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[14],zero,xmm0[14],zero,xmm0[14],zero,xmm0[14],zero,xmm0[14],zero,xmm0[14],zero,xmm0[14],zero,xmm0[14],zero2713; SSE41-NEXT:    movdqa %xmm0, %xmm12714; SSE41-NEXT:    retq2715;2716; AVX1-LABEL: splatshuf_zext_v16i16:2717; AVX1:       # %bb.0:2718; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[14],zero,xmm0[14],zero,xmm0[14],zero,xmm0[14],zero,xmm0[14],zero,xmm0[14],zero,xmm0[14],zero,xmm0[14],zero2719; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm02720; AVX1-NEXT:    retq2721;2722; AVX2-LABEL: splatshuf_zext_v16i16:2723; AVX2:       # %bb.0:2724; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14]2725; AVX2-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],zero2726; AVX2-NEXT:    retq2727;2728; AVX512-LABEL: splatshuf_zext_v16i16:2729; AVX512:       # %bb.0:2730; AVX512-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14]2731; AVX512-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],zero2732; AVX512-NEXT:    retq2733  %shuf = shufflevector <16 x i8> %x, <16 x i8> undef, <16 x i32> <i32 14, i32 14, i32 14, i32 14, i32 14, i32 14, i32 14, i32 14, i32 14, i32 14, i32 14, i32 14, i32 14, i32 14, i32 14, i32 14>2734  %ext = zext <16 x i8> %shuf to <16 x i16>2735  ret <16 x i16> %ext2736}2737