brintos

brintos / llvm-project-archived public Read only

0
0
Text · 29.6 KiB · 474be44 Raw
764 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-prefixes=SSE2-SSSE3,SSE23; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+ssse3 | FileCheck %s --check-prefixes=SSE2-SSSE3,SSSE34; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX15; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=AVX26; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefix=AVX27; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-perlane-shuffle | FileCheck %s --check-prefix=AVX28; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vl,+avx512bw,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefix=AVX5129; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vl,+avx512bw,+fast-variable-perlane-shuffle | FileCheck %s --check-prefix=AVX51210 11;12; 128-bit vectors13;14 15define <2 x i64> @ext_i2_2i64(i2 %a0) {16; SSE2-SSSE3-LABEL: ext_i2_2i64:17; SSE2-SSSE3:       # %bb.0:18; SSE2-SSSE3-NEXT:    movd %edi, %xmm019; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,1,0,1]20; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [1,2]21; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm122; SSE2-SSSE3-NEXT:    pcmpeqd %xmm0, %xmm123; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,0,3,2]24; SSE2-SSSE3-NEXT:    pand %xmm1, %xmm025; SSE2-SSSE3-NEXT:    retq26;27; AVX1-LABEL: ext_i2_2i64:28; AVX1:       # %bb.0:29; AVX1-NEXT:    vmovd %edi, %xmm030; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]31; AVX1-NEXT:    vpmovsxbq {{.*#+}} xmm1 = [1,2]32; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm033; AVX1-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm034; AVX1-NEXT:    retq35;36; AVX2-LABEL: ext_i2_2i64:37; AVX2:       # %bb.0:38; AVX2-NEXT:    vmovd %edi, %xmm039; AVX2-NEXT:    vpbroadcastd %xmm0, %xmm040; AVX2-NEXT:    vpmovsxbq {{.*#+}} xmm1 = [1,2]41; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm042; AVX2-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm043; AVX2-NEXT:    retq44;45; AVX512-LABEL: ext_i2_2i64:46; AVX512:       # %bb.0:47; AVX512-NEXT:    kmovd %edi, %k148; AVX512-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm049; AVX512-NEXT:    vmovdqa64 %xmm0, %xmm0 {%k1} {z}50; AVX512-NEXT:    retq51  %1 = bitcast i2 %a0 to <2 x i1>52  %2 = sext <2 x i1> %1 to <2 x i64>53  ret <2 x i64> %254}55 56define <4 x i32> @ext_i4_4i32(i4 %a0) {57; SSE2-SSSE3-LABEL: ext_i4_4i32:58; SSE2-SSSE3:       # %bb.0:59; SSE2-SSSE3-NEXT:    movd %edi, %xmm060; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]61; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [1,2,4,8]62; SSE2-SSSE3-NEXT:    pand %xmm1, %xmm063; SSE2-SSSE3-NEXT:    pcmpeqd %xmm1, %xmm064; SSE2-SSSE3-NEXT:    retq65;66; AVX1-LABEL: ext_i4_4i32:67; AVX1:       # %bb.0:68; AVX1-NEXT:    vmovd %edi, %xmm069; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]70; AVX1-NEXT:    vpmovsxbd {{.*#+}} xmm1 = [1,2,4,8]71; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm072; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm073; AVX1-NEXT:    retq74;75; AVX2-LABEL: ext_i4_4i32:76; AVX2:       # %bb.0:77; AVX2-NEXT:    vmovd %edi, %xmm078; AVX2-NEXT:    vpbroadcastd %xmm0, %xmm079; AVX2-NEXT:    vpmovsxbd {{.*#+}} xmm1 = [1,2,4,8]80; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm081; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm082; AVX2-NEXT:    retq83;84; AVX512-LABEL: ext_i4_4i32:85; AVX512:       # %bb.0:86; AVX512-NEXT:    kmovd %edi, %k187; AVX512-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm088; AVX512-NEXT:    vmovdqa32 %xmm0, %xmm0 {%k1} {z}89; AVX512-NEXT:    retq90  %1 = bitcast i4 %a0 to <4 x i1>91  %2 = sext <4 x i1> %1 to <4 x i32>92  ret <4 x i32> %293}94 95define <8 x i16> @ext_i8_8i16(i8 %a0) {96; SSE2-SSSE3-LABEL: ext_i8_8i16:97; SSE2-SSSE3:       # %bb.0:98; SSE2-SSSE3-NEXT:    movd %edi, %xmm099; SSE2-SSSE3-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]100; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]101; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [1,2,4,8,16,32,64,128]102; SSE2-SSSE3-NEXT:    pand %xmm1, %xmm0103; SSE2-SSSE3-NEXT:    pcmpeqw %xmm1, %xmm0104; SSE2-SSSE3-NEXT:    retq105;106; AVX1-LABEL: ext_i8_8i16:107; AVX1:       # %bb.0:108; AVX1-NEXT:    vmovd %edi, %xmm0109; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]110; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]111; AVX1-NEXT:    vpmovzxbw {{.*#+}} xmm1 = [1,2,4,8,16,32,64,128]112; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0113; AVX1-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0114; AVX1-NEXT:    retq115;116; AVX2-LABEL: ext_i8_8i16:117; AVX2:       # %bb.0:118; AVX2-NEXT:    vmovd %edi, %xmm0119; AVX2-NEXT:    vpbroadcastb %xmm0, %xmm0120; AVX2-NEXT:    vpmovzxbw {{.*#+}} xmm1 = [1,2,4,8,16,32,64,128]121; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0122; AVX2-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0123; AVX2-NEXT:    retq124;125; AVX512-LABEL: ext_i8_8i16:126; AVX512:       # %bb.0:127; AVX512-NEXT:    kmovd %edi, %k0128; AVX512-NEXT:    vpmovm2w %k0, %xmm0129; AVX512-NEXT:    retq130  %1 = bitcast i8 %a0 to <8 x i1>131  %2 = sext <8 x i1> %1 to <8 x i16>132  ret <8 x i16> %2133}134 135define <16 x i8> @ext_i16_16i8(i16 %a0) {136; SSE2-LABEL: ext_i16_16i8:137; SSE2:       # %bb.0:138; SSE2-NEXT:    movd %edi, %xmm0139; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]140; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,1,1,4,5,6,7]141; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]142; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]143; SSE2-NEXT:    pand %xmm1, %xmm0144; SSE2-NEXT:    pcmpeqb %xmm1, %xmm0145; SSE2-NEXT:    retq146;147; SSSE3-LABEL: ext_i16_16i8:148; SSSE3:       # %bb.0:149; SSSE3-NEXT:    movd %edi, %xmm0150; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1]151; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]152; SSSE3-NEXT:    pand %xmm1, %xmm0153; SSSE3-NEXT:    pcmpeqb %xmm1, %xmm0154; SSSE3-NEXT:    retq155;156; AVX1-LABEL: ext_i16_16i8:157; AVX1:       # %bb.0:158; AVX1-NEXT:    vmovd %edi, %xmm0159; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1]160; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]161; AVX1-NEXT:    # xmm1 = mem[0,0]162; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0163; AVX1-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0164; AVX1-NEXT:    retq165;166; AVX2-LABEL: ext_i16_16i8:167; AVX2:       # %bb.0:168; AVX2-NEXT:    vmovd %edi, %xmm0169; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1]170; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]171; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0172; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0173; AVX2-NEXT:    retq174;175; AVX512-LABEL: ext_i16_16i8:176; AVX512:       # %bb.0:177; AVX512-NEXT:    kmovd %edi, %k0178; AVX512-NEXT:    vpmovm2b %k0, %xmm0179; AVX512-NEXT:    retq180  %1 = bitcast i16 %a0 to <16 x i1>181  %2 = sext <16 x i1> %1 to <16 x i8>182  ret <16 x i8> %2183}184 185;186; 256-bit vectors187;188 189define <4 x i64> @ext_i4_4i64(i4 %a0) {190; SSE2-SSSE3-LABEL: ext_i4_4i64:191; SSE2-SSSE3:       # %bb.0:192; SSE2-SSSE3-NEXT:    movd %edi, %xmm0193; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[0,1,0,1]194; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [1,2]195; SSE2-SSSE3-NEXT:    movdqa %xmm2, %xmm1196; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm1197; SSE2-SSSE3-NEXT:    pcmpeqd %xmm0, %xmm1198; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,0,3,2]199; SSE2-SSSE3-NEXT:    pand %xmm1, %xmm0200; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [4,8]201; SSE2-SSSE3-NEXT:    pand %xmm1, %xmm2202; SSE2-SSSE3-NEXT:    pcmpeqd %xmm1, %xmm2203; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,0,3,2]204; SSE2-SSSE3-NEXT:    pand %xmm2, %xmm1205; SSE2-SSSE3-NEXT:    retq206;207; AVX1-LABEL: ext_i4_4i64:208; AVX1:       # %bb.0:209; AVX1-NEXT:    vmovd %edi, %xmm0210; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]211; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0212; AVX1-NEXT:    vmovaps {{.*#+}} ymm1 = [1,2,4,8]213; AVX1-NEXT:    vandps %ymm1, %ymm0, %ymm0214; AVX1-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm1215; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0216; AVX1-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0217; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0218; AVX1-NEXT:    retq219;220; AVX2-LABEL: ext_i4_4i64:221; AVX2:       # %bb.0:222; AVX2-NEXT:    vmovd %edi, %xmm0223; AVX2-NEXT:    vpbroadcastd %xmm0, %ymm0224; AVX2-NEXT:    vpmovsxbq {{.*#+}} ymm1 = [1,2,4,8]225; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0226; AVX2-NEXT:    vpcmpeqq %ymm1, %ymm0, %ymm0227; AVX2-NEXT:    retq228;229; AVX512-LABEL: ext_i4_4i64:230; AVX512:       # %bb.0:231; AVX512-NEXT:    kmovd %edi, %k1232; AVX512-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0233; AVX512-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}234; AVX512-NEXT:    retq235  %1 = bitcast i4 %a0 to <4 x i1>236  %2 = sext <4 x i1> %1 to <4 x i64>237  ret <4 x i64> %2238}239 240define <8 x i32> @ext_i8_8i32(i8 %a0) {241; SSE2-SSSE3-LABEL: ext_i8_8i32:242; SSE2-SSSE3:       # %bb.0:243; SSE2-SSSE3-NEXT:    movd %edi, %xmm0244; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,0,0]245; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [1,2,4,8]246; SSE2-SSSE3-NEXT:    movdqa %xmm1, %xmm0247; SSE2-SSSE3-NEXT:    pand %xmm2, %xmm0248; SSE2-SSSE3-NEXT:    pcmpeqd %xmm2, %xmm0249; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [16,32,64,128]250; SSE2-SSSE3-NEXT:    pand %xmm2, %xmm1251; SSE2-SSSE3-NEXT:    pcmpeqd %xmm2, %xmm1252; SSE2-SSSE3-NEXT:    retq253;254; AVX1-LABEL: ext_i8_8i32:255; AVX1:       # %bb.0:256; AVX1-NEXT:    vmovd %edi, %xmm0257; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]258; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0259; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0260; AVX1-NEXT:    vcvtdq2ps %ymm0, %ymm0261; AVX1-NEXT:    vcmpeqps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0262; AVX1-NEXT:    retq263;264; AVX2-LABEL: ext_i8_8i32:265; AVX2:       # %bb.0:266; AVX2-NEXT:    vmovd %edi, %xmm0267; AVX2-NEXT:    vpbroadcastb %xmm0, %ymm0268; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm1 = [1,2,4,8,16,32,64,128]269; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0270; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm0, %ymm0271; AVX2-NEXT:    retq272;273; AVX512-LABEL: ext_i8_8i32:274; AVX512:       # %bb.0:275; AVX512-NEXT:    kmovd %edi, %k1276; AVX512-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0277; AVX512-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}278; AVX512-NEXT:    retq279  %1 = bitcast i8 %a0 to <8 x i1>280  %2 = sext <8 x i1> %1 to <8 x i32>281  ret <8 x i32> %2282}283 284define <16 x i16> @ext_i16_16i16(i16 %a0) {285; SSE2-SSSE3-LABEL: ext_i16_16i16:286; SSE2-SSSE3:       # %bb.0:287; SSE2-SSSE3-NEXT:    movd %edi, %xmm0288; SSE2-SSSE3-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]289; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,1,0,1]290; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [1,2,4,8,16,32,64,128]291; SSE2-SSSE3-NEXT:    movdqa %xmm1, %xmm0292; SSE2-SSSE3-NEXT:    pand %xmm2, %xmm0293; SSE2-SSSE3-NEXT:    pcmpeqw %xmm2, %xmm0294; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [256,512,1024,2048,4096,8192,16384,32768]295; SSE2-SSSE3-NEXT:    pand %xmm2, %xmm1296; SSE2-SSSE3-NEXT:    pcmpeqw %xmm2, %xmm1297; SSE2-SSSE3-NEXT:    retq298;299; AVX1-LABEL: ext_i16_16i16:300; AVX1:       # %bb.0:301; AVX1-NEXT:    vmovd %edi, %xmm0302; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]303; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]304; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0305; AVX1-NEXT:    vmovaps {{.*#+}} ymm1 = [1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768]306; AVX1-NEXT:    vandps %ymm1, %ymm0, %ymm0307; AVX1-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm1308; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0309; AVX1-NEXT:    vpcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0310; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0311; AVX1-NEXT:    retq312;313; AVX2-LABEL: ext_i16_16i16:314; AVX2:       # %bb.0:315; AVX2-NEXT:    vmovd %edi, %xmm0316; AVX2-NEXT:    vpbroadcastw %xmm0, %ymm0317; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768]318; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0319; AVX2-NEXT:    vpcmpeqw %ymm1, %ymm0, %ymm0320; AVX2-NEXT:    retq321;322; AVX512-LABEL: ext_i16_16i16:323; AVX512:       # %bb.0:324; AVX512-NEXT:    kmovd %edi, %k0325; AVX512-NEXT:    vpmovm2w %k0, %ymm0326; AVX512-NEXT:    retq327  %1 = bitcast i16 %a0 to <16 x i1>328  %2 = sext <16 x i1> %1 to <16 x i16>329  ret <16 x i16> %2330}331 332define <32 x i8> @ext_i32_32i8(i32 %a0) {333; SSE2-SSSE3-LABEL: ext_i32_32i8:334; SSE2-SSSE3:       # %bb.0:335; SSE2-SSSE3-NEXT:    movd %edi, %xmm1336; SSE2-SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]337; SSE2-SSSE3-NEXT:    pshuflw {{.*#+}} xmm0 = xmm1[0,0,1,1,4,5,6,7]338; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]339; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]340; SSE2-SSSE3-NEXT:    pand %xmm2, %xmm0341; SSE2-SSSE3-NEXT:    pcmpeqb %xmm2, %xmm0342; SSE2-SSSE3-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[2,2,3,3,4,5,6,7]343; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,0,1,1]344; SSE2-SSSE3-NEXT:    pand %xmm2, %xmm1345; SSE2-SSSE3-NEXT:    pcmpeqb %xmm2, %xmm1346; SSE2-SSSE3-NEXT:    retq347;348; AVX1-LABEL: ext_i32_32i8:349; AVX1:       # %bb.0:350; AVX1-NEXT:    vmovd %edi, %xmm0351; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]352; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,1,1,4,5,6,7]353; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[2,2,3,3,4,5,6,7]354; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0355; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,0,1,1,4,4,5,5]356; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0357; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1358; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]359; AVX1-NEXT:    # xmm2 = mem[0,0]360; AVX1-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm1361; AVX1-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm0362; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0363; AVX1-NEXT:    retq364;365; AVX2-LABEL: ext_i32_32i8:366; AVX2:       # %bb.0:367; AVX2-NEXT:    vmovd %edi, %xmm0368; AVX2-NEXT:    vpbroadcastd %xmm0, %ymm0369; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,0,0,0,0,0,0,0,9,9,9,9,9,9,9,9,18,18,18,18,18,18,18,18,27,27,27,27,27,27,27,27]370; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]371; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0372; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0373; AVX2-NEXT:    retq374;375; AVX512-LABEL: ext_i32_32i8:376; AVX512:       # %bb.0:377; AVX512-NEXT:    kmovd %edi, %k0378; AVX512-NEXT:    vpmovm2b %k0, %ymm0379; AVX512-NEXT:    retq380  %1 = bitcast i32 %a0 to <32 x i1>381  %2 = sext <32 x i1> %1 to <32 x i8>382  ret <32 x i8> %2383}384 385;386; 512-bit vectors387;388 389define <8 x i64> @ext_i8_8i64(i8 %a0) {390; SSE2-SSSE3-LABEL: ext_i8_8i64:391; SSE2-SSSE3:       # %bb.0:392; SSE2-SSSE3-NEXT:    movd %edi, %xmm0393; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[0,1,0,1]394; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [1,2]395; SSE2-SSSE3-NEXT:    movdqa %xmm4, %xmm1396; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm1397; SSE2-SSSE3-NEXT:    pcmpeqd %xmm0, %xmm1398; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,0,3,2]399; SSE2-SSSE3-NEXT:    pand %xmm1, %xmm0400; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [4,8]401; SSE2-SSSE3-NEXT:    movdqa %xmm4, %xmm2402; SSE2-SSSE3-NEXT:    pand %xmm1, %xmm2403; SSE2-SSSE3-NEXT:    pcmpeqd %xmm1, %xmm2404; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,0,3,2]405; SSE2-SSSE3-NEXT:    pand %xmm2, %xmm1406; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [16,32]407; SSE2-SSSE3-NEXT:    movdqa %xmm4, %xmm3408; SSE2-SSSE3-NEXT:    pand %xmm2, %xmm3409; SSE2-SSSE3-NEXT:    pcmpeqd %xmm2, %xmm3410; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,0,3,2]411; SSE2-SSSE3-NEXT:    pand %xmm3, %xmm2412; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [64,128]413; SSE2-SSSE3-NEXT:    pand %xmm3, %xmm4414; SSE2-SSSE3-NEXT:    pcmpeqd %xmm3, %xmm4415; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,0,3,2]416; SSE2-SSSE3-NEXT:    pand %xmm4, %xmm3417; SSE2-SSSE3-NEXT:    retq418;419; AVX1-LABEL: ext_i8_8i64:420; AVX1:       # %bb.0:421; AVX1-NEXT:    vmovd %edi, %xmm0422; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]423; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm1424; AVX1-NEXT:    vmovaps {{.*#+}} ymm0 = [1,2,4,8]425; AVX1-NEXT:    vandps %ymm0, %ymm1, %ymm2426; AVX1-NEXT:    vpcmpeqq %xmm0, %xmm2, %xmm0427; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm2428; AVX1-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2429; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0430; AVX1-NEXT:    vmovaps {{.*#+}} ymm2 = [16,32,64,128]431; AVX1-NEXT:    vandps %ymm2, %ymm1, %ymm1432; AVX1-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm2433; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1434; AVX1-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1435; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm1436; AVX1-NEXT:    retq437;438; AVX2-LABEL: ext_i8_8i64:439; AVX2:       # %bb.0:440; AVX2-NEXT:    vmovd %edi, %xmm0441; AVX2-NEXT:    vpbroadcastb %xmm0, %ymm1442; AVX2-NEXT:    vpmovsxbq {{.*#+}} ymm0 = [1,2,4,8]443; AVX2-NEXT:    vpand %ymm0, %ymm1, %ymm2444; AVX2-NEXT:    vpcmpeqq %ymm0, %ymm2, %ymm0445; AVX2-NEXT:    vpmovzxbq {{.*#+}} ymm2 = [16,32,64,128]446; AVX2-NEXT:    vpand %ymm2, %ymm1, %ymm1447; AVX2-NEXT:    vpcmpeqq %ymm2, %ymm1, %ymm1448; AVX2-NEXT:    retq449;450; AVX512-LABEL: ext_i8_8i64:451; AVX512:       # %bb.0:452; AVX512-NEXT:    kmovd %edi, %k1453; AVX512-NEXT:    vpternlogq {{.*#+}} zmm0 {%k1} {z} = -1454; AVX512-NEXT:    retq455  %1 = bitcast i8 %a0 to <8 x i1>456  %2 = sext <8 x i1> %1 to <8 x i64>457  ret <8 x i64> %2458}459 460define <16 x i32> @ext_i16_16i32(i16 %a0) {461; SSE2-SSSE3-LABEL: ext_i16_16i32:462; SSE2-SSSE3:       # %bb.0:463; SSE2-SSSE3-NEXT:    movd %edi, %xmm0464; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[0,0,0,0]465; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [1,2,4,8]466; SSE2-SSSE3-NEXT:    movdqa %xmm3, %xmm0467; SSE2-SSSE3-NEXT:    pand %xmm1, %xmm0468; SSE2-SSSE3-NEXT:    pcmpeqd %xmm1, %xmm0469; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [16,32,64,128]470; SSE2-SSSE3-NEXT:    movdqa %xmm3, %xmm1471; SSE2-SSSE3-NEXT:    pand %xmm2, %xmm1472; SSE2-SSSE3-NEXT:    pcmpeqd %xmm2, %xmm1473; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm4 = [256,512,1024,2048]474; SSE2-SSSE3-NEXT:    movdqa %xmm3, %xmm2475; SSE2-SSSE3-NEXT:    pand %xmm4, %xmm2476; SSE2-SSSE3-NEXT:    pcmpeqd %xmm4, %xmm2477; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm4 = [4096,8192,16384,32768]478; SSE2-SSSE3-NEXT:    pand %xmm4, %xmm3479; SSE2-SSSE3-NEXT:    pcmpeqd %xmm4, %xmm3480; SSE2-SSSE3-NEXT:    retq481;482; AVX1-LABEL: ext_i16_16i32:483; AVX1:       # %bb.0:484; AVX1-NEXT:    vmovd %edi, %xmm0485; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]486; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm1487; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm0488; AVX1-NEXT:    vcvtdq2ps %ymm0, %ymm0489; AVX1-NEXT:    vcmpeqps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0490; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1491; AVX1-NEXT:    vcvtdq2ps %ymm1, %ymm1492; AVX1-NEXT:    vcmpeqps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1493; AVX1-NEXT:    retq494;495; AVX2-LABEL: ext_i16_16i32:496; AVX2:       # %bb.0:497; AVX2-NEXT:    vmovd %edi, %xmm0498; AVX2-NEXT:    vpbroadcastw %xmm0, %ymm1499; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm0 = [1,2,4,8,16,32,64,128]500; AVX2-NEXT:    vpand %ymm0, %ymm1, %ymm2501; AVX2-NEXT:    vpcmpeqd %ymm0, %ymm2, %ymm0502; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm2 = [256,512,1024,2048,4096,8192,16384,32768]503; AVX2-NEXT:    vpand %ymm2, %ymm1, %ymm1504; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm1505; AVX2-NEXT:    retq506;507; AVX512-LABEL: ext_i16_16i32:508; AVX512:       # %bb.0:509; AVX512-NEXT:    kmovd %edi, %k1510; AVX512-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1511; AVX512-NEXT:    retq512  %1 = bitcast i16 %a0 to <16 x i1>513  %2 = sext <16 x i1> %1 to <16 x i32>514  ret <16 x i32> %2515}516 517define <32 x i16> @ext_i32_32i16(i32 %a0) {518; SSE2-SSSE3-LABEL: ext_i32_32i16:519; SSE2-SSSE3:       # %bb.0:520; SSE2-SSSE3-NEXT:    movd %edi, %xmm2521; SSE2-SSSE3-NEXT:    pshuflw {{.*#+}} xmm0 = xmm2[0,0,0,0,4,5,6,7]522; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,1,0,1]523; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm4 = [1,2,4,8,16,32,64,128]524; SSE2-SSSE3-NEXT:    movdqa %xmm1, %xmm0525; SSE2-SSSE3-NEXT:    pand %xmm4, %xmm0526; SSE2-SSSE3-NEXT:    pcmpeqw %xmm4, %xmm0527; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm5 = [256,512,1024,2048,4096,8192,16384,32768]528; SSE2-SSSE3-NEXT:    pand %xmm5, %xmm1529; SSE2-SSSE3-NEXT:    pcmpeqw %xmm5, %xmm1530; SSE2-SSSE3-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[1,1,1,1,4,5,6,7]531; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,1,0,1]532; SSE2-SSSE3-NEXT:    movdqa %xmm3, %xmm2533; SSE2-SSSE3-NEXT:    pand %xmm4, %xmm2534; SSE2-SSSE3-NEXT:    pcmpeqw %xmm4, %xmm2535; SSE2-SSSE3-NEXT:    pand %xmm5, %xmm3536; SSE2-SSSE3-NEXT:    pcmpeqw %xmm5, %xmm3537; SSE2-SSSE3-NEXT:    retq538;539; AVX1-LABEL: ext_i32_32i16:540; AVX1:       # %bb.0:541; AVX1-NEXT:    vmovd %edi, %xmm1542; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm1[0,0,0,0,4,5,6,7]543; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]544; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0545; AVX1-NEXT:    vmovaps {{.*#+}} ymm2 = [1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768]546; AVX1-NEXT:    vandps %ymm2, %ymm0, %ymm0547; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3548; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [256,512,1024,2048,4096,8192,16384,32768]549; AVX1-NEXT:    vpcmpeqw %xmm4, %xmm3, %xmm3550; AVX1-NEXT:    vpcmpeqw %xmm2, %xmm0, %xmm0551; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0552; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[1,1,1,1,4,5,6,7]553; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]554; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm1, %ymm1555; AVX1-NEXT:    vandps %ymm2, %ymm1, %ymm1556; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3557; AVX1-NEXT:    vpcmpeqw %xmm4, %xmm3, %xmm3558; AVX1-NEXT:    vpcmpeqw %xmm2, %xmm1, %xmm1559; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1560; AVX1-NEXT:    retq561;562; AVX2-LABEL: ext_i32_32i16:563; AVX2:       # %bb.0:564; AVX2-NEXT:    vmovd %edi, %xmm0565; AVX2-NEXT:    vpbroadcastw %xmm0, %ymm0566; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768]567; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0568; AVX2-NEXT:    vpcmpeqw %ymm1, %ymm0, %ymm0569; AVX2-NEXT:    shrl $16, %edi570; AVX2-NEXT:    vmovd %edi, %xmm2571; AVX2-NEXT:    vpbroadcastw %xmm2, %ymm2572; AVX2-NEXT:    vpand %ymm1, %ymm2, %ymm2573; AVX2-NEXT:    vpcmpeqw %ymm1, %ymm2, %ymm1574; AVX2-NEXT:    retq575;576; AVX512-LABEL: ext_i32_32i16:577; AVX512:       # %bb.0:578; AVX512-NEXT:    kmovd %edi, %k0579; AVX512-NEXT:    vpmovm2w %k0, %zmm0580; AVX512-NEXT:    retq581  %1 = bitcast i32 %a0 to <32 x i1>582  %2 = sext <32 x i1> %1 to <32 x i16>583  ret <32 x i16> %2584}585 586define <64 x i8> @ext_i64_64i8(i64 %a0) {587; SSE2-SSSE3-LABEL: ext_i64_64i8:588; SSE2-SSSE3:       # %bb.0:589; SSE2-SSSE3-NEXT:    movq %rdi, %xmm3590; SSE2-SSSE3-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]591; SSE2-SSSE3-NEXT:    pshuflw {{.*#+}} xmm0 = xmm3[0,0,1,1,4,5,6,7]592; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]593; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm4 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]594; SSE2-SSSE3-NEXT:    pand %xmm4, %xmm0595; SSE2-SSSE3-NEXT:    pcmpeqb %xmm4, %xmm0596; SSE2-SSSE3-NEXT:    pshuflw {{.*#+}} xmm1 = xmm3[2,2,3,3,4,5,6,7]597; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,0,1,1]598; SSE2-SSSE3-NEXT:    pand %xmm4, %xmm1599; SSE2-SSSE3-NEXT:    pcmpeqb %xmm4, %xmm1600; SSE2-SSSE3-NEXT:    pshufhw {{.*#+}} xmm2 = xmm3[0,1,2,3,4,4,5,5]601; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[2,2,3,3]602; SSE2-SSSE3-NEXT:    pand %xmm4, %xmm2603; SSE2-SSSE3-NEXT:    pcmpeqb %xmm4, %xmm2604; SSE2-SSSE3-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,6,6,7,7]605; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[2,2,3,3]606; SSE2-SSSE3-NEXT:    pand %xmm4, %xmm3607; SSE2-SSSE3-NEXT:    pcmpeqb %xmm4, %xmm3608; SSE2-SSSE3-NEXT:    retq609;610; AVX1-LABEL: ext_i64_64i8:611; AVX1:       # %bb.0:612; AVX1-NEXT:    vmovq %rdi, %xmm0613; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]614; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm1[0,0,1,1,4,5,6,7]615; AVX1-NEXT:    vpshuflw {{.*#+}} xmm2 = xmm1[2,2,3,3,4,5,6,7]616; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0617; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,0,1,1,4,4,5,5]618; AVX1-NEXT:    vbroadcastsd {{.*#+}} ymm2 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]619; AVX1-NEXT:    vandps %ymm2, %ymm0, %ymm0620; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3621; AVX1-NEXT:    vpcmpeqb %xmm2, %xmm3, %xmm3622; AVX1-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm0623; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0624; AVX1-NEXT:    vpshufhw {{.*#+}} xmm3 = xmm1[0,1,2,3,4,4,5,5]625; AVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,6,6,7,7]626; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm3, %ymm1627; AVX1-NEXT:    vshufps {{.*#+}} ymm1 = ymm1[2,2,3,3,6,6,7,7]628; AVX1-NEXT:    vandps %ymm2, %ymm1, %ymm1629; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3630; AVX1-NEXT:    vpcmpeqb %xmm2, %xmm3, %xmm3631; AVX1-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm1632; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1633; AVX1-NEXT:    retq634;635; AVX2-LABEL: ext_i64_64i8:636; AVX2:       # %bb.0:637; AVX2-NEXT:    vmovq %rdi, %xmm0638; AVX2-NEXT:    vpbroadcastq %xmm0, %ymm1639; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm1[0,0,0,0,0,0,0,0,9,9,9,9,9,9,9,9,18,18,18,18,18,18,18,18,27,27,27,27,27,27,27,27]640; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]641; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0642; AVX2-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm0643; AVX2-NEXT:    vpshufb {{.*#+}} ymm1 = ymm1[4,4,4,4,4,4,4,4,13,13,13,13,13,13,13,13,22,22,22,22,22,22,22,22,31,31,31,31,31,31,31,31]644; AVX2-NEXT:    vpand %ymm2, %ymm1, %ymm1645; AVX2-NEXT:    vpcmpeqb %ymm2, %ymm1, %ymm1646; AVX2-NEXT:    retq647;648; AVX512-LABEL: ext_i64_64i8:649; AVX512:       # %bb.0:650; AVX512-NEXT:    kmovq %rdi, %k0651; AVX512-NEXT:    vpmovm2b %k0, %zmm0652; AVX512-NEXT:    retq653  %1 = bitcast i64 %a0 to <64 x i1>654  %2 = sext <64 x i1> %1 to <64 x i8>655  ret <64 x i8> %2656}657 658define <8 x i32> @PR157382(ptr %p0, ptr %p1, ptr %p2) {659; SSE2-SSSE3-LABEL: PR157382:660; SSE2-SSSE3:       # %bb.0:661; SSE2-SSSE3-NEXT:    movdqu (%rdi), %xmm3662; SSE2-SSSE3-NEXT:    movdqu 16(%rdi), %xmm2663; SSE2-SSSE3-NEXT:    movdqu (%rsi), %xmm0664; SSE2-SSSE3-NEXT:    movdqu 16(%rsi), %xmm4665; SSE2-SSSE3-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero666; SSE2-SSSE3-NEXT:    pxor %xmm5, %xmm5667; SSE2-SSSE3-NEXT:    pxor %xmm6, %xmm6668; SSE2-SSSE3-NEXT:    pcmpgtd %xmm3, %xmm6669; SSE2-SSSE3-NEXT:    pcmpeqd %xmm7, %xmm7670; SSE2-SSSE3-NEXT:    pxor %xmm7, %xmm6671; SSE2-SSSE3-NEXT:    pxor %xmm8, %xmm8672; SSE2-SSSE3-NEXT:    pcmpgtd %xmm2, %xmm8673; SSE2-SSSE3-NEXT:    pxor %xmm7, %xmm8674; SSE2-SSSE3-NEXT:    pcmpgtd %xmm5, %xmm0675; SSE2-SSSE3-NEXT:    por %xmm6, %xmm0676; SSE2-SSSE3-NEXT:    pcmpgtd %xmm5, %xmm4677; SSE2-SSSE3-NEXT:    por %xmm8, %xmm4678; SSE2-SSSE3-NEXT:    packssdw %xmm4, %xmm0679; SSE2-SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]680; SSE2-SSSE3-NEXT:    pcmpeqb %xmm5, %xmm1681; SSE2-SSSE3-NEXT:    pxor %xmm7, %xmm1682; SSE2-SSSE3-NEXT:    por %xmm0, %xmm1683; SSE2-SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]684; SSE2-SSSE3-NEXT:    psrad $16, %xmm0685; SSE2-SSSE3-NEXT:    pand %xmm3, %xmm0686; SSE2-SSSE3-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4,4,5,5,6,6,7,7]687; SSE2-SSSE3-NEXT:    pslld $31, %xmm1688; SSE2-SSSE3-NEXT:    psrad $31, %xmm1689; SSE2-SSSE3-NEXT:    pand %xmm2, %xmm1690; SSE2-SSSE3-NEXT:    retq691;692; AVX1-LABEL: PR157382:693; AVX1:       # %bb.0:694; AVX1-NEXT:    vmovdqu (%rdi), %ymm0695; AVX1-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero696; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2697; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm2, %xmm3698; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4699; AVX1-NEXT:    vpxor %xmm4, %xmm3, %xmm3700; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5701; AVX1-NEXT:    vpcmpgtd %xmm5, %xmm2, %xmm5702; AVX1-NEXT:    vpxor %xmm4, %xmm5, %xmm5703; AVX1-NEXT:    vmovdqu (%rsi), %xmm6704; AVX1-NEXT:    vmovdqu 16(%rsi), %xmm7705; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm6, %xmm6706; AVX1-NEXT:    vpor %xmm6, %xmm3, %xmm3707; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm7, %xmm6708; AVX1-NEXT:    vpor %xmm6, %xmm5, %xmm5709; AVX1-NEXT:    vpackssdw %xmm5, %xmm3, %xmm3710; AVX1-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm1711; AVX1-NEXT:    vpxor %xmm4, %xmm1, %xmm1712; AVX1-NEXT:    vpmovsxbw %xmm1, %xmm1713; AVX1-NEXT:    vpor %xmm1, %xmm3, %xmm1714; AVX1-NEXT:    vpmovsxwd %xmm1, %xmm2715; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]716; AVX1-NEXT:    vpmovsxwd %xmm1, %xmm1717; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm1718; AVX1-NEXT:    vandps %ymm0, %ymm1, %ymm0719; AVX1-NEXT:    retq720;721; AVX2-LABEL: PR157382:722; AVX2:       # %bb.0:723; AVX2-NEXT:    vmovdqu (%rdi), %ymm0724; AVX2-NEXT:    vmovdqu (%rsi), %ymm1725; AVX2-NEXT:    vmovq {{.*#+}} xmm2 = mem[0],zero726; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3727; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm3, %ymm4728; AVX2-NEXT:    vpcmpeqd %ymm5, %ymm5, %ymm5729; AVX2-NEXT:    vpxor %ymm5, %ymm4, %ymm4730; AVX2-NEXT:    vpcmpgtd %ymm3, %ymm1, %ymm1731; AVX2-NEXT:    vpor %ymm1, %ymm4, %ymm1732; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3733; AVX2-NEXT:    vpcmpeqb %xmm3, %xmm2, %xmm2734; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3735; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2736; AVX2-NEXT:    vpmovsxbd %xmm2, %ymm2737; AVX2-NEXT:    vpor %ymm2, %ymm1, %ymm1738; AVX2-NEXT:    vpand %ymm0, %ymm1, %ymm0739; AVX2-NEXT:    retq740;741; AVX512-LABEL: PR157382:742; AVX512:       # %bb.0:743; AVX512-NEXT:    vmovdqu (%rdi), %ymm0744; AVX512-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero745; AVX512-NEXT:    vpxor %xmm2, %xmm2, %xmm2746; AVX512-NEXT:    vpcmpnltd %ymm2, %ymm0, %k0747; AVX512-NEXT:    vpcmpltd (%rsi), %ymm2, %k1748; AVX512-NEXT:    vptestmb %xmm1, %xmm1, %k2749; AVX512-NEXT:    korw %k1, %k0, %k0750; AVX512-NEXT:    korw %k2, %k0, %k1751; AVX512-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}752; AVX512-NEXT:    retq753  %ld0 = load <8 x i32>, ptr %p0, align 1754  %ld1 = load <8 x i32>, ptr %p1, align 1755  %ld2 = load <8 x i8>, ptr %p2, align 1756  %cmp0 = icmp sge <8 x i32> %ld0, zeroinitializer757  %cmp1 = icmp sgt <8 x i32> %ld1, zeroinitializer758  %cmp2 = icmp ne <8 x i8> %ld2, zeroinitializer759  %cmp01 = or <8 x i1> %cmp0, %cmp1760  %cmp012 = or <8 x i1> %cmp01, %cmp2761  %res = select <8 x i1> %cmp012, <8 x i32> %ld0, <8 x i32> zeroinitializer762  ret <8 x i32> %res763}764