brintos

brintos / llvm-project-archived public Read only

0
0
Text · 86.7 KiB · 07e6c36 Raw
1918 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=SSE,SSE23; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefixes=SSE,SSE414; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX15; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX26; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx | FileCheck %s --check-prefixes=XOP,XOPAVX17; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx2 | FileCheck %s --check-prefixes=XOP,XOPAVX28; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512dq | FileCheck %s --check-prefixes=AVX512,AVX512DQ9; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw | FileCheck %s --check-prefixes=AVX512,AVX512BW10; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512dq,+avx512vl | FileCheck %s --check-prefixes=AVX512VL,AVX512DQVL11; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl | FileCheck %s --check-prefixes=AVX512VL,AVX512BWVL12;13; Just one 32-bit run to make sure we do reasonable things for i64 shifts.14; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=X86-SSE15 16;17; Variable Shifts18;19 20define <2 x i32> @var_shift_v2i32(<2 x i32> %a, <2 x i32> %b) nounwind {21; SSE2-LABEL: var_shift_v2i32:22; SSE2:       # %bb.0:23; SSE2-NEXT:    pslld $23, %xmm124; SSE2-NEXT:    paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm125; SSE2-NEXT:    cvttps2dq %xmm1, %xmm126; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]27; SSE2-NEXT:    pmuludq %xmm1, %xmm028; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]29; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]30; SSE2-NEXT:    pmuludq %xmm2, %xmm131; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]32; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]33; SSE2-NEXT:    retq34;35; SSE41-LABEL: var_shift_v2i32:36; SSE41:       # %bb.0:37; SSE41-NEXT:    pslld $23, %xmm138; SSE41-NEXT:    paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm139; SSE41-NEXT:    cvttps2dq %xmm1, %xmm140; SSE41-NEXT:    pmulld %xmm1, %xmm041; SSE41-NEXT:    retq42;43; AVX1-LABEL: var_shift_v2i32:44; AVX1:       # %bb.0:45; AVX1-NEXT:    vpslld $23, %xmm1, %xmm146; AVX1-NEXT:    vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm147; AVX1-NEXT:    vcvttps2dq %xmm1, %xmm148; AVX1-NEXT:    vpmulld %xmm1, %xmm0, %xmm049; AVX1-NEXT:    retq50;51; AVX2-LABEL: var_shift_v2i32:52; AVX2:       # %bb.0:53; AVX2-NEXT:    vpsllvd %xmm1, %xmm0, %xmm054; AVX2-NEXT:    retq55;56; XOPAVX1-LABEL: var_shift_v2i32:57; XOPAVX1:       # %bb.0:58; XOPAVX1-NEXT:    vpshld %xmm1, %xmm0, %xmm059; XOPAVX1-NEXT:    retq60;61; XOPAVX2-LABEL: var_shift_v2i32:62; XOPAVX2:       # %bb.0:63; XOPAVX2-NEXT:    vpsllvd %xmm1, %xmm0, %xmm064; XOPAVX2-NEXT:    retq65;66; AVX512-LABEL: var_shift_v2i32:67; AVX512:       # %bb.0:68; AVX512-NEXT:    vpsllvd %xmm1, %xmm0, %xmm069; AVX512-NEXT:    retq70;71; AVX512VL-LABEL: var_shift_v2i32:72; AVX512VL:       # %bb.0:73; AVX512VL-NEXT:    vpsllvd %xmm1, %xmm0, %xmm074; AVX512VL-NEXT:    retq75;76; X86-SSE-LABEL: var_shift_v2i32:77; X86-SSE:       # %bb.0:78; X86-SSE-NEXT:    pslld $23, %xmm179; X86-SSE-NEXT:    paddd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm180; X86-SSE-NEXT:    cvttps2dq %xmm1, %xmm181; X86-SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]82; X86-SSE-NEXT:    pmuludq %xmm1, %xmm083; X86-SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]84; X86-SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]85; X86-SSE-NEXT:    pmuludq %xmm2, %xmm186; X86-SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]87; X86-SSE-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]88; X86-SSE-NEXT:    retl89  %shift = shl <2 x i32> %a, %b90  ret <2 x i32> %shift91}92 93define <4 x i16> @var_shift_v4i16(<4 x i16> %a, <4 x i16> %b) nounwind {94; SSE2-LABEL: var_shift_v4i16:95; SSE2:       # %bb.0:96; SSE2-NEXT:    movdqa %xmm1, %xmm297; SSE2-NEXT:    punpckhwd {{.*#+}} xmm2 = xmm2[4,4,5,5,6,6,7,7]98; SSE2-NEXT:    pslld $23, %xmm299; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [1065353216,1065353216,1065353216,1065353216]100; SSE2-NEXT:    paddd %xmm3, %xmm2101; SSE2-NEXT:    cvttps2dq %xmm2, %xmm2102; SSE2-NEXT:    pslld $16, %xmm2103; SSE2-NEXT:    psrad $16, %xmm2104; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3]105; SSE2-NEXT:    pslld $23, %xmm1106; SSE2-NEXT:    paddd %xmm3, %xmm1107; SSE2-NEXT:    cvttps2dq %xmm1, %xmm1108; SSE2-NEXT:    pslld $16, %xmm1109; SSE2-NEXT:    psrad $16, %xmm1110; SSE2-NEXT:    packssdw %xmm2, %xmm1111; SSE2-NEXT:    pmullw %xmm1, %xmm0112; SSE2-NEXT:    retq113;114; SSE41-LABEL: var_shift_v4i16:115; SSE41:       # %bb.0:116; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm2 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero117; SSE41-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4,4,5,5,6,6,7,7]118; SSE41-NEXT:    pslld $23, %xmm1119; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [1065353216,1065353216,1065353216,1065353216]120; SSE41-NEXT:    paddd %xmm3, %xmm1121; SSE41-NEXT:    cvttps2dq %xmm1, %xmm1122; SSE41-NEXT:    pslld $23, %xmm2123; SSE41-NEXT:    paddd %xmm3, %xmm2124; SSE41-NEXT:    cvttps2dq %xmm2, %xmm2125; SSE41-NEXT:    packusdw %xmm1, %xmm2126; SSE41-NEXT:    pmullw %xmm2, %xmm0127; SSE41-NEXT:    retq128;129; AVX1-LABEL: var_shift_v4i16:130; AVX1:       # %bb.0:131; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm2 = xmm1[4,4,5,5,6,6,7,7]132; AVX1-NEXT:    vpslld $23, %xmm2, %xmm2133; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm3 = [1065353216,1065353216,1065353216,1065353216]134; AVX1-NEXT:    vpaddd %xmm3, %xmm2, %xmm2135; AVX1-NEXT:    vcvttps2dq %xmm2, %xmm2136; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero137; AVX1-NEXT:    vpslld $23, %xmm1, %xmm1138; AVX1-NEXT:    vpaddd %xmm3, %xmm1, %xmm1139; AVX1-NEXT:    vcvttps2dq %xmm1, %xmm1140; AVX1-NEXT:    vpackusdw %xmm2, %xmm1, %xmm1141; AVX1-NEXT:    vpmullw %xmm1, %xmm0, %xmm0142; AVX1-NEXT:    retq143;144; AVX2-LABEL: var_shift_v4i16:145; AVX2:       # %bb.0:146; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero147; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero148; AVX2-NEXT:    vpsllvd %ymm1, %ymm0, %ymm0149; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13,u,u,u,u,u,u,u,u,16,17,20,21,24,25,28,29,u,u,u,u,u,u,u,u]150; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]151; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0152; AVX2-NEXT:    vzeroupper153; AVX2-NEXT:    retq154;155; XOP-LABEL: var_shift_v4i16:156; XOP:       # %bb.0:157; XOP-NEXT:    vpshlw %xmm1, %xmm0, %xmm0158; XOP-NEXT:    retq159;160; AVX512DQ-LABEL: var_shift_v4i16:161; AVX512DQ:       # %bb.0:162; AVX512DQ-NEXT:    vpmovzxwd {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero163; AVX512DQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero164; AVX512DQ-NEXT:    vpsllvd %ymm1, %ymm0, %ymm0165; AVX512DQ-NEXT:    vpmovdw %zmm0, %ymm0166; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0167; AVX512DQ-NEXT:    vzeroupper168; AVX512DQ-NEXT:    retq169;170; AVX512BW-LABEL: var_shift_v4i16:171; AVX512BW:       # %bb.0:172; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1173; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0174; AVX512BW-NEXT:    vpsllvw %zmm1, %zmm0, %zmm0175; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0176; AVX512BW-NEXT:    vzeroupper177; AVX512BW-NEXT:    retq178;179; AVX512DQVL-LABEL: var_shift_v4i16:180; AVX512DQVL:       # %bb.0:181; AVX512DQVL-NEXT:    vpmovzxwd {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero182; AVX512DQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero183; AVX512DQVL-NEXT:    vpsllvd %ymm1, %ymm0, %ymm0184; AVX512DQVL-NEXT:    vpmovdw %ymm0, %xmm0185; AVX512DQVL-NEXT:    vzeroupper186; AVX512DQVL-NEXT:    retq187;188; AVX512BWVL-LABEL: var_shift_v4i16:189; AVX512BWVL:       # %bb.0:190; AVX512BWVL-NEXT:    vpsllvw %xmm1, %xmm0, %xmm0191; AVX512BWVL-NEXT:    retq192;193; X86-SSE-LABEL: var_shift_v4i16:194; X86-SSE:       # %bb.0:195; X86-SSE-NEXT:    movdqa %xmm1, %xmm2196; X86-SSE-NEXT:    punpckhwd {{.*#+}} xmm2 = xmm2[4,4,5,5,6,6,7,7]197; X86-SSE-NEXT:    pslld $23, %xmm2198; X86-SSE-NEXT:    movdqa {{.*#+}} xmm3 = [1065353216,1065353216,1065353216,1065353216]199; X86-SSE-NEXT:    paddd %xmm3, %xmm2200; X86-SSE-NEXT:    cvttps2dq %xmm2, %xmm2201; X86-SSE-NEXT:    pslld $16, %xmm2202; X86-SSE-NEXT:    psrad $16, %xmm2203; X86-SSE-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3]204; X86-SSE-NEXT:    pslld $23, %xmm1205; X86-SSE-NEXT:    paddd %xmm3, %xmm1206; X86-SSE-NEXT:    cvttps2dq %xmm1, %xmm1207; X86-SSE-NEXT:    pslld $16, %xmm1208; X86-SSE-NEXT:    psrad $16, %xmm1209; X86-SSE-NEXT:    packssdw %xmm2, %xmm1210; X86-SSE-NEXT:    pmullw %xmm1, %xmm0211; X86-SSE-NEXT:    retl212  %shift = shl <4 x i16> %a, %b213  ret <4 x i16> %shift214}215 216define <2 x i16> @var_shift_v2i16(<2 x i16> %a, <2 x i16> %b) nounwind {217; SSE2-LABEL: var_shift_v2i16:218; SSE2:       # %bb.0:219; SSE2-NEXT:    movdqa %xmm1, %xmm2220; SSE2-NEXT:    punpckhwd {{.*#+}} xmm2 = xmm2[4,4,5,5,6,6,7,7]221; SSE2-NEXT:    pslld $23, %xmm2222; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [1065353216,1065353216,1065353216,1065353216]223; SSE2-NEXT:    paddd %xmm3, %xmm2224; SSE2-NEXT:    cvttps2dq %xmm2, %xmm2225; SSE2-NEXT:    pslld $16, %xmm2226; SSE2-NEXT:    psrad $16, %xmm2227; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3]228; SSE2-NEXT:    pslld $23, %xmm1229; SSE2-NEXT:    paddd %xmm3, %xmm1230; SSE2-NEXT:    cvttps2dq %xmm1, %xmm1231; SSE2-NEXT:    pslld $16, %xmm1232; SSE2-NEXT:    psrad $16, %xmm1233; SSE2-NEXT:    packssdw %xmm2, %xmm1234; SSE2-NEXT:    pmullw %xmm1, %xmm0235; SSE2-NEXT:    retq236;237; SSE41-LABEL: var_shift_v2i16:238; SSE41:       # %bb.0:239; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm2 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero240; SSE41-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4,4,5,5,6,6,7,7]241; SSE41-NEXT:    pslld $23, %xmm1242; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [1065353216,1065353216,1065353216,1065353216]243; SSE41-NEXT:    paddd %xmm3, %xmm1244; SSE41-NEXT:    cvttps2dq %xmm1, %xmm1245; SSE41-NEXT:    pslld $23, %xmm2246; SSE41-NEXT:    paddd %xmm3, %xmm2247; SSE41-NEXT:    cvttps2dq %xmm2, %xmm2248; SSE41-NEXT:    packusdw %xmm1, %xmm2249; SSE41-NEXT:    pmullw %xmm2, %xmm0250; SSE41-NEXT:    retq251;252; AVX1-LABEL: var_shift_v2i16:253; AVX1:       # %bb.0:254; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm2 = xmm1[4,4,5,5,6,6,7,7]255; AVX1-NEXT:    vpslld $23, %xmm2, %xmm2256; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm3 = [1065353216,1065353216,1065353216,1065353216]257; AVX1-NEXT:    vpaddd %xmm3, %xmm2, %xmm2258; AVX1-NEXT:    vcvttps2dq %xmm2, %xmm2259; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero260; AVX1-NEXT:    vpslld $23, %xmm1, %xmm1261; AVX1-NEXT:    vpaddd %xmm3, %xmm1, %xmm1262; AVX1-NEXT:    vcvttps2dq %xmm1, %xmm1263; AVX1-NEXT:    vpackusdw %xmm2, %xmm1, %xmm1264; AVX1-NEXT:    vpmullw %xmm1, %xmm0, %xmm0265; AVX1-NEXT:    retq266;267; AVX2-LABEL: var_shift_v2i16:268; AVX2:       # %bb.0:269; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero270; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero271; AVX2-NEXT:    vpsllvd %ymm1, %ymm0, %ymm0272; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13,u,u,u,u,u,u,u,u,16,17,20,21,24,25,28,29,u,u,u,u,u,u,u,u]273; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]274; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0275; AVX2-NEXT:    vzeroupper276; AVX2-NEXT:    retq277;278; XOP-LABEL: var_shift_v2i16:279; XOP:       # %bb.0:280; XOP-NEXT:    vpshlw %xmm1, %xmm0, %xmm0281; XOP-NEXT:    retq282;283; AVX512DQ-LABEL: var_shift_v2i16:284; AVX512DQ:       # %bb.0:285; AVX512DQ-NEXT:    vpmovzxwd {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero286; AVX512DQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero287; AVX512DQ-NEXT:    vpsllvd %ymm1, %ymm0, %ymm0288; AVX512DQ-NEXT:    vpmovdw %zmm0, %ymm0289; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0290; AVX512DQ-NEXT:    vzeroupper291; AVX512DQ-NEXT:    retq292;293; AVX512BW-LABEL: var_shift_v2i16:294; AVX512BW:       # %bb.0:295; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1296; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0297; AVX512BW-NEXT:    vpsllvw %zmm1, %zmm0, %zmm0298; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0299; AVX512BW-NEXT:    vzeroupper300; AVX512BW-NEXT:    retq301;302; AVX512DQVL-LABEL: var_shift_v2i16:303; AVX512DQVL:       # %bb.0:304; AVX512DQVL-NEXT:    vpmovzxwd {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero305; AVX512DQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero306; AVX512DQVL-NEXT:    vpsllvd %ymm1, %ymm0, %ymm0307; AVX512DQVL-NEXT:    vpmovdw %ymm0, %xmm0308; AVX512DQVL-NEXT:    vzeroupper309; AVX512DQVL-NEXT:    retq310;311; AVX512BWVL-LABEL: var_shift_v2i16:312; AVX512BWVL:       # %bb.0:313; AVX512BWVL-NEXT:    vpsllvw %xmm1, %xmm0, %xmm0314; AVX512BWVL-NEXT:    retq315;316; X86-SSE-LABEL: var_shift_v2i16:317; X86-SSE:       # %bb.0:318; X86-SSE-NEXT:    movdqa %xmm1, %xmm2319; X86-SSE-NEXT:    punpckhwd {{.*#+}} xmm2 = xmm2[4,4,5,5,6,6,7,7]320; X86-SSE-NEXT:    pslld $23, %xmm2321; X86-SSE-NEXT:    movdqa {{.*#+}} xmm3 = [1065353216,1065353216,1065353216,1065353216]322; X86-SSE-NEXT:    paddd %xmm3, %xmm2323; X86-SSE-NEXT:    cvttps2dq %xmm2, %xmm2324; X86-SSE-NEXT:    pslld $16, %xmm2325; X86-SSE-NEXT:    psrad $16, %xmm2326; X86-SSE-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3]327; X86-SSE-NEXT:    pslld $23, %xmm1328; X86-SSE-NEXT:    paddd %xmm3, %xmm1329; X86-SSE-NEXT:    cvttps2dq %xmm1, %xmm1330; X86-SSE-NEXT:    pslld $16, %xmm1331; X86-SSE-NEXT:    psrad $16, %xmm1332; X86-SSE-NEXT:    packssdw %xmm2, %xmm1333; X86-SSE-NEXT:    pmullw %xmm1, %xmm0334; X86-SSE-NEXT:    retl335  %shift = shl <2 x i16> %a, %b336  ret <2 x i16> %shift337}338 339define <8 x i8> @var_shift_v8i8(<8 x i8> %a, <8 x i8> %b) nounwind {340; SSE2-LABEL: var_shift_v8i8:341; SSE2:       # %bb.0:342; SSE2-NEXT:    psllw $5, %xmm1343; SSE2-NEXT:    pxor %xmm2, %xmm2344; SSE2-NEXT:    pxor %xmm3, %xmm3345; SSE2-NEXT:    pcmpgtb %xmm1, %xmm3346; SSE2-NEXT:    movdqa %xmm3, %xmm4347; SSE2-NEXT:    pandn %xmm0, %xmm4348; SSE2-NEXT:    psllw $4, %xmm0349; SSE2-NEXT:    pand %xmm3, %xmm0350; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0351; SSE2-NEXT:    por %xmm4, %xmm0352; SSE2-NEXT:    paddb %xmm1, %xmm1353; SSE2-NEXT:    pxor %xmm3, %xmm3354; SSE2-NEXT:    pcmpgtb %xmm1, %xmm3355; SSE2-NEXT:    movdqa %xmm3, %xmm4356; SSE2-NEXT:    pandn %xmm0, %xmm4357; SSE2-NEXT:    psllw $2, %xmm0358; SSE2-NEXT:    pand %xmm3, %xmm0359; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0360; SSE2-NEXT:    por %xmm4, %xmm0361; SSE2-NEXT:    paddb %xmm1, %xmm1362; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2363; SSE2-NEXT:    movdqa %xmm2, %xmm1364; SSE2-NEXT:    pandn %xmm0, %xmm1365; SSE2-NEXT:    paddb %xmm0, %xmm0366; SSE2-NEXT:    pand %xmm2, %xmm0367; SSE2-NEXT:    por %xmm1, %xmm0368; SSE2-NEXT:    retq369;370; SSE41-LABEL: var_shift_v8i8:371; SSE41:       # %bb.0:372; SSE41-NEXT:    movdqa %xmm0, %xmm2373; SSE41-NEXT:    psllw $5, %xmm1374; SSE41-NEXT:    movdqa %xmm0, %xmm3375; SSE41-NEXT:    psllw $4, %xmm3376; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3377; SSE41-NEXT:    movdqa %xmm1, %xmm0378; SSE41-NEXT:    pblendvb %xmm0, %xmm3, %xmm2379; SSE41-NEXT:    movdqa %xmm2, %xmm3380; SSE41-NEXT:    psllw $2, %xmm3381; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3382; SSE41-NEXT:    paddb %xmm1, %xmm1383; SSE41-NEXT:    movdqa %xmm1, %xmm0384; SSE41-NEXT:    pblendvb %xmm0, %xmm3, %xmm2385; SSE41-NEXT:    movdqa %xmm2, %xmm3386; SSE41-NEXT:    paddb %xmm2, %xmm3387; SSE41-NEXT:    paddb %xmm1, %xmm1388; SSE41-NEXT:    movdqa %xmm1, %xmm0389; SSE41-NEXT:    pblendvb %xmm0, %xmm3, %xmm2390; SSE41-NEXT:    movdqa %xmm2, %xmm0391; SSE41-NEXT:    retq392;393; AVX-LABEL: var_shift_v8i8:394; AVX:       # %bb.0:395; AVX-NEXT:    vpsllw $5, %xmm1, %xmm1396; AVX-NEXT:    vpsllw $4, %xmm0, %xmm2397; AVX-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2398; AVX-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0399; AVX-NEXT:    vpsllw $2, %xmm0, %xmm2400; AVX-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2401; AVX-NEXT:    vpaddb %xmm1, %xmm1, %xmm1402; AVX-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0403; AVX-NEXT:    vpaddb %xmm0, %xmm0, %xmm2404; AVX-NEXT:    vpaddb %xmm1, %xmm1, %xmm1405; AVX-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0406; AVX-NEXT:    retq407;408; XOP-LABEL: var_shift_v8i8:409; XOP:       # %bb.0:410; XOP-NEXT:    vpshlb %xmm1, %xmm0, %xmm0411; XOP-NEXT:    retq412;413; AVX512DQ-LABEL: var_shift_v8i8:414; AVX512DQ:       # %bb.0:415; AVX512DQ-NEXT:    vpmovzxbd {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero416; AVX512DQ-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero417; AVX512DQ-NEXT:    vpsllvd %zmm1, %zmm0, %zmm0418; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0419; AVX512DQ-NEXT:    vzeroupper420; AVX512DQ-NEXT:    retq421;422; AVX512BW-LABEL: var_shift_v8i8:423; AVX512BW:       # %bb.0:424; AVX512BW-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero425; AVX512BW-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero426; AVX512BW-NEXT:    vpsllvw %zmm1, %zmm0, %zmm0427; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0428; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0429; AVX512BW-NEXT:    vzeroupper430; AVX512BW-NEXT:    retq431;432; AVX512DQVL-LABEL: var_shift_v8i8:433; AVX512DQVL:       # %bb.0:434; AVX512DQVL-NEXT:    vpmovzxbd {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero435; AVX512DQVL-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero436; AVX512DQVL-NEXT:    vpsllvd %zmm1, %zmm0, %zmm0437; AVX512DQVL-NEXT:    vpmovdb %zmm0, %xmm0438; AVX512DQVL-NEXT:    vzeroupper439; AVX512DQVL-NEXT:    retq440;441; AVX512BWVL-LABEL: var_shift_v8i8:442; AVX512BWVL:       # %bb.0:443; AVX512BWVL-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero444; AVX512BWVL-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero445; AVX512BWVL-NEXT:    vpsllvw %ymm1, %ymm0, %ymm0446; AVX512BWVL-NEXT:    vpmovwb %ymm0, %xmm0447; AVX512BWVL-NEXT:    vzeroupper448; AVX512BWVL-NEXT:    retq449;450; X86-SSE-LABEL: var_shift_v8i8:451; X86-SSE:       # %bb.0:452; X86-SSE-NEXT:    psllw $5, %xmm1453; X86-SSE-NEXT:    pxor %xmm2, %xmm2454; X86-SSE-NEXT:    pxor %xmm3, %xmm3455; X86-SSE-NEXT:    pcmpgtb %xmm1, %xmm3456; X86-SSE-NEXT:    movdqa %xmm3, %xmm4457; X86-SSE-NEXT:    pandn %xmm0, %xmm4458; X86-SSE-NEXT:    psllw $4, %xmm0459; X86-SSE-NEXT:    pand %xmm3, %xmm0460; X86-SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0461; X86-SSE-NEXT:    por %xmm4, %xmm0462; X86-SSE-NEXT:    paddb %xmm1, %xmm1463; X86-SSE-NEXT:    pxor %xmm3, %xmm3464; X86-SSE-NEXT:    pcmpgtb %xmm1, %xmm3465; X86-SSE-NEXT:    movdqa %xmm3, %xmm4466; X86-SSE-NEXT:    pandn %xmm0, %xmm4467; X86-SSE-NEXT:    psllw $2, %xmm0468; X86-SSE-NEXT:    pand %xmm3, %xmm0469; X86-SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0470; X86-SSE-NEXT:    por %xmm4, %xmm0471; X86-SSE-NEXT:    paddb %xmm1, %xmm1472; X86-SSE-NEXT:    pcmpgtb %xmm1, %xmm2473; X86-SSE-NEXT:    movdqa %xmm2, %xmm1474; X86-SSE-NEXT:    pandn %xmm0, %xmm1475; X86-SSE-NEXT:    paddb %xmm0, %xmm0476; X86-SSE-NEXT:    pand %xmm2, %xmm0477; X86-SSE-NEXT:    por %xmm1, %xmm0478; X86-SSE-NEXT:    retl479  %shift = shl <8 x i8> %a, %b480  ret <8 x i8> %shift481}482 483define <4 x i8> @var_shift_v4i8(<4 x i8> %a, <4 x i8> %b) nounwind {484; SSE2-LABEL: var_shift_v4i8:485; SSE2:       # %bb.0:486; SSE2-NEXT:    psllw $5, %xmm1487; SSE2-NEXT:    pxor %xmm2, %xmm2488; SSE2-NEXT:    pxor %xmm3, %xmm3489; SSE2-NEXT:    pcmpgtb %xmm1, %xmm3490; SSE2-NEXT:    movdqa %xmm3, %xmm4491; SSE2-NEXT:    pandn %xmm0, %xmm4492; SSE2-NEXT:    psllw $4, %xmm0493; SSE2-NEXT:    pand %xmm3, %xmm0494; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0495; SSE2-NEXT:    por %xmm4, %xmm0496; SSE2-NEXT:    paddb %xmm1, %xmm1497; SSE2-NEXT:    pxor %xmm3, %xmm3498; SSE2-NEXT:    pcmpgtb %xmm1, %xmm3499; SSE2-NEXT:    movdqa %xmm3, %xmm4500; SSE2-NEXT:    pandn %xmm0, %xmm4501; SSE2-NEXT:    psllw $2, %xmm0502; SSE2-NEXT:    pand %xmm3, %xmm0503; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0504; SSE2-NEXT:    por %xmm4, %xmm0505; SSE2-NEXT:    paddb %xmm1, %xmm1506; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2507; SSE2-NEXT:    movdqa %xmm2, %xmm1508; SSE2-NEXT:    pandn %xmm0, %xmm1509; SSE2-NEXT:    paddb %xmm0, %xmm0510; SSE2-NEXT:    pand %xmm2, %xmm0511; SSE2-NEXT:    por %xmm1, %xmm0512; SSE2-NEXT:    retq513;514; SSE41-LABEL: var_shift_v4i8:515; SSE41:       # %bb.0:516; SSE41-NEXT:    movdqa %xmm0, %xmm2517; SSE41-NEXT:    psllw $5, %xmm1518; SSE41-NEXT:    movdqa %xmm0, %xmm3519; SSE41-NEXT:    psllw $4, %xmm3520; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3521; SSE41-NEXT:    movdqa %xmm1, %xmm0522; SSE41-NEXT:    pblendvb %xmm0, %xmm3, %xmm2523; SSE41-NEXT:    movdqa %xmm2, %xmm3524; SSE41-NEXT:    psllw $2, %xmm3525; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3526; SSE41-NEXT:    paddb %xmm1, %xmm1527; SSE41-NEXT:    movdqa %xmm1, %xmm0528; SSE41-NEXT:    pblendvb %xmm0, %xmm3, %xmm2529; SSE41-NEXT:    movdqa %xmm2, %xmm3530; SSE41-NEXT:    paddb %xmm2, %xmm3531; SSE41-NEXT:    paddb %xmm1, %xmm1532; SSE41-NEXT:    movdqa %xmm1, %xmm0533; SSE41-NEXT:    pblendvb %xmm0, %xmm3, %xmm2534; SSE41-NEXT:    movdqa %xmm2, %xmm0535; SSE41-NEXT:    retq536;537; AVX-LABEL: var_shift_v4i8:538; AVX:       # %bb.0:539; AVX-NEXT:    vpsllw $5, %xmm1, %xmm1540; AVX-NEXT:    vpsllw $4, %xmm0, %xmm2541; AVX-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2542; AVX-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0543; AVX-NEXT:    vpsllw $2, %xmm0, %xmm2544; AVX-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2545; AVX-NEXT:    vpaddb %xmm1, %xmm1, %xmm1546; AVX-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0547; AVX-NEXT:    vpaddb %xmm0, %xmm0, %xmm2548; AVX-NEXT:    vpaddb %xmm1, %xmm1, %xmm1549; AVX-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0550; AVX-NEXT:    retq551;552; XOP-LABEL: var_shift_v4i8:553; XOP:       # %bb.0:554; XOP-NEXT:    vpshlb %xmm1, %xmm0, %xmm0555; XOP-NEXT:    retq556;557; AVX512DQ-LABEL: var_shift_v4i8:558; AVX512DQ:       # %bb.0:559; AVX512DQ-NEXT:    vpmovzxbd {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero560; AVX512DQ-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero561; AVX512DQ-NEXT:    vpsllvd %zmm1, %zmm0, %zmm0562; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0563; AVX512DQ-NEXT:    vzeroupper564; AVX512DQ-NEXT:    retq565;566; AVX512BW-LABEL: var_shift_v4i8:567; AVX512BW:       # %bb.0:568; AVX512BW-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero569; AVX512BW-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero570; AVX512BW-NEXT:    vpsllvw %zmm1, %zmm0, %zmm0571; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0572; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0573; AVX512BW-NEXT:    vzeroupper574; AVX512BW-NEXT:    retq575;576; AVX512DQVL-LABEL: var_shift_v4i8:577; AVX512DQVL:       # %bb.0:578; AVX512DQVL-NEXT:    vpmovzxbd {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero579; AVX512DQVL-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero580; AVX512DQVL-NEXT:    vpsllvd %zmm1, %zmm0, %zmm0581; AVX512DQVL-NEXT:    vpmovdb %zmm0, %xmm0582; AVX512DQVL-NEXT:    vzeroupper583; AVX512DQVL-NEXT:    retq584;585; AVX512BWVL-LABEL: var_shift_v4i8:586; AVX512BWVL:       # %bb.0:587; AVX512BWVL-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero588; AVX512BWVL-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero589; AVX512BWVL-NEXT:    vpsllvw %ymm1, %ymm0, %ymm0590; AVX512BWVL-NEXT:    vpmovwb %ymm0, %xmm0591; AVX512BWVL-NEXT:    vzeroupper592; AVX512BWVL-NEXT:    retq593;594; X86-SSE-LABEL: var_shift_v4i8:595; X86-SSE:       # %bb.0:596; X86-SSE-NEXT:    psllw $5, %xmm1597; X86-SSE-NEXT:    pxor %xmm2, %xmm2598; X86-SSE-NEXT:    pxor %xmm3, %xmm3599; X86-SSE-NEXT:    pcmpgtb %xmm1, %xmm3600; X86-SSE-NEXT:    movdqa %xmm3, %xmm4601; X86-SSE-NEXT:    pandn %xmm0, %xmm4602; X86-SSE-NEXT:    psllw $4, %xmm0603; X86-SSE-NEXT:    pand %xmm3, %xmm0604; X86-SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0605; X86-SSE-NEXT:    por %xmm4, %xmm0606; X86-SSE-NEXT:    paddb %xmm1, %xmm1607; X86-SSE-NEXT:    pxor %xmm3, %xmm3608; X86-SSE-NEXT:    pcmpgtb %xmm1, %xmm3609; X86-SSE-NEXT:    movdqa %xmm3, %xmm4610; X86-SSE-NEXT:    pandn %xmm0, %xmm4611; X86-SSE-NEXT:    psllw $2, %xmm0612; X86-SSE-NEXT:    pand %xmm3, %xmm0613; X86-SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0614; X86-SSE-NEXT:    por %xmm4, %xmm0615; X86-SSE-NEXT:    paddb %xmm1, %xmm1616; X86-SSE-NEXT:    pcmpgtb %xmm1, %xmm2617; X86-SSE-NEXT:    movdqa %xmm2, %xmm1618; X86-SSE-NEXT:    pandn %xmm0, %xmm1619; X86-SSE-NEXT:    paddb %xmm0, %xmm0620; X86-SSE-NEXT:    pand %xmm2, %xmm0621; X86-SSE-NEXT:    por %xmm1, %xmm0622; X86-SSE-NEXT:    retl623  %shift = shl <4 x i8> %a, %b624  ret <4 x i8> %shift625}626 627define <2 x i8> @var_shift_v2i8(<2 x i8> %a, <2 x i8> %b) nounwind {628; SSE2-LABEL: var_shift_v2i8:629; SSE2:       # %bb.0:630; SSE2-NEXT:    psllw $5, %xmm1631; SSE2-NEXT:    pxor %xmm2, %xmm2632; SSE2-NEXT:    pxor %xmm3, %xmm3633; SSE2-NEXT:    pcmpgtb %xmm1, %xmm3634; SSE2-NEXT:    movdqa %xmm3, %xmm4635; SSE2-NEXT:    pandn %xmm0, %xmm4636; SSE2-NEXT:    psllw $4, %xmm0637; SSE2-NEXT:    pand %xmm3, %xmm0638; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0639; SSE2-NEXT:    por %xmm4, %xmm0640; SSE2-NEXT:    paddb %xmm1, %xmm1641; SSE2-NEXT:    pxor %xmm3, %xmm3642; SSE2-NEXT:    pcmpgtb %xmm1, %xmm3643; SSE2-NEXT:    movdqa %xmm3, %xmm4644; SSE2-NEXT:    pandn %xmm0, %xmm4645; SSE2-NEXT:    psllw $2, %xmm0646; SSE2-NEXT:    pand %xmm3, %xmm0647; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0648; SSE2-NEXT:    por %xmm4, %xmm0649; SSE2-NEXT:    paddb %xmm1, %xmm1650; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2651; SSE2-NEXT:    movdqa %xmm2, %xmm1652; SSE2-NEXT:    pandn %xmm0, %xmm1653; SSE2-NEXT:    paddb %xmm0, %xmm0654; SSE2-NEXT:    pand %xmm2, %xmm0655; SSE2-NEXT:    por %xmm1, %xmm0656; SSE2-NEXT:    retq657;658; SSE41-LABEL: var_shift_v2i8:659; SSE41:       # %bb.0:660; SSE41-NEXT:    movdqa %xmm0, %xmm2661; SSE41-NEXT:    psllw $5, %xmm1662; SSE41-NEXT:    movdqa %xmm0, %xmm3663; SSE41-NEXT:    psllw $4, %xmm3664; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3665; SSE41-NEXT:    movdqa %xmm1, %xmm0666; SSE41-NEXT:    pblendvb %xmm0, %xmm3, %xmm2667; SSE41-NEXT:    movdqa %xmm2, %xmm3668; SSE41-NEXT:    psllw $2, %xmm3669; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3670; SSE41-NEXT:    paddb %xmm1, %xmm1671; SSE41-NEXT:    movdqa %xmm1, %xmm0672; SSE41-NEXT:    pblendvb %xmm0, %xmm3, %xmm2673; SSE41-NEXT:    movdqa %xmm2, %xmm3674; SSE41-NEXT:    paddb %xmm2, %xmm3675; SSE41-NEXT:    paddb %xmm1, %xmm1676; SSE41-NEXT:    movdqa %xmm1, %xmm0677; SSE41-NEXT:    pblendvb %xmm0, %xmm3, %xmm2678; SSE41-NEXT:    movdqa %xmm2, %xmm0679; SSE41-NEXT:    retq680;681; AVX-LABEL: var_shift_v2i8:682; AVX:       # %bb.0:683; AVX-NEXT:    vpsllw $5, %xmm1, %xmm1684; AVX-NEXT:    vpsllw $4, %xmm0, %xmm2685; AVX-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2686; AVX-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0687; AVX-NEXT:    vpsllw $2, %xmm0, %xmm2688; AVX-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2689; AVX-NEXT:    vpaddb %xmm1, %xmm1, %xmm1690; AVX-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0691; AVX-NEXT:    vpaddb %xmm0, %xmm0, %xmm2692; AVX-NEXT:    vpaddb %xmm1, %xmm1, %xmm1693; AVX-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0694; AVX-NEXT:    retq695;696; XOP-LABEL: var_shift_v2i8:697; XOP:       # %bb.0:698; XOP-NEXT:    vpshlb %xmm1, %xmm0, %xmm0699; XOP-NEXT:    retq700;701; AVX512DQ-LABEL: var_shift_v2i8:702; AVX512DQ:       # %bb.0:703; AVX512DQ-NEXT:    vpmovzxbd {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero704; AVX512DQ-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero705; AVX512DQ-NEXT:    vpsllvd %zmm1, %zmm0, %zmm0706; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0707; AVX512DQ-NEXT:    vzeroupper708; AVX512DQ-NEXT:    retq709;710; AVX512BW-LABEL: var_shift_v2i8:711; AVX512BW:       # %bb.0:712; AVX512BW-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero713; AVX512BW-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero714; AVX512BW-NEXT:    vpsllvw %zmm1, %zmm0, %zmm0715; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0716; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0717; AVX512BW-NEXT:    vzeroupper718; AVX512BW-NEXT:    retq719;720; AVX512DQVL-LABEL: var_shift_v2i8:721; AVX512DQVL:       # %bb.0:722; AVX512DQVL-NEXT:    vpmovzxbd {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero723; AVX512DQVL-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero724; AVX512DQVL-NEXT:    vpsllvd %zmm1, %zmm0, %zmm0725; AVX512DQVL-NEXT:    vpmovdb %zmm0, %xmm0726; AVX512DQVL-NEXT:    vzeroupper727; AVX512DQVL-NEXT:    retq728;729; AVX512BWVL-LABEL: var_shift_v2i8:730; AVX512BWVL:       # %bb.0:731; AVX512BWVL-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero732; AVX512BWVL-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero733; AVX512BWVL-NEXT:    vpsllvw %ymm1, %ymm0, %ymm0734; AVX512BWVL-NEXT:    vpmovwb %ymm0, %xmm0735; AVX512BWVL-NEXT:    vzeroupper736; AVX512BWVL-NEXT:    retq737;738; X86-SSE-LABEL: var_shift_v2i8:739; X86-SSE:       # %bb.0:740; X86-SSE-NEXT:    psllw $5, %xmm1741; X86-SSE-NEXT:    pxor %xmm2, %xmm2742; X86-SSE-NEXT:    pxor %xmm3, %xmm3743; X86-SSE-NEXT:    pcmpgtb %xmm1, %xmm3744; X86-SSE-NEXT:    movdqa %xmm3, %xmm4745; X86-SSE-NEXT:    pandn %xmm0, %xmm4746; X86-SSE-NEXT:    psllw $4, %xmm0747; X86-SSE-NEXT:    pand %xmm3, %xmm0748; X86-SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0749; X86-SSE-NEXT:    por %xmm4, %xmm0750; X86-SSE-NEXT:    paddb %xmm1, %xmm1751; X86-SSE-NEXT:    pxor %xmm3, %xmm3752; X86-SSE-NEXT:    pcmpgtb %xmm1, %xmm3753; X86-SSE-NEXT:    movdqa %xmm3, %xmm4754; X86-SSE-NEXT:    pandn %xmm0, %xmm4755; X86-SSE-NEXT:    psllw $2, %xmm0756; X86-SSE-NEXT:    pand %xmm3, %xmm0757; X86-SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0758; X86-SSE-NEXT:    por %xmm4, %xmm0759; X86-SSE-NEXT:    paddb %xmm1, %xmm1760; X86-SSE-NEXT:    pcmpgtb %xmm1, %xmm2761; X86-SSE-NEXT:    movdqa %xmm2, %xmm1762; X86-SSE-NEXT:    pandn %xmm0, %xmm1763; X86-SSE-NEXT:    paddb %xmm0, %xmm0764; X86-SSE-NEXT:    pand %xmm2, %xmm0765; X86-SSE-NEXT:    por %xmm1, %xmm0766; X86-SSE-NEXT:    retl767  %shift = shl <2 x i8> %a, %b768  ret <2 x i8> %shift769}770 771;772; Uniform Variable Shifts773;774 775define <2 x i32> @splatvar_shift_v2i32(<2 x i32> %a, <2 x i32> %b) nounwind {776; SSE2-LABEL: splatvar_shift_v2i32:777; SSE2:       # %bb.0:778; SSE2-NEXT:    xorps %xmm2, %xmm2779; SSE2-NEXT:    movss {{.*#+}} xmm2 = xmm1[0],xmm2[1,2,3]780; SSE2-NEXT:    pslld %xmm2, %xmm0781; SSE2-NEXT:    retq782;783; SSE41-LABEL: splatvar_shift_v2i32:784; SSE41:       # %bb.0:785; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero786; SSE41-NEXT:    pslld %xmm1, %xmm0787; SSE41-NEXT:    retq788;789; AVX-LABEL: splatvar_shift_v2i32:790; AVX:       # %bb.0:791; AVX-NEXT:    vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero792; AVX-NEXT:    vpslld %xmm1, %xmm0, %xmm0793; AVX-NEXT:    retq794;795; XOP-LABEL: splatvar_shift_v2i32:796; XOP:       # %bb.0:797; XOP-NEXT:    vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero798; XOP-NEXT:    vpslld %xmm1, %xmm0, %xmm0799; XOP-NEXT:    retq800;801; AVX512-LABEL: splatvar_shift_v2i32:802; AVX512:       # %bb.0:803; AVX512-NEXT:    vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero804; AVX512-NEXT:    vpslld %xmm1, %xmm0, %xmm0805; AVX512-NEXT:    retq806;807; AVX512VL-LABEL: splatvar_shift_v2i32:808; AVX512VL:       # %bb.0:809; AVX512VL-NEXT:    vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero810; AVX512VL-NEXT:    vpslld %xmm1, %xmm0, %xmm0811; AVX512VL-NEXT:    retq812;813; X86-SSE-LABEL: splatvar_shift_v2i32:814; X86-SSE:       # %bb.0:815; X86-SSE-NEXT:    xorps %xmm2, %xmm2816; X86-SSE-NEXT:    movss {{.*#+}} xmm2 = xmm1[0],xmm2[1,2,3]817; X86-SSE-NEXT:    pslld %xmm2, %xmm0818; X86-SSE-NEXT:    retl819  %splat = shufflevector <2 x i32> %b, <2 x i32> poison, <2 x i32> zeroinitializer820  %shift = shl <2 x i32> %a, %splat821  ret <2 x i32> %shift822}823 824define <4 x i16> @splatvar_shift_v4i16(<4 x i16> %a, <4 x i16> %b) nounwind {825; SSE2-LABEL: splatvar_shift_v4i16:826; SSE2:       # %bb.0:827; SSE2-NEXT:    pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1]828; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero829; SSE2-NEXT:    psllw %xmm1, %xmm0830; SSE2-NEXT:    retq831;832; SSE41-LABEL: splatvar_shift_v4i16:833; SSE41:       # %bb.0:834; SSE41-NEXT:    pmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero835; SSE41-NEXT:    psllw %xmm1, %xmm0836; SSE41-NEXT:    retq837;838; AVX-LABEL: splatvar_shift_v4i16:839; AVX:       # %bb.0:840; AVX-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero841; AVX-NEXT:    vpsllw %xmm1, %xmm0, %xmm0842; AVX-NEXT:    retq843;844; XOP-LABEL: splatvar_shift_v4i16:845; XOP:       # %bb.0:846; XOP-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero847; XOP-NEXT:    vpsllw %xmm1, %xmm0, %xmm0848; XOP-NEXT:    retq849;850; AVX512-LABEL: splatvar_shift_v4i16:851; AVX512:       # %bb.0:852; AVX512-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero853; AVX512-NEXT:    vpsllw %xmm1, %xmm0, %xmm0854; AVX512-NEXT:    retq855;856; AVX512VL-LABEL: splatvar_shift_v4i16:857; AVX512VL:       # %bb.0:858; AVX512VL-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero859; AVX512VL-NEXT:    vpsllw %xmm1, %xmm0, %xmm0860; AVX512VL-NEXT:    retq861;862; X86-SSE-LABEL: splatvar_shift_v4i16:863; X86-SSE:       # %bb.0:864; X86-SSE-NEXT:    pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1]865; X86-SSE-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero866; X86-SSE-NEXT:    psllw %xmm1, %xmm0867; X86-SSE-NEXT:    retl868  %splat = shufflevector <4 x i16> %b, <4 x i16> poison, <4 x i32> zeroinitializer869  %shift = shl <4 x i16> %a, %splat870  ret <4 x i16> %shift871}872 873define <2 x i16> @splatvar_shift_v2i16(<2 x i16> %a, <2 x i16> %b) nounwind {874; SSE2-LABEL: splatvar_shift_v2i16:875; SSE2:       # %bb.0:876; SSE2-NEXT:    pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1]877; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero878; SSE2-NEXT:    psllw %xmm1, %xmm0879; SSE2-NEXT:    retq880;881; SSE41-LABEL: splatvar_shift_v2i16:882; SSE41:       # %bb.0:883; SSE41-NEXT:    pmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero884; SSE41-NEXT:    psllw %xmm1, %xmm0885; SSE41-NEXT:    retq886;887; AVX-LABEL: splatvar_shift_v2i16:888; AVX:       # %bb.0:889; AVX-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero890; AVX-NEXT:    vpsllw %xmm1, %xmm0, %xmm0891; AVX-NEXT:    retq892;893; XOP-LABEL: splatvar_shift_v2i16:894; XOP:       # %bb.0:895; XOP-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero896; XOP-NEXT:    vpsllw %xmm1, %xmm0, %xmm0897; XOP-NEXT:    retq898;899; AVX512-LABEL: splatvar_shift_v2i16:900; AVX512:       # %bb.0:901; AVX512-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero902; AVX512-NEXT:    vpsllw %xmm1, %xmm0, %xmm0903; AVX512-NEXT:    retq904;905; AVX512VL-LABEL: splatvar_shift_v2i16:906; AVX512VL:       # %bb.0:907; AVX512VL-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero908; AVX512VL-NEXT:    vpsllw %xmm1, %xmm0, %xmm0909; AVX512VL-NEXT:    retq910;911; X86-SSE-LABEL: splatvar_shift_v2i16:912; X86-SSE:       # %bb.0:913; X86-SSE-NEXT:    pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1]914; X86-SSE-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero915; X86-SSE-NEXT:    psllw %xmm1, %xmm0916; X86-SSE-NEXT:    retl917  %splat = shufflevector <2 x i16> %b, <2 x i16> poison, <2 x i32> zeroinitializer918  %shift = shl <2 x i16> %a, %splat919  ret <2 x i16> %shift920}921 922define <8 x i8> @splatvar_shift_v8i8(<8 x i8> %a, <8 x i8> %b) nounwind {923; SSE2-LABEL: splatvar_shift_v8i8:924; SSE2:       # %bb.0:925; SSE2-NEXT:    pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0]926; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero927; SSE2-NEXT:    psllw %xmm1, %xmm0928; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2929; SSE2-NEXT:    psllw %xmm1, %xmm2930; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]931; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm2[0,0,0,0,4,5,6,7]932; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]933; SSE2-NEXT:    pand %xmm1, %xmm0934; SSE2-NEXT:    retq935;936; SSE41-LABEL: splatvar_shift_v8i8:937; SSE41:       # %bb.0:938; SSE41-NEXT:    pmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero939; SSE41-NEXT:    psllw %xmm1, %xmm0940; SSE41-NEXT:    pcmpeqd %xmm2, %xmm2941; SSE41-NEXT:    psllw %xmm1, %xmm2942; SSE41-NEXT:    pxor %xmm1, %xmm1943; SSE41-NEXT:    pshufb %xmm1, %xmm2944; SSE41-NEXT:    pand %xmm2, %xmm0945; SSE41-NEXT:    retq946;947; AVX1-LABEL: splatvar_shift_v8i8:948; AVX1:       # %bb.0:949; AVX1-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero950; AVX1-NEXT:    vpsllw %xmm1, %xmm0, %xmm0951; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2952; AVX1-NEXT:    vpsllw %xmm1, %xmm2, %xmm1953; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2954; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1955; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0956; AVX1-NEXT:    retq957;958; AVX2-LABEL: splatvar_shift_v8i8:959; AVX2:       # %bb.0:960; AVX2-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero961; AVX2-NEXT:    vpsllw %xmm1, %xmm0, %xmm0962; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2963; AVX2-NEXT:    vpsllw %xmm1, %xmm2, %xmm1964; AVX2-NEXT:    vpbroadcastb %xmm1, %xmm1965; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0966; AVX2-NEXT:    retq967;968; XOPAVX1-LABEL: splatvar_shift_v8i8:969; XOPAVX1:       # %bb.0:970; XOPAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]971; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]972; XOPAVX1-NEXT:    vpshlb %xmm1, %xmm0, %xmm0973; XOPAVX1-NEXT:    retq974;975; XOPAVX2-LABEL: splatvar_shift_v8i8:976; XOPAVX2:       # %bb.0:977; XOPAVX2-NEXT:    vpbroadcastb %xmm1, %xmm1978; XOPAVX2-NEXT:    vpshlb %xmm1, %xmm0, %xmm0979; XOPAVX2-NEXT:    retq980;981; AVX512DQ-LABEL: splatvar_shift_v8i8:982; AVX512DQ:       # %bb.0:983; AVX512DQ-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero984; AVX512DQ-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero985; AVX512DQ-NEXT:    vpslld %xmm1, %zmm0, %zmm0986; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0987; AVX512DQ-NEXT:    vzeroupper988; AVX512DQ-NEXT:    retq989;990; AVX512BW-LABEL: splatvar_shift_v8i8:991; AVX512BW:       # %bb.0:992; AVX512BW-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero993; AVX512BW-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero994; AVX512BW-NEXT:    vpsllw %xmm1, %ymm0, %ymm0995; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0996; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0997; AVX512BW-NEXT:    vzeroupper998; AVX512BW-NEXT:    retq999;1000; AVX512DQVL-LABEL: splatvar_shift_v8i8:1001; AVX512DQVL:       # %bb.0:1002; AVX512DQVL-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1003; AVX512DQVL-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero1004; AVX512DQVL-NEXT:    vpslld %xmm1, %zmm0, %zmm01005; AVX512DQVL-NEXT:    vpmovdb %zmm0, %xmm01006; AVX512DQVL-NEXT:    vzeroupper1007; AVX512DQVL-NEXT:    retq1008;1009; AVX512BWVL-LABEL: splatvar_shift_v8i8:1010; AVX512BWVL:       # %bb.0:1011; AVX512BWVL-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1012; AVX512BWVL-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero1013; AVX512BWVL-NEXT:    vpsllw %xmm1, %ymm0, %ymm01014; AVX512BWVL-NEXT:    vpmovwb %ymm0, %xmm01015; AVX512BWVL-NEXT:    vzeroupper1016; AVX512BWVL-NEXT:    retq1017;1018; X86-SSE-LABEL: splatvar_shift_v8i8:1019; X86-SSE:       # %bb.0:1020; X86-SSE-NEXT:    pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0]1021; X86-SSE-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1022; X86-SSE-NEXT:    psllw %xmm1, %xmm01023; X86-SSE-NEXT:    pcmpeqd %xmm2, %xmm21024; X86-SSE-NEXT:    psllw %xmm1, %xmm21025; X86-SSE-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1026; X86-SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm2[0,0,0,0,4,5,6,7]1027; X86-SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]1028; X86-SSE-NEXT:    pand %xmm1, %xmm01029; X86-SSE-NEXT:    retl1030  %splat = shufflevector <8 x i8> %b, <8 x i8> poison, <8 x i32> zeroinitializer1031  %shift = shl <8 x i8> %a, %splat1032  ret <8 x i8> %shift1033}1034 1035define <4 x i8> @splatvar_shift_v4i8(<4 x i8> %a, <4 x i8> %b) nounwind {1036; SSE2-LABEL: splatvar_shift_v4i8:1037; SSE2:       # %bb.0:1038; SSE2-NEXT:    pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0]1039; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1040; SSE2-NEXT:    psllw %xmm1, %xmm01041; SSE2-NEXT:    pcmpeqd %xmm2, %xmm21042; SSE2-NEXT:    psllw %xmm1, %xmm21043; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1044; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm2[0,0,0,0,4,5,6,7]1045; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]1046; SSE2-NEXT:    pand %xmm1, %xmm01047; SSE2-NEXT:    retq1048;1049; SSE41-LABEL: splatvar_shift_v4i8:1050; SSE41:       # %bb.0:1051; SSE41-NEXT:    pmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1052; SSE41-NEXT:    psllw %xmm1, %xmm01053; SSE41-NEXT:    pcmpeqd %xmm2, %xmm21054; SSE41-NEXT:    psllw %xmm1, %xmm21055; SSE41-NEXT:    pxor %xmm1, %xmm11056; SSE41-NEXT:    pshufb %xmm1, %xmm21057; SSE41-NEXT:    pand %xmm2, %xmm01058; SSE41-NEXT:    retq1059;1060; AVX1-LABEL: splatvar_shift_v4i8:1061; AVX1:       # %bb.0:1062; AVX1-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1063; AVX1-NEXT:    vpsllw %xmm1, %xmm0, %xmm01064; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm21065; AVX1-NEXT:    vpsllw %xmm1, %xmm2, %xmm11066; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm21067; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm11068; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm01069; AVX1-NEXT:    retq1070;1071; AVX2-LABEL: splatvar_shift_v4i8:1072; AVX2:       # %bb.0:1073; AVX2-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1074; AVX2-NEXT:    vpsllw %xmm1, %xmm0, %xmm01075; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm21076; AVX2-NEXT:    vpsllw %xmm1, %xmm2, %xmm11077; AVX2-NEXT:    vpbroadcastb %xmm1, %xmm11078; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm01079; AVX2-NEXT:    retq1080;1081; XOPAVX1-LABEL: splatvar_shift_v4i8:1082; XOPAVX1:       # %bb.0:1083; XOPAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1084; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]1085; XOPAVX1-NEXT:    vpshlb %xmm1, %xmm0, %xmm01086; XOPAVX1-NEXT:    retq1087;1088; XOPAVX2-LABEL: splatvar_shift_v4i8:1089; XOPAVX2:       # %bb.0:1090; XOPAVX2-NEXT:    vpbroadcastb %xmm1, %xmm11091; XOPAVX2-NEXT:    vpshlb %xmm1, %xmm0, %xmm01092; XOPAVX2-NEXT:    retq1093;1094; AVX512DQ-LABEL: splatvar_shift_v4i8:1095; AVX512DQ:       # %bb.0:1096; AVX512DQ-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1097; AVX512DQ-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero1098; AVX512DQ-NEXT:    vpslld %xmm1, %zmm0, %zmm01099; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm01100; AVX512DQ-NEXT:    vzeroupper1101; AVX512DQ-NEXT:    retq1102;1103; AVX512BW-LABEL: splatvar_shift_v4i8:1104; AVX512BW:       # %bb.0:1105; AVX512BW-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1106; AVX512BW-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero1107; AVX512BW-NEXT:    vpsllw %xmm1, %ymm0, %ymm01108; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm01109; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm01110; AVX512BW-NEXT:    vzeroupper1111; AVX512BW-NEXT:    retq1112;1113; AVX512DQVL-LABEL: splatvar_shift_v4i8:1114; AVX512DQVL:       # %bb.0:1115; AVX512DQVL-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1116; AVX512DQVL-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero1117; AVX512DQVL-NEXT:    vpslld %xmm1, %zmm0, %zmm01118; AVX512DQVL-NEXT:    vpmovdb %zmm0, %xmm01119; AVX512DQVL-NEXT:    vzeroupper1120; AVX512DQVL-NEXT:    retq1121;1122; AVX512BWVL-LABEL: splatvar_shift_v4i8:1123; AVX512BWVL:       # %bb.0:1124; AVX512BWVL-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1125; AVX512BWVL-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero1126; AVX512BWVL-NEXT:    vpsllw %xmm1, %ymm0, %ymm01127; AVX512BWVL-NEXT:    vpmovwb %ymm0, %xmm01128; AVX512BWVL-NEXT:    vzeroupper1129; AVX512BWVL-NEXT:    retq1130;1131; X86-SSE-LABEL: splatvar_shift_v4i8:1132; X86-SSE:       # %bb.0:1133; X86-SSE-NEXT:    pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0]1134; X86-SSE-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1135; X86-SSE-NEXT:    psllw %xmm1, %xmm01136; X86-SSE-NEXT:    pcmpeqd %xmm2, %xmm21137; X86-SSE-NEXT:    psllw %xmm1, %xmm21138; X86-SSE-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1139; X86-SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm2[0,0,0,0,4,5,6,7]1140; X86-SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]1141; X86-SSE-NEXT:    pand %xmm1, %xmm01142; X86-SSE-NEXT:    retl1143  %splat = shufflevector <4 x i8> %b, <4 x i8> poison, <4 x i32> zeroinitializer1144  %shift = shl <4 x i8> %a, %splat1145  ret <4 x i8> %shift1146}1147 1148define <2 x i8> @splatvar_shift_v2i8(<2 x i8> %a, <2 x i8> %b) nounwind {1149; SSE2-LABEL: splatvar_shift_v2i8:1150; SSE2:       # %bb.0:1151; SSE2-NEXT:    pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0]1152; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1153; SSE2-NEXT:    psllw %xmm1, %xmm01154; SSE2-NEXT:    pcmpeqd %xmm2, %xmm21155; SSE2-NEXT:    psllw %xmm1, %xmm21156; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1157; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm2[0,0,0,0,4,5,6,7]1158; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]1159; SSE2-NEXT:    pand %xmm1, %xmm01160; SSE2-NEXT:    retq1161;1162; SSE41-LABEL: splatvar_shift_v2i8:1163; SSE41:       # %bb.0:1164; SSE41-NEXT:    pmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1165; SSE41-NEXT:    psllw %xmm1, %xmm01166; SSE41-NEXT:    pcmpeqd %xmm2, %xmm21167; SSE41-NEXT:    psllw %xmm1, %xmm21168; SSE41-NEXT:    pxor %xmm1, %xmm11169; SSE41-NEXT:    pshufb %xmm1, %xmm21170; SSE41-NEXT:    pand %xmm2, %xmm01171; SSE41-NEXT:    retq1172;1173; AVX1-LABEL: splatvar_shift_v2i8:1174; AVX1:       # %bb.0:1175; AVX1-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1176; AVX1-NEXT:    vpsllw %xmm1, %xmm0, %xmm01177; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm21178; AVX1-NEXT:    vpsllw %xmm1, %xmm2, %xmm11179; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm21180; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm11181; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm01182; AVX1-NEXT:    retq1183;1184; AVX2-LABEL: splatvar_shift_v2i8:1185; AVX2:       # %bb.0:1186; AVX2-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1187; AVX2-NEXT:    vpsllw %xmm1, %xmm0, %xmm01188; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm21189; AVX2-NEXT:    vpsllw %xmm1, %xmm2, %xmm11190; AVX2-NEXT:    vpbroadcastb %xmm1, %xmm11191; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm01192; AVX2-NEXT:    retq1193;1194; XOP-LABEL: splatvar_shift_v2i8:1195; XOP:       # %bb.0:1196; XOP-NEXT:    insertq {{.*#+}} xmm1 = xmm1[0,0,2,3,4,5,6,7,u,u,u,u,u,u,u,u]1197; XOP-NEXT:    vpshlb %xmm1, %xmm0, %xmm01198; XOP-NEXT:    retq1199;1200; AVX512DQ-LABEL: splatvar_shift_v2i8:1201; AVX512DQ:       # %bb.0:1202; AVX512DQ-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1203; AVX512DQ-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero1204; AVX512DQ-NEXT:    vpslld %xmm1, %zmm0, %zmm01205; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm01206; AVX512DQ-NEXT:    vzeroupper1207; AVX512DQ-NEXT:    retq1208;1209; AVX512BW-LABEL: splatvar_shift_v2i8:1210; AVX512BW:       # %bb.0:1211; AVX512BW-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1212; AVX512BW-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero1213; AVX512BW-NEXT:    vpsllw %xmm1, %ymm0, %ymm01214; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm01215; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm01216; AVX512BW-NEXT:    vzeroupper1217; AVX512BW-NEXT:    retq1218;1219; AVX512DQVL-LABEL: splatvar_shift_v2i8:1220; AVX512DQVL:       # %bb.0:1221; AVX512DQVL-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1222; AVX512DQVL-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero1223; AVX512DQVL-NEXT:    vpslld %xmm1, %zmm0, %zmm01224; AVX512DQVL-NEXT:    vpmovdb %zmm0, %xmm01225; AVX512DQVL-NEXT:    vzeroupper1226; AVX512DQVL-NEXT:    retq1227;1228; AVX512BWVL-LABEL: splatvar_shift_v2i8:1229; AVX512BWVL:       # %bb.0:1230; AVX512BWVL-NEXT:    vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1231; AVX512BWVL-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero1232; AVX512BWVL-NEXT:    vpsllw %xmm1, %ymm0, %ymm01233; AVX512BWVL-NEXT:    vpmovwb %ymm0, %xmm01234; AVX512BWVL-NEXT:    vzeroupper1235; AVX512BWVL-NEXT:    retq1236;1237; X86-SSE-LABEL: splatvar_shift_v2i8:1238; X86-SSE:       # %bb.0:1239; X86-SSE-NEXT:    pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0]1240; X86-SSE-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1241; X86-SSE-NEXT:    psllw %xmm1, %xmm01242; X86-SSE-NEXT:    pcmpeqd %xmm2, %xmm21243; X86-SSE-NEXT:    psllw %xmm1, %xmm21244; X86-SSE-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1245; X86-SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm2[0,0,0,0,4,5,6,7]1246; X86-SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]1247; X86-SSE-NEXT:    pand %xmm1, %xmm01248; X86-SSE-NEXT:    retl1249  %splat = shufflevector <2 x i8> %b, <2 x i8> poison, <2 x i32> zeroinitializer1250  %shift = shl <2 x i8> %a, %splat1251  ret <2 x i8> %shift1252}1253 1254;1255; Constant Shifts1256;1257 1258define <2 x i32> @constant_shift_v2i32(<2 x i32> %a) nounwind {1259; SSE2-LABEL: constant_shift_v2i32:1260; SSE2:       # %bb.0:1261; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1262; SSE2-NEXT:    pslld $4, %xmm01263; SSE2-NEXT:    pslld $5, %xmm11264; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]1265; SSE2-NEXT:    retq1266;1267; SSE41-LABEL: constant_shift_v2i32:1268; SSE41:       # %bb.0:1269; SSE41-NEXT:    movdqa %xmm0, %xmm11270; SSE41-NEXT:    pslld $5, %xmm11271; SSE41-NEXT:    pslld $4, %xmm01272; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5,6,7]1273; SSE41-NEXT:    retq1274;1275; AVX1-LABEL: constant_shift_v2i32:1276; AVX1:       # %bb.0:1277; AVX1-NEXT:    vpslld $5, %xmm0, %xmm11278; AVX1-NEXT:    vpslld $4, %xmm0, %xmm01279; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5,6,7]1280; AVX1-NEXT:    retq1281;1282; AVX2-LABEL: constant_shift_v2i32:1283; AVX2:       # %bb.0:1284; AVX2-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01285; AVX2-NEXT:    retq1286;1287; XOPAVX1-LABEL: constant_shift_v2i32:1288; XOPAVX1:       # %bb.0:1289; XOPAVX1-NEXT:    vpshld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01290; XOPAVX1-NEXT:    retq1291;1292; XOPAVX2-LABEL: constant_shift_v2i32:1293; XOPAVX2:       # %bb.0:1294; XOPAVX2-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01295; XOPAVX2-NEXT:    retq1296;1297; AVX512-LABEL: constant_shift_v2i32:1298; AVX512:       # %bb.0:1299; AVX512-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01300; AVX512-NEXT:    retq1301;1302; AVX512VL-LABEL: constant_shift_v2i32:1303; AVX512VL:       # %bb.0:1304; AVX512VL-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01305; AVX512VL-NEXT:    retq1306;1307; X86-SSE-LABEL: constant_shift_v2i32:1308; X86-SSE:       # %bb.0:1309; X86-SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]1310; X86-SSE-NEXT:    pslld $4, %xmm01311; X86-SSE-NEXT:    pslld $5, %xmm11312; X86-SSE-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]1313; X86-SSE-NEXT:    retl1314  %shift = shl <2 x i32> %a, <i32 4, i32 5>1315  ret <2 x i32> %shift1316}1317 1318define <4 x i16> @constant_shift_v4i16(<4 x i16> %a) nounwind {1319; SSE-LABEL: constant_shift_v4i16:1320; SSE:       # %bb.0:1321; SSE-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [1,2,4,8,u,u,u,u]1322; SSE-NEXT:    retq1323;1324; AVX-LABEL: constant_shift_v4i16:1325; AVX:       # %bb.0:1326; AVX-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [1,2,4,8,u,u,u,u]1327; AVX-NEXT:    retq1328;1329; XOP-LABEL: constant_shift_v4i16:1330; XOP:       # %bb.0:1331; XOP-NEXT:    vpshlw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01332; XOP-NEXT:    retq1333;1334; AVX512DQ-LABEL: constant_shift_v4i16:1335; AVX512DQ:       # %bb.0:1336; AVX512DQ-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [1,2,4,8,u,u,u,u]1337; AVX512DQ-NEXT:    retq1338;1339; AVX512BW-LABEL: constant_shift_v4i16:1340; AVX512BW:       # %bb.0:1341; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01342; AVX512BW-NEXT:    vmovq {{.*#+}} xmm1 = [0,1,2,3,0,0,0,0]1343; AVX512BW-NEXT:    vpsllvw %zmm1, %zmm0, %zmm01344; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm01345; AVX512BW-NEXT:    vzeroupper1346; AVX512BW-NEXT:    retq1347;1348; AVX512DQVL-LABEL: constant_shift_v4i16:1349; AVX512DQVL:       # %bb.0:1350; AVX512DQVL-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [1,2,4,8,u,u,u,u]1351; AVX512DQVL-NEXT:    retq1352;1353; AVX512BWVL-LABEL: constant_shift_v4i16:1354; AVX512BWVL:       # %bb.0:1355; AVX512BWVL-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01356; AVX512BWVL-NEXT:    retq1357;1358; X86-SSE-LABEL: constant_shift_v4i16:1359; X86-SSE:       # %bb.0:1360; X86-SSE-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0 # [1,2,4,8,u,u,u,u]1361; X86-SSE-NEXT:    retl1362  %shift = shl <4 x i16> %a, <i16 0, i16 1, i16 2, i16 3>1363  ret <4 x i16> %shift1364}1365 1366define <2 x i16> @constant_shift_v2i16(<2 x i16> %a) nounwind {1367; SSE2-LABEL: constant_shift_v2i16:1368; SSE2:       # %bb.0:1369; SSE2-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [4,8,u,u,u,u,u,u]1370; SSE2-NEXT:    retq1371;1372; SSE41-LABEL: constant_shift_v2i16:1373; SSE41:       # %bb.0:1374; SSE41-NEXT:    movdqa %xmm0, %xmm11375; SSE41-NEXT:    psllw $3, %xmm11376; SSE41-NEXT:    psllw $2, %xmm01377; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3,4,5,6,7]1378; SSE41-NEXT:    retq1379;1380; AVX-LABEL: constant_shift_v2i16:1381; AVX:       # %bb.0:1382; AVX-NEXT:    vpsllw $3, %xmm0, %xmm11383; AVX-NEXT:    vpsllw $2, %xmm0, %xmm01384; AVX-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3,4,5,6,7]1385; AVX-NEXT:    retq1386;1387; XOP-LABEL: constant_shift_v2i16:1388; XOP:       # %bb.0:1389; XOP-NEXT:    vpshlw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01390; XOP-NEXT:    retq1391;1392; AVX512DQ-LABEL: constant_shift_v2i16:1393; AVX512DQ:       # %bb.0:1394; AVX512DQ-NEXT:    vpsllw $3, %xmm0, %xmm11395; AVX512DQ-NEXT:    vpsllw $2, %xmm0, %xmm01396; AVX512DQ-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3,4,5,6,7]1397; AVX512DQ-NEXT:    retq1398;1399; AVX512BW-LABEL: constant_shift_v2i16:1400; AVX512BW:       # %bb.0:1401; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01402; AVX512BW-NEXT:    vmovd {{.*#+}} xmm1 = [2,3,0,0,0,0,0,0]1403; AVX512BW-NEXT:    vpsllvw %zmm1, %zmm0, %zmm01404; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm01405; AVX512BW-NEXT:    vzeroupper1406; AVX512BW-NEXT:    retq1407;1408; AVX512DQVL-LABEL: constant_shift_v2i16:1409; AVX512DQVL:       # %bb.0:1410; AVX512DQVL-NEXT:    vpsllw $3, %xmm0, %xmm11411; AVX512DQVL-NEXT:    vpsllw $2, %xmm0, %xmm01412; AVX512DQVL-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3,4,5,6,7]1413; AVX512DQVL-NEXT:    retq1414;1415; AVX512BWVL-LABEL: constant_shift_v2i16:1416; AVX512BWVL:       # %bb.0:1417; AVX512BWVL-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01418; AVX512BWVL-NEXT:    retq1419;1420; X86-SSE-LABEL: constant_shift_v2i16:1421; X86-SSE:       # %bb.0:1422; X86-SSE-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0 # [4,8,u,u,u,u,u,u]1423; X86-SSE-NEXT:    retl1424  %shift = shl <2 x i16> %a, <i16 2, i16 3>1425  ret <2 x i16> %shift1426}1427 1428define <8 x i8> @constant_shift_v8i8(<8 x i8> %a) nounwind {1429; SSE2-LABEL: constant_shift_v8i8:1430; SSE2:       # %bb.0:1431; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1432; SSE2-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [1,u,2,u,4,u,8,u,16,u,32,u,64,u,128,u]1433; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01434; SSE2-NEXT:    pxor %xmm1, %xmm11435; SSE2-NEXT:    packuswb %xmm1, %xmm01436; SSE2-NEXT:    retq1437;1438; SSE41-LABEL: constant_shift_v8i8:1439; SSE41:       # %bb.0:1440; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero1441; SSE41-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [1,u,2,u,4,u,8,u,16,u,32,u,64,u,128,u]1442; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01443; SSE41-NEXT:    pxor %xmm1, %xmm11444; SSE41-NEXT:    packuswb %xmm1, %xmm01445; SSE41-NEXT:    retq1446;1447; AVX1-LABEL: constant_shift_v8i8:1448; AVX1:       # %bb.0:1449; AVX1-NEXT:    vpmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero1450; AVX1-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [1,u,2,u,4,u,8,u,16,u,32,u,64,u,128,u]1451; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01452; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm11453; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm01454; AVX1-NEXT:    retq1455;1456; AVX2-LABEL: constant_shift_v8i8:1457; AVX2:       # %bb.0:1458; AVX2-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero1459; AVX2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [1,2,4,8,16,32,64,128,u,u,u,u,u,u,u,u]1460; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01461; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm11462; AVX2-NEXT:    vpackuswb %xmm1, %xmm0, %xmm01463; AVX2-NEXT:    vzeroupper1464; AVX2-NEXT:    retq1465;1466; XOP-LABEL: constant_shift_v8i8:1467; XOP:       # %bb.0:1468; XOP-NEXT:    vpshlb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01469; XOP-NEXT:    retq1470;1471; AVX512DQ-LABEL: constant_shift_v8i8:1472; AVX512DQ:       # %bb.0:1473; AVX512DQ-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero1474; AVX512DQ-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm01475; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm01476; AVX512DQ-NEXT:    vzeroupper1477; AVX512DQ-NEXT:    retq1478;1479; AVX512BW-LABEL: constant_shift_v8i8:1480; AVX512BW:       # %bb.0:1481; AVX512BW-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]1482; AVX512BW-NEXT:    # ymm1 = mem[0,1,0,1]1483; AVX512BW-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero1484; AVX512BW-NEXT:    vpsllvw %zmm1, %zmm0, %zmm01485; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm01486; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm01487; AVX512BW-NEXT:    vzeroupper1488; AVX512BW-NEXT:    retq1489;1490; AVX512DQVL-LABEL: constant_shift_v8i8:1491; AVX512DQVL:       # %bb.0:1492; AVX512DQVL-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero1493; AVX512DQVL-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm01494; AVX512DQVL-NEXT:    vpmovdb %zmm0, %xmm01495; AVX512DQVL-NEXT:    vzeroupper1496; AVX512DQVL-NEXT:    retq1497;1498; AVX512BWVL-LABEL: constant_shift_v8i8:1499; AVX512BWVL:       # %bb.0:1500; AVX512BWVL-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero1501; AVX512BWVL-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01502; AVX512BWVL-NEXT:    vpmovwb %ymm0, %xmm01503; AVX512BWVL-NEXT:    vzeroupper1504; AVX512BWVL-NEXT:    retq1505;1506; X86-SSE-LABEL: constant_shift_v8i8:1507; X86-SSE:       # %bb.0:1508; X86-SSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1509; X86-SSE-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0 # [1,u,2,u,4,u,8,u,16,u,32,u,64,u,128,u]1510; X86-SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01511; X86-SSE-NEXT:    pxor %xmm1, %xmm11512; X86-SSE-NEXT:    packuswb %xmm1, %xmm01513; X86-SSE-NEXT:    retl1514  %shift = shl <8 x i8> %a, <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7>1515  ret <8 x i8> %shift1516}1517 1518define <4 x i8> @constant_shift_v4i8(<4 x i8> %a) nounwind {1519; SSE2-LABEL: constant_shift_v4i8:1520; SSE2:       # %bb.0:1521; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1522; SSE2-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [1,u,2,u,4,u,8,u,u,u,u,u,u,u,u,u]1523; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01524; SSE2-NEXT:    pxor %xmm1, %xmm11525; SSE2-NEXT:    packuswb %xmm1, %xmm01526; SSE2-NEXT:    retq1527;1528; SSE41-LABEL: constant_shift_v4i8:1529; SSE41:       # %bb.0:1530; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero1531; SSE41-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [1,u,2,u,4,u,8,u,u,u,u,u,u,u,u,u]1532; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01533; SSE41-NEXT:    pxor %xmm1, %xmm11534; SSE41-NEXT:    packuswb %xmm1, %xmm01535; SSE41-NEXT:    retq1536;1537; AVX1-LABEL: constant_shift_v4i8:1538; AVX1:       # %bb.0:1539; AVX1-NEXT:    vpmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero1540; AVX1-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [1,u,2,u,4,u,8,u,u,u,u,u,u,u,u,u]1541; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01542; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm11543; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm01544; AVX1-NEXT:    retq1545;1546; AVX2-LABEL: constant_shift_v4i8:1547; AVX2:       # %bb.0:1548; AVX2-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero1549; AVX2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [1,2,4,8,u,u,u,u,u,u,u,u,u,u,u,u]1550; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01551; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm11552; AVX2-NEXT:    vpackuswb %xmm1, %xmm0, %xmm01553; AVX2-NEXT:    vzeroupper1554; AVX2-NEXT:    retq1555;1556; XOP-LABEL: constant_shift_v4i8:1557; XOP:       # %bb.0:1558; XOP-NEXT:    vpshlb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01559; XOP-NEXT:    retq1560;1561; AVX512DQ-LABEL: constant_shift_v4i8:1562; AVX512DQ:       # %bb.0:1563; AVX512DQ-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero1564; AVX512DQ-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm01565; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm01566; AVX512DQ-NEXT:    vzeroupper1567; AVX512DQ-NEXT:    retq1568;1569; AVX512BW-LABEL: constant_shift_v4i8:1570; AVX512BW:       # %bb.0:1571; AVX512BW-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]1572; AVX512BW-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero1573; AVX512BW-NEXT:    vpsllvw %zmm1, %zmm0, %zmm01574; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm01575; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm01576; AVX512BW-NEXT:    vzeroupper1577; AVX512BW-NEXT:    retq1578;1579; AVX512DQVL-LABEL: constant_shift_v4i8:1580; AVX512DQVL:       # %bb.0:1581; AVX512DQVL-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero1582; AVX512DQVL-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm01583; AVX512DQVL-NEXT:    vpmovdb %zmm0, %xmm01584; AVX512DQVL-NEXT:    vzeroupper1585; AVX512DQVL-NEXT:    retq1586;1587; AVX512BWVL-LABEL: constant_shift_v4i8:1588; AVX512BWVL:       # %bb.0:1589; AVX512BWVL-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero1590; AVX512BWVL-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01591; AVX512BWVL-NEXT:    vpmovwb %ymm0, %xmm01592; AVX512BWVL-NEXT:    vzeroupper1593; AVX512BWVL-NEXT:    retq1594;1595; X86-SSE-LABEL: constant_shift_v4i8:1596; X86-SSE:       # %bb.0:1597; X86-SSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1598; X86-SSE-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0 # [1,u,2,u,4,u,8,u,u,u,u,u,u,u,u,u]1599; X86-SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01600; X86-SSE-NEXT:    pxor %xmm1, %xmm11601; X86-SSE-NEXT:    packuswb %xmm1, %xmm01602; X86-SSE-NEXT:    retl1603  %shift = shl <4 x i8> %a, <i8 0, i8 1, i8 2, i8 3>1604  ret <4 x i8> %shift1605}1606 1607define <2 x i8> @constant_shift_v2i8(<2 x i8> %a) nounwind {1608; SSE2-LABEL: constant_shift_v2i8:1609; SSE2:       # %bb.0:1610; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1611; SSE2-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [4,u,8,u,u,u,u,u,u,u,u,u,u,u,u,u]1612; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01613; SSE2-NEXT:    pxor %xmm1, %xmm11614; SSE2-NEXT:    packuswb %xmm1, %xmm01615; SSE2-NEXT:    retq1616;1617; SSE41-LABEL: constant_shift_v2i8:1618; SSE41:       # %bb.0:1619; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero1620; SSE41-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [4,u,8,u,u,u,u,u,u,u,u,u,u,u,u,u]1621; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01622; SSE41-NEXT:    pxor %xmm1, %xmm11623; SSE41-NEXT:    packuswb %xmm1, %xmm01624; SSE41-NEXT:    retq1625;1626; AVX1-LABEL: constant_shift_v2i8:1627; AVX1:       # %bb.0:1628; AVX1-NEXT:    vpmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero1629; AVX1-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [4,u,8,u,u,u,u,u,u,u,u,u,u,u,u,u]1630; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01631; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm11632; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm01633; AVX1-NEXT:    retq1634;1635; AVX2-LABEL: constant_shift_v2i8:1636; AVX2:       # %bb.0:1637; AVX2-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero1638; AVX2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [4,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]1639; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01640; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm11641; AVX2-NEXT:    vpackuswb %xmm1, %xmm0, %xmm01642; AVX2-NEXT:    vzeroupper1643; AVX2-NEXT:    retq1644;1645; XOP-LABEL: constant_shift_v2i8:1646; XOP:       # %bb.0:1647; XOP-NEXT:    vpshlb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01648; XOP-NEXT:    retq1649;1650; AVX512DQ-LABEL: constant_shift_v2i8:1651; AVX512DQ:       # %bb.0:1652; AVX512DQ-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero1653; AVX512DQ-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm01654; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm01655; AVX512DQ-NEXT:    vzeroupper1656; AVX512DQ-NEXT:    retq1657;1658; AVX512BW-LABEL: constant_shift_v2i8:1659; AVX512BW:       # %bb.0:1660; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]1661; AVX512BW-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero1662; AVX512BW-NEXT:    vpsllvw %zmm1, %zmm0, %zmm01663; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm01664; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm01665; AVX512BW-NEXT:    vzeroupper1666; AVX512BW-NEXT:    retq1667;1668; AVX512DQVL-LABEL: constant_shift_v2i8:1669; AVX512DQVL:       # %bb.0:1670; AVX512DQVL-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero1671; AVX512DQVL-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm01672; AVX512DQVL-NEXT:    vpmovdb %zmm0, %xmm01673; AVX512DQVL-NEXT:    vzeroupper1674; AVX512DQVL-NEXT:    retq1675;1676; AVX512BWVL-LABEL: constant_shift_v2i8:1677; AVX512BWVL:       # %bb.0:1678; AVX512BWVL-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero1679; AVX512BWVL-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01680; AVX512BWVL-NEXT:    vpmovwb %ymm0, %xmm01681; AVX512BWVL-NEXT:    vzeroupper1682; AVX512BWVL-NEXT:    retq1683;1684; X86-SSE-LABEL: constant_shift_v2i8:1685; X86-SSE:       # %bb.0:1686; X86-SSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1687; X86-SSE-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0 # [4,u,8,u,u,u,u,u,u,u,u,u,u,u,u,u]1688; X86-SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01689; X86-SSE-NEXT:    pxor %xmm1, %xmm11690; X86-SSE-NEXT:    packuswb %xmm1, %xmm01691; X86-SSE-NEXT:    retl1692  %shift = shl <2 x i8> %a, <i8 2, i8 3>1693  ret <2 x i8> %shift1694}1695 1696;1697; Uniform Constant Shifts1698;1699 1700define <2 x i32> @splatconstant_shift_v2i32(<2 x i32> %a) nounwind {1701; SSE-LABEL: splatconstant_shift_v2i32:1702; SSE:       # %bb.0:1703; SSE-NEXT:    pslld $5, %xmm01704; SSE-NEXT:    retq1705;1706; AVX-LABEL: splatconstant_shift_v2i32:1707; AVX:       # %bb.0:1708; AVX-NEXT:    vpslld $5, %xmm0, %xmm01709; AVX-NEXT:    retq1710;1711; XOP-LABEL: splatconstant_shift_v2i32:1712; XOP:       # %bb.0:1713; XOP-NEXT:    vpslld $5, %xmm0, %xmm01714; XOP-NEXT:    retq1715;1716; AVX512-LABEL: splatconstant_shift_v2i32:1717; AVX512:       # %bb.0:1718; AVX512-NEXT:    vpslld $5, %xmm0, %xmm01719; AVX512-NEXT:    retq1720;1721; AVX512VL-LABEL: splatconstant_shift_v2i32:1722; AVX512VL:       # %bb.0:1723; AVX512VL-NEXT:    vpslld $5, %xmm0, %xmm01724; AVX512VL-NEXT:    retq1725;1726; X86-SSE-LABEL: splatconstant_shift_v2i32:1727; X86-SSE:       # %bb.0:1728; X86-SSE-NEXT:    pslld $5, %xmm01729; X86-SSE-NEXT:    retl1730  %shift = shl <2 x i32> %a, <i32 5, i32 5>1731  ret <2 x i32> %shift1732}1733 1734define <4 x i16> @splatconstant_shift_v4i16(<4 x i16> %a) nounwind {1735; SSE-LABEL: splatconstant_shift_v4i16:1736; SSE:       # %bb.0:1737; SSE-NEXT:    psllw $3, %xmm01738; SSE-NEXT:    retq1739;1740; AVX-LABEL: splatconstant_shift_v4i16:1741; AVX:       # %bb.0:1742; AVX-NEXT:    vpsllw $3, %xmm0, %xmm01743; AVX-NEXT:    retq1744;1745; XOP-LABEL: splatconstant_shift_v4i16:1746; XOP:       # %bb.0:1747; XOP-NEXT:    vpsllw $3, %xmm0, %xmm01748; XOP-NEXT:    retq1749;1750; AVX512-LABEL: splatconstant_shift_v4i16:1751; AVX512:       # %bb.0:1752; AVX512-NEXT:    vpsllw $3, %xmm0, %xmm01753; AVX512-NEXT:    retq1754;1755; AVX512VL-LABEL: splatconstant_shift_v4i16:1756; AVX512VL:       # %bb.0:1757; AVX512VL-NEXT:    vpsllw $3, %xmm0, %xmm01758; AVX512VL-NEXT:    retq1759;1760; X86-SSE-LABEL: splatconstant_shift_v4i16:1761; X86-SSE:       # %bb.0:1762; X86-SSE-NEXT:    psllw $3, %xmm01763; X86-SSE-NEXT:    retl1764  %shift = shl <4 x i16> %a, <i16 3, i16 3, i16 3, i16 3>1765  ret <4 x i16> %shift1766}1767 1768define <2 x i16> @splatconstant_shift_v2i16(<2 x i16> %a) nounwind {1769; SSE-LABEL: splatconstant_shift_v2i16:1770; SSE:       # %bb.0:1771; SSE-NEXT:    psllw $3, %xmm01772; SSE-NEXT:    retq1773;1774; AVX-LABEL: splatconstant_shift_v2i16:1775; AVX:       # %bb.0:1776; AVX-NEXT:    vpsllw $3, %xmm0, %xmm01777; AVX-NEXT:    retq1778;1779; XOP-LABEL: splatconstant_shift_v2i16:1780; XOP:       # %bb.0:1781; XOP-NEXT:    vpsllw $3, %xmm0, %xmm01782; XOP-NEXT:    retq1783;1784; AVX512-LABEL: splatconstant_shift_v2i16:1785; AVX512:       # %bb.0:1786; AVX512-NEXT:    vpsllw $3, %xmm0, %xmm01787; AVX512-NEXT:    retq1788;1789; AVX512VL-LABEL: splatconstant_shift_v2i16:1790; AVX512VL:       # %bb.0:1791; AVX512VL-NEXT:    vpsllw $3, %xmm0, %xmm01792; AVX512VL-NEXT:    retq1793;1794; X86-SSE-LABEL: splatconstant_shift_v2i16:1795; X86-SSE:       # %bb.0:1796; X86-SSE-NEXT:    psllw $3, %xmm01797; X86-SSE-NEXT:    retl1798  %shift = shl <2 x i16> %a, <i16 3, i16 3>1799  ret <2 x i16> %shift1800}1801 1802define <8 x i8> @splatconstant_shift_v8i8(<8 x i8> %a) nounwind {1803; SSE-LABEL: splatconstant_shift_v8i8:1804; SSE:       # %bb.0:1805; SSE-NEXT:    psllw $3, %xmm01806; SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01807; SSE-NEXT:    retq1808;1809; AVX-LABEL: splatconstant_shift_v8i8:1810; AVX:       # %bb.0:1811; AVX-NEXT:    vpsllw $3, %xmm0, %xmm01812; AVX-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01813; AVX-NEXT:    retq1814;1815; XOP-LABEL: splatconstant_shift_v8i8:1816; XOP:       # %bb.0:1817; XOP-NEXT:    vpshlb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01818; XOP-NEXT:    retq1819;1820; AVX512-LABEL: splatconstant_shift_v8i8:1821; AVX512:       # %bb.0:1822; AVX512-NEXT:    vpsllw $3, %xmm0, %xmm01823; AVX512-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01824; AVX512-NEXT:    retq1825;1826; AVX512VL-LABEL: splatconstant_shift_v8i8:1827; AVX512VL:       # %bb.0:1828; AVX512VL-NEXT:    vpsllw $3, %xmm0, %xmm01829; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm01830; AVX512VL-NEXT:    retq1831;1832; X86-SSE-LABEL: splatconstant_shift_v8i8:1833; X86-SSE:       # %bb.0:1834; X86-SSE-NEXT:    psllw $3, %xmm01835; X86-SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01836; X86-SSE-NEXT:    retl1837  %shift = shl <8 x i8> %a, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3>1838  ret <8 x i8> %shift1839}1840 1841define <4 x i8> @splatconstant_shift_v4i8(<4 x i8> %a) nounwind {1842; SSE-LABEL: splatconstant_shift_v4i8:1843; SSE:       # %bb.0:1844; SSE-NEXT:    psllw $3, %xmm01845; SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01846; SSE-NEXT:    retq1847;1848; AVX-LABEL: splatconstant_shift_v4i8:1849; AVX:       # %bb.0:1850; AVX-NEXT:    vpsllw $3, %xmm0, %xmm01851; AVX-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01852; AVX-NEXT:    retq1853;1854; XOP-LABEL: splatconstant_shift_v4i8:1855; XOP:       # %bb.0:1856; XOP-NEXT:    vpshlb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01857; XOP-NEXT:    retq1858;1859; AVX512-LABEL: splatconstant_shift_v4i8:1860; AVX512:       # %bb.0:1861; AVX512-NEXT:    vpsllw $3, %xmm0, %xmm01862; AVX512-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01863; AVX512-NEXT:    retq1864;1865; AVX512VL-LABEL: splatconstant_shift_v4i8:1866; AVX512VL:       # %bb.0:1867; AVX512VL-NEXT:    vpsllw $3, %xmm0, %xmm01868; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm01869; AVX512VL-NEXT:    retq1870;1871; X86-SSE-LABEL: splatconstant_shift_v4i8:1872; X86-SSE:       # %bb.0:1873; X86-SSE-NEXT:    psllw $3, %xmm01874; X86-SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01875; X86-SSE-NEXT:    retl1876  %shift = shl <4 x i8> %a, <i8 3, i8 3, i8 3, i8 3>1877  ret <4 x i8> %shift1878}1879 1880define <2 x i8> @splatconstant_shift_v2i8(<2 x i8> %a) nounwind {1881; SSE-LABEL: splatconstant_shift_v2i8:1882; SSE:       # %bb.0:1883; SSE-NEXT:    psllw $3, %xmm01884; SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01885; SSE-NEXT:    retq1886;1887; AVX-LABEL: splatconstant_shift_v2i8:1888; AVX:       # %bb.0:1889; AVX-NEXT:    vpsllw $3, %xmm0, %xmm01890; AVX-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01891; AVX-NEXT:    retq1892;1893; XOP-LABEL: splatconstant_shift_v2i8:1894; XOP:       # %bb.0:1895; XOP-NEXT:    vpshlb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01896; XOP-NEXT:    retq1897;1898; AVX512-LABEL: splatconstant_shift_v2i8:1899; AVX512:       # %bb.0:1900; AVX512-NEXT:    vpsllw $3, %xmm0, %xmm01901; AVX512-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01902; AVX512-NEXT:    retq1903;1904; AVX512VL-LABEL: splatconstant_shift_v2i8:1905; AVX512VL:       # %bb.0:1906; AVX512VL-NEXT:    vpsllw $3, %xmm0, %xmm01907; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm01908; AVX512VL-NEXT:    retq1909;1910; X86-SSE-LABEL: splatconstant_shift_v2i8:1911; X86-SSE:       # %bb.0:1912; X86-SSE-NEXT:    psllw $3, %xmm01913; X86-SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01914; X86-SSE-NEXT:    retl1915  %shift = shl <2 x i8> %a, <i8 3, i8 3>1916  ret <2 x i8> %shift1917}1918