brintos

brintos / llvm-project-archived public Read only

0
0
Text · 112.4 KiB · 3020525 Raw
2476 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=+avx512f | FileCheck %s --check-prefixes=AVX512F7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vl | FileCheck %s --check-prefixes=AVX512VL8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw | FileCheck %s --check-prefixes=AVX512BW9; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vbmi,+avx512vbmi2 | FileCheck %s --check-prefixes=AVX512VBMI210; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw,+avx512vl | FileCheck %s --check-prefixes=AVX512VLBW11; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vbmi,+avx512vbmi2,+avx512vl | FileCheck %s --check-prefixes=AVX512VLVBMI212; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx10.1 | FileCheck %s --check-prefixes=AVX512VLVBMI213; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx | FileCheck %s --check-prefixes=XOP,XOPAVX114; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx2 | FileCheck %s --check-prefixes=XOP,XOPAVX215 16; Just one 32-bit run to make sure we do reasonable things for i64 cases.17; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefixes=X86-SSE218 19declare <2 x i64> @llvm.fshr.v2i64(<2 x i64>, <2 x i64>, <2 x i64>)20declare <4 x i32> @llvm.fshr.v4i32(<4 x i32>, <4 x i32>, <4 x i32>)21declare <8 x i16> @llvm.fshr.v8i16(<8 x i16>, <8 x i16>, <8 x i16>)22declare <16 x i8> @llvm.fshr.v16i8(<16 x i8>, <16 x i8>, <16 x i8>)23 24;25; Variable Shifts26;27 28define <2 x i64> @var_funnnel_v2i64(<2 x i64> %x, <2 x i64> %y, <2 x i64> %amt) nounwind {29; SSE2-LABEL: var_funnnel_v2i64:30; SSE2:       # %bb.0:31; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [63,63]32; SSE2-NEXT:    movdqa %xmm2, %xmm433; SSE2-NEXT:    pand %xmm3, %xmm434; SSE2-NEXT:    movdqa %xmm1, %xmm535; SSE2-NEXT:    psrlq %xmm4, %xmm536; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[2,3,2,3]37; SSE2-NEXT:    psrlq %xmm4, %xmm138; SSE2-NEXT:    shufpd {{.*#+}} xmm5 = xmm5[0],xmm1[1]39; SSE2-NEXT:    pandn %xmm3, %xmm240; SSE2-NEXT:    paddq %xmm0, %xmm041; SSE2-NEXT:    movdqa %xmm0, %xmm142; SSE2-NEXT:    psllq %xmm2, %xmm143; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[2,3,2,3]44; SSE2-NEXT:    psllq %xmm2, %xmm045; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]46; SSE2-NEXT:    orpd %xmm5, %xmm047; SSE2-NEXT:    retq48;49; SSE41-LABEL: var_funnnel_v2i64:50; SSE41:       # %bb.0:51; SSE41-NEXT:    pmovsxbq {{.*#+}} xmm3 = [63,63]52; SSE41-NEXT:    movdqa %xmm2, %xmm453; SSE41-NEXT:    pand %xmm3, %xmm454; SSE41-NEXT:    movdqa %xmm1, %xmm555; SSE41-NEXT:    psrlq %xmm4, %xmm556; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[2,3,2,3]57; SSE41-NEXT:    psrlq %xmm4, %xmm158; SSE41-NEXT:    pblendw {{.*#+}} xmm5 = xmm5[0,1,2,3],xmm1[4,5,6,7]59; SSE41-NEXT:    pandn %xmm3, %xmm260; SSE41-NEXT:    paddq %xmm0, %xmm061; SSE41-NEXT:    movdqa %xmm0, %xmm162; SSE41-NEXT:    psllq %xmm2, %xmm163; SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[2,3,2,3]64; SSE41-NEXT:    psllq %xmm2, %xmm065; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]66; SSE41-NEXT:    por %xmm5, %xmm067; SSE41-NEXT:    retq68;69; AVX1-LABEL: var_funnnel_v2i64:70; AVX1:       # %bb.0:71; AVX1-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [63,63]72; AVX1-NEXT:    vpand %xmm3, %xmm2, %xmm473; AVX1-NEXT:    vpsrlq %xmm4, %xmm1, %xmm574; AVX1-NEXT:    vpshufd {{.*#+}} xmm4 = xmm4[2,3,2,3]75; AVX1-NEXT:    vpsrlq %xmm4, %xmm1, %xmm176; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm5[0,1,2,3],xmm1[4,5,6,7]77; AVX1-NEXT:    vpandn %xmm3, %xmm2, %xmm278; AVX1-NEXT:    vpaddq %xmm0, %xmm0, %xmm079; AVX1-NEXT:    vpsllq %xmm2, %xmm0, %xmm380; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[2,3,2,3]81; AVX1-NEXT:    vpsllq %xmm2, %xmm0, %xmm082; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm3[0,1,2,3],xmm0[4,5,6,7]83; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm084; AVX1-NEXT:    retq85;86; AVX2-LABEL: var_funnnel_v2i64:87; AVX2:       # %bb.0:88; AVX2-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [63,63]89; AVX2-NEXT:    vpand %xmm3, %xmm2, %xmm490; AVX2-NEXT:    vpsrlvq %xmm4, %xmm1, %xmm191; AVX2-NEXT:    vpandn %xmm3, %xmm2, %xmm292; AVX2-NEXT:    vpaddq %xmm0, %xmm0, %xmm093; AVX2-NEXT:    vpsllvq %xmm2, %xmm0, %xmm094; AVX2-NEXT:    vpor %xmm1, %xmm0, %xmm095; AVX2-NEXT:    retq96;97; AVX512F-LABEL: var_funnnel_v2i64:98; AVX512F:       # %bb.0:99; AVX512F-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [63,63]100; AVX512F-NEXT:    vpand %xmm3, %xmm2, %xmm4101; AVX512F-NEXT:    vpsrlvq %xmm4, %xmm1, %xmm1102; AVX512F-NEXT:    vpandn %xmm3, %xmm2, %xmm2103; AVX512F-NEXT:    vpaddq %xmm0, %xmm0, %xmm0104; AVX512F-NEXT:    vpsllvq %xmm2, %xmm0, %xmm0105; AVX512F-NEXT:    vpor %xmm1, %xmm0, %xmm0106; AVX512F-NEXT:    retq107;108; AVX512VL-LABEL: var_funnnel_v2i64:109; AVX512VL:       # %bb.0:110; AVX512VL-NEXT:    vpbroadcastq {{.*#+}} xmm3 = [63,63]111; AVX512VL-NEXT:    vpand %xmm3, %xmm2, %xmm4112; AVX512VL-NEXT:    vpsrlvq %xmm4, %xmm1, %xmm1113; AVX512VL-NEXT:    vpandn %xmm3, %xmm2, %xmm2114; AVX512VL-NEXT:    vpaddq %xmm0, %xmm0, %xmm0115; AVX512VL-NEXT:    vpsllvq %xmm2, %xmm0, %xmm0116; AVX512VL-NEXT:    vpor %xmm1, %xmm0, %xmm0117; AVX512VL-NEXT:    retq118;119; AVX512BW-LABEL: var_funnnel_v2i64:120; AVX512BW:       # %bb.0:121; AVX512BW-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [63,63]122; AVX512BW-NEXT:    vpand %xmm3, %xmm2, %xmm4123; AVX512BW-NEXT:    vpsrlvq %xmm4, %xmm1, %xmm1124; AVX512BW-NEXT:    vpandn %xmm3, %xmm2, %xmm2125; AVX512BW-NEXT:    vpaddq %xmm0, %xmm0, %xmm0126; AVX512BW-NEXT:    vpsllvq %xmm2, %xmm0, %xmm0127; AVX512BW-NEXT:    vpor %xmm1, %xmm0, %xmm0128; AVX512BW-NEXT:    retq129;130; AVX512VBMI2-LABEL: var_funnnel_v2i64:131; AVX512VBMI2:       # %bb.0:132; AVX512VBMI2-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2133; AVX512VBMI2-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1134; AVX512VBMI2-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0135; AVX512VBMI2-NEXT:    vpshrdvq %zmm2, %zmm0, %zmm1136; AVX512VBMI2-NEXT:    vmovdqa %xmm1, %xmm0137; AVX512VBMI2-NEXT:    vzeroupper138; AVX512VBMI2-NEXT:    retq139;140; AVX512VLBW-LABEL: var_funnnel_v2i64:141; AVX512VLBW:       # %bb.0:142; AVX512VLBW-NEXT:    vpbroadcastq {{.*#+}} xmm3 = [63,63]143; AVX512VLBW-NEXT:    vpand %xmm3, %xmm2, %xmm4144; AVX512VLBW-NEXT:    vpsrlvq %xmm4, %xmm1, %xmm1145; AVX512VLBW-NEXT:    vpandn %xmm3, %xmm2, %xmm2146; AVX512VLBW-NEXT:    vpaddq %xmm0, %xmm0, %xmm0147; AVX512VLBW-NEXT:    vpsllvq %xmm2, %xmm0, %xmm0148; AVX512VLBW-NEXT:    vpor %xmm1, %xmm0, %xmm0149; AVX512VLBW-NEXT:    retq150;151; AVX512VLVBMI2-LABEL: var_funnnel_v2i64:152; AVX512VLVBMI2:       # %bb.0:153; AVX512VLVBMI2-NEXT:    vpshrdvq %xmm2, %xmm0, %xmm1154; AVX512VLVBMI2-NEXT:    vmovdqa %xmm1, %xmm0155; AVX512VLVBMI2-NEXT:    retq156;157; XOPAVX1-LABEL: var_funnnel_v2i64:158; XOPAVX1:       # %bb.0:159; XOPAVX1-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [63,63]160; XOPAVX1-NEXT:    vpandn %xmm3, %xmm2, %xmm4161; XOPAVX1-NEXT:    vpaddq %xmm0, %xmm0, %xmm0162; XOPAVX1-NEXT:    vpshlq %xmm4, %xmm0, %xmm0163; XOPAVX1-NEXT:    vpand %xmm3, %xmm2, %xmm2164; XOPAVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3165; XOPAVX1-NEXT:    vpsubq %xmm2, %xmm3, %xmm2166; XOPAVX1-NEXT:    vpshlq %xmm2, %xmm1, %xmm1167; XOPAVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0168; XOPAVX1-NEXT:    retq169;170; XOPAVX2-LABEL: var_funnnel_v2i64:171; XOPAVX2:       # %bb.0:172; XOPAVX2-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [63,63]173; XOPAVX2-NEXT:    vpand %xmm3, %xmm2, %xmm4174; XOPAVX2-NEXT:    vpsrlvq %xmm4, %xmm1, %xmm1175; XOPAVX2-NEXT:    vpandn %xmm3, %xmm2, %xmm2176; XOPAVX2-NEXT:    vpaddq %xmm0, %xmm0, %xmm0177; XOPAVX2-NEXT:    vpsllvq %xmm2, %xmm0, %xmm0178; XOPAVX2-NEXT:    vpor %xmm1, %xmm0, %xmm0179; XOPAVX2-NEXT:    retq180;181; X86-SSE2-LABEL: var_funnnel_v2i64:182; X86-SSE2:       # %bb.0:183; X86-SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [63,0,63,0]184; X86-SSE2-NEXT:    movdqa %xmm2, %xmm5185; X86-SSE2-NEXT:    pand %xmm4, %xmm5186; X86-SSE2-NEXT:    movdqa %xmm1, %xmm3187; X86-SSE2-NEXT:    psrlq %xmm5, %xmm3188; X86-SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[2,3,2,3]189; X86-SSE2-NEXT:    psrlq %xmm5, %xmm1190; X86-SSE2-NEXT:    shufpd {{.*#+}} xmm3 = xmm3[0],xmm1[1]191; X86-SSE2-NEXT:    pandn %xmm4, %xmm2192; X86-SSE2-NEXT:    paddq %xmm0, %xmm0193; X86-SSE2-NEXT:    movdqa %xmm0, %xmm1194; X86-SSE2-NEXT:    psllq %xmm2, %xmm1195; X86-SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[2,3,2,3]196; X86-SSE2-NEXT:    psllq %xmm2, %xmm0197; X86-SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]198; X86-SSE2-NEXT:    orpd %xmm3, %xmm0199; X86-SSE2-NEXT:    retl200  %res = call <2 x i64> @llvm.fshr.v2i64(<2 x i64> %x, <2 x i64> %y, <2 x i64> %amt)201  ret <2 x i64> %res202}203 204define <4 x i32> @var_funnnel_v4i32(<4 x i32> %x, <4 x i32> %y, <4 x i32> %amt) nounwind {205; SSE2-LABEL: var_funnnel_v4i32:206; SSE2:       # %bb.0:207; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [31,31,31,31]208; SSE2-NEXT:    movdqa %xmm2, %xmm5209; SSE2-NEXT:    pand %xmm4, %xmm5210; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm5[2,3,3,3,4,5,6,7]211; SSE2-NEXT:    movdqa %xmm1, %xmm6212; SSE2-NEXT:    psrld %xmm3, %xmm6213; SSE2-NEXT:    pshuflw {{.*#+}} xmm7 = xmm5[0,1,1,1,4,5,6,7]214; SSE2-NEXT:    movdqa %xmm1, %xmm3215; SSE2-NEXT:    psrld %xmm7, %xmm3216; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm6[0]217; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[2,3,2,3]218; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[2,3,3,3,4,5,6,7]219; SSE2-NEXT:    movdqa %xmm1, %xmm7220; SSE2-NEXT:    psrld %xmm6, %xmm7221; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]222; SSE2-NEXT:    psrld %xmm5, %xmm1223; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm1 = xmm1[1],xmm7[1]224; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,3],xmm1[0,3]225; SSE2-NEXT:    pandn %xmm4, %xmm2226; SSE2-NEXT:    pslld $23, %xmm2227; SSE2-NEXT:    paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2228; SSE2-NEXT:    cvttps2dq %xmm2, %xmm1229; SSE2-NEXT:    paddd %xmm0, %xmm0230; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]231; SSE2-NEXT:    pmuludq %xmm1, %xmm0232; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]233; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]234; SSE2-NEXT:    pmuludq %xmm2, %xmm1235; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]236; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]237; SSE2-NEXT:    por %xmm3, %xmm0238; SSE2-NEXT:    retq239;240; SSE41-LABEL: var_funnnel_v4i32:241; SSE41:       # %bb.0:242; SSE41-NEXT:    pmovsxbd {{.*#+}} xmm3 = [31,31,31,31]243; SSE41-NEXT:    movdqa %xmm2, %xmm4244; SSE41-NEXT:    pand %xmm3, %xmm4245; SSE41-NEXT:    pshuflw {{.*#+}} xmm5 = xmm4[2,3,3,3,4,5,6,7]246; SSE41-NEXT:    movdqa %xmm1, %xmm6247; SSE41-NEXT:    psrld %xmm5, %xmm6248; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[2,3,2,3]249; SSE41-NEXT:    pshuflw {{.*#+}} xmm7 = xmm5[2,3,3,3,4,5,6,7]250; SSE41-NEXT:    movdqa %xmm1, %xmm8251; SSE41-NEXT:    psrld %xmm7, %xmm8252; SSE41-NEXT:    pblendw {{.*#+}} xmm8 = xmm6[0,1,2,3],xmm8[4,5,6,7]253; SSE41-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,1,1,1,4,5,6,7]254; SSE41-NEXT:    movdqa %xmm1, %xmm6255; SSE41-NEXT:    psrld %xmm4, %xmm6256; SSE41-NEXT:    pshuflw {{.*#+}} xmm4 = xmm5[0,1,1,1,4,5,6,7]257; SSE41-NEXT:    psrld %xmm4, %xmm1258; SSE41-NEXT:    pblendw {{.*#+}} xmm6 = xmm6[0,1,2,3],xmm1[4,5,6,7]259; SSE41-NEXT:    pblendw {{.*#+}} xmm6 = xmm6[0,1],xmm8[2,3],xmm6[4,5],xmm8[6,7]260; SSE41-NEXT:    pandn %xmm3, %xmm2261; SSE41-NEXT:    pslld $23, %xmm2262; SSE41-NEXT:    paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2263; SSE41-NEXT:    cvttps2dq %xmm2, %xmm1264; SSE41-NEXT:    paddd %xmm0, %xmm0265; SSE41-NEXT:    pmulld %xmm1, %xmm0266; SSE41-NEXT:    por %xmm6, %xmm0267; SSE41-NEXT:    retq268;269; AVX1-LABEL: var_funnnel_v4i32:270; AVX1:       # %bb.0:271; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm3 = [31,31,31,31]272; AVX1-NEXT:    vpand %xmm3, %xmm2, %xmm4273; AVX1-NEXT:    vpsrldq {{.*#+}} xmm5 = xmm4[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero274; AVX1-NEXT:    vpsrld %xmm5, %xmm1, %xmm5275; AVX1-NEXT:    vpsrlq $32, %xmm4, %xmm6276; AVX1-NEXT:    vpsrld %xmm6, %xmm1, %xmm6277; AVX1-NEXT:    vpblendw {{.*#+}} xmm5 = xmm6[0,1,2,3],xmm5[4,5,6,7]278; AVX1-NEXT:    vpxor %xmm6, %xmm6, %xmm6279; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm6 = xmm4[2],xmm6[2],xmm4[3],xmm6[3]280; AVX1-NEXT:    vpsrld %xmm6, %xmm1, %xmm6281; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm4 = xmm4[0],zero,xmm4[1],zero282; AVX1-NEXT:    vpsrld %xmm4, %xmm1, %xmm1283; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm6[4,5,6,7]284; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm5[2,3],xmm1[4,5],xmm5[6,7]285; AVX1-NEXT:    vpandn %xmm3, %xmm2, %xmm2286; AVX1-NEXT:    vpslld $23, %xmm2, %xmm2287; AVX1-NEXT:    vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2288; AVX1-NEXT:    vcvttps2dq %xmm2, %xmm2289; AVX1-NEXT:    vpaddd %xmm0, %xmm0, %xmm0290; AVX1-NEXT:    vpmulld %xmm2, %xmm0, %xmm0291; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0292; AVX1-NEXT:    retq293;294; AVX2-LABEL: var_funnnel_v4i32:295; AVX2:       # %bb.0:296; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [31,31,31,31]297; AVX2-NEXT:    vpand %xmm3, %xmm2, %xmm4298; AVX2-NEXT:    vpsrlvd %xmm4, %xmm1, %xmm1299; AVX2-NEXT:    vpandn %xmm3, %xmm2, %xmm2300; AVX2-NEXT:    vpaddd %xmm0, %xmm0, %xmm0301; AVX2-NEXT:    vpsllvd %xmm2, %xmm0, %xmm0302; AVX2-NEXT:    vpor %xmm1, %xmm0, %xmm0303; AVX2-NEXT:    retq304;305; AVX512F-LABEL: var_funnnel_v4i32:306; AVX512F:       # %bb.0:307; AVX512F-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [31,31,31,31]308; AVX512F-NEXT:    vpand %xmm3, %xmm2, %xmm4309; AVX512F-NEXT:    vpsrlvd %xmm4, %xmm1, %xmm1310; AVX512F-NEXT:    vpandn %xmm3, %xmm2, %xmm2311; AVX512F-NEXT:    vpaddd %xmm0, %xmm0, %xmm0312; AVX512F-NEXT:    vpsllvd %xmm2, %xmm0, %xmm0313; AVX512F-NEXT:    vpor %xmm1, %xmm0, %xmm0314; AVX512F-NEXT:    retq315;316; AVX512VL-LABEL: var_funnnel_v4i32:317; AVX512VL:       # %bb.0:318; AVX512VL-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [31,31,31,31]319; AVX512VL-NEXT:    vpand %xmm3, %xmm2, %xmm4320; AVX512VL-NEXT:    vpsrlvd %xmm4, %xmm1, %xmm1321; AVX512VL-NEXT:    vpandn %xmm3, %xmm2, %xmm2322; AVX512VL-NEXT:    vpaddd %xmm0, %xmm0, %xmm0323; AVX512VL-NEXT:    vpsllvd %xmm2, %xmm0, %xmm0324; AVX512VL-NEXT:    vpor %xmm1, %xmm0, %xmm0325; AVX512VL-NEXT:    retq326;327; AVX512BW-LABEL: var_funnnel_v4i32:328; AVX512BW:       # %bb.0:329; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [31,31,31,31]330; AVX512BW-NEXT:    vpand %xmm3, %xmm2, %xmm4331; AVX512BW-NEXT:    vpsrlvd %xmm4, %xmm1, %xmm1332; AVX512BW-NEXT:    vpandn %xmm3, %xmm2, %xmm2333; AVX512BW-NEXT:    vpaddd %xmm0, %xmm0, %xmm0334; AVX512BW-NEXT:    vpsllvd %xmm2, %xmm0, %xmm0335; AVX512BW-NEXT:    vpor %xmm1, %xmm0, %xmm0336; AVX512BW-NEXT:    retq337;338; AVX512VBMI2-LABEL: var_funnnel_v4i32:339; AVX512VBMI2:       # %bb.0:340; AVX512VBMI2-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2341; AVX512VBMI2-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1342; AVX512VBMI2-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0343; AVX512VBMI2-NEXT:    vpshrdvd %zmm2, %zmm0, %zmm1344; AVX512VBMI2-NEXT:    vmovdqa %xmm1, %xmm0345; AVX512VBMI2-NEXT:    vzeroupper346; AVX512VBMI2-NEXT:    retq347;348; AVX512VLBW-LABEL: var_funnnel_v4i32:349; AVX512VLBW:       # %bb.0:350; AVX512VLBW-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [31,31,31,31]351; AVX512VLBW-NEXT:    vpand %xmm3, %xmm2, %xmm4352; AVX512VLBW-NEXT:    vpsrlvd %xmm4, %xmm1, %xmm1353; AVX512VLBW-NEXT:    vpandn %xmm3, %xmm2, %xmm2354; AVX512VLBW-NEXT:    vpaddd %xmm0, %xmm0, %xmm0355; AVX512VLBW-NEXT:    vpsllvd %xmm2, %xmm0, %xmm0356; AVX512VLBW-NEXT:    vpor %xmm1, %xmm0, %xmm0357; AVX512VLBW-NEXT:    retq358;359; AVX512VLVBMI2-LABEL: var_funnnel_v4i32:360; AVX512VLVBMI2:       # %bb.0:361; AVX512VLVBMI2-NEXT:    vpshrdvd %xmm2, %xmm0, %xmm1362; AVX512VLVBMI2-NEXT:    vmovdqa %xmm1, %xmm0363; AVX512VLVBMI2-NEXT:    retq364;365; XOPAVX1-LABEL: var_funnnel_v4i32:366; XOPAVX1:       # %bb.0:367; XOPAVX1-NEXT:    vbroadcastss {{.*#+}} xmm3 = [31,31,31,31]368; XOPAVX1-NEXT:    vpandn %xmm3, %xmm2, %xmm4369; XOPAVX1-NEXT:    vpaddd %xmm0, %xmm0, %xmm0370; XOPAVX1-NEXT:    vpshld %xmm4, %xmm0, %xmm0371; XOPAVX1-NEXT:    vpand %xmm3, %xmm2, %xmm2372; XOPAVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3373; XOPAVX1-NEXT:    vpsubd %xmm2, %xmm3, %xmm2374; XOPAVX1-NEXT:    vpshld %xmm2, %xmm1, %xmm1375; XOPAVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0376; XOPAVX1-NEXT:    retq377;378; XOPAVX2-LABEL: var_funnnel_v4i32:379; XOPAVX2:       # %bb.0:380; XOPAVX2-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [31,31,31,31]381; XOPAVX2-NEXT:    vpand %xmm3, %xmm2, %xmm4382; XOPAVX2-NEXT:    vpsrlvd %xmm4, %xmm1, %xmm1383; XOPAVX2-NEXT:    vpandn %xmm3, %xmm2, %xmm2384; XOPAVX2-NEXT:    vpaddd %xmm0, %xmm0, %xmm0385; XOPAVX2-NEXT:    vpsllvd %xmm2, %xmm0, %xmm0386; XOPAVX2-NEXT:    vpor %xmm1, %xmm0, %xmm0387; XOPAVX2-NEXT:    retq388;389; X86-SSE2-LABEL: var_funnnel_v4i32:390; X86-SSE2:       # %bb.0:391; X86-SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [31,31,31,31]392; X86-SSE2-NEXT:    movdqa %xmm2, %xmm5393; X86-SSE2-NEXT:    pand %xmm4, %xmm5394; X86-SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm5[2,3,3,3,4,5,6,7]395; X86-SSE2-NEXT:    movdqa %xmm1, %xmm6396; X86-SSE2-NEXT:    psrld %xmm3, %xmm6397; X86-SSE2-NEXT:    pshuflw {{.*#+}} xmm7 = xmm5[0,1,1,1,4,5,6,7]398; X86-SSE2-NEXT:    movdqa %xmm1, %xmm3399; X86-SSE2-NEXT:    psrld %xmm7, %xmm3400; X86-SSE2-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm6[0]401; X86-SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[2,3,2,3]402; X86-SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[2,3,3,3,4,5,6,7]403; X86-SSE2-NEXT:    movdqa %xmm1, %xmm7404; X86-SSE2-NEXT:    psrld %xmm6, %xmm7405; X86-SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]406; X86-SSE2-NEXT:    psrld %xmm5, %xmm1407; X86-SSE2-NEXT:    punpckhqdq {{.*#+}} xmm1 = xmm1[1],xmm7[1]408; X86-SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,3],xmm1[0,3]409; X86-SSE2-NEXT:    pandn %xmm4, %xmm2410; X86-SSE2-NEXT:    pslld $23, %xmm2411; X86-SSE2-NEXT:    paddd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm2412; X86-SSE2-NEXT:    cvttps2dq %xmm2, %xmm1413; X86-SSE2-NEXT:    paddd %xmm0, %xmm0414; X86-SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]415; X86-SSE2-NEXT:    pmuludq %xmm1, %xmm0416; X86-SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]417; X86-SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]418; X86-SSE2-NEXT:    pmuludq %xmm2, %xmm1419; X86-SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]420; X86-SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]421; X86-SSE2-NEXT:    por %xmm3, %xmm0422; X86-SSE2-NEXT:    retl423  %res = call <4 x i32> @llvm.fshr.v4i32(<4 x i32> %x, <4 x i32> %y, <4 x i32> %amt)424  ret <4 x i32> %res425}426 427define <8 x i16> @var_funnnel_v8i16(<8 x i16> %x, <8 x i16> %y, <8 x i16> %amt) nounwind {428; SSE2-LABEL: var_funnnel_v8i16:429; SSE2:       # %bb.0:430; SSE2-NEXT:    movdqa %xmm2, %xmm4431; SSE2-NEXT:    psllw $12, %xmm4432; SSE2-NEXT:    movdqa %xmm4, %xmm3433; SSE2-NEXT:    psraw $15, %xmm3434; SSE2-NEXT:    movdqa %xmm3, %xmm5435; SSE2-NEXT:    pandn %xmm1, %xmm5436; SSE2-NEXT:    psrlw $8, %xmm1437; SSE2-NEXT:    pand %xmm1, %xmm3438; SSE2-NEXT:    por %xmm5, %xmm3439; SSE2-NEXT:    paddw %xmm4, %xmm4440; SSE2-NEXT:    movdqa %xmm4, %xmm1441; SSE2-NEXT:    psraw $15, %xmm1442; SSE2-NEXT:    movdqa %xmm1, %xmm5443; SSE2-NEXT:    pandn %xmm3, %xmm5444; SSE2-NEXT:    psrlw $4, %xmm3445; SSE2-NEXT:    pand %xmm1, %xmm3446; SSE2-NEXT:    por %xmm5, %xmm3447; SSE2-NEXT:    paddw %xmm4, %xmm4448; SSE2-NEXT:    movdqa %xmm4, %xmm1449; SSE2-NEXT:    psraw $15, %xmm1450; SSE2-NEXT:    movdqa %xmm1, %xmm5451; SSE2-NEXT:    pandn %xmm3, %xmm5452; SSE2-NEXT:    psrlw $2, %xmm3453; SSE2-NEXT:    pand %xmm1, %xmm3454; SSE2-NEXT:    por %xmm5, %xmm3455; SSE2-NEXT:    paddw %xmm4, %xmm4456; SSE2-NEXT:    psraw $15, %xmm4457; SSE2-NEXT:    movdqa %xmm4, %xmm1458; SSE2-NEXT:    pandn %xmm3, %xmm1459; SSE2-NEXT:    psrlw $1, %xmm3460; SSE2-NEXT:    pand %xmm4, %xmm3461; SSE2-NEXT:    por %xmm1, %xmm3462; SSE2-NEXT:    pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2463; SSE2-NEXT:    movdqa %xmm2, %xmm1464; SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4,4,5,5,6,6,7,7]465; SSE2-NEXT:    pslld $23, %xmm1466; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [1065353216,1065353216,1065353216,1065353216]467; SSE2-NEXT:    paddd %xmm4, %xmm1468; SSE2-NEXT:    cvttps2dq %xmm1, %xmm1469; SSE2-NEXT:    pslld $16, %xmm1470; SSE2-NEXT:    psrad $16, %xmm1471; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3]472; SSE2-NEXT:    pslld $23, %xmm2473; SSE2-NEXT:    paddd %xmm4, %xmm2474; SSE2-NEXT:    cvttps2dq %xmm2, %xmm2475; SSE2-NEXT:    pslld $16, %xmm2476; SSE2-NEXT:    psrad $16, %xmm2477; SSE2-NEXT:    packssdw %xmm1, %xmm2478; SSE2-NEXT:    paddw %xmm0, %xmm0479; SSE2-NEXT:    pmullw %xmm2, %xmm0480; SSE2-NEXT:    por %xmm3, %xmm0481; SSE2-NEXT:    retq482;483; SSE41-LABEL: var_funnnel_v8i16:484; SSE41:       # %bb.0:485; SSE41-NEXT:    movdqa %xmm0, %xmm3486; SSE41-NEXT:    pmovsxbw {{.*#+}} xmm5 = [15,15,15,15,15,15,15,15]487; SSE41-NEXT:    movdqa %xmm2, %xmm4488; SSE41-NEXT:    pand %xmm5, %xmm4489; SSE41-NEXT:    psllw $4, %xmm4490; SSE41-NEXT:    movdqa %xmm2, %xmm0491; SSE41-NEXT:    psllw $12, %xmm0492; SSE41-NEXT:    por %xmm4, %xmm0493; SSE41-NEXT:    movdqa %xmm0, %xmm4494; SSE41-NEXT:    paddw %xmm0, %xmm4495; SSE41-NEXT:    movdqa %xmm1, %xmm6496; SSE41-NEXT:    psrlw $8, %xmm6497; SSE41-NEXT:    pblendvb %xmm0, %xmm6, %xmm1498; SSE41-NEXT:    movdqa %xmm1, %xmm6499; SSE41-NEXT:    psrlw $4, %xmm6500; SSE41-NEXT:    movdqa %xmm4, %xmm0501; SSE41-NEXT:    pblendvb %xmm0, %xmm6, %xmm1502; SSE41-NEXT:    movdqa %xmm1, %xmm6503; SSE41-NEXT:    psrlw $2, %xmm6504; SSE41-NEXT:    paddw %xmm4, %xmm4505; SSE41-NEXT:    movdqa %xmm4, %xmm0506; SSE41-NEXT:    pblendvb %xmm0, %xmm6, %xmm1507; SSE41-NEXT:    movdqa %xmm1, %xmm6508; SSE41-NEXT:    psrlw $1, %xmm6509; SSE41-NEXT:    paddw %xmm4, %xmm4510; SSE41-NEXT:    movdqa %xmm4, %xmm0511; SSE41-NEXT:    pblendvb %xmm0, %xmm6, %xmm1512; SSE41-NEXT:    pandn %xmm5, %xmm2513; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero514; SSE41-NEXT:    punpckhwd {{.*#+}} xmm2 = xmm2[4,4,5,5,6,6,7,7]515; SSE41-NEXT:    pslld $23, %xmm2516; SSE41-NEXT:    movdqa {{.*#+}} xmm4 = [1065353216,1065353216,1065353216,1065353216]517; SSE41-NEXT:    paddd %xmm4, %xmm2518; SSE41-NEXT:    cvttps2dq %xmm2, %xmm2519; SSE41-NEXT:    pslld $23, %xmm0520; SSE41-NEXT:    paddd %xmm4, %xmm0521; SSE41-NEXT:    cvttps2dq %xmm0, %xmm0522; SSE41-NEXT:    packusdw %xmm2, %xmm0523; SSE41-NEXT:    paddw %xmm3, %xmm3524; SSE41-NEXT:    pmullw %xmm0, %xmm3525; SSE41-NEXT:    por %xmm1, %xmm3526; SSE41-NEXT:    movdqa %xmm3, %xmm0527; SSE41-NEXT:    retq528;529; AVX1-LABEL: var_funnnel_v8i16:530; AVX1:       # %bb.0:531; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15]532; AVX1-NEXT:    vpand %xmm3, %xmm2, %xmm4533; AVX1-NEXT:    vpsllw $4, %xmm4, %xmm4534; AVX1-NEXT:    vpsllw $12, %xmm2, %xmm5535; AVX1-NEXT:    vpor %xmm5, %xmm4, %xmm4536; AVX1-NEXT:    vpaddw %xmm4, %xmm4, %xmm5537; AVX1-NEXT:    vpsrlw $8, %xmm1, %xmm6538; AVX1-NEXT:    vpblendvb %xmm4, %xmm6, %xmm1, %xmm1539; AVX1-NEXT:    vpsrlw $4, %xmm1, %xmm6540; AVX1-NEXT:    vpblendvb %xmm5, %xmm6, %xmm1, %xmm1541; AVX1-NEXT:    vpsrlw $2, %xmm1, %xmm5542; AVX1-NEXT:    vpsllw $2, %xmm4, %xmm6543; AVX1-NEXT:    vpblendvb %xmm6, %xmm5, %xmm1, %xmm1544; AVX1-NEXT:    vpsrlw $1, %xmm1, %xmm5545; AVX1-NEXT:    vpsllw $3, %xmm4, %xmm4546; AVX1-NEXT:    vpblendvb %xmm4, %xmm5, %xmm1, %xmm1547; AVX1-NEXT:    vpandn %xmm3, %xmm2, %xmm2548; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm3 = xmm2[4,4,5,5,6,6,7,7]549; AVX1-NEXT:    vpslld $23, %xmm3, %xmm3550; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm4 = [1065353216,1065353216,1065353216,1065353216]551; AVX1-NEXT:    vpaddd %xmm4, %xmm3, %xmm3552; AVX1-NEXT:    vcvttps2dq %xmm3, %xmm3553; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero554; AVX1-NEXT:    vpslld $23, %xmm2, %xmm2555; AVX1-NEXT:    vpaddd %xmm4, %xmm2, %xmm2556; AVX1-NEXT:    vcvttps2dq %xmm2, %xmm2557; AVX1-NEXT:    vpackusdw %xmm3, %xmm2, %xmm2558; AVX1-NEXT:    vpaddw %xmm0, %xmm0, %xmm0559; AVX1-NEXT:    vpmullw %xmm2, %xmm0, %xmm0560; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0561; AVX1-NEXT:    retq562;563; AVX2-LABEL: var_funnnel_v8i16:564; AVX2:       # %bb.0:565; 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],zero566; 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],zero567; AVX2-NEXT:    vpslld $16, %ymm0, %ymm0568; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7],ymm1[8],ymm0[9],ymm1[10],ymm0[11],ymm1[12],ymm0[13],ymm1[14],ymm0[15]569; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm1570; 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],zero571; AVX2-NEXT:    vpsrlvd %ymm1, %ymm0, %ymm0572; 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]573; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]574; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0575; AVX2-NEXT:    vzeroupper576; AVX2-NEXT:    retq577;578; AVX512F-LABEL: var_funnnel_v8i16:579; AVX512F:       # %bb.0:580; AVX512F-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],zero581; AVX512F-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],zero582; AVX512F-NEXT:    vpslld $16, %ymm0, %ymm0583; AVX512F-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7],ymm1[8],ymm0[9],ymm1[10],ymm0[11],ymm1[12],ymm0[13],ymm1[14],ymm0[15]584; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm1585; AVX512F-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],zero586; AVX512F-NEXT:    vpsrlvd %ymm1, %ymm0, %ymm0587; AVX512F-NEXT:    vpmovdw %zmm0, %ymm0588; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0589; AVX512F-NEXT:    vzeroupper590; AVX512F-NEXT:    retq591;592; AVX512VL-LABEL: var_funnnel_v8i16:593; AVX512VL:       # %bb.0:594; AVX512VL-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],zero595; AVX512VL-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],zero596; AVX512VL-NEXT:    vpslld $16, %ymm0, %ymm0597; AVX512VL-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7],ymm1[8],ymm0[9],ymm1[10],ymm0[11],ymm1[12],ymm0[13],ymm1[14],ymm0[15]598; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm2, %xmm1599; AVX512VL-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],zero600; AVX512VL-NEXT:    vpsrlvd %ymm1, %ymm0, %ymm0601; AVX512VL-NEXT:    vpmovdw %ymm0, %xmm0602; AVX512VL-NEXT:    vzeroupper603; AVX512VL-NEXT:    retq604;605; AVX512BW-LABEL: var_funnnel_v8i16:606; AVX512BW:       # %bb.0:607; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1608; AVX512BW-NEXT:    vpbroadcastw {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15]609; AVX512BW-NEXT:    vpand %xmm3, %xmm2, %xmm4610; AVX512BW-NEXT:    vpsrlvw %zmm4, %zmm1, %zmm1611; AVX512BW-NEXT:    vpandn %xmm3, %xmm2, %xmm2612; AVX512BW-NEXT:    vpaddw %xmm0, %xmm0, %xmm0613; AVX512BW-NEXT:    vpsllvw %zmm2, %zmm0, %zmm0614; AVX512BW-NEXT:    vpor %xmm1, %xmm0, %xmm0615; AVX512BW-NEXT:    vzeroupper616; AVX512BW-NEXT:    retq617;618; AVX512VBMI2-LABEL: var_funnnel_v8i16:619; AVX512VBMI2:       # %bb.0:620; AVX512VBMI2-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2621; AVX512VBMI2-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1622; AVX512VBMI2-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0623; AVX512VBMI2-NEXT:    vpshrdvw %zmm2, %zmm0, %zmm1624; AVX512VBMI2-NEXT:    vmovdqa %xmm1, %xmm0625; AVX512VBMI2-NEXT:    vzeroupper626; AVX512VBMI2-NEXT:    retq627;628; AVX512VLBW-LABEL: var_funnnel_v8i16:629; AVX512VLBW:       # %bb.0:630; AVX512VLBW-NEXT:    vpbroadcastw {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15]631; AVX512VLBW-NEXT:    vpand %xmm3, %xmm2, %xmm4632; AVX512VLBW-NEXT:    vpsrlvw %xmm4, %xmm1, %xmm1633; AVX512VLBW-NEXT:    vpandn %xmm3, %xmm2, %xmm2634; AVX512VLBW-NEXT:    vpaddw %xmm0, %xmm0, %xmm0635; AVX512VLBW-NEXT:    vpsllvw %xmm2, %xmm0, %xmm0636; AVX512VLBW-NEXT:    vpor %xmm1, %xmm0, %xmm0637; AVX512VLBW-NEXT:    retq638;639; AVX512VLVBMI2-LABEL: var_funnnel_v8i16:640; AVX512VLVBMI2:       # %bb.0:641; AVX512VLVBMI2-NEXT:    vpshrdvw %xmm2, %xmm0, %xmm1642; AVX512VLVBMI2-NEXT:    vmovdqa %xmm1, %xmm0643; AVX512VLVBMI2-NEXT:    retq644;645; XOPAVX1-LABEL: var_funnnel_v8i16:646; XOPAVX1:       # %bb.0:647; XOPAVX1-NEXT:    vbroadcastss {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15]648; XOPAVX1-NEXT:    vpandn %xmm3, %xmm2, %xmm4649; XOPAVX1-NEXT:    vpaddw %xmm0, %xmm0, %xmm0650; XOPAVX1-NEXT:    vpshlw %xmm4, %xmm0, %xmm0651; XOPAVX1-NEXT:    vpand %xmm3, %xmm2, %xmm2652; XOPAVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3653; XOPAVX1-NEXT:    vpsubw %xmm2, %xmm3, %xmm2654; XOPAVX1-NEXT:    vpshlw %xmm2, %xmm1, %xmm1655; XOPAVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0656; XOPAVX1-NEXT:    retq657;658; XOPAVX2-LABEL: var_funnnel_v8i16:659; XOPAVX2:       # %bb.0:660; XOPAVX2-NEXT:    vpbroadcastw {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15]661; XOPAVX2-NEXT:    vpandn %xmm3, %xmm2, %xmm4662; XOPAVX2-NEXT:    vpaddw %xmm0, %xmm0, %xmm0663; XOPAVX2-NEXT:    vpshlw %xmm4, %xmm0, %xmm0664; XOPAVX2-NEXT:    vpand %xmm3, %xmm2, %xmm2665; XOPAVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3666; XOPAVX2-NEXT:    vpsubw %xmm2, %xmm3, %xmm2667; XOPAVX2-NEXT:    vpshlw %xmm2, %xmm1, %xmm1668; XOPAVX2-NEXT:    vpor %xmm1, %xmm0, %xmm0669; XOPAVX2-NEXT:    retq670;671; X86-SSE2-LABEL: var_funnnel_v8i16:672; X86-SSE2:       # %bb.0:673; X86-SSE2-NEXT:    movdqa %xmm2, %xmm4674; X86-SSE2-NEXT:    psllw $12, %xmm4675; X86-SSE2-NEXT:    movdqa %xmm4, %xmm3676; X86-SSE2-NEXT:    psraw $15, %xmm3677; X86-SSE2-NEXT:    movdqa %xmm3, %xmm5678; X86-SSE2-NEXT:    pandn %xmm1, %xmm5679; X86-SSE2-NEXT:    psrlw $8, %xmm1680; X86-SSE2-NEXT:    pand %xmm1, %xmm3681; X86-SSE2-NEXT:    por %xmm5, %xmm3682; X86-SSE2-NEXT:    paddw %xmm4, %xmm4683; X86-SSE2-NEXT:    movdqa %xmm4, %xmm1684; X86-SSE2-NEXT:    psraw $15, %xmm1685; X86-SSE2-NEXT:    movdqa %xmm1, %xmm5686; X86-SSE2-NEXT:    pandn %xmm3, %xmm5687; X86-SSE2-NEXT:    psrlw $4, %xmm3688; X86-SSE2-NEXT:    pand %xmm1, %xmm3689; X86-SSE2-NEXT:    por %xmm5, %xmm3690; X86-SSE2-NEXT:    paddw %xmm4, %xmm4691; X86-SSE2-NEXT:    movdqa %xmm4, %xmm1692; X86-SSE2-NEXT:    psraw $15, %xmm1693; X86-SSE2-NEXT:    movdqa %xmm1, %xmm5694; X86-SSE2-NEXT:    pandn %xmm3, %xmm5695; X86-SSE2-NEXT:    psrlw $2, %xmm3696; X86-SSE2-NEXT:    pand %xmm1, %xmm3697; X86-SSE2-NEXT:    por %xmm5, %xmm3698; X86-SSE2-NEXT:    paddw %xmm4, %xmm4699; X86-SSE2-NEXT:    psraw $15, %xmm4700; X86-SSE2-NEXT:    movdqa %xmm4, %xmm1701; X86-SSE2-NEXT:    pandn %xmm3, %xmm1702; X86-SSE2-NEXT:    psrlw $1, %xmm3703; X86-SSE2-NEXT:    pand %xmm4, %xmm3704; X86-SSE2-NEXT:    por %xmm1, %xmm3705; X86-SSE2-NEXT:    pandn {{\.?LCPI[0-9]+_[0-9]+}}, %xmm2706; X86-SSE2-NEXT:    movdqa %xmm2, %xmm1707; X86-SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4,4,5,5,6,6,7,7]708; X86-SSE2-NEXT:    pslld $23, %xmm1709; X86-SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [1065353216,1065353216,1065353216,1065353216]710; X86-SSE2-NEXT:    paddd %xmm4, %xmm1711; X86-SSE2-NEXT:    cvttps2dq %xmm1, %xmm1712; X86-SSE2-NEXT:    pslld $16, %xmm1713; X86-SSE2-NEXT:    psrad $16, %xmm1714; X86-SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3]715; X86-SSE2-NEXT:    pslld $23, %xmm2716; X86-SSE2-NEXT:    paddd %xmm4, %xmm2717; X86-SSE2-NEXT:    cvttps2dq %xmm2, %xmm2718; X86-SSE2-NEXT:    pslld $16, %xmm2719; X86-SSE2-NEXT:    psrad $16, %xmm2720; X86-SSE2-NEXT:    packssdw %xmm1, %xmm2721; X86-SSE2-NEXT:    paddw %xmm0, %xmm0722; X86-SSE2-NEXT:    pmullw %xmm2, %xmm0723; X86-SSE2-NEXT:    por %xmm3, %xmm0724; X86-SSE2-NEXT:    retl725  %res = call <8 x i16> @llvm.fshr.v8i16(<8 x i16> %x, <8 x i16> %y, <8 x i16> %amt)726  ret <8 x i16> %res727}728 729define <16 x i8> @var_funnnel_v16i8(<16 x i8> %x, <16 x i8> %y, <16 x i8> %amt) nounwind {730; SSE2-LABEL: var_funnnel_v16i8:731; SSE2:       # %bb.0:732; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]733; SSE2-NEXT:    movdqa %xmm2, %xmm6734; SSE2-NEXT:    pand %xmm5, %xmm6735; SSE2-NEXT:    psllw $5, %xmm6736; SSE2-NEXT:    pxor %xmm4, %xmm4737; SSE2-NEXT:    pxor %xmm3, %xmm3738; SSE2-NEXT:    pcmpgtb %xmm6, %xmm3739; SSE2-NEXT:    movdqa %xmm3, %xmm7740; SSE2-NEXT:    pandn %xmm1, %xmm7741; SSE2-NEXT:    psrlw $4, %xmm1742; SSE2-NEXT:    pand %xmm1, %xmm3743; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3744; SSE2-NEXT:    por %xmm7, %xmm3745; SSE2-NEXT:    paddb %xmm6, %xmm6746; SSE2-NEXT:    pxor %xmm1, %xmm1747; SSE2-NEXT:    pcmpgtb %xmm6, %xmm1748; SSE2-NEXT:    movdqa %xmm1, %xmm7749; SSE2-NEXT:    pandn %xmm3, %xmm7750; SSE2-NEXT:    psrlw $2, %xmm3751; SSE2-NEXT:    pand %xmm1, %xmm3752; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3753; SSE2-NEXT:    por %xmm7, %xmm3754; SSE2-NEXT:    paddb %xmm6, %xmm6755; SSE2-NEXT:    pxor %xmm1, %xmm1756; SSE2-NEXT:    pcmpgtb %xmm6, %xmm1757; SSE2-NEXT:    movdqa %xmm1, %xmm6758; SSE2-NEXT:    pandn %xmm3, %xmm6759; SSE2-NEXT:    psrlw $1, %xmm3760; SSE2-NEXT:    pand %xmm1, %xmm3761; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3762; SSE2-NEXT:    por %xmm6, %xmm3763; SSE2-NEXT:    pandn %xmm5, %xmm2764; SSE2-NEXT:    psllw $5, %xmm2765; SSE2-NEXT:    pxor %xmm1, %xmm1766; SSE2-NEXT:    pcmpgtb %xmm2, %xmm1767; SSE2-NEXT:    paddb %xmm0, %xmm0768; SSE2-NEXT:    movdqa %xmm1, %xmm5769; SSE2-NEXT:    pandn %xmm0, %xmm5770; SSE2-NEXT:    psllw $4, %xmm0771; SSE2-NEXT:    pand %xmm1, %xmm0772; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0773; SSE2-NEXT:    por %xmm5, %xmm0774; SSE2-NEXT:    paddb %xmm2, %xmm2775; SSE2-NEXT:    pxor %xmm1, %xmm1776; SSE2-NEXT:    pcmpgtb %xmm2, %xmm1777; SSE2-NEXT:    movdqa %xmm1, %xmm5778; SSE2-NEXT:    pandn %xmm0, %xmm5779; SSE2-NEXT:    psllw $2, %xmm0780; SSE2-NEXT:    pand %xmm1, %xmm0781; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0782; SSE2-NEXT:    por %xmm5, %xmm0783; SSE2-NEXT:    paddb %xmm2, %xmm2784; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4785; SSE2-NEXT:    movdqa %xmm4, %xmm1786; SSE2-NEXT:    pandn %xmm0, %xmm1787; SSE2-NEXT:    paddb %xmm0, %xmm0788; SSE2-NEXT:    pand %xmm4, %xmm0789; SSE2-NEXT:    por %xmm1, %xmm0790; SSE2-NEXT:    por %xmm3, %xmm0791; SSE2-NEXT:    retq792;793; SSE41-LABEL: var_funnnel_v16i8:794; SSE41:       # %bb.0:795; SSE41-NEXT:    movdqa %xmm2, %xmm3796; SSE41-NEXT:    movdqa %xmm0, %xmm2797; SSE41-NEXT:    movdqa {{.*#+}} xmm5 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]798; SSE41-NEXT:    movdqa %xmm3, %xmm0799; SSE41-NEXT:    pand %xmm5, %xmm0800; SSE41-NEXT:    psllw $5, %xmm0801; SSE41-NEXT:    movdqa %xmm0, %xmm4802; SSE41-NEXT:    paddb %xmm0, %xmm4803; SSE41-NEXT:    movdqa %xmm1, %xmm6804; SSE41-NEXT:    psrlw $4, %xmm6805; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm6806; SSE41-NEXT:    pblendvb %xmm0, %xmm6, %xmm1807; SSE41-NEXT:    movdqa %xmm1, %xmm6808; SSE41-NEXT:    psrlw $2, %xmm6809; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm6810; SSE41-NEXT:    movdqa %xmm4, %xmm0811; SSE41-NEXT:    pblendvb %xmm0, %xmm6, %xmm1812; SSE41-NEXT:    movdqa %xmm1, %xmm6813; SSE41-NEXT:    psrlw $1, %xmm6814; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm6815; SSE41-NEXT:    paddb %xmm4, %xmm4816; SSE41-NEXT:    movdqa %xmm4, %xmm0817; SSE41-NEXT:    pblendvb %xmm0, %xmm6, %xmm1818; SSE41-NEXT:    pandn %xmm5, %xmm3819; SSE41-NEXT:    psllw $5, %xmm3820; SSE41-NEXT:    movdqa %xmm3, %xmm4821; SSE41-NEXT:    paddb %xmm3, %xmm4822; SSE41-NEXT:    paddb %xmm2, %xmm2823; SSE41-NEXT:    movdqa %xmm2, %xmm5824; SSE41-NEXT:    psllw $4, %xmm5825; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5826; SSE41-NEXT:    movdqa %xmm3, %xmm0827; SSE41-NEXT:    pblendvb %xmm0, %xmm5, %xmm2828; SSE41-NEXT:    movdqa %xmm2, %xmm3829; SSE41-NEXT:    psllw $2, %xmm3830; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3831; SSE41-NEXT:    movdqa %xmm4, %xmm0832; SSE41-NEXT:    pblendvb %xmm0, %xmm3, %xmm2833; SSE41-NEXT:    movdqa %xmm2, %xmm3834; SSE41-NEXT:    paddb %xmm2, %xmm3835; SSE41-NEXT:    paddb %xmm4, %xmm4836; SSE41-NEXT:    movdqa %xmm4, %xmm0837; SSE41-NEXT:    pblendvb %xmm0, %xmm3, %xmm2838; SSE41-NEXT:    por %xmm1, %xmm2839; SSE41-NEXT:    movdqa %xmm2, %xmm0840; SSE41-NEXT:    retq841;842; AVX1-LABEL: var_funnnel_v16i8:843; AVX1:       # %bb.0:844; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm3 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]845; AVX1-NEXT:    vpand %xmm3, %xmm2, %xmm4846; AVX1-NEXT:    vpsllw $5, %xmm4, %xmm4847; AVX1-NEXT:    vpaddb %xmm4, %xmm4, %xmm5848; AVX1-NEXT:    vpsrlw $4, %xmm1, %xmm6849; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm6, %xmm6850; AVX1-NEXT:    vpblendvb %xmm4, %xmm6, %xmm1, %xmm1851; AVX1-NEXT:    vpsrlw $2, %xmm1, %xmm4852; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4, %xmm4853; AVX1-NEXT:    vpblendvb %xmm5, %xmm4, %xmm1, %xmm1854; AVX1-NEXT:    vpsrlw $1, %xmm1, %xmm4855; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4, %xmm4856; AVX1-NEXT:    vpaddb %xmm5, %xmm5, %xmm5857; AVX1-NEXT:    vpblendvb %xmm5, %xmm4, %xmm1, %xmm1858; AVX1-NEXT:    vpandn %xmm3, %xmm2, %xmm2859; AVX1-NEXT:    vpsllw $5, %xmm2, %xmm2860; AVX1-NEXT:    vpaddb %xmm2, %xmm2, %xmm3861; AVX1-NEXT:    vpaddb %xmm0, %xmm0, %xmm0862; AVX1-NEXT:    vpsllw $4, %xmm0, %xmm4863; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4, %xmm4864; AVX1-NEXT:    vpblendvb %xmm2, %xmm4, %xmm0, %xmm0865; AVX1-NEXT:    vpsllw $2, %xmm0, %xmm2866; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2867; AVX1-NEXT:    vpblendvb %xmm3, %xmm2, %xmm0, %xmm0868; AVX1-NEXT:    vpaddb %xmm0, %xmm0, %xmm2869; AVX1-NEXT:    vpaddb %xmm3, %xmm3, %xmm3870; AVX1-NEXT:    vpblendvb %xmm3, %xmm2, %xmm0, %xmm0871; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0872; AVX1-NEXT:    retq873;874; AVX2-LABEL: var_funnnel_v16i8:875; AVX2:       # %bb.0:876; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm3 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]877; AVX2-NEXT:    vpand %xmm3, %xmm2, %xmm4878; AVX2-NEXT:    vpsllw $5, %xmm4, %xmm4879; AVX2-NEXT:    vpaddb %xmm4, %xmm4, %xmm5880; AVX2-NEXT:    vpsrlw $4, %xmm1, %xmm6881; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm6, %xmm6882; AVX2-NEXT:    vpblendvb %xmm4, %xmm6, %xmm1, %xmm1883; AVX2-NEXT:    vpsrlw $2, %xmm1, %xmm4884; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4, %xmm4885; AVX2-NEXT:    vpblendvb %xmm5, %xmm4, %xmm1, %xmm1886; AVX2-NEXT:    vpsrlw $1, %xmm1, %xmm4887; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4, %xmm4888; AVX2-NEXT:    vpaddb %xmm5, %xmm5, %xmm5889; AVX2-NEXT:    vpblendvb %xmm5, %xmm4, %xmm1, %xmm1890; AVX2-NEXT:    vpandn %xmm3, %xmm2, %xmm2891; AVX2-NEXT:    vpsllw $5, %xmm2, %xmm2892; AVX2-NEXT:    vpaddb %xmm2, %xmm2, %xmm3893; AVX2-NEXT:    vpaddb %xmm0, %xmm0, %xmm0894; AVX2-NEXT:    vpsllw $4, %xmm0, %xmm4895; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4, %xmm4896; AVX2-NEXT:    vpblendvb %xmm2, %xmm4, %xmm0, %xmm0897; AVX2-NEXT:    vpsllw $2, %xmm0, %xmm2898; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2899; AVX2-NEXT:    vpblendvb %xmm3, %xmm2, %xmm0, %xmm0900; AVX2-NEXT:    vpaddb %xmm0, %xmm0, %xmm2901; AVX2-NEXT:    vpaddb %xmm3, %xmm3, %xmm3902; AVX2-NEXT:    vpblendvb %xmm3, %xmm2, %xmm0, %xmm0903; AVX2-NEXT:    vpor %xmm1, %xmm0, %xmm0904; AVX2-NEXT:    retq905;906; AVX512F-LABEL: var_funnnel_v16i8:907; AVX512F:       # %bb.0:908; AVX512F-NEXT:    vpbroadcastb {{.*#+}} xmm3 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]909; AVX512F-NEXT:    vpand %xmm3, %xmm2, %xmm4910; AVX512F-NEXT:    vpmovzxbd {{.*#+}} zmm4 = xmm4[0],zero,zero,zero,xmm4[1],zero,zero,zero,xmm4[2],zero,zero,zero,xmm4[3],zero,zero,zero,xmm4[4],zero,zero,zero,xmm4[5],zero,zero,zero,xmm4[6],zero,zero,zero,xmm4[7],zero,zero,zero,xmm4[8],zero,zero,zero,xmm4[9],zero,zero,zero,xmm4[10],zero,zero,zero,xmm4[11],zero,zero,zero,xmm4[12],zero,zero,zero,xmm4[13],zero,zero,zero,xmm4[14],zero,zero,zero,xmm4[15],zero,zero,zero911; AVX512F-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,zero912; AVX512F-NEXT:    vpsrlvd %zmm4, %zmm1, %zmm1913; AVX512F-NEXT:    vpandn %xmm3, %xmm2, %xmm2914; AVX512F-NEXT:    vpmovzxbd {{.*#+}} zmm2 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero,xmm2[4],zero,zero,zero,xmm2[5],zero,zero,zero,xmm2[6],zero,zero,zero,xmm2[7],zero,zero,zero,xmm2[8],zero,zero,zero,xmm2[9],zero,zero,zero,xmm2[10],zero,zero,zero,xmm2[11],zero,zero,zero,xmm2[12],zero,zero,zero,xmm2[13],zero,zero,zero,xmm2[14],zero,zero,zero,xmm2[15],zero,zero,zero915; AVX512F-NEXT:    vpaddb %xmm0, %xmm0, %xmm0916; AVX512F-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,zero917; AVX512F-NEXT:    vpsllvd %zmm2, %zmm0, %zmm0918; AVX512F-NEXT:    vpord %zmm1, %zmm0, %zmm0919; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0920; AVX512F-NEXT:    vzeroupper921; AVX512F-NEXT:    retq922;923; AVX512VL-LABEL: var_funnnel_v16i8:924; AVX512VL:       # %bb.0:925; AVX512VL-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]926; AVX512VL-NEXT:    vpand %xmm3, %xmm2, %xmm4927; AVX512VL-NEXT:    vpmovzxbd {{.*#+}} zmm4 = xmm4[0],zero,zero,zero,xmm4[1],zero,zero,zero,xmm4[2],zero,zero,zero,xmm4[3],zero,zero,zero,xmm4[4],zero,zero,zero,xmm4[5],zero,zero,zero,xmm4[6],zero,zero,zero,xmm4[7],zero,zero,zero,xmm4[8],zero,zero,zero,xmm4[9],zero,zero,zero,xmm4[10],zero,zero,zero,xmm4[11],zero,zero,zero,xmm4[12],zero,zero,zero,xmm4[13],zero,zero,zero,xmm4[14],zero,zero,zero,xmm4[15],zero,zero,zero928; AVX512VL-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,zero929; AVX512VL-NEXT:    vpsrlvd %zmm4, %zmm1, %zmm1930; AVX512VL-NEXT:    vpandn %xmm3, %xmm2, %xmm2931; AVX512VL-NEXT:    vpmovzxbd {{.*#+}} zmm2 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero,xmm2[4],zero,zero,zero,xmm2[5],zero,zero,zero,xmm2[6],zero,zero,zero,xmm2[7],zero,zero,zero,xmm2[8],zero,zero,zero,xmm2[9],zero,zero,zero,xmm2[10],zero,zero,zero,xmm2[11],zero,zero,zero,xmm2[12],zero,zero,zero,xmm2[13],zero,zero,zero,xmm2[14],zero,zero,zero,xmm2[15],zero,zero,zero932; AVX512VL-NEXT:    vpaddb %xmm0, %xmm0, %xmm0933; AVX512VL-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,zero934; AVX512VL-NEXT:    vpsllvd %zmm2, %zmm0, %zmm0935; AVX512VL-NEXT:    vpord %zmm1, %zmm0, %zmm0936; AVX512VL-NEXT:    vpmovdb %zmm0, %xmm0937; AVX512VL-NEXT:    vzeroupper938; AVX512VL-NEXT:    retq939;940; AVX512BW-LABEL: var_funnnel_v16i8:941; AVX512BW:       # %bb.0:942; AVX512BW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2943; AVX512BW-NEXT:    vpmovzxbw {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero,xmm2[8],zero,xmm2[9],zero,xmm2[10],zero,xmm2[11],zero,xmm2[12],zero,xmm2[13],zero,xmm2[14],zero,xmm2[15],zero944; 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],zero945; 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],zero946; AVX512BW-NEXT:    vpsllw $8, %ymm0, %ymm0947; AVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm0948; AVX512BW-NEXT:    vpsrlvw %zmm2, %zmm0, %zmm0949; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0950; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0951; AVX512BW-NEXT:    vzeroupper952; AVX512BW-NEXT:    retq953;954; AVX512VBMI2-LABEL: var_funnnel_v16i8:955; AVX512VBMI2:       # %bb.0:956; AVX512VBMI2-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1957; AVX512VBMI2-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0958; AVX512VBMI2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,64,1,65,2,66,3,67,4,68,5,69,6,70,7,71,8,72,9,73,10,74,11,75,12,76,13,77,14,78,15,79]959; AVX512VBMI2-NEXT:    vpermt2b %zmm0, %zmm3, %zmm1960; AVX512VBMI2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm0961; AVX512VBMI2-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],zero962; AVX512VBMI2-NEXT:    vpsrlvw %zmm0, %zmm1, %zmm0963; AVX512VBMI2-NEXT:    vpmovwb %zmm0, %ymm0964; AVX512VBMI2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0965; AVX512VBMI2-NEXT:    vzeroupper966; AVX512VBMI2-NEXT:    retq967;968; AVX512VLBW-LABEL: var_funnnel_v16i8:969; AVX512VLBW:       # %bb.0:970; AVX512VLBW-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],zero971; AVX512VLBW-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],zero972; AVX512VLBW-NEXT:    vpsllw $8, %ymm0, %ymm0973; AVX512VLBW-NEXT:    vpor %ymm1, %ymm0, %ymm0974; AVX512VLBW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm2, %xmm1975; AVX512VLBW-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],zero976; AVX512VLBW-NEXT:    vpsrlvw %ymm1, %ymm0, %ymm0977; AVX512VLBW-NEXT:    vpmovwb %ymm0, %xmm0978; AVX512VLBW-NEXT:    vzeroupper979; AVX512VLBW-NEXT:    retq980;981; AVX512VLVBMI2-LABEL: var_funnnel_v16i8:982; AVX512VLVBMI2:       # %bb.0:983; AVX512VLVBMI2-NEXT:    # kill: def $xmm1 killed $xmm1 def $ymm1984; AVX512VLVBMI2-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0985; AVX512VLVBMI2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,32,1,33,2,34,3,35,4,36,5,37,6,38,7,39,8,40,9,41,10,42,11,43,12,44,13,45,14,46,15,47]986; AVX512VLVBMI2-NEXT:    vpermi2b %ymm0, %ymm1, %ymm3987; AVX512VLVBMI2-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm2, %xmm0988; AVX512VLVBMI2-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],zero989; AVX512VLVBMI2-NEXT:    vpsrlvw %ymm0, %ymm3, %ymm0990; AVX512VLVBMI2-NEXT:    vpmovwb %ymm0, %xmm0991; AVX512VLVBMI2-NEXT:    vzeroupper992; AVX512VLVBMI2-NEXT:    retq993;994; XOPAVX1-LABEL: var_funnnel_v16i8:995; XOPAVX1:       # %bb.0:996; XOPAVX1-NEXT:    vbroadcastss {{.*#+}} xmm3 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]997; XOPAVX1-NEXT:    vpandn %xmm3, %xmm2, %xmm4998; XOPAVX1-NEXT:    vpaddb %xmm0, %xmm0, %xmm0999; XOPAVX1-NEXT:    vpshlb %xmm4, %xmm0, %xmm01000; XOPAVX1-NEXT:    vpand %xmm3, %xmm2, %xmm21001; XOPAVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm31002; XOPAVX1-NEXT:    vpsubb %xmm2, %xmm3, %xmm21003; XOPAVX1-NEXT:    vpshlb %xmm2, %xmm1, %xmm11004; XOPAVX1-NEXT:    vpor %xmm1, %xmm0, %xmm01005; XOPAVX1-NEXT:    retq1006;1007; XOPAVX2-LABEL: var_funnnel_v16i8:1008; XOPAVX2:       # %bb.0:1009; XOPAVX2-NEXT:    vpbroadcastb {{.*#+}} xmm3 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]1010; XOPAVX2-NEXT:    vpandn %xmm3, %xmm2, %xmm41011; XOPAVX2-NEXT:    vpaddb %xmm0, %xmm0, %xmm01012; XOPAVX2-NEXT:    vpshlb %xmm4, %xmm0, %xmm01013; XOPAVX2-NEXT:    vpand %xmm3, %xmm2, %xmm21014; XOPAVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm31015; XOPAVX2-NEXT:    vpsubb %xmm2, %xmm3, %xmm21016; XOPAVX2-NEXT:    vpshlb %xmm2, %xmm1, %xmm11017; XOPAVX2-NEXT:    vpor %xmm1, %xmm0, %xmm01018; XOPAVX2-NEXT:    retq1019;1020; X86-SSE2-LABEL: var_funnnel_v16i8:1021; X86-SSE2:       # %bb.0:1022; X86-SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]1023; X86-SSE2-NEXT:    movdqa %xmm2, %xmm61024; X86-SSE2-NEXT:    pand %xmm5, %xmm61025; X86-SSE2-NEXT:    psllw $5, %xmm61026; X86-SSE2-NEXT:    pxor %xmm4, %xmm41027; X86-SSE2-NEXT:    pxor %xmm3, %xmm31028; X86-SSE2-NEXT:    pcmpgtb %xmm6, %xmm31029; X86-SSE2-NEXT:    movdqa %xmm3, %xmm71030; X86-SSE2-NEXT:    pandn %xmm1, %xmm71031; X86-SSE2-NEXT:    psrlw $4, %xmm11032; X86-SSE2-NEXT:    pand %xmm1, %xmm31033; X86-SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm31034; X86-SSE2-NEXT:    por %xmm7, %xmm31035; X86-SSE2-NEXT:    paddb %xmm6, %xmm61036; X86-SSE2-NEXT:    pxor %xmm1, %xmm11037; X86-SSE2-NEXT:    pcmpgtb %xmm6, %xmm11038; X86-SSE2-NEXT:    movdqa %xmm1, %xmm71039; X86-SSE2-NEXT:    pandn %xmm3, %xmm71040; X86-SSE2-NEXT:    psrlw $2, %xmm31041; X86-SSE2-NEXT:    pand %xmm1, %xmm31042; X86-SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm31043; X86-SSE2-NEXT:    por %xmm7, %xmm31044; X86-SSE2-NEXT:    paddb %xmm6, %xmm61045; X86-SSE2-NEXT:    pxor %xmm1, %xmm11046; X86-SSE2-NEXT:    pcmpgtb %xmm6, %xmm11047; X86-SSE2-NEXT:    movdqa %xmm1, %xmm61048; X86-SSE2-NEXT:    pandn %xmm3, %xmm61049; X86-SSE2-NEXT:    psrlw $1, %xmm31050; X86-SSE2-NEXT:    pand %xmm1, %xmm31051; X86-SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm31052; X86-SSE2-NEXT:    por %xmm6, %xmm31053; X86-SSE2-NEXT:    pandn %xmm5, %xmm21054; X86-SSE2-NEXT:    psllw $5, %xmm21055; X86-SSE2-NEXT:    pxor %xmm1, %xmm11056; X86-SSE2-NEXT:    pcmpgtb %xmm2, %xmm11057; X86-SSE2-NEXT:    paddb %xmm0, %xmm01058; X86-SSE2-NEXT:    movdqa %xmm1, %xmm51059; X86-SSE2-NEXT:    pandn %xmm0, %xmm51060; X86-SSE2-NEXT:    psllw $4, %xmm01061; X86-SSE2-NEXT:    pand %xmm1, %xmm01062; X86-SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01063; X86-SSE2-NEXT:    por %xmm5, %xmm01064; X86-SSE2-NEXT:    paddb %xmm2, %xmm21065; X86-SSE2-NEXT:    pxor %xmm1, %xmm11066; X86-SSE2-NEXT:    pcmpgtb %xmm2, %xmm11067; X86-SSE2-NEXT:    movdqa %xmm1, %xmm51068; X86-SSE2-NEXT:    pandn %xmm0, %xmm51069; X86-SSE2-NEXT:    psllw $2, %xmm01070; X86-SSE2-NEXT:    pand %xmm1, %xmm01071; X86-SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01072; X86-SSE2-NEXT:    por %xmm5, %xmm01073; X86-SSE2-NEXT:    paddb %xmm2, %xmm21074; X86-SSE2-NEXT:    pcmpgtb %xmm2, %xmm41075; X86-SSE2-NEXT:    movdqa %xmm4, %xmm11076; X86-SSE2-NEXT:    pandn %xmm0, %xmm11077; X86-SSE2-NEXT:    paddb %xmm0, %xmm01078; X86-SSE2-NEXT:    pand %xmm4, %xmm01079; X86-SSE2-NEXT:    por %xmm1, %xmm01080; X86-SSE2-NEXT:    por %xmm3, %xmm01081; X86-SSE2-NEXT:    retl1082  %res = call <16 x i8> @llvm.fshr.v16i8(<16 x i8> %x, <16 x i8> %y, <16 x i8> %amt)1083  ret <16 x i8> %res1084}1085 1086;1087; Uniform Variable Shifts1088;1089 1090define <2 x i64> @splatvar_funnnel_v2i64(<2 x i64> %x, <2 x i64> %y, <2 x i64> %amt) nounwind {1091; SSE2-LABEL: splatvar_funnnel_v2i64:1092; SSE2:       # %bb.0:1093; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [63,63]1094; SSE2-NEXT:    movdqa %xmm2, %xmm41095; SSE2-NEXT:    pand %xmm3, %xmm41096; SSE2-NEXT:    psrlq %xmm4, %xmm11097; SSE2-NEXT:    pandn %xmm3, %xmm21098; SSE2-NEXT:    paddq %xmm0, %xmm01099; SSE2-NEXT:    psllq %xmm2, %xmm01100; SSE2-NEXT:    por %xmm1, %xmm01101; SSE2-NEXT:    retq1102;1103; SSE41-LABEL: splatvar_funnnel_v2i64:1104; SSE41:       # %bb.0:1105; SSE41-NEXT:    pmovsxbq {{.*#+}} xmm3 = [63,63]1106; SSE41-NEXT:    movdqa %xmm2, %xmm41107; SSE41-NEXT:    pand %xmm3, %xmm41108; SSE41-NEXT:    psrlq %xmm4, %xmm11109; SSE41-NEXT:    pandn %xmm3, %xmm21110; SSE41-NEXT:    paddq %xmm0, %xmm01111; SSE41-NEXT:    psllq %xmm2, %xmm01112; SSE41-NEXT:    por %xmm1, %xmm01113; SSE41-NEXT:    retq1114;1115; AVX-LABEL: splatvar_funnnel_v2i64:1116; AVX:       # %bb.0:1117; AVX-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [63,63]1118; AVX-NEXT:    vpand %xmm3, %xmm2, %xmm41119; AVX-NEXT:    vpsrlq %xmm4, %xmm1, %xmm11120; AVX-NEXT:    vpandn %xmm3, %xmm2, %xmm21121; AVX-NEXT:    vpaddq %xmm0, %xmm0, %xmm01122; AVX-NEXT:    vpsllq %xmm2, %xmm0, %xmm01123; AVX-NEXT:    vpor %xmm1, %xmm0, %xmm01124; AVX-NEXT:    retq1125;1126; AVX512F-LABEL: splatvar_funnnel_v2i64:1127; AVX512F:       # %bb.0:1128; AVX512F-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [63,63]1129; AVX512F-NEXT:    vpand %xmm3, %xmm2, %xmm41130; AVX512F-NEXT:    vpsrlq %xmm4, %xmm1, %xmm11131; AVX512F-NEXT:    vpandn %xmm3, %xmm2, %xmm21132; AVX512F-NEXT:    vpaddq %xmm0, %xmm0, %xmm01133; AVX512F-NEXT:    vpsllq %xmm2, %xmm0, %xmm01134; AVX512F-NEXT:    vpor %xmm1, %xmm0, %xmm01135; AVX512F-NEXT:    retq1136;1137; AVX512VL-LABEL: splatvar_funnnel_v2i64:1138; AVX512VL:       # %bb.0:1139; AVX512VL-NEXT:    vpbroadcastq {{.*#+}} xmm3 = [63,63]1140; AVX512VL-NEXT:    vpand %xmm3, %xmm2, %xmm41141; AVX512VL-NEXT:    vpsrlq %xmm4, %xmm1, %xmm11142; AVX512VL-NEXT:    vpandn %xmm3, %xmm2, %xmm21143; AVX512VL-NEXT:    vpaddq %xmm0, %xmm0, %xmm01144; AVX512VL-NEXT:    vpsllq %xmm2, %xmm0, %xmm01145; AVX512VL-NEXT:    vpor %xmm1, %xmm0, %xmm01146; AVX512VL-NEXT:    retq1147;1148; AVX512BW-LABEL: splatvar_funnnel_v2i64:1149; AVX512BW:       # %bb.0:1150; AVX512BW-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [63,63]1151; AVX512BW-NEXT:    vpand %xmm3, %xmm2, %xmm41152; AVX512BW-NEXT:    vpsrlq %xmm4, %xmm1, %xmm11153; AVX512BW-NEXT:    vpandn %xmm3, %xmm2, %xmm21154; AVX512BW-NEXT:    vpaddq %xmm0, %xmm0, %xmm01155; AVX512BW-NEXT:    vpsllq %xmm2, %xmm0, %xmm01156; AVX512BW-NEXT:    vpor %xmm1, %xmm0, %xmm01157; AVX512BW-NEXT:    retq1158;1159; AVX512VBMI2-LABEL: splatvar_funnnel_v2i64:1160; AVX512VBMI2:       # %bb.0:1161; AVX512VBMI2-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm11162; AVX512VBMI2-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01163; AVX512VBMI2-NEXT:    vpbroadcastq %xmm2, %xmm21164; AVX512VBMI2-NEXT:    vpshrdvq %zmm2, %zmm0, %zmm11165; AVX512VBMI2-NEXT:    vmovdqa %xmm1, %xmm01166; AVX512VBMI2-NEXT:    vzeroupper1167; AVX512VBMI2-NEXT:    retq1168;1169; AVX512VLBW-LABEL: splatvar_funnnel_v2i64:1170; AVX512VLBW:       # %bb.0:1171; AVX512VLBW-NEXT:    vpbroadcastq {{.*#+}} xmm3 = [63,63]1172; AVX512VLBW-NEXT:    vpand %xmm3, %xmm2, %xmm41173; AVX512VLBW-NEXT:    vpsrlq %xmm4, %xmm1, %xmm11174; AVX512VLBW-NEXT:    vpandn %xmm3, %xmm2, %xmm21175; AVX512VLBW-NEXT:    vpaddq %xmm0, %xmm0, %xmm01176; AVX512VLBW-NEXT:    vpsllq %xmm2, %xmm0, %xmm01177; AVX512VLBW-NEXT:    vpor %xmm1, %xmm0, %xmm01178; AVX512VLBW-NEXT:    retq1179;1180; AVX512VLVBMI2-LABEL: splatvar_funnnel_v2i64:1181; AVX512VLVBMI2:       # %bb.0:1182; AVX512VLVBMI2-NEXT:    vpbroadcastq %xmm2, %xmm21183; AVX512VLVBMI2-NEXT:    vpshrdvq %xmm2, %xmm0, %xmm11184; AVX512VLVBMI2-NEXT:    vmovdqa %xmm1, %xmm01185; AVX512VLVBMI2-NEXT:    retq1186;1187; XOP-LABEL: splatvar_funnnel_v2i64:1188; XOP:       # %bb.0:1189; XOP-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [63,63]1190; XOP-NEXT:    vpand %xmm3, %xmm2, %xmm41191; XOP-NEXT:    vpsrlq %xmm4, %xmm1, %xmm11192; XOP-NEXT:    vpandn %xmm3, %xmm2, %xmm21193; XOP-NEXT:    vpaddq %xmm0, %xmm0, %xmm01194; XOP-NEXT:    vpsllq %xmm2, %xmm0, %xmm01195; XOP-NEXT:    vpor %xmm1, %xmm0, %xmm01196; XOP-NEXT:    retq1197;1198; X86-SSE2-LABEL: splatvar_funnnel_v2i64:1199; X86-SSE2:       # %bb.0:1200; X86-SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [63,0,63,0]1201; X86-SSE2-NEXT:    movdqa %xmm2, %xmm41202; X86-SSE2-NEXT:    pand %xmm3, %xmm41203; X86-SSE2-NEXT:    psrlq %xmm4, %xmm11204; X86-SSE2-NEXT:    pandn %xmm3, %xmm21205; X86-SSE2-NEXT:    paddq %xmm0, %xmm01206; X86-SSE2-NEXT:    psllq %xmm2, %xmm01207; X86-SSE2-NEXT:    por %xmm1, %xmm01208; X86-SSE2-NEXT:    retl1209  %splat = shufflevector <2 x i64> %amt, <2 x i64> undef, <2 x i32> zeroinitializer1210  %res = call <2 x i64> @llvm.fshr.v2i64(<2 x i64> %x, <2 x i64> %y, <2 x i64> %splat)1211  ret <2 x i64> %res1212}1213 1214define <4 x i32> @splatvar_funnnel_v4i32(<4 x i32> %x, <4 x i32> %y, <4 x i32> %amt) nounwind {1215; SSE-LABEL: splatvar_funnnel_v4i32:1216; SSE:       # %bb.0:1217; SSE-NEXT:    movdqa %xmm1, %xmm31218; SSE-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]1219; SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm21220; SSE-NEXT:    psrlq %xmm2, %xmm31221; SSE-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]1222; SSE-NEXT:    psrlq %xmm2, %xmm11223; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,2],xmm3[0,2]1224; SSE-NEXT:    movaps %xmm1, %xmm01225; SSE-NEXT:    retq1226;1227; AVX-LABEL: splatvar_funnnel_v4i32:1228; AVX:       # %bb.0:1229; AVX-NEXT:    vpunpckhdq {{.*#+}} xmm3 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]1230; AVX-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21231; AVX-NEXT:    vpsrlq %xmm2, %xmm3, %xmm31232; AVX-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]1233; AVX-NEXT:    vpsrlq %xmm2, %xmm0, %xmm01234; AVX-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2]1235; AVX-NEXT:    retq1236;1237; AVX512F-LABEL: splatvar_funnnel_v4i32:1238; AVX512F:       # %bb.0:1239; AVX512F-NEXT:    vpunpckhdq {{.*#+}} xmm3 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]1240; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21241; AVX512F-NEXT:    vpsrlq %xmm2, %xmm3, %xmm31242; AVX512F-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]1243; AVX512F-NEXT:    vpsrlq %xmm2, %xmm0, %xmm01244; AVX512F-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2]1245; AVX512F-NEXT:    retq1246;1247; AVX512VL-LABEL: splatvar_funnnel_v4i32:1248; AVX512VL:       # %bb.0:1249; AVX512VL-NEXT:    vpunpckhdq {{.*#+}} xmm3 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]1250; AVX512VL-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]1251; AVX512VL-NEXT:    vinserti128 $1, %xmm3, %ymm0, %ymm01252; AVX512VL-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm11253; AVX512VL-NEXT:    vpsrlq %xmm1, %ymm0, %ymm01254; AVX512VL-NEXT:    vpmovqd %ymm0, %xmm01255; AVX512VL-NEXT:    vzeroupper1256; AVX512VL-NEXT:    retq1257;1258; AVX512BW-LABEL: splatvar_funnnel_v4i32:1259; AVX512BW:       # %bb.0:1260; AVX512BW-NEXT:    vpunpckhdq {{.*#+}} xmm3 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]1261; AVX512BW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21262; AVX512BW-NEXT:    vpsrlq %xmm2, %xmm3, %xmm31263; AVX512BW-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]1264; AVX512BW-NEXT:    vpsrlq %xmm2, %xmm0, %xmm01265; AVX512BW-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2]1266; AVX512BW-NEXT:    retq1267;1268; AVX512VBMI2-LABEL: splatvar_funnnel_v4i32:1269; AVX512VBMI2:       # %bb.0:1270; AVX512VBMI2-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm11271; AVX512VBMI2-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01272; AVX512VBMI2-NEXT:    vpbroadcastd %xmm2, %xmm21273; AVX512VBMI2-NEXT:    vpshrdvd %zmm2, %zmm0, %zmm11274; AVX512VBMI2-NEXT:    vmovdqa %xmm1, %xmm01275; AVX512VBMI2-NEXT:    vzeroupper1276; AVX512VBMI2-NEXT:    retq1277;1278; AVX512VLBW-LABEL: splatvar_funnnel_v4i32:1279; AVX512VLBW:       # %bb.0:1280; AVX512VLBW-NEXT:    vpunpckhdq {{.*#+}} xmm3 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]1281; AVX512VLBW-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]1282; AVX512VLBW-NEXT:    vinserti128 $1, %xmm3, %ymm0, %ymm01283; AVX512VLBW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm11284; AVX512VLBW-NEXT:    vpsrlq %xmm1, %ymm0, %ymm01285; AVX512VLBW-NEXT:    vpmovqd %ymm0, %xmm01286; AVX512VLBW-NEXT:    vzeroupper1287; AVX512VLBW-NEXT:    retq1288;1289; AVX512VLVBMI2-LABEL: splatvar_funnnel_v4i32:1290; AVX512VLVBMI2:       # %bb.0:1291; AVX512VLVBMI2-NEXT:    vpbroadcastd %xmm2, %xmm21292; AVX512VLVBMI2-NEXT:    vpshrdvd %xmm2, %xmm0, %xmm11293; AVX512VLVBMI2-NEXT:    vmovdqa %xmm1, %xmm01294; AVX512VLVBMI2-NEXT:    retq1295;1296; XOP-LABEL: splatvar_funnnel_v4i32:1297; XOP:       # %bb.0:1298; XOP-NEXT:    vpunpckhdq {{.*#+}} xmm3 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]1299; XOP-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21300; XOP-NEXT:    vpsrlq %xmm2, %xmm3, %xmm31301; XOP-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]1302; XOP-NEXT:    vpsrlq %xmm2, %xmm0, %xmm01303; XOP-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2]1304; XOP-NEXT:    retq1305;1306; X86-SSE2-LABEL: splatvar_funnnel_v4i32:1307; X86-SSE2:       # %bb.0:1308; X86-SSE2-NEXT:    movdqa %xmm1, %xmm31309; X86-SSE2-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]1310; X86-SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm21311; X86-SSE2-NEXT:    psrlq %xmm2, %xmm31312; X86-SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]1313; X86-SSE2-NEXT:    psrlq %xmm2, %xmm11314; X86-SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,2],xmm3[0,2]1315; X86-SSE2-NEXT:    movaps %xmm1, %xmm01316; X86-SSE2-NEXT:    retl1317  %splat = shufflevector <4 x i32> %amt, <4 x i32> undef, <4 x i32> zeroinitializer1318  %res = call <4 x i32> @llvm.fshr.v4i32(<4 x i32> %x, <4 x i32> %y, <4 x i32> %splat)1319  ret <4 x i32> %res1320}1321 1322define <8 x i16> @splatvar_funnnel_v8i16(<8 x i16> %x, <8 x i16> %y, <8 x i16> %amt) nounwind {1323; SSE2-LABEL: splatvar_funnnel_v8i16:1324; SSE2:       # %bb.0:1325; SSE2-NEXT:    movd {{.*#+}} xmm3 = [15,0,0,0]1326; SSE2-NEXT:    movdqa %xmm2, %xmm41327; SSE2-NEXT:    pand %xmm3, %xmm41328; SSE2-NEXT:    psrlw %xmm4, %xmm11329; SSE2-NEXT:    pandn %xmm3, %xmm21330; SSE2-NEXT:    paddw %xmm0, %xmm01331; SSE2-NEXT:    psllw %xmm2, %xmm01332; SSE2-NEXT:    por %xmm1, %xmm01333; SSE2-NEXT:    retq1334;1335; SSE41-LABEL: splatvar_funnnel_v8i16:1336; SSE41:       # %bb.0:1337; SSE41-NEXT:    pmovsxbq {{.*#+}} xmm3 = [15,0]1338; SSE41-NEXT:    movdqa %xmm2, %xmm41339; SSE41-NEXT:    pand %xmm3, %xmm41340; SSE41-NEXT:    psrlw %xmm4, %xmm11341; SSE41-NEXT:    pandn %xmm3, %xmm21342; SSE41-NEXT:    paddw %xmm0, %xmm01343; SSE41-NEXT:    psllw %xmm2, %xmm01344; SSE41-NEXT:    por %xmm1, %xmm01345; SSE41-NEXT:    retq1346;1347; AVX-LABEL: splatvar_funnnel_v8i16:1348; AVX:       # %bb.0:1349; AVX-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [15,0]1350; AVX-NEXT:    vpand %xmm3, %xmm2, %xmm41351; AVX-NEXT:    vpsrlw %xmm4, %xmm1, %xmm11352; AVX-NEXT:    vpandn %xmm3, %xmm2, %xmm21353; AVX-NEXT:    vpaddw %xmm0, %xmm0, %xmm01354; AVX-NEXT:    vpsllw %xmm2, %xmm0, %xmm01355; AVX-NEXT:    vpor %xmm1, %xmm0, %xmm01356; AVX-NEXT:    retq1357;1358; AVX512F-LABEL: splatvar_funnnel_v8i16:1359; AVX512F:       # %bb.0:1360; AVX512F-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [15,0]1361; AVX512F-NEXT:    vpand %xmm3, %xmm2, %xmm41362; AVX512F-NEXT:    vpsrlw %xmm4, %xmm1, %xmm11363; AVX512F-NEXT:    vpandn %xmm3, %xmm2, %xmm21364; AVX512F-NEXT:    vpaddw %xmm0, %xmm0, %xmm01365; AVX512F-NEXT:    vpsllw %xmm2, %xmm0, %xmm01366; AVX512F-NEXT:    vpor %xmm1, %xmm0, %xmm01367; AVX512F-NEXT:    retq1368;1369; AVX512VL-LABEL: splatvar_funnnel_v8i16:1370; AVX512VL:       # %bb.0:1371; AVX512VL-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [15,0]1372; AVX512VL-NEXT:    vpand %xmm3, %xmm2, %xmm41373; AVX512VL-NEXT:    vpsrlw %xmm4, %xmm1, %xmm11374; AVX512VL-NEXT:    vpandn %xmm3, %xmm2, %xmm21375; AVX512VL-NEXT:    vpaddw %xmm0, %xmm0, %xmm01376; AVX512VL-NEXT:    vpsllw %xmm2, %xmm0, %xmm01377; AVX512VL-NEXT:    vpor %xmm1, %xmm0, %xmm01378; AVX512VL-NEXT:    retq1379;1380; AVX512BW-LABEL: splatvar_funnnel_v8i16:1381; AVX512BW:       # %bb.0:1382; AVX512BW-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [15,0]1383; AVX512BW-NEXT:    vpand %xmm3, %xmm2, %xmm41384; AVX512BW-NEXT:    vpsrlw %xmm4, %xmm1, %xmm11385; AVX512BW-NEXT:    vpandn %xmm3, %xmm2, %xmm21386; AVX512BW-NEXT:    vpaddw %xmm0, %xmm0, %xmm01387; AVX512BW-NEXT:    vpsllw %xmm2, %xmm0, %xmm01388; AVX512BW-NEXT:    vpor %xmm1, %xmm0, %xmm01389; AVX512BW-NEXT:    retq1390;1391; AVX512VBMI2-LABEL: splatvar_funnnel_v8i16:1392; AVX512VBMI2:       # %bb.0:1393; AVX512VBMI2-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm11394; AVX512VBMI2-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01395; AVX512VBMI2-NEXT:    vpbroadcastw %xmm2, %xmm21396; AVX512VBMI2-NEXT:    vpshrdvw %zmm2, %zmm0, %zmm11397; AVX512VBMI2-NEXT:    vmovdqa %xmm1, %xmm01398; AVX512VBMI2-NEXT:    vzeroupper1399; AVX512VBMI2-NEXT:    retq1400;1401; AVX512VLBW-LABEL: splatvar_funnnel_v8i16:1402; AVX512VLBW:       # %bb.0:1403; AVX512VLBW-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [15,0]1404; AVX512VLBW-NEXT:    vpand %xmm3, %xmm2, %xmm41405; AVX512VLBW-NEXT:    vpsrlw %xmm4, %xmm1, %xmm11406; AVX512VLBW-NEXT:    vpandn %xmm3, %xmm2, %xmm21407; AVX512VLBW-NEXT:    vpaddw %xmm0, %xmm0, %xmm01408; AVX512VLBW-NEXT:    vpsllw %xmm2, %xmm0, %xmm01409; AVX512VLBW-NEXT:    vpor %xmm1, %xmm0, %xmm01410; AVX512VLBW-NEXT:    retq1411;1412; AVX512VLVBMI2-LABEL: splatvar_funnnel_v8i16:1413; AVX512VLVBMI2:       # %bb.0:1414; AVX512VLVBMI2-NEXT:    vpbroadcastw %xmm2, %xmm21415; AVX512VLVBMI2-NEXT:    vpshrdvw %xmm2, %xmm0, %xmm11416; AVX512VLVBMI2-NEXT:    vmovdqa %xmm1, %xmm01417; AVX512VLVBMI2-NEXT:    retq1418;1419; XOP-LABEL: splatvar_funnnel_v8i16:1420; XOP:       # %bb.0:1421; XOP-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [15,0]1422; XOP-NEXT:    vpand %xmm3, %xmm2, %xmm41423; XOP-NEXT:    vpsrlw %xmm4, %xmm1, %xmm11424; XOP-NEXT:    vpandn %xmm3, %xmm2, %xmm21425; XOP-NEXT:    vpaddw %xmm0, %xmm0, %xmm01426; XOP-NEXT:    vpsllw %xmm2, %xmm0, %xmm01427; XOP-NEXT:    vpor %xmm1, %xmm0, %xmm01428; XOP-NEXT:    retq1429;1430; X86-SSE2-LABEL: splatvar_funnnel_v8i16:1431; X86-SSE2:       # %bb.0:1432; X86-SSE2-NEXT:    movd {{.*#+}} xmm3 = [15,0,0,0]1433; X86-SSE2-NEXT:    movdqa %xmm2, %xmm41434; X86-SSE2-NEXT:    pand %xmm3, %xmm41435; X86-SSE2-NEXT:    psrlw %xmm4, %xmm11436; X86-SSE2-NEXT:    pandn %xmm3, %xmm21437; X86-SSE2-NEXT:    paddw %xmm0, %xmm01438; X86-SSE2-NEXT:    psllw %xmm2, %xmm01439; X86-SSE2-NEXT:    por %xmm1, %xmm01440; X86-SSE2-NEXT:    retl1441  %splat = shufflevector <8 x i16> %amt, <8 x i16> undef, <8 x i32> zeroinitializer1442  %res = call <8 x i16> @llvm.fshr.v8i16(<8 x i16> %x, <8 x i16> %y, <8 x i16> %splat)1443  ret <8 x i16> %res1444}1445 1446define <16 x i8> @splatvar_funnnel_v16i8(<16 x i8> %x, <16 x i8> %y, <16 x i8> %amt) nounwind {1447; SSE2-LABEL: splatvar_funnnel_v16i8:1448; SSE2:       # %bb.0:1449; SSE2-NEXT:    movdqa %xmm1, %xmm41450; SSE2-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm0[8],xmm4[9],xmm0[9],xmm4[10],xmm0[10],xmm4[11],xmm0[11],xmm4[12],xmm0[12],xmm4[13],xmm0[13],xmm4[14],xmm0[14],xmm4[15],xmm0[15]1451; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm21452; SSE2-NEXT:    psrlw %xmm2, %xmm41453; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [255,255,255,255,255,255,255,255]1454; SSE2-NEXT:    pand %xmm3, %xmm41455; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]1456; SSE2-NEXT:    psrlw %xmm2, %xmm11457; SSE2-NEXT:    pand %xmm1, %xmm31458; SSE2-NEXT:    packuswb %xmm4, %xmm31459; SSE2-NEXT:    movdqa %xmm3, %xmm01460; SSE2-NEXT:    retq1461;1462; SSE41-LABEL: splatvar_funnnel_v16i8:1463; SSE41:       # %bb.0:1464; SSE41-NEXT:    movdqa %xmm1, %xmm41465; SSE41-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm0[8],xmm4[9],xmm0[9],xmm4[10],xmm0[10],xmm4[11],xmm0[11],xmm4[12],xmm0[12],xmm4[13],xmm0[13],xmm4[14],xmm0[14],xmm4[15],xmm0[15]1466; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm21467; SSE41-NEXT:    psrlw %xmm2, %xmm41468; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm3 = [255,255,255,255,255,255,255,255]1469; SSE41-NEXT:    pand %xmm3, %xmm41470; SSE41-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]1471; SSE41-NEXT:    psrlw %xmm2, %xmm11472; SSE41-NEXT:    pand %xmm1, %xmm31473; SSE41-NEXT:    packuswb %xmm4, %xmm31474; SSE41-NEXT:    movdqa %xmm3, %xmm01475; SSE41-NEXT:    retq1476;1477; AVX1-LABEL: splatvar_funnnel_v16i8:1478; AVX1:       # %bb.0:1479; AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15]1480; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21481; AVX1-NEXT:    vpsrlw %xmm2, %xmm3, %xmm31482; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]1483; AVX1-NEXT:    vpand %xmm4, %xmm3, %xmm31484; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]1485; AVX1-NEXT:    vpsrlw %xmm2, %xmm0, %xmm01486; AVX1-NEXT:    vpand %xmm4, %xmm0, %xmm01487; AVX1-NEXT:    vpackuswb %xmm3, %xmm0, %xmm01488; AVX1-NEXT:    retq1489;1490; AVX2-LABEL: splatvar_funnnel_v16i8:1491; AVX2:       # %bb.0:1492; AVX2-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15]1493; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21494; AVX2-NEXT:    vpsrlw %xmm2, %xmm3, %xmm31495; AVX2-NEXT:    vpbroadcastw {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]1496; AVX2-NEXT:    vpand %xmm4, %xmm3, %xmm31497; AVX2-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]1498; AVX2-NEXT:    vpsrlw %xmm2, %xmm0, %xmm01499; AVX2-NEXT:    vpand %xmm4, %xmm0, %xmm01500; AVX2-NEXT:    vpackuswb %xmm3, %xmm0, %xmm01501; AVX2-NEXT:    retq1502;1503; AVX512F-LABEL: splatvar_funnnel_v16i8:1504; AVX512F:       # %bb.0:1505; AVX512F-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15]1506; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21507; AVX512F-NEXT:    vpsrlw %xmm2, %xmm3, %xmm31508; AVX512F-NEXT:    vpbroadcastw {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]1509; AVX512F-NEXT:    vpand %xmm4, %xmm3, %xmm31510; AVX512F-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]1511; AVX512F-NEXT:    vpsrlw %xmm2, %xmm0, %xmm01512; AVX512F-NEXT:    vpand %xmm4, %xmm0, %xmm01513; AVX512F-NEXT:    vpackuswb %xmm3, %xmm0, %xmm01514; AVX512F-NEXT:    retq1515;1516; AVX512VL-LABEL: splatvar_funnnel_v16i8:1517; AVX512VL:       # %bb.0:1518; AVX512VL-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15]1519; AVX512VL-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21520; AVX512VL-NEXT:    vpsrlw %xmm2, %xmm3, %xmm31521; AVX512VL-NEXT:    vpbroadcastd {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]1522; AVX512VL-NEXT:    vpand %xmm4, %xmm3, %xmm31523; AVX512VL-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]1524; AVX512VL-NEXT:    vpsrlw %xmm2, %xmm0, %xmm01525; AVX512VL-NEXT:    vpand %xmm4, %xmm0, %xmm01526; AVX512VL-NEXT:    vpackuswb %xmm3, %xmm0, %xmm01527; AVX512VL-NEXT:    retq1528;1529; AVX512BW-LABEL: splatvar_funnnel_v16i8:1530; AVX512BW:       # %bb.0:1531; AVX512BW-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15]1532; AVX512BW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21533; AVX512BW-NEXT:    vpsrlw %xmm2, %xmm3, %xmm31534; AVX512BW-NEXT:    vpbroadcastw {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]1535; AVX512BW-NEXT:    vpand %xmm4, %xmm3, %xmm31536; AVX512BW-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]1537; AVX512BW-NEXT:    vpsrlw %xmm2, %xmm0, %xmm01538; AVX512BW-NEXT:    vpand %xmm4, %xmm0, %xmm01539; AVX512BW-NEXT:    vpackuswb %xmm3, %xmm0, %xmm01540; AVX512BW-NEXT:    retq1541;1542; AVX512VBMI2-LABEL: splatvar_funnnel_v16i8:1543; AVX512VBMI2:       # %bb.0:1544; AVX512VBMI2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,2,4,6,8,10,12,14,64,66,68,70,72,74,76,78]1545; AVX512VBMI2-NEXT:    vpunpckhbw {{.*#+}} xmm4 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15]1546; AVX512VBMI2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21547; AVX512VBMI2-NEXT:    vpsrlw %xmm2, %xmm4, %xmm41548; AVX512VBMI2-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]1549; AVX512VBMI2-NEXT:    vpsrlw %xmm2, %xmm0, %xmm01550; AVX512VBMI2-NEXT:    vpermt2b %zmm4, %zmm3, %zmm01551; AVX512VBMI2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm01552; AVX512VBMI2-NEXT:    vzeroupper1553; AVX512VBMI2-NEXT:    retq1554;1555; AVX512VLBW-LABEL: splatvar_funnnel_v16i8:1556; AVX512VLBW:       # %bb.0:1557; AVX512VLBW-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15]1558; AVX512VLBW-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]1559; AVX512VLBW-NEXT:    vinserti128 $1, %xmm3, %ymm0, %ymm01560; AVX512VLBW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm11561; AVX512VLBW-NEXT:    vpsrlw %xmm1, %ymm0, %ymm01562; AVX512VLBW-NEXT:    vpmovwb %ymm0, %xmm01563; AVX512VLBW-NEXT:    vzeroupper1564; AVX512VLBW-NEXT:    retq1565;1566; AVX512VLVBMI2-LABEL: splatvar_funnnel_v16i8:1567; AVX512VLVBMI2:       # %bb.0:1568; AVX512VLVBMI2-NEXT:    # kill: def $xmm1 killed $xmm1 def $ymm11569; AVX512VLVBMI2-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm01570; AVX512VLVBMI2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,32,1,33,2,34,3,35,4,36,5,37,6,38,7,39,8,40,9,41,10,42,11,43,12,44,13,45,14,46,15,47]1571; AVX512VLVBMI2-NEXT:    vpermi2b %ymm0, %ymm1, %ymm31572; AVX512VLVBMI2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm01573; AVX512VLVBMI2-NEXT:    vpsrlw %xmm0, %ymm3, %ymm01574; AVX512VLVBMI2-NEXT:    vpmovwb %ymm0, %xmm01575; AVX512VLVBMI2-NEXT:    vzeroupper1576; AVX512VLVBMI2-NEXT:    retq1577;1578; XOP-LABEL: splatvar_funnnel_v16i8:1579; XOP:       # %bb.0:1580; XOP-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15]1581; XOP-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21582; XOP-NEXT:    vpsrlw %xmm2, %xmm3, %xmm31583; XOP-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]1584; XOP-NEXT:    vpsrlw %xmm2, %xmm0, %xmm01585; XOP-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14],xmm3[0,2,4,6,8,10,12,14]1586; XOP-NEXT:    retq1587;1588; X86-SSE2-LABEL: splatvar_funnnel_v16i8:1589; X86-SSE2:       # %bb.0:1590; X86-SSE2-NEXT:    movdqa %xmm1, %xmm41591; X86-SSE2-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm0[8],xmm4[9],xmm0[9],xmm4[10],xmm0[10],xmm4[11],xmm0[11],xmm4[12],xmm0[12],xmm4[13],xmm0[13],xmm4[14],xmm0[14],xmm4[15],xmm0[15]1592; X86-SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm21593; X86-SSE2-NEXT:    psrlw %xmm2, %xmm41594; X86-SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [255,255,255,255,255,255,255,255]1595; X86-SSE2-NEXT:    pand %xmm3, %xmm41596; X86-SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]1597; X86-SSE2-NEXT:    psrlw %xmm2, %xmm11598; X86-SSE2-NEXT:    pand %xmm1, %xmm31599; X86-SSE2-NEXT:    packuswb %xmm4, %xmm31600; X86-SSE2-NEXT:    movdqa %xmm3, %xmm01601; X86-SSE2-NEXT:    retl1602  %splat = shufflevector <16 x i8> %amt, <16 x i8> undef, <16 x i32> zeroinitializer1603  %res = call <16 x i8> @llvm.fshr.v16i8(<16 x i8> %x, <16 x i8> %y, <16 x i8> %splat)1604  ret <16 x i8> %res1605}1606 1607;1608; Constant Shifts1609;1610 1611define <2 x i64> @constant_funnnel_v2i64(<2 x i64> %x, <2 x i64> %y) nounwind {1612; SSE2-LABEL: constant_funnnel_v2i64:1613; SSE2:       # %bb.0:1614; SSE2-NEXT:    movdqa %xmm1, %xmm21615; SSE2-NEXT:    psrlq $4, %xmm21616; SSE2-NEXT:    psrlq $14, %xmm11617; SSE2-NEXT:    shufpd {{.*#+}} xmm2 = xmm2[0],xmm1[1]1618; SSE2-NEXT:    movdqa %xmm0, %xmm11619; SSE2-NEXT:    psllq $60, %xmm11620; SSE2-NEXT:    psllq $50, %xmm01621; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]1622; SSE2-NEXT:    orpd %xmm2, %xmm01623; SSE2-NEXT:    retq1624;1625; SSE41-LABEL: constant_funnnel_v2i64:1626; SSE41:       # %bb.0:1627; SSE41-NEXT:    movdqa %xmm1, %xmm21628; SSE41-NEXT:    psrlq $14, %xmm21629; SSE41-NEXT:    psrlq $4, %xmm11630; SSE41-NEXT:    pblendw {{.*#+}} xmm2 = xmm1[0,1,2,3],xmm2[4,5,6,7]1631; SSE41-NEXT:    movdqa %xmm0, %xmm11632; SSE41-NEXT:    psllq $50, %xmm11633; SSE41-NEXT:    psllq $60, %xmm01634; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]1635; SSE41-NEXT:    por %xmm2, %xmm01636; SSE41-NEXT:    retq1637;1638; AVX1-LABEL: constant_funnnel_v2i64:1639; AVX1:       # %bb.0:1640; AVX1-NEXT:    vpsrlq $14, %xmm1, %xmm21641; AVX1-NEXT:    vpsrlq $4, %xmm1, %xmm11642; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm2[4,5,6,7]1643; AVX1-NEXT:    vpsllq $50, %xmm0, %xmm21644; AVX1-NEXT:    vpsllq $60, %xmm0, %xmm01645; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm2[4,5,6,7]1646; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm01647; AVX1-NEXT:    retq1648;1649; AVX2-LABEL: constant_funnnel_v2i64:1650; AVX2:       # %bb.0:1651; AVX2-NEXT:    vpsrlvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11652; AVX2-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01653; AVX2-NEXT:    vpor %xmm1, %xmm0, %xmm01654; AVX2-NEXT:    retq1655;1656; AVX512F-LABEL: constant_funnnel_v2i64:1657; AVX512F:       # %bb.0:1658; AVX512F-NEXT:    vpsrlvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11659; AVX512F-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01660; AVX512F-NEXT:    vpor %xmm1, %xmm0, %xmm01661; AVX512F-NEXT:    retq1662;1663; AVX512VL-LABEL: constant_funnnel_v2i64:1664; AVX512VL:       # %bb.0:1665; AVX512VL-NEXT:    vpsrlvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11666; AVX512VL-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01667; AVX512VL-NEXT:    vpor %xmm1, %xmm0, %xmm01668; AVX512VL-NEXT:    retq1669;1670; AVX512BW-LABEL: constant_funnnel_v2i64:1671; AVX512BW:       # %bb.0:1672; AVX512BW-NEXT:    vpsrlvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11673; AVX512BW-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01674; AVX512BW-NEXT:    vpor %xmm1, %xmm0, %xmm01675; AVX512BW-NEXT:    retq1676;1677; AVX512VBMI2-LABEL: constant_funnnel_v2i64:1678; AVX512VBMI2:       # %bb.0:1679; AVX512VBMI2-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm11680; AVX512VBMI2-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01681; AVX512VBMI2-NEXT:    vpmovsxbq {{.*#+}} xmm2 = [4,14]1682; AVX512VBMI2-NEXT:    vpshrdvq %zmm2, %zmm0, %zmm11683; AVX512VBMI2-NEXT:    vmovdqa %xmm1, %xmm01684; AVX512VBMI2-NEXT:    vzeroupper1685; AVX512VBMI2-NEXT:    retq1686;1687; AVX512VLBW-LABEL: constant_funnnel_v2i64:1688; AVX512VLBW:       # %bb.0:1689; AVX512VLBW-NEXT:    vpsrlvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11690; AVX512VLBW-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01691; AVX512VLBW-NEXT:    vpor %xmm1, %xmm0, %xmm01692; AVX512VLBW-NEXT:    retq1693;1694; AVX512VLVBMI2-LABEL: constant_funnnel_v2i64:1695; AVX512VLVBMI2:       # %bb.0:1696; AVX512VLVBMI2-NEXT:    vpshrdvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm11697; AVX512VLVBMI2-NEXT:    vmovdqa %xmm1, %xmm01698; AVX512VLVBMI2-NEXT:    retq1699;1700; XOPAVX1-LABEL: constant_funnnel_v2i64:1701; XOPAVX1:       # %bb.0:1702; XOPAVX1-NEXT:    vpshlq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11703; XOPAVX1-NEXT:    vpshlq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01704; XOPAVX1-NEXT:    vpor %xmm1, %xmm0, %xmm01705; XOPAVX1-NEXT:    retq1706;1707; XOPAVX2-LABEL: constant_funnnel_v2i64:1708; XOPAVX2:       # %bb.0:1709; XOPAVX2-NEXT:    vpsrlvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11710; XOPAVX2-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01711; XOPAVX2-NEXT:    vpor %xmm1, %xmm0, %xmm01712; XOPAVX2-NEXT:    retq1713;1714; X86-SSE2-LABEL: constant_funnnel_v2i64:1715; X86-SSE2:       # %bb.0:1716; X86-SSE2-NEXT:    movdqa %xmm1, %xmm21717; X86-SSE2-NEXT:    psrlq $4, %xmm21718; X86-SSE2-NEXT:    psrlq $14, %xmm11719; X86-SSE2-NEXT:    shufpd {{.*#+}} xmm2 = xmm2[0],xmm1[1]1720; X86-SSE2-NEXT:    movdqa %xmm0, %xmm11721; X86-SSE2-NEXT:    psllq $60, %xmm11722; X86-SSE2-NEXT:    psllq $50, %xmm01723; X86-SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]1724; X86-SSE2-NEXT:    orpd %xmm2, %xmm01725; X86-SSE2-NEXT:    retl1726  %res = call <2 x i64> @llvm.fshr.v2i64(<2 x i64> %x, <2 x i64> %y, <2 x i64> <i64 4, i64 14>)1727  ret <2 x i64> %res1728}1729 1730define <4 x i32> @constant_funnnel_v4i32(<4 x i32> %x, <4 x i32> %y) nounwind {1731; SSE2-LABEL: constant_funnnel_v4i32:1732; SSE2:       # %bb.0:1733; SSE2-NEXT:    movdqa %xmm1, %xmm21734; SSE2-NEXT:    psrld $7, %xmm21735; SSE2-NEXT:    movdqa %xmm1, %xmm31736; SSE2-NEXT:    psrld $6, %xmm31737; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm3 = xmm3[1],xmm2[1]1738; SSE2-NEXT:    movdqa %xmm1, %xmm21739; SSE2-NEXT:    psrld $5, %xmm21740; SSE2-NEXT:    psrld $4, %xmm11741; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]1742; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,3],xmm3[0,3]1743; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]1744; SSE2-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [268435456,134217728,67108864,33554432]1745; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]1746; SSE2-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [134217728,u,33554432,u]1747; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]1748; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]1749; SSE2-NEXT:    por %xmm1, %xmm01750; SSE2-NEXT:    retq1751;1752; SSE41-LABEL: constant_funnnel_v4i32:1753; SSE41:       # %bb.0:1754; SSE41-NEXT:    movdqa %xmm1, %xmm21755; SSE41-NEXT:    psrld $7, %xmm21756; SSE41-NEXT:    movdqa %xmm1, %xmm31757; SSE41-NEXT:    psrld $5, %xmm31758; SSE41-NEXT:    pblendw {{.*#+}} xmm3 = xmm3[0,1,2,3],xmm2[4,5,6,7]1759; SSE41-NEXT:    movdqa %xmm1, %xmm21760; SSE41-NEXT:    psrld $6, %xmm21761; SSE41-NEXT:    psrld $4, %xmm11762; SSE41-NEXT:    pblendw {{.*#+}} xmm2 = xmm1[0,1,2,3],xmm2[4,5,6,7]1763; SSE41-NEXT:    pblendw {{.*#+}} xmm2 = xmm2[0,1],xmm3[2,3],xmm2[4,5],xmm3[6,7]1764; SSE41-NEXT:    pmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [268435456,134217728,67108864,33554432]1765; SSE41-NEXT:    por %xmm2, %xmm01766; SSE41-NEXT:    retq1767;1768; AVX1-LABEL: constant_funnnel_v4i32:1769; AVX1:       # %bb.0:1770; AVX1-NEXT:    vpsrld $7, %xmm1, %xmm21771; AVX1-NEXT:    vpsrld $5, %xmm1, %xmm31772; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm3[0,1,2,3],xmm2[4,5,6,7]1773; AVX1-NEXT:    vpsrld $6, %xmm1, %xmm31774; AVX1-NEXT:    vpsrld $4, %xmm1, %xmm11775; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm3[4,5,6,7]1776; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7]1777; AVX1-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [268435456,134217728,67108864,33554432]1778; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm01779; AVX1-NEXT:    retq1780;1781; AVX2-LABEL: constant_funnnel_v4i32:1782; AVX2:       # %bb.0:1783; AVX2-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11784; AVX2-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01785; AVX2-NEXT:    vpor %xmm1, %xmm0, %xmm01786; AVX2-NEXT:    retq1787;1788; AVX512F-LABEL: constant_funnnel_v4i32:1789; AVX512F:       # %bb.0:1790; AVX512F-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11791; AVX512F-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01792; AVX512F-NEXT:    vpor %xmm1, %xmm0, %xmm01793; AVX512F-NEXT:    retq1794;1795; AVX512VL-LABEL: constant_funnnel_v4i32:1796; AVX512VL:       # %bb.0:1797; AVX512VL-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11798; AVX512VL-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01799; AVX512VL-NEXT:    vpor %xmm1, %xmm0, %xmm01800; AVX512VL-NEXT:    retq1801;1802; AVX512BW-LABEL: constant_funnnel_v4i32:1803; AVX512BW:       # %bb.0:1804; AVX512BW-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11805; AVX512BW-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01806; AVX512BW-NEXT:    vpor %xmm1, %xmm0, %xmm01807; AVX512BW-NEXT:    retq1808;1809; AVX512VBMI2-LABEL: constant_funnnel_v4i32:1810; AVX512VBMI2:       # %bb.0:1811; AVX512VBMI2-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm11812; AVX512VBMI2-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01813; AVX512VBMI2-NEXT:    vpmovsxbd {{.*#+}} xmm2 = [4,5,6,7]1814; AVX512VBMI2-NEXT:    vpshrdvd %zmm2, %zmm0, %zmm11815; AVX512VBMI2-NEXT:    vmovdqa %xmm1, %xmm01816; AVX512VBMI2-NEXT:    vzeroupper1817; AVX512VBMI2-NEXT:    retq1818;1819; AVX512VLBW-LABEL: constant_funnnel_v4i32:1820; AVX512VLBW:       # %bb.0:1821; AVX512VLBW-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11822; AVX512VLBW-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01823; AVX512VLBW-NEXT:    vpor %xmm1, %xmm0, %xmm01824; AVX512VLBW-NEXT:    retq1825;1826; AVX512VLVBMI2-LABEL: constant_funnnel_v4i32:1827; AVX512VLVBMI2:       # %bb.0:1828; AVX512VLVBMI2-NEXT:    vpshrdvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm11829; AVX512VLVBMI2-NEXT:    vmovdqa %xmm1, %xmm01830; AVX512VLVBMI2-NEXT:    retq1831;1832; XOPAVX1-LABEL: constant_funnnel_v4i32:1833; XOPAVX1:       # %bb.0:1834; XOPAVX1-NEXT:    vpshld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11835; XOPAVX1-NEXT:    vpshld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01836; XOPAVX1-NEXT:    vpor %xmm1, %xmm0, %xmm01837; XOPAVX1-NEXT:    retq1838;1839; XOPAVX2-LABEL: constant_funnnel_v4i32:1840; XOPAVX2:       # %bb.0:1841; XOPAVX2-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11842; XOPAVX2-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01843; XOPAVX2-NEXT:    vpor %xmm1, %xmm0, %xmm01844; XOPAVX2-NEXT:    retq1845;1846; X86-SSE2-LABEL: constant_funnnel_v4i32:1847; X86-SSE2:       # %bb.0:1848; X86-SSE2-NEXT:    movdqa %xmm1, %xmm21849; X86-SSE2-NEXT:    psrld $7, %xmm21850; X86-SSE2-NEXT:    movdqa %xmm1, %xmm31851; X86-SSE2-NEXT:    psrld $6, %xmm31852; X86-SSE2-NEXT:    punpckhqdq {{.*#+}} xmm3 = xmm3[1],xmm2[1]1853; X86-SSE2-NEXT:    movdqa %xmm1, %xmm21854; X86-SSE2-NEXT:    psrld $5, %xmm21855; X86-SSE2-NEXT:    psrld $4, %xmm11856; X86-SSE2-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]1857; X86-SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,3],xmm3[0,3]1858; X86-SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]1859; X86-SSE2-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0 # [268435456,134217728,67108864,33554432]1860; X86-SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]1861; X86-SSE2-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}, %xmm2 # [134217728,u,33554432,u]1862; X86-SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]1863; X86-SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]1864; X86-SSE2-NEXT:    por %xmm1, %xmm01865; X86-SSE2-NEXT:    retl1866  %res = call <4 x i32> @llvm.fshr.v4i32(<4 x i32> %x, <4 x i32> %y, <4 x i32> <i32 4, i32 5, i32 6, i32 7>)1867  ret <4 x i32> %res1868}1869 1870define <8 x i16> @constant_funnnel_v8i16(<8 x i16> %x, <8 x i16> %y) nounwind {1871; SSE2-LABEL: constant_funnnel_v8i16:1872; SSE2:       # %bb.0:1873; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [0,65535,65535,65535,65535,65535,65535,65535]1874; SSE2-NEXT:    pandn %xmm1, %xmm21875; SSE2-NEXT:    pmulhuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [0,0,0,128,0,64,0,32,0,16,0,8,0,4,0,2]1876; SSE2-NEXT:    por %xmm1, %xmm21877; SSE2-NEXT:    paddw %xmm0, %xmm01878; SSE2-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [32768,16384,8192,4096,2048,1024,512,256]1879; SSE2-NEXT:    por %xmm2, %xmm01880; SSE2-NEXT:    retq1881;1882; SSE41-LABEL: constant_funnnel_v8i16:1883; SSE41:       # %bb.0:1884; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [u,32768,16384,8192,4096,2048,1024,512]1885; SSE41-NEXT:    pmulhuw %xmm1, %xmm21886; SSE41-NEXT:    pblendw {{.*#+}} xmm2 = xmm1[0],xmm2[1,2,3,4,5,6,7]1887; SSE41-NEXT:    paddw %xmm0, %xmm01888; SSE41-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [32768,16384,8192,4096,2048,1024,512,256]1889; SSE41-NEXT:    por %xmm2, %xmm01890; SSE41-NEXT:    retq1891;1892; AVX-LABEL: constant_funnnel_v8i16:1893; AVX:       # %bb.0:1894; AVX-NEXT:    vpmulhuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm2 # [u,32768,16384,8192,4096,2048,1024,512]1895; AVX-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3,4,5,6,7]1896; AVX-NEXT:    vpaddw %xmm0, %xmm0, %xmm01897; AVX-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [32768,16384,8192,4096,2048,1024,512,256]1898; AVX-NEXT:    vpor %xmm1, %xmm0, %xmm01899; AVX-NEXT:    retq1900;1901; AVX512F-LABEL: constant_funnnel_v8i16:1902; AVX512F:       # %bb.0:1903; AVX512F-NEXT:    vpmulhuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm2 # [u,32768,16384,8192,4096,2048,1024,512]1904; AVX512F-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3,4,5,6,7]1905; AVX512F-NEXT:    vpaddw %xmm0, %xmm0, %xmm01906; AVX512F-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [32768,16384,8192,4096,2048,1024,512,256]1907; AVX512F-NEXT:    vpor %xmm1, %xmm0, %xmm01908; AVX512F-NEXT:    retq1909;1910; AVX512VL-LABEL: constant_funnnel_v8i16:1911; AVX512VL:       # %bb.0:1912; AVX512VL-NEXT:    vpmulhuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm2 # [u,32768,16384,8192,4096,2048,1024,512]1913; AVX512VL-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3,4,5,6,7]1914; AVX512VL-NEXT:    vpaddw %xmm0, %xmm0, %xmm01915; AVX512VL-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [32768,16384,8192,4096,2048,1024,512,256]1916; AVX512VL-NEXT:    vpor %xmm1, %xmm0, %xmm01917; AVX512VL-NEXT:    retq1918;1919; AVX512BW-LABEL: constant_funnnel_v8i16:1920; AVX512BW:       # %bb.0:1921; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm11922; AVX512BW-NEXT:    vpmovsxbw {{.*#+}} xmm2 = [0,1,2,3,4,5,6,7]1923; AVX512BW-NEXT:    vpsrlvw %zmm2, %zmm1, %zmm11924; AVX512BW-NEXT:    vpmovsxbw {{.*#+}} xmm2 = [15,14,13,12,11,10,9,8]1925; AVX512BW-NEXT:    vpaddw %xmm0, %xmm0, %xmm01926; AVX512BW-NEXT:    vpsllvw %zmm2, %zmm0, %zmm01927; AVX512BW-NEXT:    vpor %xmm1, %xmm0, %xmm01928; AVX512BW-NEXT:    vzeroupper1929; AVX512BW-NEXT:    retq1930;1931; AVX512VBMI2-LABEL: constant_funnnel_v8i16:1932; AVX512VBMI2:       # %bb.0:1933; AVX512VBMI2-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm11934; AVX512VBMI2-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01935; AVX512VBMI2-NEXT:    vpmovsxbw {{.*#+}} xmm2 = [0,1,2,3,4,5,6,7]1936; AVX512VBMI2-NEXT:    vpshrdvw %zmm2, %zmm0, %zmm11937; AVX512VBMI2-NEXT:    vmovdqa %xmm1, %xmm01938; AVX512VBMI2-NEXT:    vzeroupper1939; AVX512VBMI2-NEXT:    retq1940;1941; AVX512VLBW-LABEL: constant_funnnel_v8i16:1942; AVX512VLBW:       # %bb.0:1943; AVX512VLBW-NEXT:    vpsrlvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11944; AVX512VLBW-NEXT:    vpaddw %xmm0, %xmm0, %xmm01945; AVX512VLBW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01946; AVX512VLBW-NEXT:    vpor %xmm1, %xmm0, %xmm01947; AVX512VLBW-NEXT:    retq1948;1949; AVX512VLVBMI2-LABEL: constant_funnnel_v8i16:1950; AVX512VLVBMI2:       # %bb.0:1951; AVX512VLVBMI2-NEXT:    vpshrdvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm11952; AVX512VLVBMI2-NEXT:    vmovdqa %xmm1, %xmm01953; AVX512VLVBMI2-NEXT:    retq1954;1955; XOP-LABEL: constant_funnnel_v8i16:1956; XOP:       # %bb.0:1957; XOP-NEXT:    vpshlw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11958; XOP-NEXT:    vpaddw %xmm0, %xmm0, %xmm01959; XOP-NEXT:    vpshlw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01960; XOP-NEXT:    vpor %xmm1, %xmm0, %xmm01961; XOP-NEXT:    retq1962;1963; X86-SSE2-LABEL: constant_funnnel_v8i16:1964; X86-SSE2:       # %bb.0:1965; X86-SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [0,65535,65535,65535,65535,65535,65535,65535]1966; X86-SSE2-NEXT:    pandn %xmm1, %xmm21967; X86-SSE2-NEXT:    pmulhuw {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1 # [0,0,0,128,0,64,0,32,0,16,0,8,0,4,0,2]1968; X86-SSE2-NEXT:    por %xmm1, %xmm21969; X86-SSE2-NEXT:    paddw %xmm0, %xmm01970; X86-SSE2-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0 # [32768,16384,8192,4096,2048,1024,512,256]1971; X86-SSE2-NEXT:    por %xmm2, %xmm01972; X86-SSE2-NEXT:    retl1973  %res = call <8 x i16> @llvm.fshr.v8i16(<8 x i16> %x, <8 x i16> %y, <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>)1974  ret <8 x i16> %res1975}1976 1977define <16 x i8> @constant_funnnel_v16i8(<16 x i8> %x, <16 x i8> %y) nounwind {1978; SSE2-LABEL: constant_funnnel_v16i8:1979; SSE2:       # %bb.0:1980; SSE2-NEXT:    pxor %xmm2, %xmm21981; SSE2-NEXT:    movdqa %xmm1, %xmm31982; SSE2-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm2[8],xmm3[9],xmm2[9],xmm3[10],xmm2[10],xmm3[11],xmm2[11],xmm3[12],xmm2[12],xmm3[13],xmm2[13],xmm3[14],xmm2[14],xmm3[15],xmm2[15]1983; SSE2-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3 # [256,2,4,8,16,32,64,128]1984; SSE2-NEXT:    psrlw $8, %xmm31985; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]1986; SSE2-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [256,128,64,32,16,8,4,2]1987; SSE2-NEXT:    psrlw $8, %xmm11988; SSE2-NEXT:    packuswb %xmm3, %xmm11989; SSE2-NEXT:    paddb %xmm0, %xmm01990; SSE2-NEXT:    movdqa %xmm0, %xmm21991; SSE2-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]1992; SSE2-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [128,u,1,u,2,u,4,u,8,u,16,u,32,u,64,u]1993; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [255,255,255,255,255,255,255,255]1994; SSE2-NEXT:    pand %xmm3, %xmm21995; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1996; SSE2-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [128,u,64,u,32,u,16,u,8,u,4,u,2,u,1,u]1997; SSE2-NEXT:    pand %xmm3, %xmm01998; SSE2-NEXT:    packuswb %xmm2, %xmm01999; SSE2-NEXT:    por %xmm1, %xmm02000; SSE2-NEXT:    retq2001;2002; SSE41-LABEL: constant_funnnel_v16i8:2003; SSE41:       # %bb.0:2004; SSE41-NEXT:    pxor %xmm2, %xmm22005; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm3 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero2006; SSE41-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm2[8],xmm1[9],xmm2[9],xmm1[10],xmm2[10],xmm1[11],xmm2[11],xmm1[12],xmm2[12],xmm1[13],xmm2[13],xmm1[14],xmm2[14],xmm1[15],xmm2[15]2007; SSE41-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [256,2,4,8,16,32,64,128]2008; SSE41-NEXT:    psrlw $8, %xmm12009; SSE41-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3 # [256,128,64,32,16,8,4,2]2010; SSE41-NEXT:    psrlw $8, %xmm32011; SSE41-NEXT:    packuswb %xmm1, %xmm32012; SSE41-NEXT:    paddb %xmm0, %xmm02013; SSE41-NEXT:    movdqa %xmm0, %xmm12014; SSE41-NEXT:    pmaddubsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [0,64,0,16,0,4,0,1,0,1,0,4,0,16,0,64]2015; SSE41-NEXT:    psllw $8, %xmm12016; SSE41-NEXT:    por %xmm3, %xmm12017; SSE41-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [128,64,32,16,8,4,2,1,128,1,2,4,8,16,32,64]2018; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02019; SSE41-NEXT:    por %xmm1, %xmm02020; SSE41-NEXT:    retq2021;2022; AVX1-LABEL: constant_funnnel_v16i8:2023; AVX1:       # %bb.0:2024; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm22025; AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm2 = xmm1[8],xmm2[8],xmm1[9],xmm2[9],xmm1[10],xmm2[10],xmm1[11],xmm2[11],xmm1[12],xmm2[12],xmm1[13],xmm2[13],xmm1[14],xmm2[14],xmm1[15],xmm2[15]2026; AVX1-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2 # [256,2,4,8,16,32,64,128]2027; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm22028; AVX1-NEXT:    vpmovzxbw {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero2029; AVX1-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1 # [256,128,64,32,16,8,4,2]2030; AVX1-NEXT:    vpsrlw $8, %xmm1, %xmm12031; AVX1-NEXT:    vpackuswb %xmm2, %xmm1, %xmm12032; AVX1-NEXT:    vpaddb %xmm0, %xmm0, %xmm02033; AVX1-NEXT:    vpmaddubsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm2 # [0,64,0,16,0,4,0,1,0,1,0,4,0,16,0,64]2034; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm22035; AVX1-NEXT:    vpor %xmm1, %xmm2, %xmm12036; AVX1-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [128,64,32,16,8,4,2,1,128,1,2,4,8,16,32,64]2037; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm02038; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm02039; AVX1-NEXT:    retq2040;2041; AVX2-LABEL: constant_funnnel_v16i8:2042; AVX2:       # %bb.0:2043; AVX2-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],zero2044; AVX2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [256,128,64,32,16,8,4,2,256,2,4,8,16,32,64,128]2045; AVX2-NEXT:    vpsrlw $8, %ymm1, %ymm12046; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm22047; AVX2-NEXT:    vpackuswb %xmm2, %xmm1, %xmm12048; AVX2-NEXT:    vpaddb %xmm0, %xmm0, %xmm02049; 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],zero2050; AVX2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [128,64,32,16,8,4,2,1,128,1,2,4,8,16,32,64]2051; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02052; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm22053; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm02054; AVX2-NEXT:    vpor %xmm1, %xmm0, %xmm02055; AVX2-NEXT:    vzeroupper2056; AVX2-NEXT:    retq2057;2058; AVX512F-LABEL: constant_funnnel_v16i8:2059; AVX512F:       # %bb.0:2060; AVX512F-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,zero2061; AVX512F-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm12062; AVX512F-NEXT:    vpaddb %xmm0, %xmm0, %xmm02063; AVX512F-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,zero2064; AVX512F-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm02065; AVX512F-NEXT:    vpord %zmm1, %zmm0, %zmm02066; AVX512F-NEXT:    vpmovdb %zmm0, %xmm02067; AVX512F-NEXT:    vzeroupper2068; AVX512F-NEXT:    retq2069;2070; AVX512VL-LABEL: constant_funnnel_v16i8:2071; AVX512VL:       # %bb.0:2072; AVX512VL-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,zero2073; AVX512VL-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm12074; AVX512VL-NEXT:    vpaddb %xmm0, %xmm0, %xmm02075; AVX512VL-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,zero2076; AVX512VL-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm02077; AVX512VL-NEXT:    vpord %zmm1, %zmm0, %zmm02078; AVX512VL-NEXT:    vpmovdb %zmm0, %xmm02079; AVX512VL-NEXT:    vzeroupper2080; AVX512VL-NEXT:    retq2081;2082; AVX512BW-LABEL: constant_funnnel_v16i8:2083; AVX512BW:       # %bb.0:2084; AVX512BW-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,0,7,6,5,4,3,2,1]2085; 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],zero2086; 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],zero2087; AVX512BW-NEXT:    vpsllw $8, %ymm0, %ymm02088; AVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm02089; AVX512BW-NEXT:    vpsrlvw %zmm2, %zmm0, %zmm02090; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm02091; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm02092; AVX512BW-NEXT:    vzeroupper2093; AVX512BW-NEXT:    retq2094;2095; AVX512VBMI2-LABEL: constant_funnnel_v16i8:2096; AVX512VBMI2:       # %bb.0:2097; AVX512VBMI2-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm12098; AVX512VBMI2-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm02099; AVX512VBMI2-NEXT:    vmovdqa {{.*#+}} ymm2 = [0,64,1,65,2,66,3,67,4,68,5,69,6,70,7,71,8,72,9,73,10,74,11,75,12,76,13,77,14,78,15,79]2100; AVX512VBMI2-NEXT:    vpermt2b %zmm0, %zmm2, %zmm12101; AVX512VBMI2-NEXT:    vpmovsxbw {{.*#+}} ymm0 = [0,1,2,3,4,5,6,7,0,7,6,5,4,3,2,1]2102; AVX512VBMI2-NEXT:    vpsrlvw %zmm0, %zmm1, %zmm02103; AVX512VBMI2-NEXT:    vpmovwb %zmm0, %ymm02104; AVX512VBMI2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm02105; AVX512VBMI2-NEXT:    vzeroupper2106; AVX512VBMI2-NEXT:    retq2107;2108; AVX512VLBW-LABEL: constant_funnnel_v16i8:2109; AVX512VLBW:       # %bb.0:2110; AVX512VLBW-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],zero2111; AVX512VLBW-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],zero2112; AVX512VLBW-NEXT:    vpsllw $8, %ymm0, %ymm02113; AVX512VLBW-NEXT:    vpor %ymm1, %ymm0, %ymm02114; AVX512VLBW-NEXT:    vpsrlvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02115; AVX512VLBW-NEXT:    vpmovwb %ymm0, %xmm02116; AVX512VLBW-NEXT:    vzeroupper2117; AVX512VLBW-NEXT:    retq2118;2119; AVX512VLVBMI2-LABEL: constant_funnnel_v16i8:2120; AVX512VLVBMI2:       # %bb.0:2121; AVX512VLVBMI2-NEXT:    # kill: def $xmm1 killed $xmm1 def $ymm12122; AVX512VLVBMI2-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm02123; AVX512VLVBMI2-NEXT:    vmovdqa {{.*#+}} ymm2 = [0,32,1,33,2,34,3,35,4,36,5,37,6,38,7,39,8,40,9,41,10,42,11,43,12,44,13,45,14,46,15,47]2124; AVX512VLVBMI2-NEXT:    vpermi2b %ymm0, %ymm1, %ymm22125; AVX512VLVBMI2-NEXT:    vpsrlvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm02126; AVX512VLVBMI2-NEXT:    vpmovwb %ymm0, %xmm02127; AVX512VLVBMI2-NEXT:    vzeroupper2128; AVX512VLVBMI2-NEXT:    retq2129;2130; XOP-LABEL: constant_funnnel_v16i8:2131; XOP:       # %bb.0:2132; XOP-NEXT:    vpshlb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm12133; XOP-NEXT:    vpaddb %xmm0, %xmm0, %xmm02134; XOP-NEXT:    vpshlb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm02135; XOP-NEXT:    vpor %xmm1, %xmm0, %xmm02136; XOP-NEXT:    retq2137;2138; X86-SSE2-LABEL: constant_funnnel_v16i8:2139; X86-SSE2:       # %bb.0:2140; X86-SSE2-NEXT:    pxor %xmm2, %xmm22141; X86-SSE2-NEXT:    movdqa %xmm1, %xmm32142; X86-SSE2-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm2[8],xmm3[9],xmm2[9],xmm3[10],xmm2[10],xmm3[11],xmm2[11],xmm3[12],xmm2[12],xmm3[13],xmm2[13],xmm3[14],xmm2[14],xmm3[15],xmm2[15]2143; X86-SSE2-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}, %xmm3 # [256,2,4,8,16,32,64,128]2144; X86-SSE2-NEXT:    psrlw $8, %xmm32145; X86-SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]2146; X86-SSE2-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1 # [256,128,64,32,16,8,4,2]2147; X86-SSE2-NEXT:    psrlw $8, %xmm12148; X86-SSE2-NEXT:    packuswb %xmm3, %xmm12149; X86-SSE2-NEXT:    paddb %xmm0, %xmm02150; X86-SSE2-NEXT:    movdqa %xmm0, %xmm22151; X86-SSE2-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2152; X86-SSE2-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}, %xmm2 # [128,u,1,u,2,u,4,u,8,u,16,u,32,u,64,u]2153; X86-SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [255,255,255,255,255,255,255,255]2154; X86-SSE2-NEXT:    pand %xmm3, %xmm22155; X86-SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2156; X86-SSE2-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0 # [128,u,64,u,32,u,16,u,8,u,4,u,2,u,1,u]2157; X86-SSE2-NEXT:    pand %xmm3, %xmm02158; X86-SSE2-NEXT:    packuswb %xmm2, %xmm02159; X86-SSE2-NEXT:    por %xmm1, %xmm02160; X86-SSE2-NEXT:    retl2161  %res = call <16 x i8> @llvm.fshr.v16i8(<16 x i8> %x, <16 x i8> %y, <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1>)2162  ret <16 x i8> %res2163}2164 2165;2166; Uniform Constant Shifts2167;2168 2169define <2 x i64> @splatconstant_funnnel_v2i64(<2 x i64> %x, <2 x i64> %y) nounwind {2170; SSE-LABEL: splatconstant_funnnel_v2i64:2171; SSE:       # %bb.0:2172; SSE-NEXT:    psrlq $14, %xmm12173; SSE-NEXT:    psllq $50, %xmm02174; SSE-NEXT:    por %xmm1, %xmm02175; SSE-NEXT:    retq2176;2177; AVX-LABEL: splatconstant_funnnel_v2i64:2178; AVX:       # %bb.0:2179; AVX-NEXT:    vpsrlq $14, %xmm1, %xmm12180; AVX-NEXT:    vpsllq $50, %xmm0, %xmm02181; AVX-NEXT:    vpor %xmm1, %xmm0, %xmm02182; AVX-NEXT:    retq2183;2184; AVX512F-LABEL: splatconstant_funnnel_v2i64:2185; AVX512F:       # %bb.0:2186; AVX512F-NEXT:    vpsrlq $14, %xmm1, %xmm12187; AVX512F-NEXT:    vpsllq $50, %xmm0, %xmm02188; AVX512F-NEXT:    vpor %xmm1, %xmm0, %xmm02189; AVX512F-NEXT:    retq2190;2191; AVX512VL-LABEL: splatconstant_funnnel_v2i64:2192; AVX512VL:       # %bb.0:2193; AVX512VL-NEXT:    vpsrlq $14, %xmm1, %xmm12194; AVX512VL-NEXT:    vpsllq $50, %xmm0, %xmm02195; AVX512VL-NEXT:    vpor %xmm1, %xmm0, %xmm02196; AVX512VL-NEXT:    retq2197;2198; AVX512BW-LABEL: splatconstant_funnnel_v2i64:2199; AVX512BW:       # %bb.0:2200; AVX512BW-NEXT:    vpsrlq $14, %xmm1, %xmm12201; AVX512BW-NEXT:    vpsllq $50, %xmm0, %xmm02202; AVX512BW-NEXT:    vpor %xmm1, %xmm0, %xmm02203; AVX512BW-NEXT:    retq2204;2205; AVX512VBMI2-LABEL: splatconstant_funnnel_v2i64:2206; AVX512VBMI2:       # %bb.0:2207; AVX512VBMI2-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm12208; AVX512VBMI2-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm02209; AVX512VBMI2-NEXT:    vpshrdq $14, %zmm0, %zmm1, %zmm02210; AVX512VBMI2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm02211; AVX512VBMI2-NEXT:    vzeroupper2212; AVX512VBMI2-NEXT:    retq2213;2214; AVX512VLBW-LABEL: splatconstant_funnnel_v2i64:2215; AVX512VLBW:       # %bb.0:2216; AVX512VLBW-NEXT:    vpsrlq $14, %xmm1, %xmm12217; AVX512VLBW-NEXT:    vpsllq $50, %xmm0, %xmm02218; AVX512VLBW-NEXT:    vpor %xmm1, %xmm0, %xmm02219; AVX512VLBW-NEXT:    retq2220;2221; AVX512VLVBMI2-LABEL: splatconstant_funnnel_v2i64:2222; AVX512VLVBMI2:       # %bb.0:2223; AVX512VLVBMI2-NEXT:    vpshrdq $14, %xmm0, %xmm1, %xmm02224; AVX512VLVBMI2-NEXT:    retq2225;2226; XOP-LABEL: splatconstant_funnnel_v2i64:2227; XOP:       # %bb.0:2228; XOP-NEXT:    vpsrlq $14, %xmm1, %xmm12229; XOP-NEXT:    vpsllq $50, %xmm0, %xmm02230; XOP-NEXT:    vpor %xmm1, %xmm0, %xmm02231; XOP-NEXT:    retq2232;2233; X86-SSE2-LABEL: splatconstant_funnnel_v2i64:2234; X86-SSE2:       # %bb.0:2235; X86-SSE2-NEXT:    psrlq $14, %xmm12236; X86-SSE2-NEXT:    psllq $50, %xmm02237; X86-SSE2-NEXT:    por %xmm1, %xmm02238; X86-SSE2-NEXT:    retl2239  %res = call <2 x i64> @llvm.fshr.v2i64(<2 x i64> %x, <2 x i64> %y, <2 x i64> <i64 14, i64 14>)2240  ret <2 x i64> %res2241}2242 2243define <4 x i32> @splatconstant_funnnel_v4i32(<4 x i32> %x, <4 x i32> %y) nounwind {2244; SSE-LABEL: splatconstant_funnnel_v4i32:2245; SSE:       # %bb.0:2246; SSE-NEXT:    psrld $4, %xmm12247; SSE-NEXT:    pslld $28, %xmm02248; SSE-NEXT:    por %xmm1, %xmm02249; SSE-NEXT:    retq2250;2251; AVX-LABEL: splatconstant_funnnel_v4i32:2252; AVX:       # %bb.0:2253; AVX-NEXT:    vpsrld $4, %xmm1, %xmm12254; AVX-NEXT:    vpslld $28, %xmm0, %xmm02255; AVX-NEXT:    vpor %xmm1, %xmm0, %xmm02256; AVX-NEXT:    retq2257;2258; AVX512F-LABEL: splatconstant_funnnel_v4i32:2259; AVX512F:       # %bb.0:2260; AVX512F-NEXT:    vpsrld $4, %xmm1, %xmm12261; AVX512F-NEXT:    vpslld $28, %xmm0, %xmm02262; AVX512F-NEXT:    vpor %xmm1, %xmm0, %xmm02263; AVX512F-NEXT:    retq2264;2265; AVX512VL-LABEL: splatconstant_funnnel_v4i32:2266; AVX512VL:       # %bb.0:2267; AVX512VL-NEXT:    vpsrld $4, %xmm1, %xmm12268; AVX512VL-NEXT:    vpslld $28, %xmm0, %xmm02269; AVX512VL-NEXT:    vpor %xmm1, %xmm0, %xmm02270; AVX512VL-NEXT:    retq2271;2272; AVX512BW-LABEL: splatconstant_funnnel_v4i32:2273; AVX512BW:       # %bb.0:2274; AVX512BW-NEXT:    vpsrld $4, %xmm1, %xmm12275; AVX512BW-NEXT:    vpslld $28, %xmm0, %xmm02276; AVX512BW-NEXT:    vpor %xmm1, %xmm0, %xmm02277; AVX512BW-NEXT:    retq2278;2279; AVX512VBMI2-LABEL: splatconstant_funnnel_v4i32:2280; AVX512VBMI2:       # %bb.0:2281; AVX512VBMI2-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm12282; AVX512VBMI2-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm02283; AVX512VBMI2-NEXT:    vpshrdd $4, %zmm0, %zmm1, %zmm02284; AVX512VBMI2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm02285; AVX512VBMI2-NEXT:    vzeroupper2286; AVX512VBMI2-NEXT:    retq2287;2288; AVX512VLBW-LABEL: splatconstant_funnnel_v4i32:2289; AVX512VLBW:       # %bb.0:2290; AVX512VLBW-NEXT:    vpsrld $4, %xmm1, %xmm12291; AVX512VLBW-NEXT:    vpslld $28, %xmm0, %xmm02292; AVX512VLBW-NEXT:    vpor %xmm1, %xmm0, %xmm02293; AVX512VLBW-NEXT:    retq2294;2295; AVX512VLVBMI2-LABEL: splatconstant_funnnel_v4i32:2296; AVX512VLVBMI2:       # %bb.0:2297; AVX512VLVBMI2-NEXT:    vpshrdd $4, %xmm0, %xmm1, %xmm02298; AVX512VLVBMI2-NEXT:    retq2299;2300; XOP-LABEL: splatconstant_funnnel_v4i32:2301; XOP:       # %bb.0:2302; XOP-NEXT:    vpsrld $4, %xmm1, %xmm12303; XOP-NEXT:    vpslld $28, %xmm0, %xmm02304; XOP-NEXT:    vpor %xmm1, %xmm0, %xmm02305; XOP-NEXT:    retq2306;2307; X86-SSE2-LABEL: splatconstant_funnnel_v4i32:2308; X86-SSE2:       # %bb.0:2309; X86-SSE2-NEXT:    psrld $4, %xmm12310; X86-SSE2-NEXT:    pslld $28, %xmm02311; X86-SSE2-NEXT:    por %xmm1, %xmm02312; X86-SSE2-NEXT:    retl2313  %res = call <4 x i32> @llvm.fshr.v4i32(<4 x i32> %x, <4 x i32> %y, <4 x i32> <i32 4, i32 4, i32 4, i32 4>)2314  ret <4 x i32> %res2315}2316 2317define <8 x i16> @splatconstant_funnnel_v8i16(<8 x i16> %x, <8 x i16> %y) nounwind {2318; SSE-LABEL: splatconstant_funnnel_v8i16:2319; SSE:       # %bb.0:2320; SSE-NEXT:    psrlw $7, %xmm12321; SSE-NEXT:    psllw $9, %xmm02322; SSE-NEXT:    por %xmm1, %xmm02323; SSE-NEXT:    retq2324;2325; AVX-LABEL: splatconstant_funnnel_v8i16:2326; AVX:       # %bb.0:2327; AVX-NEXT:    vpsrlw $7, %xmm1, %xmm12328; AVX-NEXT:    vpsllw $9, %xmm0, %xmm02329; AVX-NEXT:    vpor %xmm1, %xmm0, %xmm02330; AVX-NEXT:    retq2331;2332; AVX512F-LABEL: splatconstant_funnnel_v8i16:2333; AVX512F:       # %bb.0:2334; AVX512F-NEXT:    vpsrlw $7, %xmm1, %xmm12335; AVX512F-NEXT:    vpsllw $9, %xmm0, %xmm02336; AVX512F-NEXT:    vpor %xmm1, %xmm0, %xmm02337; AVX512F-NEXT:    retq2338;2339; AVX512VL-LABEL: splatconstant_funnnel_v8i16:2340; AVX512VL:       # %bb.0:2341; AVX512VL-NEXT:    vpsrlw $7, %xmm1, %xmm12342; AVX512VL-NEXT:    vpsllw $9, %xmm0, %xmm02343; AVX512VL-NEXT:    vpor %xmm1, %xmm0, %xmm02344; AVX512VL-NEXT:    retq2345;2346; AVX512BW-LABEL: splatconstant_funnnel_v8i16:2347; AVX512BW:       # %bb.0:2348; AVX512BW-NEXT:    vpsrlw $7, %xmm1, %xmm12349; AVX512BW-NEXT:    vpsllw $9, %xmm0, %xmm02350; AVX512BW-NEXT:    vpor %xmm1, %xmm0, %xmm02351; AVX512BW-NEXT:    retq2352;2353; AVX512VBMI2-LABEL: splatconstant_funnnel_v8i16:2354; AVX512VBMI2:       # %bb.0:2355; AVX512VBMI2-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm12356; AVX512VBMI2-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm02357; AVX512VBMI2-NEXT:    vpshrdw $7, %zmm0, %zmm1, %zmm02358; AVX512VBMI2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm02359; AVX512VBMI2-NEXT:    vzeroupper2360; AVX512VBMI2-NEXT:    retq2361;2362; AVX512VLBW-LABEL: splatconstant_funnnel_v8i16:2363; AVX512VLBW:       # %bb.0:2364; AVX512VLBW-NEXT:    vpsrlw $7, %xmm1, %xmm12365; AVX512VLBW-NEXT:    vpsllw $9, %xmm0, %xmm02366; AVX512VLBW-NEXT:    vpor %xmm1, %xmm0, %xmm02367; AVX512VLBW-NEXT:    retq2368;2369; AVX512VLVBMI2-LABEL: splatconstant_funnnel_v8i16:2370; AVX512VLVBMI2:       # %bb.0:2371; AVX512VLVBMI2-NEXT:    vpshrdw $7, %xmm0, %xmm1, %xmm02372; AVX512VLVBMI2-NEXT:    retq2373;2374; XOP-LABEL: splatconstant_funnnel_v8i16:2375; XOP:       # %bb.0:2376; XOP-NEXT:    vpsrlw $7, %xmm1, %xmm12377; XOP-NEXT:    vpsllw $9, %xmm0, %xmm02378; XOP-NEXT:    vpor %xmm1, %xmm0, %xmm02379; XOP-NEXT:    retq2380;2381; X86-SSE2-LABEL: splatconstant_funnnel_v8i16:2382; X86-SSE2:       # %bb.0:2383; X86-SSE2-NEXT:    psrlw $7, %xmm12384; X86-SSE2-NEXT:    psllw $9, %xmm02385; X86-SSE2-NEXT:    por %xmm1, %xmm02386; X86-SSE2-NEXT:    retl2387  %res = call <8 x i16> @llvm.fshr.v8i16(<8 x i16> %x, <8 x i16> %y, <8 x i16> <i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7>)2388  ret <8 x i16> %res2389}2390 2391define <16 x i8> @splatconstant_funnnel_v16i8(<16 x i8> %x, <16 x i8> %y) nounwind {2392; SSE-LABEL: splatconstant_funnnel_v16i8:2393; SSE:       # %bb.0:2394; SSE-NEXT:    psrlw $4, %xmm12395; SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm12396; SSE-NEXT:    psllw $4, %xmm02397; SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02398; SSE-NEXT:    por %xmm1, %xmm02399; SSE-NEXT:    retq2400;2401; AVX-LABEL: splatconstant_funnnel_v16i8:2402; AVX:       # %bb.0:2403; AVX-NEXT:    vpsrlw $4, %xmm1, %xmm12404; AVX-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm12405; AVX-NEXT:    vpsllw $4, %xmm0, %xmm02406; AVX-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm02407; AVX-NEXT:    vpor %xmm1, %xmm0, %xmm02408; AVX-NEXT:    retq2409;2410; AVX512F-LABEL: splatconstant_funnnel_v16i8:2411; AVX512F:       # %bb.0:2412; AVX512F-NEXT:    vpsllw $4, %xmm0, %xmm22413; AVX512F-NEXT:    vpsrlw $4, %xmm1, %xmm02414; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 = zmm0 ^ (m32bcst & (zmm0 ^ zmm2))2415; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm02416; AVX512F-NEXT:    vzeroupper2417; AVX512F-NEXT:    retq2418;2419; AVX512VL-LABEL: splatconstant_funnnel_v16i8:2420; AVX512VL:       # %bb.0:2421; AVX512VL-NEXT:    vpsllw $4, %xmm0, %xmm22422; AVX512VL-NEXT:    vpsrlw $4, %xmm1, %xmm02423; AVX512VL-NEXT:    vpternlogd {{.*#+}} xmm0 = xmm0 ^ (m32bcst & (xmm0 ^ xmm2))2424; AVX512VL-NEXT:    retq2425;2426; AVX512BW-LABEL: splatconstant_funnnel_v16i8:2427; AVX512BW:       # %bb.0:2428; AVX512BW-NEXT:    vpsllw $4, %xmm0, %xmm22429; AVX512BW-NEXT:    vpsrlw $4, %xmm1, %xmm02430; AVX512BW-NEXT:    vpternlogd {{.*#+}} zmm0 = zmm0 ^ (m32bcst & (zmm0 ^ zmm2))2431; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm02432; AVX512BW-NEXT:    vzeroupper2433; AVX512BW-NEXT:    retq2434;2435; AVX512VBMI2-LABEL: splatconstant_funnnel_v16i8:2436; AVX512VBMI2:       # %bb.0:2437; AVX512VBMI2-NEXT:    vpsllw $4, %xmm0, %xmm22438; AVX512VBMI2-NEXT:    vpsrlw $4, %xmm1, %xmm02439; AVX512VBMI2-NEXT:    vpternlogd {{.*#+}} zmm0 = zmm0 ^ (m32bcst & (zmm0 ^ zmm2))2440; AVX512VBMI2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm02441; AVX512VBMI2-NEXT:    vzeroupper2442; AVX512VBMI2-NEXT:    retq2443;2444; AVX512VLBW-LABEL: splatconstant_funnnel_v16i8:2445; AVX512VLBW:       # %bb.0:2446; AVX512VLBW-NEXT:    vpsllw $4, %xmm0, %xmm22447; AVX512VLBW-NEXT:    vpsrlw $4, %xmm1, %xmm02448; AVX512VLBW-NEXT:    vpternlogd {{.*#+}} xmm0 = xmm0 ^ (m32bcst & (xmm0 ^ xmm2))2449; AVX512VLBW-NEXT:    retq2450;2451; AVX512VLVBMI2-LABEL: splatconstant_funnnel_v16i8:2452; AVX512VLVBMI2:       # %bb.0:2453; AVX512VLVBMI2-NEXT:    vpsllw $4, %xmm0, %xmm22454; AVX512VLVBMI2-NEXT:    vpsrlw $4, %xmm1, %xmm02455; AVX512VLVBMI2-NEXT:    vpternlogd {{.*#+}} xmm0 = xmm0 ^ (m32bcst & (xmm0 ^ xmm2))2456; AVX512VLVBMI2-NEXT:    retq2457;2458; XOP-LABEL: splatconstant_funnnel_v16i8:2459; XOP:       # %bb.0:2460; XOP-NEXT:    vpsrlw $4, %xmm1, %xmm12461; XOP-NEXT:    vpsllw $4, %xmm0, %xmm02462; XOP-NEXT:    vpcmov {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm0, %xmm02463; XOP-NEXT:    retq2464;2465; X86-SSE2-LABEL: splatconstant_funnnel_v16i8:2466; X86-SSE2:       # %bb.0:2467; X86-SSE2-NEXT:    psrlw $4, %xmm12468; X86-SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm12469; X86-SSE2-NEXT:    psllw $4, %xmm02470; X86-SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02471; X86-SSE2-NEXT:    por %xmm1, %xmm02472; X86-SSE2-NEXT:    retl2473  %res = call <16 x i8> @llvm.fshr.v16i8(<16 x i8> %x, <16 x i8> %y, <16 x i8> <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>)2474  ret <16 x i8> %res2475}2476