brintos

brintos / llvm-project-archived public Read only

0
0
Text · 80.8 KiB · c7d2532 Raw
1887 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX13; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=AVX24; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx | FileCheck %s --check-prefix=XOPAVX15; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx2 | FileCheck %s --check-prefix=XOPAVX26; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512dq | FileCheck %s --check-prefixes=AVX512,AVX512DQ7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw | FileCheck %s --check-prefixes=AVX512,AVX512BW8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512dq,+avx512vl | FileCheck %s --check-prefixes=AVX512VL,AVX512DQVL9; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl | FileCheck %s --check-prefixes=AVX512VL,AVX512BWVL10;11; 32-bit runs to make sure we do reasonable things for i64 shifts.12; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx  | FileCheck %s --check-prefix=X86-AVX113; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=X86-AVX214 15;16; Variable Shifts17;18 19define <4 x i64> @var_shift_v4i64(<4 x i64> %a, <4 x i64> %b) nounwind {20; AVX1-LABEL: var_shift_v4i64:21; AVX1:       # %bb.0:22; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm223; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm324; AVX1-NEXT:    vpsllq %xmm2, %xmm3, %xmm425; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[2,3,2,3]26; AVX1-NEXT:    vpsllq %xmm2, %xmm3, %xmm227; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm4[0,1,2,3],xmm2[4,5,6,7]28; AVX1-NEXT:    vpsllq %xmm1, %xmm0, %xmm329; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]30; AVX1-NEXT:    vpsllq %xmm1, %xmm0, %xmm031; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm3[0,1,2,3],xmm0[4,5,6,7]32; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm033; AVX1-NEXT:    retq34;35; AVX2-LABEL: var_shift_v4i64:36; AVX2:       # %bb.0:37; AVX2-NEXT:    vpsllvq %ymm1, %ymm0, %ymm038; AVX2-NEXT:    retq39;40; XOPAVX1-LABEL: var_shift_v4i64:41; XOPAVX1:       # %bb.0:42; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm243; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm344; XOPAVX1-NEXT:    vpshlq %xmm2, %xmm3, %xmm245; XOPAVX1-NEXT:    vpshlq %xmm1, %xmm0, %xmm046; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm047; XOPAVX1-NEXT:    retq48;49; XOPAVX2-LABEL: var_shift_v4i64:50; XOPAVX2:       # %bb.0:51; XOPAVX2-NEXT:    vpsllvq %ymm1, %ymm0, %ymm052; XOPAVX2-NEXT:    retq53;54; AVX512-LABEL: var_shift_v4i64:55; AVX512:       # %bb.0:56; AVX512-NEXT:    vpsllvq %ymm1, %ymm0, %ymm057; AVX512-NEXT:    retq58;59; AVX512VL-LABEL: var_shift_v4i64:60; AVX512VL:       # %bb.0:61; AVX512VL-NEXT:    vpsllvq %ymm1, %ymm0, %ymm062; AVX512VL-NEXT:    retq63;64; X86-AVX1-LABEL: var_shift_v4i64:65; X86-AVX1:       # %bb.0:66; X86-AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm267; X86-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm368; X86-AVX1-NEXT:    vpsllq %xmm2, %xmm3, %xmm469; X86-AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[2,3,2,3]70; X86-AVX1-NEXT:    vpsllq %xmm2, %xmm3, %xmm271; X86-AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm4[0,1,2,3],xmm2[4,5,6,7]72; X86-AVX1-NEXT:    vpsllq %xmm1, %xmm0, %xmm373; X86-AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]74; X86-AVX1-NEXT:    vpsllq %xmm1, %xmm0, %xmm075; X86-AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm3[0,1,2,3],xmm0[4,5,6,7]76; X86-AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm077; X86-AVX1-NEXT:    retl78;79; X86-AVX2-LABEL: var_shift_v4i64:80; X86-AVX2:       # %bb.0:81; X86-AVX2-NEXT:    vpsllvq %ymm1, %ymm0, %ymm082; X86-AVX2-NEXT:    retl83  %shift = shl <4 x i64> %a, %b84  ret <4 x i64> %shift85}86 87define <8 x i32> @var_shift_v8i32(<8 x i32> %a, <8 x i32> %b) nounwind {88; AVX1-LABEL: var_shift_v8i32:89; AVX1:       # %bb.0:90; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm291; AVX1-NEXT:    vpslld $23, %xmm2, %xmm292; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm3 = [1065353216,1065353216,1065353216,1065353216]93; AVX1-NEXT:    vpaddd %xmm3, %xmm2, %xmm294; AVX1-NEXT:    vcvttps2dq %xmm2, %xmm295; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm496; AVX1-NEXT:    vpmulld %xmm2, %xmm4, %xmm297; AVX1-NEXT:    vpslld $23, %xmm1, %xmm198; AVX1-NEXT:    vpaddd %xmm3, %xmm1, %xmm199; AVX1-NEXT:    vcvttps2dq %xmm1, %xmm1100; AVX1-NEXT:    vpmulld %xmm1, %xmm0, %xmm0101; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0102; AVX1-NEXT:    retq103;104; AVX2-LABEL: var_shift_v8i32:105; AVX2:       # %bb.0:106; AVX2-NEXT:    vpsllvd %ymm1, %ymm0, %ymm0107; AVX2-NEXT:    retq108;109; XOPAVX1-LABEL: var_shift_v8i32:110; XOPAVX1:       # %bb.0:111; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2112; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3113; XOPAVX1-NEXT:    vpshld %xmm2, %xmm3, %xmm2114; XOPAVX1-NEXT:    vpshld %xmm1, %xmm0, %xmm0115; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0116; XOPAVX1-NEXT:    retq117;118; XOPAVX2-LABEL: var_shift_v8i32:119; XOPAVX2:       # %bb.0:120; XOPAVX2-NEXT:    vpsllvd %ymm1, %ymm0, %ymm0121; XOPAVX2-NEXT:    retq122;123; AVX512-LABEL: var_shift_v8i32:124; AVX512:       # %bb.0:125; AVX512-NEXT:    vpsllvd %ymm1, %ymm0, %ymm0126; AVX512-NEXT:    retq127;128; AVX512VL-LABEL: var_shift_v8i32:129; AVX512VL:       # %bb.0:130; AVX512VL-NEXT:    vpsllvd %ymm1, %ymm0, %ymm0131; AVX512VL-NEXT:    retq132;133; X86-AVX1-LABEL: var_shift_v8i32:134; X86-AVX1:       # %bb.0:135; X86-AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2136; X86-AVX1-NEXT:    vpslld $23, %xmm2, %xmm2137; X86-AVX1-NEXT:    vbroadcastss {{.*#+}} xmm3 = [1065353216,1065353216,1065353216,1065353216]138; X86-AVX1-NEXT:    vpaddd %xmm3, %xmm2, %xmm2139; X86-AVX1-NEXT:    vcvttps2dq %xmm2, %xmm2140; X86-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4141; X86-AVX1-NEXT:    vpmulld %xmm2, %xmm4, %xmm2142; X86-AVX1-NEXT:    vpslld $23, %xmm1, %xmm1143; X86-AVX1-NEXT:    vpaddd %xmm3, %xmm1, %xmm1144; X86-AVX1-NEXT:    vcvttps2dq %xmm1, %xmm1145; X86-AVX1-NEXT:    vpmulld %xmm1, %xmm0, %xmm0146; X86-AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0147; X86-AVX1-NEXT:    retl148;149; X86-AVX2-LABEL: var_shift_v8i32:150; X86-AVX2:       # %bb.0:151; X86-AVX2-NEXT:    vpsllvd %ymm1, %ymm0, %ymm0152; X86-AVX2-NEXT:    retl153  %shift = shl <8 x i32> %a, %b154  ret <8 x i32> %shift155}156 157define <16 x i16> @var_shift_v16i16(<16 x i16> %a, <16 x i16> %b) nounwind {158; AVX1-LABEL: var_shift_v16i16:159; AVX1:       # %bb.0:160; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2161; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm3 = xmm2[4,4,5,5,6,6,7,7]162; AVX1-NEXT:    vpslld $23, %xmm3, %xmm3163; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm4 = [1065353216,1065353216,1065353216,1065353216]164; AVX1-NEXT:    vpaddd %xmm4, %xmm3, %xmm3165; AVX1-NEXT:    vcvttps2dq %xmm3, %xmm3166; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero167; AVX1-NEXT:    vpslld $23, %xmm2, %xmm2168; AVX1-NEXT:    vpaddd %xmm4, %xmm2, %xmm2169; AVX1-NEXT:    vcvttps2dq %xmm2, %xmm2170; AVX1-NEXT:    vpackusdw %xmm3, %xmm2, %xmm2171; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3172; AVX1-NEXT:    vpmullw %xmm2, %xmm3, %xmm2173; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm3 = xmm1[4,4,5,5,6,6,7,7]174; AVX1-NEXT:    vpslld $23, %xmm3, %xmm3175; AVX1-NEXT:    vpaddd %xmm4, %xmm3, %xmm3176; AVX1-NEXT:    vcvttps2dq %xmm3, %xmm3177; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero178; AVX1-NEXT:    vpslld $23, %xmm1, %xmm1179; AVX1-NEXT:    vpaddd %xmm4, %xmm1, %xmm1180; AVX1-NEXT:    vcvttps2dq %xmm1, %xmm1181; AVX1-NEXT:    vpackusdw %xmm3, %xmm1, %xmm1182; AVX1-NEXT:    vpmullw %xmm1, %xmm0, %xmm0183; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0184; AVX1-NEXT:    retq185;186; AVX2-LABEL: var_shift_v16i16:187; AVX2:       # %bb.0:188; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2189; AVX2-NEXT:    vpunpckhwd {{.*#+}} ymm3 = ymm1[4],ymm2[4],ymm1[5],ymm2[5],ymm1[6],ymm2[6],ymm1[7],ymm2[7],ymm1[12],ymm2[12],ymm1[13],ymm2[13],ymm1[14],ymm2[14],ymm1[15],ymm2[15]190; AVX2-NEXT:    vpunpckhwd {{.*#+}} ymm4 = ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15]191; AVX2-NEXT:    vpsllvd %ymm3, %ymm4, %ymm3192; AVX2-NEXT:    vpsrld $16, %ymm3, %ymm3193; AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm1 = ymm1[0],ymm2[0],ymm1[1],ymm2[1],ymm1[2],ymm2[2],ymm1[3],ymm2[3],ymm1[8],ymm2[8],ymm1[9],ymm2[9],ymm1[10],ymm2[10],ymm1[11],ymm2[11]194; AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm2[0],ymm0[0],ymm2[1],ymm0[1],ymm2[2],ymm0[2],ymm2[3],ymm0[3],ymm2[8],ymm0[8],ymm2[9],ymm0[9],ymm2[10],ymm0[10],ymm2[11],ymm0[11]195; AVX2-NEXT:    vpsllvd %ymm1, %ymm0, %ymm0196; AVX2-NEXT:    vpsrld $16, %ymm0, %ymm0197; AVX2-NEXT:    vpackusdw %ymm3, %ymm0, %ymm0198; AVX2-NEXT:    retq199;200; XOPAVX1-LABEL: var_shift_v16i16:201; XOPAVX1:       # %bb.0:202; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2203; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3204; XOPAVX1-NEXT:    vpshlw %xmm2, %xmm3, %xmm2205; XOPAVX1-NEXT:    vpshlw %xmm1, %xmm0, %xmm0206; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0207; XOPAVX1-NEXT:    retq208;209; XOPAVX2-LABEL: var_shift_v16i16:210; XOPAVX2:       # %bb.0:211; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2212; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm3213; XOPAVX2-NEXT:    vpshlw %xmm2, %xmm3, %xmm2214; XOPAVX2-NEXT:    vpshlw %xmm1, %xmm0, %xmm0215; XOPAVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0216; XOPAVX2-NEXT:    retq217;218; AVX512DQ-LABEL: var_shift_v16i16:219; AVX512DQ:       # %bb.0:220; AVX512DQ-NEXT:    vpmovzxwd {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero221; AVX512DQ-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],zero222; AVX512DQ-NEXT:    vpsllvd %zmm1, %zmm0, %zmm0223; AVX512DQ-NEXT:    vpmovdw %zmm0, %ymm0224; AVX512DQ-NEXT:    retq225;226; AVX512BW-LABEL: var_shift_v16i16:227; AVX512BW:       # %bb.0:228; AVX512BW-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1229; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0230; AVX512BW-NEXT:    vpsllvw %zmm1, %zmm0, %zmm0231; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0232; AVX512BW-NEXT:    retq233;234; AVX512DQVL-LABEL: var_shift_v16i16:235; AVX512DQVL:       # %bb.0:236; AVX512DQVL-NEXT:    vpmovzxwd {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero237; AVX512DQVL-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],zero238; AVX512DQVL-NEXT:    vpsllvd %zmm1, %zmm0, %zmm0239; AVX512DQVL-NEXT:    vpmovdw %zmm0, %ymm0240; AVX512DQVL-NEXT:    retq241;242; AVX512BWVL-LABEL: var_shift_v16i16:243; AVX512BWVL:       # %bb.0:244; AVX512BWVL-NEXT:    vpsllvw %ymm1, %ymm0, %ymm0245; AVX512BWVL-NEXT:    retq246;247; X86-AVX1-LABEL: var_shift_v16i16:248; X86-AVX1:       # %bb.0:249; X86-AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3250; X86-AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm2 = xmm3[4,4,5,5,6,6,7,7]251; X86-AVX1-NEXT:    vpslld $23, %xmm2, %xmm4252; X86-AVX1-NEXT:    vbroadcastss {{.*#+}} xmm2 = [1065353216,1065353216,1065353216,1065353216]253; X86-AVX1-NEXT:    vpaddd %xmm2, %xmm4, %xmm4254; X86-AVX1-NEXT:    vcvttps2dq %xmm4, %xmm4255; X86-AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm3 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero256; X86-AVX1-NEXT:    vpslld $23, %xmm3, %xmm3257; X86-AVX1-NEXT:    vpaddd %xmm2, %xmm3, %xmm3258; X86-AVX1-NEXT:    vcvttps2dq %xmm3, %xmm3259; X86-AVX1-NEXT:    vpackusdw %xmm4, %xmm3, %xmm3260; X86-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4261; X86-AVX1-NEXT:    vpmullw %xmm3, %xmm4, %xmm3262; X86-AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm4 = xmm1[4,4,5,5,6,6,7,7]263; X86-AVX1-NEXT:    vpslld $23, %xmm4, %xmm4264; X86-AVX1-NEXT:    vpaddd %xmm2, %xmm4, %xmm4265; X86-AVX1-NEXT:    vcvttps2dq %xmm4, %xmm4266; X86-AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero267; X86-AVX1-NEXT:    vpslld $23, %xmm1, %xmm1268; X86-AVX1-NEXT:    vpaddd %xmm2, %xmm1, %xmm1269; X86-AVX1-NEXT:    vcvttps2dq %xmm1, %xmm1270; X86-AVX1-NEXT:    vpackusdw %xmm4, %xmm1, %xmm1271; X86-AVX1-NEXT:    vpmullw %xmm1, %xmm0, %xmm0272; X86-AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0273; X86-AVX1-NEXT:    retl274;275; X86-AVX2-LABEL: var_shift_v16i16:276; X86-AVX2:       # %bb.0:277; X86-AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2278; X86-AVX2-NEXT:    vpunpckhwd {{.*#+}} ymm3 = ymm1[4],ymm2[4],ymm1[5],ymm2[5],ymm1[6],ymm2[6],ymm1[7],ymm2[7],ymm1[12],ymm2[12],ymm1[13],ymm2[13],ymm1[14],ymm2[14],ymm1[15],ymm2[15]279; X86-AVX2-NEXT:    vpunpckhwd {{.*#+}} ymm4 = ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15]280; X86-AVX2-NEXT:    vpsllvd %ymm3, %ymm4, %ymm3281; X86-AVX2-NEXT:    vpsrld $16, %ymm3, %ymm3282; X86-AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm1 = ymm1[0],ymm2[0],ymm1[1],ymm2[1],ymm1[2],ymm2[2],ymm1[3],ymm2[3],ymm1[8],ymm2[8],ymm1[9],ymm2[9],ymm1[10],ymm2[10],ymm1[11],ymm2[11]283; X86-AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm2[0],ymm0[0],ymm2[1],ymm0[1],ymm2[2],ymm0[2],ymm2[3],ymm0[3],ymm2[8],ymm0[8],ymm2[9],ymm0[9],ymm2[10],ymm0[10],ymm2[11],ymm0[11]284; X86-AVX2-NEXT:    vpsllvd %ymm1, %ymm0, %ymm0285; X86-AVX2-NEXT:    vpsrld $16, %ymm0, %ymm0286; X86-AVX2-NEXT:    vpackusdw %ymm3, %ymm0, %ymm0287; X86-AVX2-NEXT:    retl288  %shift = shl <16 x i16> %a, %b289  ret <16 x i16> %shift290}291 292define <32 x i8> @var_shift_v32i8(<32 x i8> %a, <32 x i8> %b) nounwind {293; AVX1-LABEL: var_shift_v32i8:294; AVX1:       # %bb.0:295; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2296; AVX1-NEXT:    vpsllw $4, %xmm2, %xmm3297; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm4 = [240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240]298; AVX1-NEXT:    vpand %xmm4, %xmm3, %xmm3299; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5300; AVX1-NEXT:    vpsllw $5, %xmm5, %xmm5301; AVX1-NEXT:    vpblendvb %xmm5, %xmm3, %xmm2, %xmm2302; AVX1-NEXT:    vpsllw $2, %xmm2, %xmm3303; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm6 = [252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252]304; AVX1-NEXT:    vpand %xmm6, %xmm3, %xmm3305; AVX1-NEXT:    vpaddb %xmm5, %xmm5, %xmm5306; AVX1-NEXT:    vpblendvb %xmm5, %xmm3, %xmm2, %xmm2307; AVX1-NEXT:    vpaddb %xmm2, %xmm2, %xmm3308; AVX1-NEXT:    vpaddb %xmm5, %xmm5, %xmm5309; AVX1-NEXT:    vpblendvb %xmm5, %xmm3, %xmm2, %xmm2310; AVX1-NEXT:    vpsllw $4, %xmm0, %xmm3311; AVX1-NEXT:    vpand %xmm4, %xmm3, %xmm3312; AVX1-NEXT:    vpsllw $5, %xmm1, %xmm1313; AVX1-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0314; AVX1-NEXT:    vpsllw $2, %xmm0, %xmm3315; AVX1-NEXT:    vpand %xmm6, %xmm3, %xmm3316; AVX1-NEXT:    vpaddb %xmm1, %xmm1, %xmm1317; AVX1-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0318; AVX1-NEXT:    vpaddb %xmm0, %xmm0, %xmm3319; AVX1-NEXT:    vpaddb %xmm1, %xmm1, %xmm1320; AVX1-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0321; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0322; AVX1-NEXT:    retq323;324; AVX2-LABEL: var_shift_v32i8:325; AVX2:       # %bb.0:326; AVX2-NEXT:    vpsllw $5, %ymm1, %ymm1327; AVX2-NEXT:    vpsllw $4, %ymm0, %ymm2328; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2329; AVX2-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0330; AVX2-NEXT:    vpsllw $2, %ymm0, %ymm2331; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2332; AVX2-NEXT:    vpaddb %ymm1, %ymm1, %ymm1333; AVX2-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0334; AVX2-NEXT:    vpaddb %ymm0, %ymm0, %ymm2335; AVX2-NEXT:    vpaddb %ymm1, %ymm1, %ymm1336; AVX2-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0337; AVX2-NEXT:    retq338;339; XOPAVX1-LABEL: var_shift_v32i8:340; XOPAVX1:       # %bb.0:341; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2342; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3343; XOPAVX1-NEXT:    vpshlb %xmm2, %xmm3, %xmm2344; XOPAVX1-NEXT:    vpshlb %xmm1, %xmm0, %xmm0345; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0346; XOPAVX1-NEXT:    retq347;348; XOPAVX2-LABEL: var_shift_v32i8:349; XOPAVX2:       # %bb.0:350; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2351; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm3352; XOPAVX2-NEXT:    vpshlb %xmm2, %xmm3, %xmm2353; XOPAVX2-NEXT:    vpshlb %xmm1, %xmm0, %xmm0354; XOPAVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0355; XOPAVX2-NEXT:    retq356;357; AVX512DQ-LABEL: var_shift_v32i8:358; AVX512DQ:       # %bb.0:359; AVX512DQ-NEXT:    vpsllw $5, %ymm1, %ymm1360; AVX512DQ-NEXT:    vpsllw $4, %ymm0, %ymm2361; AVX512DQ-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2362; AVX512DQ-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0363; AVX512DQ-NEXT:    vpsllw $2, %ymm0, %ymm2364; AVX512DQ-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2365; AVX512DQ-NEXT:    vpaddb %ymm1, %ymm1, %ymm1366; AVX512DQ-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0367; AVX512DQ-NEXT:    vpaddb %ymm0, %ymm0, %ymm2368; AVX512DQ-NEXT:    vpaddb %ymm1, %ymm1, %ymm1369; AVX512DQ-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0370; AVX512DQ-NEXT:    retq371;372; AVX512BW-LABEL: var_shift_v32i8:373; AVX512BW:       # %bb.0:374; AVX512BW-NEXT:    vpmovzxbw {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero,ymm1[16],zero,ymm1[17],zero,ymm1[18],zero,ymm1[19],zero,ymm1[20],zero,ymm1[21],zero,ymm1[22],zero,ymm1[23],zero,ymm1[24],zero,ymm1[25],zero,ymm1[26],zero,ymm1[27],zero,ymm1[28],zero,ymm1[29],zero,ymm1[30],zero,ymm1[31],zero375; 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],zero376; AVX512BW-NEXT:    vpsllvw %zmm1, %zmm0, %zmm0377; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0378; AVX512BW-NEXT:    retq379;380; AVX512DQVL-LABEL: var_shift_v32i8:381; AVX512DQVL:       # %bb.0:382; AVX512DQVL-NEXT:    vpsllw $5, %ymm1, %ymm1383; AVX512DQVL-NEXT:    vpsllw $4, %ymm0, %ymm2384; AVX512DQVL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm2, %ymm2385; AVX512DQVL-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0386; AVX512DQVL-NEXT:    vpsllw $2, %ymm0, %ymm2387; AVX512DQVL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm2, %ymm2388; AVX512DQVL-NEXT:    vpaddb %ymm1, %ymm1, %ymm1389; AVX512DQVL-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0390; AVX512DQVL-NEXT:    vpaddb %ymm0, %ymm0, %ymm2391; AVX512DQVL-NEXT:    vpaddb %ymm1, %ymm1, %ymm1392; AVX512DQVL-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0393; AVX512DQVL-NEXT:    retq394;395; AVX512BWVL-LABEL: var_shift_v32i8:396; AVX512BWVL:       # %bb.0:397; AVX512BWVL-NEXT:    vpmovzxbw {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero,ymm1[16],zero,ymm1[17],zero,ymm1[18],zero,ymm1[19],zero,ymm1[20],zero,ymm1[21],zero,ymm1[22],zero,ymm1[23],zero,ymm1[24],zero,ymm1[25],zero,ymm1[26],zero,ymm1[27],zero,ymm1[28],zero,ymm1[29],zero,ymm1[30],zero,ymm1[31],zero398; AVX512BWVL-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],zero399; AVX512BWVL-NEXT:    vpsllvw %zmm1, %zmm0, %zmm0400; AVX512BWVL-NEXT:    vpmovwb %zmm0, %ymm0401; AVX512BWVL-NEXT:    retq402;403; X86-AVX1-LABEL: var_shift_v32i8:404; X86-AVX1:       # %bb.0:405; X86-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2406; X86-AVX1-NEXT:    vpsllw $4, %xmm2, %xmm3407; X86-AVX1-NEXT:    vbroadcastss {{.*#+}} xmm4 = [240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240]408; X86-AVX1-NEXT:    vpand %xmm4, %xmm3, %xmm3409; X86-AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5410; X86-AVX1-NEXT:    vpsllw $5, %xmm5, %xmm5411; X86-AVX1-NEXT:    vpblendvb %xmm5, %xmm3, %xmm2, %xmm2412; X86-AVX1-NEXT:    vpsllw $2, %xmm2, %xmm3413; X86-AVX1-NEXT:    vbroadcastss {{.*#+}} xmm6 = [252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252]414; X86-AVX1-NEXT:    vpand %xmm6, %xmm3, %xmm3415; X86-AVX1-NEXT:    vpaddb %xmm5, %xmm5, %xmm5416; X86-AVX1-NEXT:    vpblendvb %xmm5, %xmm3, %xmm2, %xmm2417; X86-AVX1-NEXT:    vpaddb %xmm2, %xmm2, %xmm3418; X86-AVX1-NEXT:    vpaddb %xmm5, %xmm5, %xmm5419; X86-AVX1-NEXT:    vpblendvb %xmm5, %xmm3, %xmm2, %xmm2420; X86-AVX1-NEXT:    vpsllw $4, %xmm0, %xmm3421; X86-AVX1-NEXT:    vpand %xmm4, %xmm3, %xmm3422; X86-AVX1-NEXT:    vpsllw $5, %xmm1, %xmm1423; X86-AVX1-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0424; X86-AVX1-NEXT:    vpsllw $2, %xmm0, %xmm3425; X86-AVX1-NEXT:    vpand %xmm6, %xmm3, %xmm3426; X86-AVX1-NEXT:    vpaddb %xmm1, %xmm1, %xmm1427; X86-AVX1-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0428; X86-AVX1-NEXT:    vpaddb %xmm0, %xmm0, %xmm3429; X86-AVX1-NEXT:    vpaddb %xmm1, %xmm1, %xmm1430; X86-AVX1-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0431; X86-AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0432; X86-AVX1-NEXT:    retl433;434; X86-AVX2-LABEL: var_shift_v32i8:435; X86-AVX2:       # %bb.0:436; X86-AVX2-NEXT:    vpsllw $5, %ymm1, %ymm1437; X86-AVX2-NEXT:    vpsllw $4, %ymm0, %ymm2438; X86-AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}, %ymm2, %ymm2439; X86-AVX2-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0440; X86-AVX2-NEXT:    vpsllw $2, %ymm0, %ymm2441; X86-AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}, %ymm2, %ymm2442; X86-AVX2-NEXT:    vpaddb %ymm1, %ymm1, %ymm1443; X86-AVX2-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0444; X86-AVX2-NEXT:    vpaddb %ymm0, %ymm0, %ymm2445; X86-AVX2-NEXT:    vpaddb %ymm1, %ymm1, %ymm1446; X86-AVX2-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0447; X86-AVX2-NEXT:    retl448  %shift = shl <32 x i8> %a, %b449  ret <32 x i8> %shift450}451 452;453; Uniform Variable Shifts454;455 456define <4 x i64> @splatvar_shift_v4i64(<4 x i64> %a, <4 x i64> %b) nounwind {457; AVX1-LABEL: splatvar_shift_v4i64:458; AVX1:       # %bb.0:459; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2460; AVX1-NEXT:    vpsllq %xmm1, %xmm2, %xmm2461; AVX1-NEXT:    vpsllq %xmm1, %xmm0, %xmm0462; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0463; AVX1-NEXT:    retq464;465; AVX2-LABEL: splatvar_shift_v4i64:466; AVX2:       # %bb.0:467; AVX2-NEXT:    vpsllq %xmm1, %ymm0, %ymm0468; AVX2-NEXT:    retq469;470; XOPAVX1-LABEL: splatvar_shift_v4i64:471; XOPAVX1:       # %bb.0:472; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2473; XOPAVX1-NEXT:    vpsllq %xmm1, %xmm2, %xmm2474; XOPAVX1-NEXT:    vpsllq %xmm1, %xmm0, %xmm0475; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0476; XOPAVX1-NEXT:    retq477;478; XOPAVX2-LABEL: splatvar_shift_v4i64:479; XOPAVX2:       # %bb.0:480; XOPAVX2-NEXT:    vpsllq %xmm1, %ymm0, %ymm0481; XOPAVX2-NEXT:    retq482;483; AVX512-LABEL: splatvar_shift_v4i64:484; AVX512:       # %bb.0:485; AVX512-NEXT:    vpsllq %xmm1, %ymm0, %ymm0486; AVX512-NEXT:    retq487;488; AVX512VL-LABEL: splatvar_shift_v4i64:489; AVX512VL:       # %bb.0:490; AVX512VL-NEXT:    vpsllq %xmm1, %ymm0, %ymm0491; AVX512VL-NEXT:    retq492;493; X86-AVX1-LABEL: splatvar_shift_v4i64:494; X86-AVX1:       # %bb.0:495; X86-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2496; X86-AVX1-NEXT:    vpsllq %xmm1, %xmm2, %xmm2497; X86-AVX1-NEXT:    vpsllq %xmm1, %xmm0, %xmm0498; X86-AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0499; X86-AVX1-NEXT:    retl500;501; X86-AVX2-LABEL: splatvar_shift_v4i64:502; X86-AVX2:       # %bb.0:503; X86-AVX2-NEXT:    vpsllq %xmm1, %ymm0, %ymm0504; X86-AVX2-NEXT:    retl505  %splat = shufflevector <4 x i64> %b, <4 x i64> poison, <4 x i32> zeroinitializer506  %shift = shl <4 x i64> %a, %splat507  ret <4 x i64> %shift508}509 510define <8 x i32> @splatvar_shift_v8i32(<8 x i32> %a, <8 x i32> %b) nounwind {511; AVX1-LABEL: splatvar_shift_v8i32:512; AVX1:       # %bb.0:513; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2514; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero515; AVX1-NEXT:    vpslld %xmm1, %xmm2, %xmm2516; AVX1-NEXT:    vpslld %xmm1, %xmm0, %xmm0517; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0518; AVX1-NEXT:    retq519;520; AVX2-LABEL: splatvar_shift_v8i32:521; AVX2:       # %bb.0:522; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero523; AVX2-NEXT:    vpslld %xmm1, %ymm0, %ymm0524; AVX2-NEXT:    retq525;526; XOPAVX1-LABEL: splatvar_shift_v8i32:527; XOPAVX1:       # %bb.0:528; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2529; XOPAVX1-NEXT:    vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero530; XOPAVX1-NEXT:    vpslld %xmm1, %xmm2, %xmm2531; XOPAVX1-NEXT:    vpslld %xmm1, %xmm0, %xmm0532; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0533; XOPAVX1-NEXT:    retq534;535; XOPAVX2-LABEL: splatvar_shift_v8i32:536; XOPAVX2:       # %bb.0:537; XOPAVX2-NEXT:    vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero538; XOPAVX2-NEXT:    vpslld %xmm1, %ymm0, %ymm0539; XOPAVX2-NEXT:    retq540;541; AVX512-LABEL: splatvar_shift_v8i32:542; AVX512:       # %bb.0:543; AVX512-NEXT:    vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero544; AVX512-NEXT:    vpslld %xmm1, %ymm0, %ymm0545; AVX512-NEXT:    retq546;547; AVX512VL-LABEL: splatvar_shift_v8i32:548; AVX512VL:       # %bb.0:549; AVX512VL-NEXT:    vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero550; AVX512VL-NEXT:    vpslld %xmm1, %ymm0, %ymm0551; AVX512VL-NEXT:    retq552;553; X86-AVX1-LABEL: splatvar_shift_v8i32:554; X86-AVX1:       # %bb.0:555; X86-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2556; X86-AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero557; X86-AVX1-NEXT:    vpslld %xmm1, %xmm2, %xmm2558; X86-AVX1-NEXT:    vpslld %xmm1, %xmm0, %xmm0559; X86-AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0560; X86-AVX1-NEXT:    retl561;562; X86-AVX2-LABEL: splatvar_shift_v8i32:563; X86-AVX2:       # %bb.0:564; X86-AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero565; X86-AVX2-NEXT:    vpslld %xmm1, %ymm0, %ymm0566; X86-AVX2-NEXT:    retl567  %splat = shufflevector <8 x i32> %b, <8 x i32> poison, <8 x i32> zeroinitializer568  %shift = shl <8 x i32> %a, %splat569  ret <8 x i32> %shift570}571 572define <16 x i16> @splatvar_shift_v16i16(<16 x i16> %a, <16 x i16> %b) nounwind {573; AVX1-LABEL: splatvar_shift_v16i16:574; AVX1:       # %bb.0:575; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2576; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero577; AVX1-NEXT:    vpsllw %xmm1, %xmm2, %xmm2578; AVX1-NEXT:    vpsllw %xmm1, %xmm0, %xmm0579; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0580; AVX1-NEXT:    retq581;582; AVX2-LABEL: splatvar_shift_v16i16:583; AVX2:       # %bb.0:584; AVX2-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero585; AVX2-NEXT:    vpsllw %xmm1, %ymm0, %ymm0586; AVX2-NEXT:    retq587;588; XOPAVX1-LABEL: splatvar_shift_v16i16:589; XOPAVX1:       # %bb.0:590; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2591; XOPAVX1-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero592; XOPAVX1-NEXT:    vpsllw %xmm1, %xmm2, %xmm2593; XOPAVX1-NEXT:    vpsllw %xmm1, %xmm0, %xmm0594; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0595; XOPAVX1-NEXT:    retq596;597; XOPAVX2-LABEL: splatvar_shift_v16i16:598; XOPAVX2:       # %bb.0:599; XOPAVX2-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero600; XOPAVX2-NEXT:    vpsllw %xmm1, %ymm0, %ymm0601; XOPAVX2-NEXT:    retq602;603; AVX512-LABEL: splatvar_shift_v16i16:604; AVX512:       # %bb.0:605; AVX512-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero606; AVX512-NEXT:    vpsllw %xmm1, %ymm0, %ymm0607; AVX512-NEXT:    retq608;609; AVX512VL-LABEL: splatvar_shift_v16i16:610; AVX512VL:       # %bb.0:611; AVX512VL-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero612; AVX512VL-NEXT:    vpsllw %xmm1, %ymm0, %ymm0613; AVX512VL-NEXT:    retq614;615; X86-AVX1-LABEL: splatvar_shift_v16i16:616; X86-AVX1:       # %bb.0:617; X86-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2618; X86-AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero619; X86-AVX1-NEXT:    vpsllw %xmm1, %xmm2, %xmm2620; X86-AVX1-NEXT:    vpsllw %xmm1, %xmm0, %xmm0621; X86-AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0622; X86-AVX1-NEXT:    retl623;624; X86-AVX2-LABEL: splatvar_shift_v16i16:625; X86-AVX2:       # %bb.0:626; X86-AVX2-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero627; X86-AVX2-NEXT:    vpsllw %xmm1, %ymm0, %ymm0628; X86-AVX2-NEXT:    retl629  %splat = shufflevector <16 x i16> %b, <16 x i16> poison, <16 x i32> zeroinitializer630  %shift = shl <16 x i16> %a, %splat631  ret <16 x i16> %shift632}633 634define <32 x i8> @splatvar_shift_v32i8(<32 x i8> %a, <32 x i8> %b) nounwind {635; AVX1-LABEL: splatvar_shift_v32i8:636; AVX1:       # %bb.0:637; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2638; AVX1-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero639; AVX1-NEXT:    vpsllw %xmm1, %xmm2, %xmm2640; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3641; AVX1-NEXT:    vpsllw %xmm1, %xmm3, %xmm3642; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4643; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm3644; AVX1-NEXT:    vpand %xmm3, %xmm2, %xmm2645; AVX1-NEXT:    vpsllw %xmm1, %xmm0, %xmm0646; AVX1-NEXT:    vpand %xmm3, %xmm0, %xmm0647; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0648; AVX1-NEXT:    retq649;650; AVX2-LABEL: splatvar_shift_v32i8:651; AVX2:       # %bb.0:652; AVX2-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero653; AVX2-NEXT:    vpsllw %xmm1, %ymm0, %ymm0654; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2655; AVX2-NEXT:    vpsllw %xmm1, %xmm2, %xmm1656; AVX2-NEXT:    vpbroadcastb %xmm1, %ymm1657; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0658; AVX2-NEXT:    retq659;660; XOPAVX1-LABEL: splatvar_shift_v32i8:661; XOPAVX1:       # %bb.0:662; XOPAVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2663; XOPAVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1664; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2665; XOPAVX1-NEXT:    vpshlb %xmm1, %xmm2, %xmm2666; XOPAVX1-NEXT:    vpshlb %xmm1, %xmm0, %xmm0667; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0668; XOPAVX1-NEXT:    retq669;670; XOPAVX2-LABEL: splatvar_shift_v32i8:671; XOPAVX2:       # %bb.0:672; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2673; XOPAVX2-NEXT:    vpbroadcastb %xmm1, %xmm1674; XOPAVX2-NEXT:    vpshlb %xmm1, %xmm2, %xmm2675; XOPAVX2-NEXT:    vpshlb %xmm1, %xmm0, %xmm0676; XOPAVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0677; XOPAVX2-NEXT:    retq678;679; AVX512DQ-LABEL: splatvar_shift_v32i8:680; AVX512DQ:       # %bb.0:681; AVX512DQ-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero682; AVX512DQ-NEXT:    vpsllw %xmm1, %ymm0, %ymm0683; AVX512DQ-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2684; AVX512DQ-NEXT:    vpsllw %xmm1, %xmm2, %xmm1685; AVX512DQ-NEXT:    vpbroadcastb %xmm1, %ymm1686; AVX512DQ-NEXT:    vpand %ymm1, %ymm0, %ymm0687; AVX512DQ-NEXT:    retq688;689; AVX512BW-LABEL: splatvar_shift_v32i8:690; AVX512BW:       # %bb.0:691; 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],zero692; AVX512BW-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero693; AVX512BW-NEXT:    vpsllw %xmm1, %zmm0, %zmm0694; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0695; AVX512BW-NEXT:    retq696;697; AVX512DQVL-LABEL: splatvar_shift_v32i8:698; AVX512DQVL:       # %bb.0:699; AVX512DQVL-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero700; AVX512DQVL-NEXT:    vpsllw %xmm1, %ymm0, %ymm0701; AVX512DQVL-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2702; AVX512DQVL-NEXT:    vpsllw %xmm1, %xmm2, %xmm1703; AVX512DQVL-NEXT:    vpbroadcastb %xmm1, %ymm1704; AVX512DQVL-NEXT:    vpand %ymm1, %ymm0, %ymm0705; AVX512DQVL-NEXT:    retq706;707; AVX512BWVL-LABEL: splatvar_shift_v32i8:708; AVX512BWVL:       # %bb.0:709; AVX512BWVL-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],zero710; AVX512BWVL-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero711; AVX512BWVL-NEXT:    vpsllw %xmm1, %zmm0, %zmm0712; AVX512BWVL-NEXT:    vpmovwb %zmm0, %ymm0713; AVX512BWVL-NEXT:    retq714;715; X86-AVX1-LABEL: splatvar_shift_v32i8:716; X86-AVX1:       # %bb.0:717; X86-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2718; X86-AVX1-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero719; X86-AVX1-NEXT:    vpsllw %xmm1, %xmm2, %xmm2720; X86-AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3721; X86-AVX1-NEXT:    vpsllw %xmm1, %xmm3, %xmm3722; X86-AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4723; X86-AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm3724; X86-AVX1-NEXT:    vpand %xmm3, %xmm2, %xmm2725; X86-AVX1-NEXT:    vpsllw %xmm1, %xmm0, %xmm0726; X86-AVX1-NEXT:    vpand %xmm3, %xmm0, %xmm0727; X86-AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0728; X86-AVX1-NEXT:    retl729;730; X86-AVX2-LABEL: splatvar_shift_v32i8:731; X86-AVX2:       # %bb.0:732; X86-AVX2-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero733; X86-AVX2-NEXT:    vpsllw %xmm1, %ymm0, %ymm0734; X86-AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2735; X86-AVX2-NEXT:    vpsllw %xmm1, %xmm2, %xmm1736; X86-AVX2-NEXT:    vpbroadcastb %xmm1, %ymm1737; X86-AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0738; X86-AVX2-NEXT:    retl739  %splat = shufflevector <32 x i8> %b, <32 x i8> poison, <32 x i32> zeroinitializer740  %shift = shl <32 x i8> %a, %splat741  ret <32 x i8> %shift742}743 744;745; Uniform Variable Modulo Shifts746;747 748define <4 x i64> @splatvar_modulo_shift_v4i64(<4 x i64> %a, <4 x i64> %b) nounwind {749; AVX1-LABEL: splatvar_modulo_shift_v4i64:750; AVX1:       # %bb.0:751; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2752; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1753; AVX1-NEXT:    vpsllq %xmm1, %xmm2, %xmm2754; AVX1-NEXT:    vpsllq %xmm1, %xmm0, %xmm0755; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0756; AVX1-NEXT:    retq757;758; AVX2-LABEL: splatvar_modulo_shift_v4i64:759; AVX2:       # %bb.0:760; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1761; AVX2-NEXT:    vpsllq %xmm1, %ymm0, %ymm0762; AVX2-NEXT:    retq763;764; XOPAVX1-LABEL: splatvar_modulo_shift_v4i64:765; XOPAVX1:       # %bb.0:766; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2767; XOPAVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1768; XOPAVX1-NEXT:    vpsllq %xmm1, %xmm2, %xmm2769; XOPAVX1-NEXT:    vpsllq %xmm1, %xmm0, %xmm0770; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0771; XOPAVX1-NEXT:    retq772;773; XOPAVX2-LABEL: splatvar_modulo_shift_v4i64:774; XOPAVX2:       # %bb.0:775; XOPAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1776; XOPAVX2-NEXT:    vpsllq %xmm1, %ymm0, %ymm0777; XOPAVX2-NEXT:    retq778;779; AVX512-LABEL: splatvar_modulo_shift_v4i64:780; AVX512:       # %bb.0:781; AVX512-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1782; AVX512-NEXT:    vpsllq %xmm1, %ymm0, %ymm0783; AVX512-NEXT:    retq784;785; AVX512VL-LABEL: splatvar_modulo_shift_v4i64:786; AVX512VL:       # %bb.0:787; AVX512VL-NEXT:    vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm1, %xmm1788; AVX512VL-NEXT:    vpsllq %xmm1, %ymm0, %ymm0789; AVX512VL-NEXT:    retq790;791; X86-AVX1-LABEL: splatvar_modulo_shift_v4i64:792; X86-AVX1:       # %bb.0:793; X86-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2794; X86-AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm1795; X86-AVX1-NEXT:    vpsllq %xmm1, %xmm2, %xmm2796; X86-AVX1-NEXT:    vpsllq %xmm1, %xmm0, %xmm0797; X86-AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0798; X86-AVX1-NEXT:    retl799;800; X86-AVX2-LABEL: splatvar_modulo_shift_v4i64:801; X86-AVX2:       # %bb.0:802; X86-AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm1803; X86-AVX2-NEXT:    vpsllq %xmm1, %ymm0, %ymm0804; X86-AVX2-NEXT:    retl805  %mod = and <4 x i64> %b, <i64 63, i64 63, i64 63, i64 63>806  %splat = shufflevector <4 x i64> %mod, <4 x i64> poison, <4 x i32> zeroinitializer807  %shift = shl <4 x i64> %a, %splat808  ret <4 x i64> %shift809}810 811define <8 x i32> @splatvar_modulo_shift_v8i32(<8 x i32> %a, <8 x i32> %b) nounwind {812; AVX1-LABEL: splatvar_modulo_shift_v8i32:813; AVX1:       # %bb.0:814; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2815; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1816; AVX1-NEXT:    vpslld %xmm1, %xmm2, %xmm2817; AVX1-NEXT:    vpslld %xmm1, %xmm0, %xmm0818; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0819; AVX1-NEXT:    retq820;821; AVX2-LABEL: splatvar_modulo_shift_v8i32:822; AVX2:       # %bb.0:823; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1824; AVX2-NEXT:    vpslld %xmm1, %ymm0, %ymm0825; AVX2-NEXT:    retq826;827; XOPAVX1-LABEL: splatvar_modulo_shift_v8i32:828; XOPAVX1:       # %bb.0:829; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2830; XOPAVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1831; XOPAVX1-NEXT:    vpslld %xmm1, %xmm2, %xmm2832; XOPAVX1-NEXT:    vpslld %xmm1, %xmm0, %xmm0833; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0834; XOPAVX1-NEXT:    retq835;836; XOPAVX2-LABEL: splatvar_modulo_shift_v8i32:837; XOPAVX2:       # %bb.0:838; XOPAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1839; XOPAVX2-NEXT:    vpslld %xmm1, %ymm0, %ymm0840; XOPAVX2-NEXT:    retq841;842; AVX512-LABEL: splatvar_modulo_shift_v8i32:843; AVX512:       # %bb.0:844; AVX512-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1845; AVX512-NEXT:    vpslld %xmm1, %ymm0, %ymm0846; AVX512-NEXT:    retq847;848; AVX512VL-LABEL: splatvar_modulo_shift_v8i32:849; AVX512VL:       # %bb.0:850; AVX512VL-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1851; AVX512VL-NEXT:    vpslld %xmm1, %ymm0, %ymm0852; AVX512VL-NEXT:    retq853;854; X86-AVX1-LABEL: splatvar_modulo_shift_v8i32:855; X86-AVX1:       # %bb.0:856; X86-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2857; X86-AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm1858; X86-AVX1-NEXT:    vpslld %xmm1, %xmm2, %xmm2859; X86-AVX1-NEXT:    vpslld %xmm1, %xmm0, %xmm0860; X86-AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0861; X86-AVX1-NEXT:    retl862;863; X86-AVX2-LABEL: splatvar_modulo_shift_v8i32:864; X86-AVX2:       # %bb.0:865; X86-AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm1866; X86-AVX2-NEXT:    vpslld %xmm1, %ymm0, %ymm0867; X86-AVX2-NEXT:    retl868  %mod = and <8 x i32> %b, <i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31>869  %splat = shufflevector <8 x i32> %mod, <8 x i32> poison, <8 x i32> zeroinitializer870  %shift = shl <8 x i32> %a, %splat871  ret <8 x i32> %shift872}873 874define <16 x i16> @splatvar_modulo_shift_v16i16(<16 x i16> %a, <16 x i16> %b) nounwind {875; AVX1-LABEL: splatvar_modulo_shift_v16i16:876; AVX1:       # %bb.0:877; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2878; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1879; AVX1-NEXT:    vpsllw %xmm1, %xmm2, %xmm2880; AVX1-NEXT:    vpsllw %xmm1, %xmm0, %xmm0881; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0882; AVX1-NEXT:    retq883;884; AVX2-LABEL: splatvar_modulo_shift_v16i16:885; AVX2:       # %bb.0:886; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1887; AVX2-NEXT:    vpsllw %xmm1, %ymm0, %ymm0888; AVX2-NEXT:    retq889;890; XOPAVX1-LABEL: splatvar_modulo_shift_v16i16:891; XOPAVX1:       # %bb.0:892; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2893; XOPAVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1894; XOPAVX1-NEXT:    vpsllw %xmm1, %xmm2, %xmm2895; XOPAVX1-NEXT:    vpsllw %xmm1, %xmm0, %xmm0896; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0897; XOPAVX1-NEXT:    retq898;899; XOPAVX2-LABEL: splatvar_modulo_shift_v16i16:900; XOPAVX2:       # %bb.0:901; XOPAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1902; XOPAVX2-NEXT:    vpsllw %xmm1, %ymm0, %ymm0903; XOPAVX2-NEXT:    retq904;905; AVX512-LABEL: splatvar_modulo_shift_v16i16:906; AVX512:       # %bb.0:907; AVX512-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1908; AVX512-NEXT:    vpsllw %xmm1, %ymm0, %ymm0909; AVX512-NEXT:    retq910;911; AVX512VL-LABEL: splatvar_modulo_shift_v16i16:912; AVX512VL:       # %bb.0:913; AVX512VL-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1914; AVX512VL-NEXT:    vpsllw %xmm1, %ymm0, %ymm0915; AVX512VL-NEXT:    retq916;917; X86-AVX1-LABEL: splatvar_modulo_shift_v16i16:918; X86-AVX1:       # %bb.0:919; X86-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2920; X86-AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm1921; X86-AVX1-NEXT:    vpsllw %xmm1, %xmm2, %xmm2922; X86-AVX1-NEXT:    vpsllw %xmm1, %xmm0, %xmm0923; X86-AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0924; X86-AVX1-NEXT:    retl925;926; X86-AVX2-LABEL: splatvar_modulo_shift_v16i16:927; X86-AVX2:       # %bb.0:928; X86-AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm1929; X86-AVX2-NEXT:    vpsllw %xmm1, %ymm0, %ymm0930; X86-AVX2-NEXT:    retl931  %mod = and <16 x i16> %b, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15>932  %splat = shufflevector <16 x i16> %mod, <16 x i16> poison, <16 x i32> zeroinitializer933  %shift = shl <16 x i16> %a, %splat934  ret <16 x i16> %shift935}936 937define <32 x i8> @splatvar_modulo_shift_v32i8(<32 x i8> %a, <32 x i8> %b) nounwind {938; AVX1-LABEL: splatvar_modulo_shift_v32i8:939; AVX1:       # %bb.0:940; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2941; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1942; AVX1-NEXT:    vpsllw %xmm1, %xmm2, %xmm2943; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3944; AVX1-NEXT:    vpsllw %xmm1, %xmm3, %xmm3945; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4946; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm3947; AVX1-NEXT:    vpand %xmm3, %xmm2, %xmm2948; AVX1-NEXT:    vpsllw %xmm1, %xmm0, %xmm0949; AVX1-NEXT:    vpand %xmm3, %xmm0, %xmm0950; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0951; AVX1-NEXT:    retq952;953; AVX2-LABEL: splatvar_modulo_shift_v32i8:954; AVX2:       # %bb.0:955; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1956; AVX2-NEXT:    vpsllw %xmm1, %ymm0, %ymm0957; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2958; AVX2-NEXT:    vpsllw %xmm1, %xmm2, %xmm1959; AVX2-NEXT:    vpbroadcastb %xmm1, %ymm1960; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0961; AVX2-NEXT:    retq962;963; XOPAVX1-LABEL: splatvar_modulo_shift_v32i8:964; XOPAVX1:       # %bb.0:965; XOPAVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2966; XOPAVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1967; XOPAVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1968; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2969; XOPAVX1-NEXT:    vpshlb %xmm1, %xmm2, %xmm2970; XOPAVX1-NEXT:    vpshlb %xmm1, %xmm0, %xmm0971; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0972; XOPAVX1-NEXT:    retq973;974; XOPAVX2-LABEL: splatvar_modulo_shift_v32i8:975; XOPAVX2:       # %bb.0:976; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2977; XOPAVX2-NEXT:    vpbroadcastb %xmm1, %xmm1978; XOPAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1979; XOPAVX2-NEXT:    vpshlb %xmm1, %xmm2, %xmm2980; XOPAVX2-NEXT:    vpshlb %xmm1, %xmm0, %xmm0981; XOPAVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0982; XOPAVX2-NEXT:    retq983;984; AVX512DQ-LABEL: splatvar_modulo_shift_v32i8:985; AVX512DQ:       # %bb.0:986; AVX512DQ-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1987; AVX512DQ-NEXT:    vpsllw %xmm1, %ymm0, %ymm0988; AVX512DQ-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2989; AVX512DQ-NEXT:    vpsllw %xmm1, %xmm2, %xmm1990; AVX512DQ-NEXT:    vpbroadcastb %xmm1, %ymm1991; AVX512DQ-NEXT:    vpand %ymm1, %ymm0, %ymm0992; AVX512DQ-NEXT:    retq993;994; AVX512BW-LABEL: splatvar_modulo_shift_v32i8:995; AVX512BW:       # %bb.0:996; 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],zero997; AVX512BW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1998; AVX512BW-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero999; AVX512BW-NEXT:    vpsllw %xmm1, %zmm0, %zmm01000; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm01001; AVX512BW-NEXT:    retq1002;1003; AVX512DQVL-LABEL: splatvar_modulo_shift_v32i8:1004; AVX512DQVL:       # %bb.0:1005; AVX512DQVL-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11006; AVX512DQVL-NEXT:    vpsllw %xmm1, %ymm0, %ymm01007; AVX512DQVL-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm21008; AVX512DQVL-NEXT:    vpsllw %xmm1, %xmm2, %xmm11009; AVX512DQVL-NEXT:    vpbroadcastb %xmm1, %ymm11010; AVX512DQVL-NEXT:    vpand %ymm1, %ymm0, %ymm01011; AVX512DQVL-NEXT:    retq1012;1013; AVX512BWVL-LABEL: splatvar_modulo_shift_v32i8:1014; AVX512BWVL:       # %bb.0:1015; AVX512BWVL-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],zero1016; AVX512BWVL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm1, %xmm11017; AVX512BWVL-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1018; AVX512BWVL-NEXT:    vpsllw %xmm1, %zmm0, %zmm01019; AVX512BWVL-NEXT:    vpmovwb %zmm0, %ymm01020; AVX512BWVL-NEXT:    retq1021;1022; X86-AVX1-LABEL: splatvar_modulo_shift_v32i8:1023; X86-AVX1:       # %bb.0:1024; X86-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm21025; X86-AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm11026; X86-AVX1-NEXT:    vpsllw %xmm1, %xmm2, %xmm21027; X86-AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm31028; X86-AVX1-NEXT:    vpsllw %xmm1, %xmm3, %xmm31029; X86-AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm41030; X86-AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm31031; X86-AVX1-NEXT:    vpand %xmm3, %xmm2, %xmm21032; X86-AVX1-NEXT:    vpsllw %xmm1, %xmm0, %xmm01033; X86-AVX1-NEXT:    vpand %xmm3, %xmm0, %xmm01034; X86-AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01035; X86-AVX1-NEXT:    retl1036;1037; X86-AVX2-LABEL: splatvar_modulo_shift_v32i8:1038; X86-AVX2:       # %bb.0:1039; X86-AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm11040; X86-AVX2-NEXT:    vpsllw %xmm1, %ymm0, %ymm01041; X86-AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm21042; X86-AVX2-NEXT:    vpsllw %xmm1, %xmm2, %xmm11043; X86-AVX2-NEXT:    vpbroadcastb %xmm1, %ymm11044; X86-AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm01045; X86-AVX2-NEXT:    retl1046  %mod = and <32 x i8> %b, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>1047  %splat = shufflevector <32 x i8> %mod, <32 x i8> poison, <32 x i32> zeroinitializer1048  %shift = shl <32 x i8> %a, %splat1049  ret <32 x i8> %shift1050}1051 1052;1053; Constant Shifts1054;1055 1056define <4 x i64> @constant_shift_v4i64(<4 x i64> %a) nounwind {1057; AVX1-LABEL: constant_shift_v4i64:1058; AVX1:       # %bb.0:1059; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm11060; AVX1-NEXT:    vpsllq $62, %xmm1, %xmm21061; AVX1-NEXT:    vpsllq $31, %xmm1, %xmm11062; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm2[4,5,6,7]1063; AVX1-NEXT:    vpsllq $7, %xmm0, %xmm21064; AVX1-NEXT:    vpaddq %xmm0, %xmm0, %xmm01065; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm2[4,5,6,7]1066; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01067; AVX1-NEXT:    retq1068;1069; AVX2-LABEL: constant_shift_v4i64:1070; AVX2:       # %bb.0:1071; AVX2-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01072; AVX2-NEXT:    retq1073;1074; XOPAVX1-LABEL: constant_shift_v4i64:1075; XOPAVX1:       # %bb.0:1076; XOPAVX1-NEXT:    vpshlq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm11077; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01078; XOPAVX1-NEXT:    vpshlq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01079; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01080; XOPAVX1-NEXT:    retq1081;1082; XOPAVX2-LABEL: constant_shift_v4i64:1083; XOPAVX2:       # %bb.0:1084; XOPAVX2-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01085; XOPAVX2-NEXT:    retq1086;1087; AVX512-LABEL: constant_shift_v4i64:1088; AVX512:       # %bb.0:1089; AVX512-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01090; AVX512-NEXT:    retq1091;1092; AVX512VL-LABEL: constant_shift_v4i64:1093; AVX512VL:       # %bb.0:1094; AVX512VL-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01095; AVX512VL-NEXT:    retq1096;1097; X86-AVX1-LABEL: constant_shift_v4i64:1098; X86-AVX1:       # %bb.0:1099; X86-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm11100; X86-AVX1-NEXT:    vpsllq $62, %xmm1, %xmm21101; X86-AVX1-NEXT:    vpsllq $31, %xmm1, %xmm11102; X86-AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm2[4,5,6,7]1103; X86-AVX1-NEXT:    vpsllq $7, %xmm0, %xmm21104; X86-AVX1-NEXT:    vpaddq %xmm0, %xmm0, %xmm01105; X86-AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm2[4,5,6,7]1106; X86-AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01107; X86-AVX1-NEXT:    retl1108;1109; X86-AVX2-LABEL: constant_shift_v4i64:1110; X86-AVX2:       # %bb.0:1111; X86-AVX2-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm01112; X86-AVX2-NEXT:    retl1113  %shift = shl <4 x i64> %a, <i64 1, i64 7, i64 31, i64 62>1114  ret <4 x i64> %shift1115}1116 1117define <8 x i32> @constant_shift_v8i32(<8 x i32> %a) nounwind {1118; AVX1-LABEL: constant_shift_v8i32:1119; AVX1:       # %bb.0:1120; AVX1-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1 # [16,32,64,128]1121; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01122; AVX1-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [256,512,256,128]1123; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01124; AVX1-NEXT:    retq1125;1126; AVX2-LABEL: constant_shift_v8i32:1127; AVX2:       # %bb.0:1128; AVX2-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01129; AVX2-NEXT:    retq1130;1131; XOPAVX1-LABEL: constant_shift_v8i32:1132; XOPAVX1:       # %bb.0:1133; XOPAVX1-NEXT:    vpshld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm11134; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01135; XOPAVX1-NEXT:    vpshld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01136; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01137; XOPAVX1-NEXT:    retq1138;1139; XOPAVX2-LABEL: constant_shift_v8i32:1140; XOPAVX2:       # %bb.0:1141; XOPAVX2-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01142; XOPAVX2-NEXT:    retq1143;1144; AVX512-LABEL: constant_shift_v8i32:1145; AVX512:       # %bb.0:1146; AVX512-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01147; AVX512-NEXT:    retq1148;1149; AVX512VL-LABEL: constant_shift_v8i32:1150; AVX512VL:       # %bb.0:1151; AVX512VL-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01152; AVX512VL-NEXT:    retq1153;1154; X86-AVX1-LABEL: constant_shift_v8i32:1155; X86-AVX1:       # %bb.0:1156; X86-AVX1-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm1 # [16,32,64,128]1157; X86-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01158; X86-AVX1-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0 # [256,512,256,128]1159; X86-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01160; X86-AVX1-NEXT:    retl1161;1162; X86-AVX2-LABEL: constant_shift_v8i32:1163; X86-AVX2:       # %bb.0:1164; X86-AVX2-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm01165; X86-AVX2-NEXT:    retl1166  %shift = shl <8 x i32> %a, <i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 8, i32 7>1167  ret <8 x i32> %shift1168}1169 1170define <16 x i16> @constant_shift_v16i16(<16 x i16> %a) nounwind {1171; AVX1-LABEL: constant_shift_v16i16:1172; AVX1:       # %bb.0:1173; AVX1-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1 # [1,2,4,8,16,32,64,128]1174; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01175; AVX1-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [256,512,1024,2048,4096,8192,16384,32768]1176; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01177; AVX1-NEXT:    retq1178;1179; AVX2-LABEL: constant_shift_v16i16:1180; AVX2:       # %bb.0:1181; AVX2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768]1182; AVX2-NEXT:    retq1183;1184; XOPAVX1-LABEL: constant_shift_v16i16:1185; XOPAVX1:       # %bb.0:1186; XOPAVX1-NEXT:    vpshlw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm11187; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01188; XOPAVX1-NEXT:    vpshlw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01189; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01190; XOPAVX1-NEXT:    retq1191;1192; XOPAVX2-LABEL: constant_shift_v16i16:1193; XOPAVX2:       # %bb.0:1194; XOPAVX2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768]1195; XOPAVX2-NEXT:    retq1196;1197; AVX512DQ-LABEL: constant_shift_v16i16:1198; AVX512DQ:       # %bb.0:1199; AVX512DQ-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768]1200; AVX512DQ-NEXT:    retq1201;1202; AVX512BW-LABEL: constant_shift_v16i16:1203; AVX512BW:       # %bb.0:1204; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01205; AVX512BW-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]1206; AVX512BW-NEXT:    vpsllvw %zmm1, %zmm0, %zmm01207; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01208; AVX512BW-NEXT:    retq1209;1210; AVX512DQVL-LABEL: constant_shift_v16i16:1211; AVX512DQVL:       # %bb.0:1212; AVX512DQVL-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768]1213; AVX512DQVL-NEXT:    retq1214;1215; AVX512BWVL-LABEL: constant_shift_v16i16:1216; AVX512BWVL:       # %bb.0:1217; AVX512BWVL-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01218; AVX512BWVL-NEXT:    retq1219;1220; X86-AVX1-LABEL: constant_shift_v16i16:1221; X86-AVX1:       # %bb.0:1222; X86-AVX1-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm1 # [1,2,4,8,16,32,64,128]1223; X86-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01224; X86-AVX1-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0 # [256,512,1024,2048,4096,8192,16384,32768]1225; X86-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01226; X86-AVX1-NEXT:    retl1227;1228; X86-AVX2-LABEL: constant_shift_v16i16:1229; X86-AVX2:       # %bb.0:1230; X86-AVX2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm0 # [1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768]1231; X86-AVX2-NEXT:    retl1232  %shift = shl <16 x i16> %a, <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>1233  ret <16 x i16> %shift1234}1235 1236define <16 x i16> @constant_shift_v16i16_pairs(<16 x i16> %a) nounwind {1237; AVX1-LABEL: constant_shift_v16i16_pairs:1238; AVX1:       # %bb.0:1239; AVX1-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1 # [4,4,8,8,1,1,2,2]1240; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01241; AVX1-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [64,64,128,128,16,16,32,32]1242; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01243; AVX1-NEXT:    retq1244;1245; AVX2-LABEL: constant_shift_v16i16_pairs:1246; AVX2:       # %bb.0:1247; AVX2-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01248; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01249; AVX2-NEXT:    retq1250;1251; XOPAVX1-LABEL: constant_shift_v16i16_pairs:1252; XOPAVX1:       # %bb.0:1253; XOPAVX1-NEXT:    vpshlw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm11254; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01255; XOPAVX1-NEXT:    vpshlw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01256; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01257; XOPAVX1-NEXT:    retq1258;1259; XOPAVX2-LABEL: constant_shift_v16i16_pairs:1260; XOPAVX2:       # %bb.0:1261; XOPAVX2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [4,4,8,8,1,1,2,2,64,64,128,128,16,16,32,32]1262; XOPAVX2-NEXT:    retq1263;1264; AVX512DQ-LABEL: constant_shift_v16i16_pairs:1265; AVX512DQ:       # %bb.0:1266; AVX512DQ-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01267; AVX512DQ-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01268; AVX512DQ-NEXT:    retq1269;1270; AVX512BW-LABEL: constant_shift_v16i16_pairs:1271; AVX512BW:       # %bb.0:1272; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01273; AVX512BW-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [2,2,3,3,0,0,1,1,6,6,7,7,4,4,5,5]1274; AVX512BW-NEXT:    vpsllvw %zmm1, %zmm0, %zmm01275; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01276; AVX512BW-NEXT:    retq1277;1278; AVX512DQVL-LABEL: constant_shift_v16i16_pairs:1279; AVX512DQVL:       # %bb.0:1280; AVX512DQVL-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01281; AVX512DQVL-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01282; AVX512DQVL-NEXT:    retq1283;1284; AVX512BWVL-LABEL: constant_shift_v16i16_pairs:1285; AVX512BWVL:       # %bb.0:1286; AVX512BWVL-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01287; AVX512BWVL-NEXT:    retq1288;1289; X86-AVX1-LABEL: constant_shift_v16i16_pairs:1290; X86-AVX1:       # %bb.0:1291; X86-AVX1-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm1 # [4,4,8,8,1,1,2,2]1292; X86-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01293; X86-AVX1-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0 # [64,64,128,128,16,16,32,32]1294; X86-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01295; X86-AVX1-NEXT:    retl1296;1297; X86-AVX2-LABEL: constant_shift_v16i16_pairs:1298; X86-AVX2:       # %bb.0:1299; X86-AVX2-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm01300; X86-AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm01301; X86-AVX2-NEXT:    retl1302  %shift = shl <16 x i16> %a, <i16 2, i16 2, i16 3, i16 3, i16 0, i16 0, i16 1, i16 1, i16 6, i16 6, i16 7, i16 7, i16 4, i16 4, i16 5, i16 5>1303  ret <16 x i16> %shift1304}1305 1306define <32 x i8> @constant_shift_v32i8(<32 x i8> %a) nounwind {1307; AVX1-LABEL: constant_shift_v32i8:1308; AVX1:       # %bb.0:1309; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1]1310; AVX1-NEXT:    vpmaddubsw %xmm1, %xmm0, %xmm21311; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm21312; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31313; AVX1-NEXT:    vpmaddubsw %xmm1, %xmm3, %xmm11314; AVX1-NEXT:    vpsllw $8, %xmm1, %xmm11315; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm11316; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1]1317; AVX1-NEXT:    vpmullw %xmm2, %xmm3, %xmm31318; AVX1-NEXT:    vpmullw %xmm2, %xmm0, %xmm01319; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm01320; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01321; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01322; AVX1-NEXT:    retq1323;1324; AVX2-LABEL: constant_shift_v32i8:1325; AVX2:       # %bb.0:1326; AVX2-NEXT:    vpmaddubsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 # [0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1,0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1]1327; AVX2-NEXT:    vpsllw $8, %ymm1, %ymm11328; AVX2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1,1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1]1329; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01330; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01331; AVX2-NEXT:    retq1332;1333; XOPAVX1-LABEL: constant_shift_v32i8:1334; XOPAVX1:       # %bb.0:1335; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm11336; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0]1337; XOPAVX1-NEXT:    vpshlb %xmm2, %xmm1, %xmm11338; XOPAVX1-NEXT:    vpshlb %xmm2, %xmm0, %xmm01339; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01340; XOPAVX1-NEXT:    retq1341;1342; XOPAVX2-LABEL: constant_shift_v32i8:1343; XOPAVX2:       # %bb.0:1344; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm11345; XOPAVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0]1346; XOPAVX2-NEXT:    vpshlb %xmm2, %xmm1, %xmm11347; XOPAVX2-NEXT:    vpshlb %xmm2, %xmm0, %xmm01348; XOPAVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm01349; XOPAVX2-NEXT:    retq1350;1351; AVX512DQ-LABEL: constant_shift_v32i8:1352; AVX512DQ:       # %bb.0:1353; AVX512DQ-NEXT:    vpmaddubsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 # [0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1,0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1]1354; AVX512DQ-NEXT:    vpsllw $8, %ymm1, %ymm11355; AVX512DQ-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1,1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1]1356; AVX512DQ-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01357; AVX512DQ-NEXT:    vpor %ymm1, %ymm0, %ymm01358; AVX512DQ-NEXT:    retq1359;1360; AVX512BW-LABEL: constant_shift_v32i8:1361; AVX512BW:       # %bb.0:1362; 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],zero1363; AVX512BW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm01364; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm01365; AVX512BW-NEXT:    retq1366;1367; AVX512DQVL-LABEL: constant_shift_v32i8:1368; AVX512DQVL:       # %bb.0:1369; AVX512DQVL-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 # [1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1,1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1]1370; AVX512DQVL-NEXT:    vpmaddubsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1,0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1]1371; AVX512DQVL-NEXT:    vpsllw $8, %ymm0, %ymm01372; AVX512DQVL-NEXT:    vpternlogd {{.*#+}} ymm0 = ymm0 | (ymm1 & m32bcst)1373; AVX512DQVL-NEXT:    retq1374;1375; AVX512BWVL-LABEL: constant_shift_v32i8:1376; AVX512BWVL:       # %bb.0:1377; AVX512BWVL-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],zero1378; AVX512BWVL-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm01379; AVX512BWVL-NEXT:    vpmovwb %zmm0, %ymm01380; AVX512BWVL-NEXT:    retq1381;1382; X86-AVX1-LABEL: constant_shift_v32i8:1383; X86-AVX1:       # %bb.0:1384; X86-AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1]1385; X86-AVX1-NEXT:    vpmaddubsw %xmm1, %xmm0, %xmm21386; X86-AVX1-NEXT:    vpsllw $8, %xmm2, %xmm21387; X86-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31388; X86-AVX1-NEXT:    vpmaddubsw %xmm1, %xmm3, %xmm11389; X86-AVX1-NEXT:    vpsllw $8, %xmm1, %xmm11390; X86-AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm11391; X86-AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1]1392; X86-AVX1-NEXT:    vpmullw %xmm2, %xmm3, %xmm31393; X86-AVX1-NEXT:    vpmullw %xmm2, %xmm0, %xmm01394; X86-AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm01395; X86-AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm01396; X86-AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01397; X86-AVX1-NEXT:    retl1398;1399; X86-AVX2-LABEL: constant_shift_v32i8:1400; X86-AVX2:       # %bb.0:1401; X86-AVX2-NEXT:    vpmaddubsw {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm1 # [0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1,0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1]1402; X86-AVX2-NEXT:    vpsllw $8, %ymm1, %ymm11403; X86-AVX2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm0 # [1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1,1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1]1404; X86-AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm01405; X86-AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01406; X86-AVX2-NEXT:    retl1407  %shift = shl <32 x i8> %a, <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>1408  ret <32 x i8> %shift1409}1410 1411define <32 x i8> @constant_shift_v32i8_pairs(<32 x i8> %a) nounwind {1412; AVX1-LABEL: constant_shift_v32i8_pairs:1413; AVX1:       # %bb.0:1414; AVX1-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1 # [8,128,64,4,128,1,128,2]1415; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01416; AVX1-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [32,1,16,128,64,2,16,1]1417; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01418; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01419; AVX1-NEXT:    retq1420;1421; AVX2-LABEL: constant_shift_v32i8_pairs:1422; AVX2:       # %bb.0:1423; AVX2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [8,128,64,4,128,1,128,2,32,1,16,128,64,2,16,1]1424; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01425; AVX2-NEXT:    retq1426;1427; XOPAVX1-LABEL: constant_shift_v32i8_pairs:1428; XOPAVX1:       # %bb.0:1429; XOPAVX1-NEXT:    vpshlb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm11430; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01431; XOPAVX1-NEXT:    vpshlb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01432; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01433; XOPAVX1-NEXT:    retq1434;1435; XOPAVX2-LABEL: constant_shift_v32i8_pairs:1436; XOPAVX2:       # %bb.0:1437; XOPAVX2-NEXT:    vpshlb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm11438; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm01439; XOPAVX2-NEXT:    vpshlb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01440; XOPAVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm01441; XOPAVX2-NEXT:    retq1442;1443; AVX512DQ-LABEL: constant_shift_v32i8_pairs:1444; AVX512DQ:       # %bb.0:1445; AVX512DQ-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [8,128,64,4,128,1,128,2,32,1,16,128,64,2,16,1]1446; AVX512DQ-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01447; AVX512DQ-NEXT:    retq1448;1449; AVX512BW-LABEL: constant_shift_v32i8_pairs:1450; AVX512BW:       # %bb.0:1451; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01452; AVX512BW-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [3,7,6,2,7,0,7,1,5,0,4,7,6,1,4,0]1453; AVX512BW-NEXT:    vpsllvw %zmm1, %zmm0, %zmm01454; AVX512BW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01455; AVX512BW-NEXT:    retq1456;1457; AVX512DQVL-LABEL: constant_shift_v32i8_pairs:1458; AVX512DQVL:       # %bb.0:1459; AVX512DQVL-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [8,128,64,4,128,1,128,2,32,1,16,128,64,2,16,1]1460; AVX512DQVL-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01461; AVX512DQVL-NEXT:    retq1462;1463; AVX512BWVL-LABEL: constant_shift_v32i8_pairs:1464; AVX512BWVL:       # %bb.0:1465; AVX512BWVL-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01466; AVX512BWVL-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01467; AVX512BWVL-NEXT:    retq1468;1469; X86-AVX1-LABEL: constant_shift_v32i8_pairs:1470; X86-AVX1:       # %bb.0:1471; X86-AVX1-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm1 # [8,128,64,4,128,1,128,2]1472; X86-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01473; X86-AVX1-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0 # [32,1,16,128,64,2,16,1]1474; X86-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01475; X86-AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm01476; X86-AVX1-NEXT:    retl1477;1478; X86-AVX2-LABEL: constant_shift_v32i8_pairs:1479; X86-AVX2:       # %bb.0:1480; X86-AVX2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm0 # [8,128,64,4,128,1,128,2,32,1,16,128,64,2,16,1]1481; X86-AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm01482; X86-AVX2-NEXT:    retl1483  %shift = shl <32 x i8> %a, <i8 3, i8 3, i8 7, i8 7, i8 6, i8 6, i8 2, i8 2, i8 7, i8 7, i8 0, i8 0, i8 7, i8 7, i8 1, i8 1, i8 5, i8 5, i8 0, i8 0, i8 4, i8 4, i8 7, i8 7, i8 6, i8 6, i8 1, i8 1, i8 4, i8 4, i8 0, i8 0>1484  ret <32 x i8> %shift1485}1486 1487define <32 x i8> @constant_shift_v32i8_quads(<32 x i8> %a) nounwind {1488; AVX1-LABEL: constant_shift_v32i8_quads:1489; AVX1:       # %bb.0:1490; AVX1-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1 # [4,4,8,8,1,1,2,2]1491; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01492; AVX1-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [64,64,128,128,16,16,32,32]1493; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01494; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01495; AVX1-NEXT:    retq1496;1497; AVX2-LABEL: constant_shift_v32i8_quads:1498; AVX2:       # %bb.0:1499; AVX2-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01500; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01501; AVX2-NEXT:    retq1502;1503; XOPAVX1-LABEL: constant_shift_v32i8_quads:1504; XOPAVX1:       # %bb.0:1505; XOPAVX1-NEXT:    vpshlb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm11506; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01507; XOPAVX1-NEXT:    vpshlb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01508; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01509; XOPAVX1-NEXT:    retq1510;1511; XOPAVX2-LABEL: constant_shift_v32i8_quads:1512; XOPAVX2:       # %bb.0:1513; XOPAVX2-NEXT:    vpshlb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm11514; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm01515; XOPAVX2-NEXT:    vpshlb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01516; XOPAVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm01517; XOPAVX2-NEXT:    retq1518;1519; AVX512-LABEL: constant_shift_v32i8_quads:1520; AVX512:       # %bb.0:1521; AVX512-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01522; AVX512-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01523; AVX512-NEXT:    retq1524;1525; AVX512VL-LABEL: constant_shift_v32i8_quads:1526; AVX512VL:       # %bb.0:1527; AVX512VL-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01528; AVX512VL-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01529; AVX512VL-NEXT:    retq1530;1531; X86-AVX1-LABEL: constant_shift_v32i8_quads:1532; X86-AVX1:       # %bb.0:1533; X86-AVX1-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm1 # [4,4,8,8,1,1,2,2]1534; X86-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01535; X86-AVX1-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0 # [64,64,128,128,16,16,32,32]1536; X86-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01537; X86-AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm01538; X86-AVX1-NEXT:    retl1539;1540; X86-AVX2-LABEL: constant_shift_v32i8_quads:1541; X86-AVX2:       # %bb.0:1542; X86-AVX2-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm01543; X86-AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm01544; X86-AVX2-NEXT:    retl1545  %shift = shl <32 x i8> %a, <i8 2, i8 2, i8 2, i8 2, i8 3, i8 3, i8 3, i8 3, i8 0, i8 0, i8 0, i8 0, i8 1, i8 1, i8 1, i8 1, i8 6, i8 6, i8 6, i8 6, i8 7, i8 7, i8 7, i8 7, i8 4, i8 4, i8 4, i8 4, i8 5, i8 5, i8 5, i8 5>1546  ret <32 x i8> %shift1547}1548 1549;1550; Uniform Constant Shifts1551;1552 1553define <4 x i64> @splatconstant_shift_v4i64(<4 x i64> %a) nounwind {1554; AVX1-LABEL: splatconstant_shift_v4i64:1555; AVX1:       # %bb.0:1556; AVX1-NEXT:    vpsllq $7, %xmm0, %xmm11557; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01558; AVX1-NEXT:    vpsllq $7, %xmm0, %xmm01559; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01560; AVX1-NEXT:    retq1561;1562; AVX2-LABEL: splatconstant_shift_v4i64:1563; AVX2:       # %bb.0:1564; AVX2-NEXT:    vpsllq $7, %ymm0, %ymm01565; AVX2-NEXT:    retq1566;1567; XOPAVX1-LABEL: splatconstant_shift_v4i64:1568; XOPAVX1:       # %bb.0:1569; XOPAVX1-NEXT:    vpsllq $7, %xmm0, %xmm11570; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01571; XOPAVX1-NEXT:    vpsllq $7, %xmm0, %xmm01572; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01573; XOPAVX1-NEXT:    retq1574;1575; XOPAVX2-LABEL: splatconstant_shift_v4i64:1576; XOPAVX2:       # %bb.0:1577; XOPAVX2-NEXT:    vpsllq $7, %ymm0, %ymm01578; XOPAVX2-NEXT:    retq1579;1580; AVX512-LABEL: splatconstant_shift_v4i64:1581; AVX512:       # %bb.0:1582; AVX512-NEXT:    vpsllq $7, %ymm0, %ymm01583; AVX512-NEXT:    retq1584;1585; AVX512VL-LABEL: splatconstant_shift_v4i64:1586; AVX512VL:       # %bb.0:1587; AVX512VL-NEXT:    vpsllq $7, %ymm0, %ymm01588; AVX512VL-NEXT:    retq1589;1590; X86-AVX1-LABEL: splatconstant_shift_v4i64:1591; X86-AVX1:       # %bb.0:1592; X86-AVX1-NEXT:    vpsllq $7, %xmm0, %xmm11593; X86-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01594; X86-AVX1-NEXT:    vpsllq $7, %xmm0, %xmm01595; X86-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01596; X86-AVX1-NEXT:    retl1597;1598; X86-AVX2-LABEL: splatconstant_shift_v4i64:1599; X86-AVX2:       # %bb.0:1600; X86-AVX2-NEXT:    vpsllq $7, %ymm0, %ymm01601; X86-AVX2-NEXT:    retl1602  %shift = shl <4 x i64> %a, <i64 7, i64 7, i64 7, i64 7>1603  ret <4 x i64> %shift1604}1605 1606define <8 x i32> @splatconstant_shift_v8i32(<8 x i32> %a) nounwind {1607; AVX1-LABEL: splatconstant_shift_v8i32:1608; AVX1:       # %bb.0:1609; AVX1-NEXT:    vpslld $5, %xmm0, %xmm11610; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01611; AVX1-NEXT:    vpslld $5, %xmm0, %xmm01612; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01613; AVX1-NEXT:    retq1614;1615; AVX2-LABEL: splatconstant_shift_v8i32:1616; AVX2:       # %bb.0:1617; AVX2-NEXT:    vpslld $5, %ymm0, %ymm01618; AVX2-NEXT:    retq1619;1620; XOPAVX1-LABEL: splatconstant_shift_v8i32:1621; XOPAVX1:       # %bb.0:1622; XOPAVX1-NEXT:    vpslld $5, %xmm0, %xmm11623; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01624; XOPAVX1-NEXT:    vpslld $5, %xmm0, %xmm01625; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01626; XOPAVX1-NEXT:    retq1627;1628; XOPAVX2-LABEL: splatconstant_shift_v8i32:1629; XOPAVX2:       # %bb.0:1630; XOPAVX2-NEXT:    vpslld $5, %ymm0, %ymm01631; XOPAVX2-NEXT:    retq1632;1633; AVX512-LABEL: splatconstant_shift_v8i32:1634; AVX512:       # %bb.0:1635; AVX512-NEXT:    vpslld $5, %ymm0, %ymm01636; AVX512-NEXT:    retq1637;1638; AVX512VL-LABEL: splatconstant_shift_v8i32:1639; AVX512VL:       # %bb.0:1640; AVX512VL-NEXT:    vpslld $5, %ymm0, %ymm01641; AVX512VL-NEXT:    retq1642;1643; X86-AVX1-LABEL: splatconstant_shift_v8i32:1644; X86-AVX1:       # %bb.0:1645; X86-AVX1-NEXT:    vpslld $5, %xmm0, %xmm11646; X86-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01647; X86-AVX1-NEXT:    vpslld $5, %xmm0, %xmm01648; X86-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01649; X86-AVX1-NEXT:    retl1650;1651; X86-AVX2-LABEL: splatconstant_shift_v8i32:1652; X86-AVX2:       # %bb.0:1653; X86-AVX2-NEXT:    vpslld $5, %ymm0, %ymm01654; X86-AVX2-NEXT:    retl1655  %shift = shl <8 x i32> %a, <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>1656  ret <8 x i32> %shift1657}1658 1659define <16 x i16> @splatconstant_shift_v16i16(<16 x i16> %a) nounwind {1660; AVX1-LABEL: splatconstant_shift_v16i16:1661; AVX1:       # %bb.0:1662; AVX1-NEXT:    vpsllw $3, %xmm0, %xmm11663; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01664; AVX1-NEXT:    vpsllw $3, %xmm0, %xmm01665; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01666; AVX1-NEXT:    retq1667;1668; AVX2-LABEL: splatconstant_shift_v16i16:1669; AVX2:       # %bb.0:1670; AVX2-NEXT:    vpsllw $3, %ymm0, %ymm01671; AVX2-NEXT:    retq1672;1673; XOPAVX1-LABEL: splatconstant_shift_v16i16:1674; XOPAVX1:       # %bb.0:1675; XOPAVX1-NEXT:    vpsllw $3, %xmm0, %xmm11676; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01677; XOPAVX1-NEXT:    vpsllw $3, %xmm0, %xmm01678; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01679; XOPAVX1-NEXT:    retq1680;1681; XOPAVX2-LABEL: splatconstant_shift_v16i16:1682; XOPAVX2:       # %bb.0:1683; XOPAVX2-NEXT:    vpsllw $3, %ymm0, %ymm01684; XOPAVX2-NEXT:    retq1685;1686; AVX512-LABEL: splatconstant_shift_v16i16:1687; AVX512:       # %bb.0:1688; AVX512-NEXT:    vpsllw $3, %ymm0, %ymm01689; AVX512-NEXT:    retq1690;1691; AVX512VL-LABEL: splatconstant_shift_v16i16:1692; AVX512VL:       # %bb.0:1693; AVX512VL-NEXT:    vpsllw $3, %ymm0, %ymm01694; AVX512VL-NEXT:    retq1695;1696; X86-AVX1-LABEL: splatconstant_shift_v16i16:1697; X86-AVX1:       # %bb.0:1698; X86-AVX1-NEXT:    vpsllw $3, %xmm0, %xmm11699; X86-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01700; X86-AVX1-NEXT:    vpsllw $3, %xmm0, %xmm01701; X86-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01702; X86-AVX1-NEXT:    retl1703;1704; X86-AVX2-LABEL: splatconstant_shift_v16i16:1705; X86-AVX2:       # %bb.0:1706; X86-AVX2-NEXT:    vpsllw $3, %ymm0, %ymm01707; X86-AVX2-NEXT:    retl1708  %shift = shl <16 x i16> %a, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>1709  ret <16 x i16> %shift1710}1711 1712define <32 x i8> @splatconstant_shift_v32i8(<32 x i8> %a) nounwind {1713; AVX1-LABEL: splatconstant_shift_v32i8:1714; AVX1:       # %bb.0:1715; AVX1-NEXT:    vpsllw $3, %xmm0, %xmm11716; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01717; AVX1-NEXT:    vpsllw $3, %xmm0, %xmm01718; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01719; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01720; AVX1-NEXT:    retq1721;1722; AVX2-LABEL: splatconstant_shift_v32i8:1723; AVX2:       # %bb.0:1724; AVX2-NEXT:    vpsllw $3, %ymm0, %ymm01725; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01726; AVX2-NEXT:    retq1727;1728; XOPAVX1-LABEL: splatconstant_shift_v32i8:1729; XOPAVX1:       # %bb.0:1730; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm11731; XOPAVX1-NEXT:    vbroadcastss {{.*#+}} xmm2 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]1732; XOPAVX1-NEXT:    vpshlb %xmm2, %xmm1, %xmm11733; XOPAVX1-NEXT:    vpshlb %xmm2, %xmm0, %xmm01734; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01735; XOPAVX1-NEXT:    retq1736;1737; XOPAVX2-LABEL: splatconstant_shift_v32i8:1738; XOPAVX2:       # %bb.0:1739; XOPAVX2-NEXT:    vpsllw $3, %ymm0, %ymm01740; XOPAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01741; XOPAVX2-NEXT:    retq1742;1743; AVX512-LABEL: splatconstant_shift_v32i8:1744; AVX512:       # %bb.0:1745; AVX512-NEXT:    vpsllw $3, %ymm0, %ymm01746; AVX512-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01747; AVX512-NEXT:    retq1748;1749; AVX512VL-LABEL: splatconstant_shift_v32i8:1750; AVX512VL:       # %bb.0:1751; AVX512VL-NEXT:    vpsllw $3, %ymm0, %ymm01752; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm01753; AVX512VL-NEXT:    retq1754;1755; X86-AVX1-LABEL: splatconstant_shift_v32i8:1756; X86-AVX1:       # %bb.0:1757; X86-AVX1-NEXT:    vpsllw $3, %xmm0, %xmm11758; X86-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01759; X86-AVX1-NEXT:    vpsllw $3, %xmm0, %xmm01760; X86-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01761; X86-AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm01762; X86-AVX1-NEXT:    retl1763;1764; X86-AVX2-LABEL: splatconstant_shift_v32i8:1765; X86-AVX2:       # %bb.0:1766; X86-AVX2-NEXT:    vpsllw $3, %ymm0, %ymm01767; X86-AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm01768; X86-AVX2-NEXT:    retl1769  %shift = shl <32 x i8> %a, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3>1770  ret <32 x i8> %shift1771}1772 1773;1774; Special Cases1775;1776 1777define <4 x i64> @shift32_v4i64(<4 x i64> %a) nounwind {1778; AVX1-LABEL: shift32_v4i64:1779; AVX1:       # %bb.0:1780; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm11781; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm1[0,2],ymm0[0,2],ymm1[4,6],ymm0[4,6]1782; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,2,1,3,4,6,5,7]1783; AVX1-NEXT:    retq1784;1785; AVX2-LABEL: shift32_v4i64:1786; AVX2:       # %bb.0:1787; AVX2-NEXT:    vpsllq $32, %ymm0, %ymm01788; AVX2-NEXT:    retq1789;1790; XOPAVX1-LABEL: shift32_v4i64:1791; XOPAVX1:       # %bb.0:1792; XOPAVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm11793; XOPAVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm1[0,2],ymm0[0,2],ymm1[4,6],ymm0[4,6]1794; XOPAVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,2,1,3,4,6,5,7]1795; XOPAVX1-NEXT:    retq1796;1797; XOPAVX2-LABEL: shift32_v4i64:1798; XOPAVX2:       # %bb.0:1799; XOPAVX2-NEXT:    vpsllq $32, %ymm0, %ymm01800; XOPAVX2-NEXT:    retq1801;1802; AVX512-LABEL: shift32_v4i64:1803; AVX512:       # %bb.0:1804; AVX512-NEXT:    vpsllq $32, %ymm0, %ymm01805; AVX512-NEXT:    retq1806;1807; AVX512VL-LABEL: shift32_v4i64:1808; AVX512VL:       # %bb.0:1809; AVX512VL-NEXT:    vpsllq $32, %ymm0, %ymm01810; AVX512VL-NEXT:    retq1811;1812; X86-AVX1-LABEL: shift32_v4i64:1813; X86-AVX1:       # %bb.0:1814; X86-AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm11815; X86-AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm1[0,2],ymm0[0,2],ymm1[4,6],ymm0[4,6]1816; X86-AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,2,1,3,4,6,5,7]1817; X86-AVX1-NEXT:    retl1818;1819; X86-AVX2-LABEL: shift32_v4i64:1820; X86-AVX2:       # %bb.0:1821; X86-AVX2-NEXT:    vpsllq $32, %ymm0, %ymm01822; X86-AVX2-NEXT:    retl1823  %shift = shl <4 x i64> %a, <i64 32, i64 32, i64 32, i64 32>1824  ret <4 x i64> %shift1825}1826 1827define <4 x i64> @shift32_v4i64_concat(<2 x i64> %lo, <2 x i64> %hi) nounwind {1828; AVX1-LABEL: shift32_v4i64_concat:1829; AVX1:       # %bb.0:1830; AVX1-NEXT:    vpsllq $32, %xmm0, %xmm01831; AVX1-NEXT:    vpsllq $32, %xmm1, %xmm11832; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01833; AVX1-NEXT:    retq1834;1835; AVX2-LABEL: shift32_v4i64_concat:1836; AVX2:       # %bb.0:1837; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm01838; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm01839; AVX2-NEXT:    vpsllq $32, %ymm0, %ymm01840; AVX2-NEXT:    retq1841;1842; XOPAVX1-LABEL: shift32_v4i64_concat:1843; XOPAVX1:       # %bb.0:1844; XOPAVX1-NEXT:    vpsllq $32, %xmm0, %xmm01845; XOPAVX1-NEXT:    vpsllq $32, %xmm1, %xmm11846; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01847; XOPAVX1-NEXT:    retq1848;1849; XOPAVX2-LABEL: shift32_v4i64_concat:1850; XOPAVX2:       # %bb.0:1851; XOPAVX2-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm01852; XOPAVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm01853; XOPAVX2-NEXT:    vpsllq $32, %ymm0, %ymm01854; XOPAVX2-NEXT:    retq1855;1856; AVX512-LABEL: shift32_v4i64_concat:1857; AVX512:       # %bb.0:1858; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm01859; AVX512-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm01860; AVX512-NEXT:    vpsllq $32, %ymm0, %ymm01861; AVX512-NEXT:    retq1862;1863; AVX512VL-LABEL: shift32_v4i64_concat:1864; AVX512VL:       # %bb.0:1865; AVX512VL-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm01866; AVX512VL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm01867; AVX512VL-NEXT:    vpsllq $32, %ymm0, %ymm01868; AVX512VL-NEXT:    retq1869;1870; X86-AVX1-LABEL: shift32_v4i64_concat:1871; X86-AVX1:       # %bb.0:1872; X86-AVX1-NEXT:    vpsllq $32, %xmm0, %xmm01873; X86-AVX1-NEXT:    vpsllq $32, %xmm1, %xmm11874; X86-AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01875; X86-AVX1-NEXT:    retl1876;1877; X86-AVX2-LABEL: shift32_v4i64_concat:1878; X86-AVX2:       # %bb.0:1879; X86-AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm01880; X86-AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm01881; X86-AVX2-NEXT:    vpsllq $32, %ymm0, %ymm01882; X86-AVX2-NEXT:    retl1883  %a = shufflevector <2 x i64> %lo, <2 x i64> %hi, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1884  %shift = shl <4 x i64> %a, <i64 32, i64 32, i64 32, i64 32>1885  ret <4 x i64> %shift1886}1887