brintos

brintos / llvm-project-archived public Read only

0
0
Text · 108.2 KiB · 0cffa1b Raw
2126 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX13; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX24; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefixes=AVX512F5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vl | FileCheck %s --check-prefixes=AVX512VL6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw | FileCheck %s --check-prefixes=AVX512BW7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vbmi,+avx512vbmi2 | FileCheck %s --check-prefixes=AVX512VBMI28; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw,+avx512vl | FileCheck %s --check-prefixes=AVX512VLBW9; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vbmi,+avx512vbmi2,+avx512vl | FileCheck %s --check-prefixes=AVX512VLVBMI210; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx10.1 | FileCheck %s --check-prefixes=AVX512VLVBMI211; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx | FileCheck %s --check-prefixes=XOPAVX112; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx2 | FileCheck %s --check-prefixes=XOPAVX213 14declare <4 x i64> @llvm.fshr.v4i64(<4 x i64>, <4 x i64>, <4 x i64>)15declare <8 x i32> @llvm.fshr.v8i32(<8 x i32>, <8 x i32>, <8 x i32>)16declare <16 x i16> @llvm.fshr.v16i16(<16 x i16>, <16 x i16>, <16 x i16>)17declare <32 x i8> @llvm.fshr.v32i8(<32 x i8>, <32 x i8>, <32 x i8>)18 19;20; Variable Shifts21;22 23define <4 x i64> @var_funnnel_v4i64(<4 x i64> %x, <4 x i64> %y, <4 x i64> %amt) nounwind {24; AVX1-LABEL: var_funnnel_v4i64:25; AVX1:       # %bb.0:26; AVX1-NEXT:    vbroadcastsd {{.*#+}} ymm3 = [63,63,63,63]27; AVX1-NEXT:    vandps %ymm3, %ymm2, %ymm428; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm529; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm630; AVX1-NEXT:    vpsrlq %xmm5, %xmm6, %xmm731; AVX1-NEXT:    vpshufd {{.*#+}} xmm5 = xmm5[2,3,2,3]32; AVX1-NEXT:    vpsrlq %xmm5, %xmm6, %xmm533; AVX1-NEXT:    vpblendw {{.*#+}} xmm5 = xmm7[0,1,2,3],xmm5[4,5,6,7]34; AVX1-NEXT:    vpsrlq %xmm4, %xmm1, %xmm635; AVX1-NEXT:    vpshufd {{.*#+}} xmm4 = xmm4[2,3,2,3]36; AVX1-NEXT:    vpsrlq %xmm4, %xmm1, %xmm137; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm6[0,1,2,3],xmm1[4,5,6,7]38; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm1, %ymm139; AVX1-NEXT:    vandnps %ymm3, %ymm2, %ymm240; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm341; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm442; AVX1-NEXT:    vpaddq %xmm4, %xmm4, %xmm443; AVX1-NEXT:    vpsllq %xmm3, %xmm4, %xmm544; AVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm3[2,3,2,3]45; AVX1-NEXT:    vpsllq %xmm3, %xmm4, %xmm346; AVX1-NEXT:    vpblendw {{.*#+}} xmm3 = xmm5[0,1,2,3],xmm3[4,5,6,7]47; AVX1-NEXT:    vpaddq %xmm0, %xmm0, %xmm048; AVX1-NEXT:    vpsllq %xmm2, %xmm0, %xmm449; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[2,3,2,3]50; AVX1-NEXT:    vpsllq %xmm2, %xmm0, %xmm051; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm4[0,1,2,3],xmm0[4,5,6,7]52; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm053; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm054; AVX1-NEXT:    retq55;56; AVX2-LABEL: var_funnnel_v4i64:57; AVX2:       # %bb.0:58; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [63,63,63,63]59; AVX2-NEXT:    vpand %ymm3, %ymm2, %ymm460; AVX2-NEXT:    vpsrlvq %ymm4, %ymm1, %ymm161; AVX2-NEXT:    vpandn %ymm3, %ymm2, %ymm262; AVX2-NEXT:    vpaddq %ymm0, %ymm0, %ymm063; AVX2-NEXT:    vpsllvq %ymm2, %ymm0, %ymm064; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm065; AVX2-NEXT:    retq66;67; AVX512F-LABEL: var_funnnel_v4i64:68; AVX512F:       # %bb.0:69; AVX512F-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [63,63,63,63]70; AVX512F-NEXT:    vpand %ymm3, %ymm2, %ymm471; AVX512F-NEXT:    vpsrlvq %ymm4, %ymm1, %ymm172; AVX512F-NEXT:    vpandn %ymm3, %ymm2, %ymm273; AVX512F-NEXT:    vpaddq %ymm0, %ymm0, %ymm074; AVX512F-NEXT:    vpsllvq %ymm2, %ymm0, %ymm075; AVX512F-NEXT:    vpor %ymm1, %ymm0, %ymm076; AVX512F-NEXT:    retq77;78; AVX512VL-LABEL: var_funnnel_v4i64:79; AVX512VL:       # %bb.0:80; AVX512VL-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [63,63,63,63]81; AVX512VL-NEXT:    vpand %ymm3, %ymm2, %ymm482; AVX512VL-NEXT:    vpsrlvq %ymm4, %ymm1, %ymm183; AVX512VL-NEXT:    vpandn %ymm3, %ymm2, %ymm284; AVX512VL-NEXT:    vpaddq %ymm0, %ymm0, %ymm085; AVX512VL-NEXT:    vpsllvq %ymm2, %ymm0, %ymm086; AVX512VL-NEXT:    vpor %ymm1, %ymm0, %ymm087; AVX512VL-NEXT:    retq88;89; AVX512BW-LABEL: var_funnnel_v4i64:90; AVX512BW:       # %bb.0:91; AVX512BW-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [63,63,63,63]92; AVX512BW-NEXT:    vpand %ymm3, %ymm2, %ymm493; AVX512BW-NEXT:    vpsrlvq %ymm4, %ymm1, %ymm194; AVX512BW-NEXT:    vpandn %ymm3, %ymm2, %ymm295; AVX512BW-NEXT:    vpaddq %ymm0, %ymm0, %ymm096; AVX512BW-NEXT:    vpsllvq %ymm2, %ymm0, %ymm097; AVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm098; AVX512BW-NEXT:    retq99;100; AVX512VBMI2-LABEL: var_funnnel_v4i64:101; AVX512VBMI2:       # %bb.0:102; AVX512VBMI2-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2103; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1104; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0105; AVX512VBMI2-NEXT:    vpshrdvq %zmm2, %zmm0, %zmm1106; AVX512VBMI2-NEXT:    vmovdqa %ymm1, %ymm0107; AVX512VBMI2-NEXT:    retq108;109; AVX512VLBW-LABEL: var_funnnel_v4i64:110; AVX512VLBW:       # %bb.0:111; AVX512VLBW-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [63,63,63,63]112; AVX512VLBW-NEXT:    vpand %ymm3, %ymm2, %ymm4113; AVX512VLBW-NEXT:    vpsrlvq %ymm4, %ymm1, %ymm1114; AVX512VLBW-NEXT:    vpandn %ymm3, %ymm2, %ymm2115; AVX512VLBW-NEXT:    vpaddq %ymm0, %ymm0, %ymm0116; AVX512VLBW-NEXT:    vpsllvq %ymm2, %ymm0, %ymm0117; AVX512VLBW-NEXT:    vpor %ymm1, %ymm0, %ymm0118; AVX512VLBW-NEXT:    retq119;120; AVX512VLVBMI2-LABEL: var_funnnel_v4i64:121; AVX512VLVBMI2:       # %bb.0:122; AVX512VLVBMI2-NEXT:    vpshrdvq %ymm2, %ymm0, %ymm1123; AVX512VLVBMI2-NEXT:    vmovdqa %ymm1, %ymm0124; AVX512VLVBMI2-NEXT:    retq125;126; XOPAVX1-LABEL: var_funnnel_v4i64:127; XOPAVX1:       # %bb.0:128; XOPAVX1-NEXT:    vbroadcastsd {{.*#+}} ymm3 = [63,63,63,63]129; XOPAVX1-NEXT:    vandnps %ymm3, %ymm2, %ymm4130; XOPAVX1-NEXT:    vextractf128 $1, %ymm4, %xmm5131; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6132; XOPAVX1-NEXT:    vpaddq %xmm6, %xmm6, %xmm6133; XOPAVX1-NEXT:    vpshlq %xmm5, %xmm6, %xmm5134; XOPAVX1-NEXT:    vpaddq %xmm0, %xmm0, %xmm0135; XOPAVX1-NEXT:    vpshlq %xmm4, %xmm0, %xmm0136; XOPAVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm0, %ymm0137; XOPAVX1-NEXT:    vandps %ymm3, %ymm2, %ymm2138; XOPAVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3139; XOPAVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4140; XOPAVX1-NEXT:    vpsubq %xmm3, %xmm4, %xmm3141; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5142; XOPAVX1-NEXT:    vpshlq %xmm3, %xmm5, %xmm3143; XOPAVX1-NEXT:    vpsubq %xmm2, %xmm4, %xmm2144; XOPAVX1-NEXT:    vpshlq %xmm2, %xmm1, %xmm1145; XOPAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1146; XOPAVX1-NEXT:    vorps %ymm1, %ymm0, %ymm0147; XOPAVX1-NEXT:    retq148;149; XOPAVX2-LABEL: var_funnnel_v4i64:150; XOPAVX2:       # %bb.0:151; XOPAVX2-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [63,63,63,63]152; XOPAVX2-NEXT:    vpand %ymm3, %ymm2, %ymm4153; XOPAVX2-NEXT:    vpsrlvq %ymm4, %ymm1, %ymm1154; XOPAVX2-NEXT:    vpandn %ymm3, %ymm2, %ymm2155; XOPAVX2-NEXT:    vpaddq %ymm0, %ymm0, %ymm0156; XOPAVX2-NEXT:    vpsllvq %ymm2, %ymm0, %ymm0157; XOPAVX2-NEXT:    vpor %ymm1, %ymm0, %ymm0158; XOPAVX2-NEXT:    retq159  %res = call <4 x i64> @llvm.fshr.v4i64(<4 x i64> %x, <4 x i64> %y, <4 x i64> %amt)160  ret <4 x i64> %res161}162 163define <8 x i32> @var_funnnel_v8i32(<8 x i32> %x, <8 x i32> %y, <8 x i32> %amt) nounwind {164; AVX1-LABEL: var_funnnel_v8i32:165; AVX1:       # %bb.0:166; AVX1-NEXT:    vbroadcastss {{.*#+}} ymm3 = [31,31,31,31,31,31,31,31]167; AVX1-NEXT:    vandps %ymm3, %ymm2, %ymm2168; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4169; AVX1-NEXT:    vpsrldq {{.*#+}} xmm5 = xmm4[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero170; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6171; AVX1-NEXT:    vpsrld %xmm5, %xmm6, %xmm5172; AVX1-NEXT:    vpsrlq $32, %xmm4, %xmm7173; AVX1-NEXT:    vpsrld %xmm7, %xmm6, %xmm7174; AVX1-NEXT:    vpblendw {{.*#+}} xmm5 = xmm7[0,1,2,3],xmm5[4,5,6,7]175; AVX1-NEXT:    vpxor %xmm7, %xmm7, %xmm7176; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm8 = xmm4[2],xmm7[2],xmm4[3],xmm7[3]177; AVX1-NEXT:    vpsrld %xmm8, %xmm6, %xmm8178; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm9 = xmm4[0],zero,xmm4[1],zero179; AVX1-NEXT:    vpsrld %xmm9, %xmm6, %xmm6180; AVX1-NEXT:    vpblendw {{.*#+}} xmm6 = xmm6[0,1,2,3],xmm8[4,5,6,7]181; AVX1-NEXT:    vpblendw {{.*#+}} xmm5 = xmm6[0,1],xmm5[2,3],xmm6[4,5],xmm5[6,7]182; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4183; AVX1-NEXT:    vpslld $23, %xmm4, %xmm4184; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm6 = [1065353216,1065353216,1065353216,1065353216]185; AVX1-NEXT:    vpaddd %xmm6, %xmm4, %xmm4186; AVX1-NEXT:    vcvttps2dq %xmm4, %xmm4187; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm8188; AVX1-NEXT:    vpaddd %xmm8, %xmm8, %xmm8189; AVX1-NEXT:    vpmulld %xmm4, %xmm8, %xmm4190; AVX1-NEXT:    vpor %xmm5, %xmm4, %xmm4191; AVX1-NEXT:    vpsrldq {{.*#+}} xmm5 = xmm2[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero192; AVX1-NEXT:    vpsrld %xmm5, %xmm1, %xmm5193; AVX1-NEXT:    vpsrlq $32, %xmm2, %xmm8194; AVX1-NEXT:    vpsrld %xmm8, %xmm1, %xmm8195; AVX1-NEXT:    vpblendw {{.*#+}} xmm5 = xmm8[0,1,2,3],xmm5[4,5,6,7]196; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm7 = xmm2[2],xmm7[2],xmm2[3],xmm7[3]197; AVX1-NEXT:    vpsrld %xmm7, %xmm1, %xmm7198; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm8 = xmm2[0],zero,xmm2[1],zero199; AVX1-NEXT:    vpsrld %xmm8, %xmm1, %xmm1200; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm7[4,5,6,7]201; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm5[2,3],xmm1[4,5],xmm5[6,7]202; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2203; AVX1-NEXT:    vpslld $23, %xmm2, %xmm2204; AVX1-NEXT:    vpaddd %xmm6, %xmm2, %xmm2205; AVX1-NEXT:    vcvttps2dq %xmm2, %xmm2206; AVX1-NEXT:    vpaddd %xmm0, %xmm0, %xmm0207; AVX1-NEXT:    vpmulld %xmm2, %xmm0, %xmm0208; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0209; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0210; AVX1-NEXT:    retq211;212; AVX2-LABEL: var_funnnel_v8i32:213; AVX2:       # %bb.0:214; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm3 = [31,31,31,31,31,31,31,31]215; AVX2-NEXT:    vpand %ymm3, %ymm2, %ymm4216; AVX2-NEXT:    vpsrlvd %ymm4, %ymm1, %ymm1217; AVX2-NEXT:    vpandn %ymm3, %ymm2, %ymm2218; AVX2-NEXT:    vpaddd %ymm0, %ymm0, %ymm0219; AVX2-NEXT:    vpsllvd %ymm2, %ymm0, %ymm0220; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm0221; AVX2-NEXT:    retq222;223; AVX512F-LABEL: var_funnnel_v8i32:224; AVX512F:       # %bb.0:225; AVX512F-NEXT:    vpbroadcastd {{.*#+}} ymm3 = [31,31,31,31,31,31,31,31]226; AVX512F-NEXT:    vpand %ymm3, %ymm2, %ymm4227; AVX512F-NEXT:    vpsrlvd %ymm4, %ymm1, %ymm1228; AVX512F-NEXT:    vpandn %ymm3, %ymm2, %ymm2229; AVX512F-NEXT:    vpaddd %ymm0, %ymm0, %ymm0230; AVX512F-NEXT:    vpsllvd %ymm2, %ymm0, %ymm0231; AVX512F-NEXT:    vpor %ymm1, %ymm0, %ymm0232; AVX512F-NEXT:    retq233;234; AVX512VL-LABEL: var_funnnel_v8i32:235; AVX512VL:       # %bb.0:236; AVX512VL-NEXT:    vpbroadcastd {{.*#+}} ymm3 = [31,31,31,31,31,31,31,31]237; AVX512VL-NEXT:    vpand %ymm3, %ymm2, %ymm4238; AVX512VL-NEXT:    vpsrlvd %ymm4, %ymm1, %ymm1239; AVX512VL-NEXT:    vpandn %ymm3, %ymm2, %ymm2240; AVX512VL-NEXT:    vpaddd %ymm0, %ymm0, %ymm0241; AVX512VL-NEXT:    vpsllvd %ymm2, %ymm0, %ymm0242; AVX512VL-NEXT:    vpor %ymm1, %ymm0, %ymm0243; AVX512VL-NEXT:    retq244;245; AVX512BW-LABEL: var_funnnel_v8i32:246; AVX512BW:       # %bb.0:247; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} ymm3 = [31,31,31,31,31,31,31,31]248; AVX512BW-NEXT:    vpand %ymm3, %ymm2, %ymm4249; AVX512BW-NEXT:    vpsrlvd %ymm4, %ymm1, %ymm1250; AVX512BW-NEXT:    vpandn %ymm3, %ymm2, %ymm2251; AVX512BW-NEXT:    vpaddd %ymm0, %ymm0, %ymm0252; AVX512BW-NEXT:    vpsllvd %ymm2, %ymm0, %ymm0253; AVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm0254; AVX512BW-NEXT:    retq255;256; AVX512VBMI2-LABEL: var_funnnel_v8i32:257; AVX512VBMI2:       # %bb.0:258; AVX512VBMI2-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2259; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1260; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0261; AVX512VBMI2-NEXT:    vpshrdvd %zmm2, %zmm0, %zmm1262; AVX512VBMI2-NEXT:    vmovdqa %ymm1, %ymm0263; AVX512VBMI2-NEXT:    retq264;265; AVX512VLBW-LABEL: var_funnnel_v8i32:266; AVX512VLBW:       # %bb.0:267; AVX512VLBW-NEXT:    vpbroadcastd {{.*#+}} ymm3 = [31,31,31,31,31,31,31,31]268; AVX512VLBW-NEXT:    vpand %ymm3, %ymm2, %ymm4269; AVX512VLBW-NEXT:    vpsrlvd %ymm4, %ymm1, %ymm1270; AVX512VLBW-NEXT:    vpandn %ymm3, %ymm2, %ymm2271; AVX512VLBW-NEXT:    vpaddd %ymm0, %ymm0, %ymm0272; AVX512VLBW-NEXT:    vpsllvd %ymm2, %ymm0, %ymm0273; AVX512VLBW-NEXT:    vpor %ymm1, %ymm0, %ymm0274; AVX512VLBW-NEXT:    retq275;276; AVX512VLVBMI2-LABEL: var_funnnel_v8i32:277; AVX512VLVBMI2:       # %bb.0:278; AVX512VLVBMI2-NEXT:    vpshrdvd %ymm2, %ymm0, %ymm1279; AVX512VLVBMI2-NEXT:    vmovdqa %ymm1, %ymm0280; AVX512VLVBMI2-NEXT:    retq281;282; XOPAVX1-LABEL: var_funnnel_v8i32:283; XOPAVX1:       # %bb.0:284; XOPAVX1-NEXT:    vbroadcastss {{.*#+}} ymm3 = [31,31,31,31,31,31,31,31]285; XOPAVX1-NEXT:    vandps %ymm3, %ymm2, %ymm2286; XOPAVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4287; XOPAVX1-NEXT:    vpxor %xmm5, %xmm5, %xmm5288; XOPAVX1-NEXT:    vpsubd %xmm4, %xmm5, %xmm6289; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm7290; XOPAVX1-NEXT:    vpshld %xmm6, %xmm7, %xmm6291; XOPAVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4292; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7293; XOPAVX1-NEXT:    vpaddd %xmm7, %xmm7, %xmm7294; XOPAVX1-NEXT:    vpshld %xmm4, %xmm7, %xmm4295; XOPAVX1-NEXT:    vpor %xmm6, %xmm4, %xmm4296; XOPAVX1-NEXT:    vpsubd %xmm2, %xmm5, %xmm5297; XOPAVX1-NEXT:    vpshld %xmm5, %xmm1, %xmm1298; XOPAVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2299; XOPAVX1-NEXT:    vpaddd %xmm0, %xmm0, %xmm0300; XOPAVX1-NEXT:    vpshld %xmm2, %xmm0, %xmm0301; XOPAVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0302; XOPAVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0303; XOPAVX1-NEXT:    retq304;305; XOPAVX2-LABEL: var_funnnel_v8i32:306; XOPAVX2:       # %bb.0:307; XOPAVX2-NEXT:    vpbroadcastd {{.*#+}} ymm3 = [31,31,31,31,31,31,31,31]308; XOPAVX2-NEXT:    vpand %ymm3, %ymm2, %ymm4309; XOPAVX2-NEXT:    vpsrlvd %ymm4, %ymm1, %ymm1310; XOPAVX2-NEXT:    vpandn %ymm3, %ymm2, %ymm2311; XOPAVX2-NEXT:    vpaddd %ymm0, %ymm0, %ymm0312; XOPAVX2-NEXT:    vpsllvd %ymm2, %ymm0, %ymm0313; XOPAVX2-NEXT:    vpor %ymm1, %ymm0, %ymm0314; XOPAVX2-NEXT:    retq315  %res = call <8 x i32> @llvm.fshr.v8i32(<8 x i32> %x, <8 x i32> %y, <8 x i32> %amt)316  ret <8 x i32> %res317}318 319define <16 x i16> @var_funnnel_v16i16(<16 x i16> %x, <16 x i16> %y, <16 x i16> %amt) nounwind {320; AVX1-LABEL: var_funnnel_v16i16:321; AVX1:       # %bb.0:322; AVX1-NEXT:    vbroadcastss {{.*#+}} ymm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]323; AVX1-NEXT:    vandps %ymm3, %ymm2, %ymm2324; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4325; AVX1-NEXT:    vpsllw $12, %xmm4, %xmm5326; AVX1-NEXT:    vpsllw $4, %xmm4, %xmm6327; AVX1-NEXT:    vpor %xmm5, %xmm6, %xmm5328; AVX1-NEXT:    vpaddw %xmm5, %xmm5, %xmm6329; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm7330; AVX1-NEXT:    vpsrlw $8, %xmm7, %xmm8331; AVX1-NEXT:    vpblendvb %xmm5, %xmm8, %xmm7, %xmm7332; AVX1-NEXT:    vpsrlw $4, %xmm7, %xmm8333; AVX1-NEXT:    vpblendvb %xmm6, %xmm8, %xmm7, %xmm6334; AVX1-NEXT:    vpsrlw $2, %xmm6, %xmm7335; AVX1-NEXT:    vpsllw $2, %xmm5, %xmm8336; AVX1-NEXT:    vpblendvb %xmm8, %xmm7, %xmm6, %xmm6337; AVX1-NEXT:    vpsrlw $1, %xmm6, %xmm7338; AVX1-NEXT:    vpsllw $3, %xmm5, %xmm5339; AVX1-NEXT:    vpblendvb %xmm5, %xmm7, %xmm6, %xmm5340; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm6341; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm4 = xmm6[4,4,5,5,6,6,7,7]342; AVX1-NEXT:    vpslld $23, %xmm4, %xmm7343; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm4 = [1065353216,1065353216,1065353216,1065353216]344; AVX1-NEXT:    vpaddd %xmm4, %xmm7, %xmm7345; AVX1-NEXT:    vcvttps2dq %xmm7, %xmm7346; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm6 = xmm6[0],zero,xmm6[1],zero,xmm6[2],zero,xmm6[3],zero347; AVX1-NEXT:    vpslld $23, %xmm6, %xmm6348; AVX1-NEXT:    vpaddd %xmm4, %xmm6, %xmm6349; AVX1-NEXT:    vcvttps2dq %xmm6, %xmm6350; AVX1-NEXT:    vpackusdw %xmm7, %xmm6, %xmm6351; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7352; AVX1-NEXT:    vpaddw %xmm7, %xmm7, %xmm7353; AVX1-NEXT:    vpmullw %xmm6, %xmm7, %xmm6354; AVX1-NEXT:    vpor %xmm5, %xmm6, %xmm5355; AVX1-NEXT:    vpsllw $12, %xmm2, %xmm6356; AVX1-NEXT:    vpsllw $4, %xmm2, %xmm7357; AVX1-NEXT:    vpor %xmm6, %xmm7, %xmm6358; AVX1-NEXT:    vpaddw %xmm6, %xmm6, %xmm7359; AVX1-NEXT:    vpsrlw $8, %xmm1, %xmm8360; AVX1-NEXT:    vpblendvb %xmm6, %xmm8, %xmm1, %xmm1361; AVX1-NEXT:    vpsrlw $4, %xmm1, %xmm8362; AVX1-NEXT:    vpblendvb %xmm7, %xmm8, %xmm1, %xmm1363; AVX1-NEXT:    vpsrlw $2, %xmm1, %xmm7364; AVX1-NEXT:    vpsllw $2, %xmm6, %xmm8365; AVX1-NEXT:    vpblendvb %xmm8, %xmm7, %xmm1, %xmm1366; AVX1-NEXT:    vpsrlw $1, %xmm1, %xmm7367; AVX1-NEXT:    vpsllw $3, %xmm6, %xmm6368; AVX1-NEXT:    vpblendvb %xmm6, %xmm7, %xmm1, %xmm1369; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2370; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm3 = xmm2[4,4,5,5,6,6,7,7]371; AVX1-NEXT:    vpslld $23, %xmm3, %xmm3372; AVX1-NEXT:    vpaddd %xmm4, %xmm3, %xmm3373; AVX1-NEXT:    vcvttps2dq %xmm3, %xmm3374; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero375; AVX1-NEXT:    vpslld $23, %xmm2, %xmm2376; AVX1-NEXT:    vpaddd %xmm4, %xmm2, %xmm2377; AVX1-NEXT:    vcvttps2dq %xmm2, %xmm2378; AVX1-NEXT:    vpackusdw %xmm3, %xmm2, %xmm2379; AVX1-NEXT:    vpaddw %xmm0, %xmm0, %xmm0380; AVX1-NEXT:    vpmullw %xmm2, %xmm0, %xmm0381; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0382; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm0, %ymm0383; AVX1-NEXT:    retq384;385; AVX2-LABEL: var_funnnel_v16i16:386; AVX2:       # %bb.0:387; AVX2-NEXT:    vpunpckhwd {{.*#+}} ymm3 = ymm1[4],ymm0[4],ymm1[5],ymm0[5],ymm1[6],ymm0[6],ymm1[7],ymm0[7],ymm1[12],ymm0[12],ymm1[13],ymm0[13],ymm1[14],ymm0[14],ymm1[15],ymm0[15]388; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2389; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4390; AVX2-NEXT:    vpunpckhwd {{.*#+}} ymm5 = ymm2[4],ymm4[4],ymm2[5],ymm4[5],ymm2[6],ymm4[6],ymm2[7],ymm4[7],ymm2[12],ymm4[12],ymm2[13],ymm4[13],ymm2[14],ymm4[14],ymm2[15],ymm4[15]391; AVX2-NEXT:    vpsrlvd %ymm5, %ymm3, %ymm3392; AVX2-NEXT:    vpblendw {{.*#+}} ymm3 = ymm3[0],ymm4[1],ymm3[2],ymm4[3],ymm3[4],ymm4[5],ymm3[6],ymm4[7],ymm3[8],ymm4[9],ymm3[10],ymm4[11],ymm3[12],ymm4[13],ymm3[14],ymm4[15]393; AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[2],ymm0[2],ymm1[3],ymm0[3],ymm1[8],ymm0[8],ymm1[9],ymm0[9],ymm1[10],ymm0[10],ymm1[11],ymm0[11]394; AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm1 = ymm2[0],ymm4[0],ymm2[1],ymm4[1],ymm2[2],ymm4[2],ymm2[3],ymm4[3],ymm2[8],ymm4[8],ymm2[9],ymm4[9],ymm2[10],ymm4[10],ymm2[11],ymm4[11]395; AVX2-NEXT:    vpsrlvd %ymm1, %ymm0, %ymm0396; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0],ymm4[1],ymm0[2],ymm4[3],ymm0[4],ymm4[5],ymm0[6],ymm4[7],ymm0[8],ymm4[9],ymm0[10],ymm4[11],ymm0[12],ymm4[13],ymm0[14],ymm4[15]397; AVX2-NEXT:    vpackusdw %ymm3, %ymm0, %ymm0398; AVX2-NEXT:    retq399;400; AVX512F-LABEL: var_funnnel_v16i16:401; AVX512F:       # %bb.0:402; AVX512F-NEXT:    vpmovzxwd {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero403; AVX512F-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero404; AVX512F-NEXT:    vpslld $16, %zmm0, %zmm0405; AVX512F-NEXT:    vpord %zmm1, %zmm0, %zmm0406; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm1407; AVX512F-NEXT:    vpmovzxwd {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero408; AVX512F-NEXT:    vpsrlvd %zmm1, %zmm0, %zmm0409; AVX512F-NEXT:    vpmovdw %zmm0, %ymm0410; AVX512F-NEXT:    retq411;412; AVX512VL-LABEL: var_funnnel_v16i16:413; AVX512VL:       # %bb.0:414; AVX512VL-NEXT:    vpmovzxwd {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero415; AVX512VL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero416; AVX512VL-NEXT:    vpslld $16, %zmm0, %zmm0417; AVX512VL-NEXT:    vpord %zmm1, %zmm0, %zmm0418; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm2, %ymm1419; AVX512VL-NEXT:    vpmovzxwd {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero420; AVX512VL-NEXT:    vpsrlvd %zmm1, %zmm0, %zmm0421; AVX512VL-NEXT:    vpmovdw %zmm0, %ymm0422; AVX512VL-NEXT:    retq423;424; AVX512BW-LABEL: var_funnnel_v16i16:425; AVX512BW:       # %bb.0:426; AVX512BW-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1427; AVX512BW-NEXT:    vpbroadcastw {{.*#+}} ymm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]428; AVX512BW-NEXT:    vpand %ymm3, %ymm2, %ymm4429; AVX512BW-NEXT:    vpsrlvw %zmm4, %zmm1, %zmm1430; AVX512BW-NEXT:    vpandn %ymm3, %ymm2, %ymm2431; AVX512BW-NEXT:    vpaddw %ymm0, %ymm0, %ymm0432; AVX512BW-NEXT:    vpsllvw %zmm2, %zmm0, %zmm0433; AVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm0434; AVX512BW-NEXT:    retq435;436; AVX512VBMI2-LABEL: var_funnnel_v16i16:437; AVX512VBMI2:       # %bb.0:438; AVX512VBMI2-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2439; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1440; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0441; AVX512VBMI2-NEXT:    vpshrdvw %zmm2, %zmm0, %zmm1442; AVX512VBMI2-NEXT:    vmovdqa %ymm1, %ymm0443; AVX512VBMI2-NEXT:    retq444;445; AVX512VLBW-LABEL: var_funnnel_v16i16:446; AVX512VLBW:       # %bb.0:447; AVX512VLBW-NEXT:    vpbroadcastw {{.*#+}} ymm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]448; AVX512VLBW-NEXT:    vpand %ymm3, %ymm2, %ymm4449; AVX512VLBW-NEXT:    vpsrlvw %ymm4, %ymm1, %ymm1450; AVX512VLBW-NEXT:    vpandn %ymm3, %ymm2, %ymm2451; AVX512VLBW-NEXT:    vpaddw %ymm0, %ymm0, %ymm0452; AVX512VLBW-NEXT:    vpsllvw %ymm2, %ymm0, %ymm0453; AVX512VLBW-NEXT:    vpor %ymm1, %ymm0, %ymm0454; AVX512VLBW-NEXT:    retq455;456; AVX512VLVBMI2-LABEL: var_funnnel_v16i16:457; AVX512VLVBMI2:       # %bb.0:458; AVX512VLVBMI2-NEXT:    vpshrdvw %ymm2, %ymm0, %ymm1459; AVX512VLVBMI2-NEXT:    vmovdqa %ymm1, %ymm0460; AVX512VLVBMI2-NEXT:    retq461;462; XOPAVX1-LABEL: var_funnnel_v16i16:463; XOPAVX1:       # %bb.0:464; XOPAVX1-NEXT:    vbroadcastss {{.*#+}} ymm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]465; XOPAVX1-NEXT:    vandps %ymm3, %ymm2, %ymm2466; XOPAVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4467; XOPAVX1-NEXT:    vpxor %xmm5, %xmm5, %xmm5468; XOPAVX1-NEXT:    vpsubw %xmm4, %xmm5, %xmm6469; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm7470; XOPAVX1-NEXT:    vpshlw %xmm6, %xmm7, %xmm6471; XOPAVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4472; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7473; XOPAVX1-NEXT:    vpaddw %xmm7, %xmm7, %xmm7474; XOPAVX1-NEXT:    vpshlw %xmm4, %xmm7, %xmm4475; XOPAVX1-NEXT:    vpor %xmm6, %xmm4, %xmm4476; XOPAVX1-NEXT:    vpsubw %xmm2, %xmm5, %xmm5477; XOPAVX1-NEXT:    vpshlw %xmm5, %xmm1, %xmm1478; XOPAVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2479; XOPAVX1-NEXT:    vpaddw %xmm0, %xmm0, %xmm0480; XOPAVX1-NEXT:    vpshlw %xmm2, %xmm0, %xmm0481; XOPAVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0482; XOPAVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0483; XOPAVX1-NEXT:    retq484;485; XOPAVX2-LABEL: var_funnnel_v16i16:486; XOPAVX2:       # %bb.0:487; XOPAVX2-NEXT:    vpbroadcastw {{.*#+}} ymm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]488; XOPAVX2-NEXT:    vpandn %ymm3, %ymm2, %ymm4489; XOPAVX2-NEXT:    vextracti128 $1, %ymm4, %xmm5490; XOPAVX2-NEXT:    vpaddw %ymm0, %ymm0, %ymm0491; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm6492; XOPAVX2-NEXT:    vpshlw %xmm5, %xmm6, %xmm5493; XOPAVX2-NEXT:    vpshlw %xmm4, %xmm0, %xmm0494; XOPAVX2-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0495; XOPAVX2-NEXT:    vpand %ymm3, %ymm2, %ymm2496; XOPAVX2-NEXT:    vextracti128 $1, %ymm2, %xmm3497; XOPAVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4498; XOPAVX2-NEXT:    vpsubw %xmm3, %xmm4, %xmm3499; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm5500; XOPAVX2-NEXT:    vpshlw %xmm3, %xmm5, %xmm3501; XOPAVX2-NEXT:    vpsubw %xmm2, %xmm4, %xmm2502; XOPAVX2-NEXT:    vpshlw %xmm2, %xmm1, %xmm1503; XOPAVX2-NEXT:    vinserti128 $1, %xmm3, %ymm1, %ymm1504; XOPAVX2-NEXT:    vpor %ymm1, %ymm0, %ymm0505; XOPAVX2-NEXT:    retq506  %res = call <16 x i16> @llvm.fshr.v16i16(<16 x i16> %x, <16 x i16> %y, <16 x i16> %amt)507  ret <16 x i16> %res508}509 510define <32 x i8> @var_funnnel_v32i8(<32 x i8> %x, <32 x i8> %y, <32 x i8> %amt) nounwind {511; AVX1-LABEL: var_funnnel_v32i8:512; AVX1:       # %bb.0:513; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5514; AVX1-NEXT:    vpsrlw $4, %xmm5, %xmm3515; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm4 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]516; AVX1-NEXT:    vpand %xmm4, %xmm3, %xmm6517; AVX1-NEXT:    vbroadcastss {{.*#+}} ymm3 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]518; AVX1-NEXT:    vandps %ymm3, %ymm2, %ymm2519; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm7520; AVX1-NEXT:    vpsllw $5, %xmm7, %xmm8521; AVX1-NEXT:    vpblendvb %xmm8, %xmm6, %xmm5, %xmm6522; AVX1-NEXT:    vpsrlw $2, %xmm6, %xmm9523; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm5 = [63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63]524; AVX1-NEXT:    vpand %xmm5, %xmm9, %xmm9525; AVX1-NEXT:    vpaddb %xmm8, %xmm8, %xmm8526; AVX1-NEXT:    vpblendvb %xmm8, %xmm9, %xmm6, %xmm9527; AVX1-NEXT:    vpsrlw $1, %xmm9, %xmm10528; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm6 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]529; AVX1-NEXT:    vpand %xmm6, %xmm10, %xmm10530; AVX1-NEXT:    vpaddb %xmm8, %xmm8, %xmm8531; AVX1-NEXT:    vpblendvb %xmm8, %xmm10, %xmm9, %xmm8532; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm9533; AVX1-NEXT:    vpaddb %xmm9, %xmm9, %xmm9534; AVX1-NEXT:    vpsllw $4, %xmm9, %xmm10535; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm11 = [240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240]536; AVX1-NEXT:    vpand %xmm11, %xmm10, %xmm10537; AVX1-NEXT:    vpxor %xmm3, %xmm7, %xmm7538; AVX1-NEXT:    vpsllw $5, %xmm7, %xmm7539; AVX1-NEXT:    vpblendvb %xmm7, %xmm10, %xmm9, %xmm9540; AVX1-NEXT:    vpsllw $2, %xmm9, %xmm10541; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm12 = [252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252]542; AVX1-NEXT:    vpand %xmm12, %xmm10, %xmm10543; AVX1-NEXT:    vpaddb %xmm7, %xmm7, %xmm7544; AVX1-NEXT:    vpblendvb %xmm7, %xmm10, %xmm9, %xmm9545; AVX1-NEXT:    vpaddb %xmm9, %xmm9, %xmm10546; AVX1-NEXT:    vpaddb %xmm7, %xmm7, %xmm7547; AVX1-NEXT:    vpblendvb %xmm7, %xmm10, %xmm9, %xmm7548; AVX1-NEXT:    vpor %xmm7, %xmm8, %xmm7549; AVX1-NEXT:    vpsrlw $4, %xmm1, %xmm8550; AVX1-NEXT:    vpand %xmm4, %xmm8, %xmm4551; AVX1-NEXT:    vpsllw $5, %xmm2, %xmm8552; AVX1-NEXT:    vpblendvb %xmm8, %xmm4, %xmm1, %xmm1553; AVX1-NEXT:    vpsrlw $2, %xmm1, %xmm4554; AVX1-NEXT:    vpand %xmm5, %xmm4, %xmm4555; AVX1-NEXT:    vpaddb %xmm8, %xmm8, %xmm5556; AVX1-NEXT:    vpblendvb %xmm5, %xmm4, %xmm1, %xmm1557; AVX1-NEXT:    vpsrlw $1, %xmm1, %xmm4558; AVX1-NEXT:    vpand %xmm6, %xmm4, %xmm4559; AVX1-NEXT:    vpaddb %xmm5, %xmm5, %xmm5560; AVX1-NEXT:    vpblendvb %xmm5, %xmm4, %xmm1, %xmm1561; AVX1-NEXT:    vpaddb %xmm0, %xmm0, %xmm0562; AVX1-NEXT:    vpsllw $4, %xmm0, %xmm4563; AVX1-NEXT:    vpand %xmm4, %xmm11, %xmm4564; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2565; AVX1-NEXT:    vpsllw $5, %xmm2, %xmm2566; AVX1-NEXT:    vpblendvb %xmm2, %xmm4, %xmm0, %xmm0567; AVX1-NEXT:    vpsllw $2, %xmm0, %xmm3568; AVX1-NEXT:    vpand %xmm3, %xmm12, %xmm3569; AVX1-NEXT:    vpaddb %xmm2, %xmm2, %xmm2570; AVX1-NEXT:    vpblendvb %xmm2, %xmm3, %xmm0, %xmm0571; AVX1-NEXT:    vpaddb %xmm0, %xmm0, %xmm3572; AVX1-NEXT:    vpaddb %xmm2, %xmm2, %xmm2573; AVX1-NEXT:    vpblendvb %xmm2, %xmm3, %xmm0, %xmm0574; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0575; AVX1-NEXT:    vinsertf128 $1, %xmm7, %ymm0, %ymm0576; AVX1-NEXT:    retq577;578; AVX2-LABEL: var_funnnel_v32i8:579; AVX2:       # %bb.0:580; AVX2-NEXT:    vpbroadcastb {{.*#+}} ymm3 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]581; AVX2-NEXT:    vpand %ymm3, %ymm2, %ymm4582; AVX2-NEXT:    vpsllw $5, %ymm4, %ymm4583; AVX2-NEXT:    vpaddb %ymm4, %ymm4, %ymm5584; AVX2-NEXT:    vpsrlw $4, %ymm1, %ymm6585; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm6, %ymm6586; AVX2-NEXT:    vpblendvb %ymm4, %ymm6, %ymm1, %ymm1587; AVX2-NEXT:    vpsrlw $2, %ymm1, %ymm4588; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm4, %ymm4589; AVX2-NEXT:    vpblendvb %ymm5, %ymm4, %ymm1, %ymm1590; AVX2-NEXT:    vpsrlw $1, %ymm1, %ymm4591; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm4, %ymm4592; AVX2-NEXT:    vpaddb %ymm5, %ymm5, %ymm5593; AVX2-NEXT:    vpblendvb %ymm5, %ymm4, %ymm1, %ymm1594; AVX2-NEXT:    vpandn %ymm3, %ymm2, %ymm2595; AVX2-NEXT:    vpsllw $5, %ymm2, %ymm2596; AVX2-NEXT:    vpaddb %ymm2, %ymm2, %ymm3597; AVX2-NEXT:    vpaddb %ymm0, %ymm0, %ymm0598; AVX2-NEXT:    vpsllw $4, %ymm0, %ymm4599; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm4, %ymm4600; AVX2-NEXT:    vpblendvb %ymm2, %ymm4, %ymm0, %ymm0601; AVX2-NEXT:    vpsllw $2, %ymm0, %ymm2602; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2603; AVX2-NEXT:    vpblendvb %ymm3, %ymm2, %ymm0, %ymm0604; AVX2-NEXT:    vpaddb %ymm0, %ymm0, %ymm2605; AVX2-NEXT:    vpaddb %ymm3, %ymm3, %ymm3606; AVX2-NEXT:    vpblendvb %ymm3, %ymm2, %ymm0, %ymm0607; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm0608; AVX2-NEXT:    retq609;610; AVX512F-LABEL: var_funnnel_v32i8:611; AVX512F:       # %bb.0:612; AVX512F-NEXT:    vpbroadcastb {{.*#+}} ymm3 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]613; AVX512F-NEXT:    vpand %ymm3, %ymm2, %ymm4614; AVX512F-NEXT:    vpsllw $5, %ymm4, %ymm4615; AVX512F-NEXT:    vpaddb %ymm4, %ymm4, %ymm5616; AVX512F-NEXT:    vpsrlw $4, %ymm1, %ymm6617; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm6, %ymm6618; AVX512F-NEXT:    vpblendvb %ymm4, %ymm6, %ymm1, %ymm1619; AVX512F-NEXT:    vpsrlw $2, %ymm1, %ymm4620; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm4, %ymm4621; AVX512F-NEXT:    vpblendvb %ymm5, %ymm4, %ymm1, %ymm1622; AVX512F-NEXT:    vpsrlw $1, %ymm1, %ymm4623; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm4, %ymm4624; AVX512F-NEXT:    vpaddb %ymm5, %ymm5, %ymm5625; AVX512F-NEXT:    vpblendvb %ymm5, %ymm4, %ymm1, %ymm1626; AVX512F-NEXT:    vpandn %ymm3, %ymm2, %ymm2627; AVX512F-NEXT:    vpsllw $5, %ymm2, %ymm2628; AVX512F-NEXT:    vpaddb %ymm2, %ymm2, %ymm3629; AVX512F-NEXT:    vpaddb %ymm0, %ymm0, %ymm0630; AVX512F-NEXT:    vpsllw $4, %ymm0, %ymm4631; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm4, %ymm4632; AVX512F-NEXT:    vpblendvb %ymm2, %ymm4, %ymm0, %ymm0633; AVX512F-NEXT:    vpsllw $2, %ymm0, %ymm2634; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2635; AVX512F-NEXT:    vpblendvb %ymm3, %ymm2, %ymm0, %ymm0636; AVX512F-NEXT:    vpaddb %ymm0, %ymm0, %ymm2637; AVX512F-NEXT:    vpaddb %ymm3, %ymm3, %ymm3638; AVX512F-NEXT:    vpblendvb %ymm3, %ymm2, %ymm0, %ymm0639; AVX512F-NEXT:    vpor %ymm1, %ymm0, %ymm0640; AVX512F-NEXT:    retq641;642; AVX512VL-LABEL: var_funnnel_v32i8:643; AVX512VL:       # %bb.0:644; AVX512VL-NEXT:    vpbroadcastd {{.*#+}} ymm3 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]645; AVX512VL-NEXT:    vpand %ymm3, %ymm2, %ymm4646; AVX512VL-NEXT:    vpsllw $5, %ymm4, %ymm4647; AVX512VL-NEXT:    vpaddb %ymm4, %ymm4, %ymm5648; AVX512VL-NEXT:    vpsrlw $4, %ymm1, %ymm6649; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm6, %ymm6650; AVX512VL-NEXT:    vpblendvb %ymm4, %ymm6, %ymm1, %ymm1651; AVX512VL-NEXT:    vpsrlw $2, %ymm1, %ymm4652; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm4, %ymm4653; AVX512VL-NEXT:    vpblendvb %ymm5, %ymm4, %ymm1, %ymm1654; AVX512VL-NEXT:    vpsrlw $1, %ymm1, %ymm4655; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm4, %ymm4656; AVX512VL-NEXT:    vpaddb %ymm5, %ymm5, %ymm5657; AVX512VL-NEXT:    vpblendvb %ymm5, %ymm4, %ymm1, %ymm1658; AVX512VL-NEXT:    vpandn %ymm3, %ymm2, %ymm2659; AVX512VL-NEXT:    vpsllw $5, %ymm2, %ymm2660; AVX512VL-NEXT:    vpaddb %ymm2, %ymm2, %ymm3661; AVX512VL-NEXT:    vpaddb %ymm0, %ymm0, %ymm0662; AVX512VL-NEXT:    vpsllw $4, %ymm0, %ymm4663; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm4, %ymm4664; AVX512VL-NEXT:    vpblendvb %ymm2, %ymm4, %ymm0, %ymm0665; AVX512VL-NEXT:    vpsllw $2, %ymm0, %ymm2666; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm2, %ymm2667; AVX512VL-NEXT:    vpblendvb %ymm3, %ymm2, %ymm0, %ymm0668; AVX512VL-NEXT:    vpaddb %ymm0, %ymm0, %ymm2669; AVX512VL-NEXT:    vpaddb %ymm3, %ymm3, %ymm3670; AVX512VL-NEXT:    vpblendvb %ymm3, %ymm2, %ymm0, %ymm0671; AVX512VL-NEXT:    vpor %ymm1, %ymm0, %ymm0672; AVX512VL-NEXT:    retq673;674; AVX512BW-LABEL: var_funnnel_v32i8:675; AVX512BW:       # %bb.0:676; AVX512BW-NEXT:    vpmovzxbw {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero,ymm1[16],zero,ymm1[17],zero,ymm1[18],zero,ymm1[19],zero,ymm1[20],zero,ymm1[21],zero,ymm1[22],zero,ymm1[23],zero,ymm1[24],zero,ymm1[25],zero,ymm1[26],zero,ymm1[27],zero,ymm1[28],zero,ymm1[29],zero,ymm1[30],zero,ymm1[31],zero677; AVX512BW-NEXT:    vpmovzxbw {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero,ymm0[16],zero,ymm0[17],zero,ymm0[18],zero,ymm0[19],zero,ymm0[20],zero,ymm0[21],zero,ymm0[22],zero,ymm0[23],zero,ymm0[24],zero,ymm0[25],zero,ymm0[26],zero,ymm0[27],zero,ymm0[28],zero,ymm0[29],zero,ymm0[30],zero,ymm0[31],zero678; AVX512BW-NEXT:    vpsllw $8, %zmm0, %zmm0679; AVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm0680; AVX512BW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm1681; AVX512BW-NEXT:    vpmovzxbw {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero,ymm1[16],zero,ymm1[17],zero,ymm1[18],zero,ymm1[19],zero,ymm1[20],zero,ymm1[21],zero,ymm1[22],zero,ymm1[23],zero,ymm1[24],zero,ymm1[25],zero,ymm1[26],zero,ymm1[27],zero,ymm1[28],zero,ymm1[29],zero,ymm1[30],zero,ymm1[31],zero682; AVX512BW-NEXT:    vpsrlvw %zmm1, %zmm0, %zmm0683; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0684; AVX512BW-NEXT:    retq685;686; AVX512VBMI2-LABEL: var_funnnel_v32i8:687; AVX512VBMI2:       # %bb.0:688; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1689; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0690; AVX512VBMI2-NEXT:    vmovdqa64 {{.*#+}} zmm3 = [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,16,80,17,81,18,82,19,83,20,84,21,85,22,86,23,87,24,88,25,89,26,90,27,91,28,92,29,93,30,94,31,95]691; AVX512VBMI2-NEXT:    vpermi2b %zmm0, %zmm1, %zmm3692; AVX512VBMI2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm0693; AVX512VBMI2-NEXT:    vpmovzxbw {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero,ymm0[16],zero,ymm0[17],zero,ymm0[18],zero,ymm0[19],zero,ymm0[20],zero,ymm0[21],zero,ymm0[22],zero,ymm0[23],zero,ymm0[24],zero,ymm0[25],zero,ymm0[26],zero,ymm0[27],zero,ymm0[28],zero,ymm0[29],zero,ymm0[30],zero,ymm0[31],zero694; AVX512VBMI2-NEXT:    vpsrlvw %zmm0, %zmm3, %zmm0695; AVX512VBMI2-NEXT:    vpmovwb %zmm0, %ymm0696; AVX512VBMI2-NEXT:    retq697;698; AVX512VLBW-LABEL: var_funnnel_v32i8:699; AVX512VLBW:       # %bb.0:700; AVX512VLBW-NEXT:    vpmovzxbw {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero,ymm1[16],zero,ymm1[17],zero,ymm1[18],zero,ymm1[19],zero,ymm1[20],zero,ymm1[21],zero,ymm1[22],zero,ymm1[23],zero,ymm1[24],zero,ymm1[25],zero,ymm1[26],zero,ymm1[27],zero,ymm1[28],zero,ymm1[29],zero,ymm1[30],zero,ymm1[31],zero701; AVX512VLBW-NEXT:    vpmovzxbw {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero,ymm0[16],zero,ymm0[17],zero,ymm0[18],zero,ymm0[19],zero,ymm0[20],zero,ymm0[21],zero,ymm0[22],zero,ymm0[23],zero,ymm0[24],zero,ymm0[25],zero,ymm0[26],zero,ymm0[27],zero,ymm0[28],zero,ymm0[29],zero,ymm0[30],zero,ymm0[31],zero702; AVX512VLBW-NEXT:    vpsllw $8, %zmm0, %zmm0703; AVX512VLBW-NEXT:    vporq %zmm1, %zmm0, %zmm0704; AVX512VLBW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm2, %ymm1705; AVX512VLBW-NEXT:    vpmovzxbw {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero,ymm1[16],zero,ymm1[17],zero,ymm1[18],zero,ymm1[19],zero,ymm1[20],zero,ymm1[21],zero,ymm1[22],zero,ymm1[23],zero,ymm1[24],zero,ymm1[25],zero,ymm1[26],zero,ymm1[27],zero,ymm1[28],zero,ymm1[29],zero,ymm1[30],zero,ymm1[31],zero706; AVX512VLBW-NEXT:    vpsrlvw %zmm1, %zmm0, %zmm0707; AVX512VLBW-NEXT:    vpmovwb %zmm0, %ymm0708; AVX512VLBW-NEXT:    retq709;710; AVX512VLVBMI2-LABEL: var_funnnel_v32i8:711; AVX512VLVBMI2:       # %bb.0:712; AVX512VLVBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1713; AVX512VLVBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0714; AVX512VLVBMI2-NEXT:    vmovdqa64 {{.*#+}} zmm3 = [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,16,80,17,81,18,82,19,83,20,84,21,85,22,86,23,87,24,88,25,89,26,90,27,91,28,92,29,93,30,94,31,95]715; AVX512VLVBMI2-NEXT:    vpermi2b %zmm0, %zmm1, %zmm3716; AVX512VLVBMI2-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm2, %ymm0717; AVX512VLVBMI2-NEXT:    vpmovzxbw {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero,ymm0[16],zero,ymm0[17],zero,ymm0[18],zero,ymm0[19],zero,ymm0[20],zero,ymm0[21],zero,ymm0[22],zero,ymm0[23],zero,ymm0[24],zero,ymm0[25],zero,ymm0[26],zero,ymm0[27],zero,ymm0[28],zero,ymm0[29],zero,ymm0[30],zero,ymm0[31],zero718; AVX512VLVBMI2-NEXT:    vpsrlvw %zmm0, %zmm3, %zmm0719; AVX512VLVBMI2-NEXT:    vpmovwb %zmm0, %ymm0720; AVX512VLVBMI2-NEXT:    retq721;722; XOPAVX1-LABEL: var_funnnel_v32i8:723; XOPAVX1:       # %bb.0:724; XOPAVX1-NEXT:    vbroadcastss {{.*#+}} ymm3 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]725; XOPAVX1-NEXT:    vandps %ymm3, %ymm2, %ymm2726; XOPAVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4727; XOPAVX1-NEXT:    vpxor %xmm5, %xmm5, %xmm5728; XOPAVX1-NEXT:    vpsubb %xmm4, %xmm5, %xmm6729; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm7730; XOPAVX1-NEXT:    vpshlb %xmm6, %xmm7, %xmm6731; XOPAVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4732; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7733; XOPAVX1-NEXT:    vpaddb %xmm7, %xmm7, %xmm7734; XOPAVX1-NEXT:    vpshlb %xmm4, %xmm7, %xmm4735; XOPAVX1-NEXT:    vpor %xmm6, %xmm4, %xmm4736; XOPAVX1-NEXT:    vpsubb %xmm2, %xmm5, %xmm5737; XOPAVX1-NEXT:    vpshlb %xmm5, %xmm1, %xmm1738; XOPAVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2739; XOPAVX1-NEXT:    vpaddb %xmm0, %xmm0, %xmm0740; XOPAVX1-NEXT:    vpshlb %xmm2, %xmm0, %xmm0741; XOPAVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0742; XOPAVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0743; XOPAVX1-NEXT:    retq744;745; XOPAVX2-LABEL: var_funnnel_v32i8:746; XOPAVX2:       # %bb.0:747; XOPAVX2-NEXT:    vpbroadcastb {{.*#+}} ymm3 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]748; XOPAVX2-NEXT:    vpand %ymm3, %ymm2, %ymm2749; XOPAVX2-NEXT:    vextracti128 $1, %ymm2, %xmm4750; XOPAVX2-NEXT:    vpxor %xmm5, %xmm5, %xmm5751; XOPAVX2-NEXT:    vpsubb %xmm4, %xmm5, %xmm6752; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm7753; XOPAVX2-NEXT:    vpshlb %xmm6, %xmm7, %xmm6754; XOPAVX2-NEXT:    vpxor %xmm3, %xmm4, %xmm4755; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm7756; XOPAVX2-NEXT:    vpaddb %xmm7, %xmm7, %xmm7757; XOPAVX2-NEXT:    vpshlb %xmm4, %xmm7, %xmm4758; XOPAVX2-NEXT:    vpor %xmm6, %xmm4, %xmm4759; XOPAVX2-NEXT:    vpsubb %xmm2, %xmm5, %xmm5760; XOPAVX2-NEXT:    vpshlb %xmm5, %xmm1, %xmm1761; XOPAVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2762; XOPAVX2-NEXT:    vpaddb %xmm0, %xmm0, %xmm0763; XOPAVX2-NEXT:    vpshlb %xmm2, %xmm0, %xmm0764; XOPAVX2-NEXT:    vpor %xmm1, %xmm0, %xmm0765; XOPAVX2-NEXT:    vinserti128 $1, %xmm4, %ymm0, %ymm0766; XOPAVX2-NEXT:    retq767  %res = call <32 x i8> @llvm.fshr.v32i8(<32 x i8> %x, <32 x i8> %y, <32 x i8> %amt)768  ret <32 x i8> %res769}770 771;772; Uniform Variable Shifts773;774 775define <4 x i64> @splatvar_funnnel_v4i64(<4 x i64> %x, <4 x i64> %y, <4 x i64> %amt) nounwind {776; AVX1-LABEL: splatvar_funnnel_v4i64:777; AVX1:       # %bb.0:778; AVX1-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [63,63]779; AVX1-NEXT:    vpand %xmm3, %xmm2, %xmm4780; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5781; AVX1-NEXT:    vpsrlq %xmm4, %xmm5, %xmm5782; AVX1-NEXT:    vpsrlq %xmm4, %xmm1, %xmm1783; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm1, %ymm1784; AVX1-NEXT:    vpandn %xmm3, %xmm2, %xmm2785; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3786; AVX1-NEXT:    vpaddq %xmm3, %xmm3, %xmm3787; AVX1-NEXT:    vpsllq %xmm2, %xmm3, %xmm3788; AVX1-NEXT:    vpaddq %xmm0, %xmm0, %xmm0789; AVX1-NEXT:    vpsllq %xmm2, %xmm0, %xmm0790; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0791; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm0792; AVX1-NEXT:    retq793;794; AVX2-LABEL: splatvar_funnnel_v4i64:795; AVX2:       # %bb.0:796; AVX2-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [63,63]797; AVX2-NEXT:    vpand %xmm3, %xmm2, %xmm4798; AVX2-NEXT:    vpsrlq %xmm4, %ymm1, %ymm1799; AVX2-NEXT:    vpandn %xmm3, %xmm2, %xmm2800; AVX2-NEXT:    vpaddq %ymm0, %ymm0, %ymm0801; AVX2-NEXT:    vpsllq %xmm2, %ymm0, %ymm0802; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm0803; AVX2-NEXT:    retq804;805; AVX512F-LABEL: splatvar_funnnel_v4i64:806; AVX512F:       # %bb.0:807; AVX512F-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [63,63]808; AVX512F-NEXT:    vpand %xmm3, %xmm2, %xmm4809; AVX512F-NEXT:    vpsrlq %xmm4, %ymm1, %ymm1810; AVX512F-NEXT:    vpandn %xmm3, %xmm2, %xmm2811; AVX512F-NEXT:    vpaddq %ymm0, %ymm0, %ymm0812; AVX512F-NEXT:    vpsllq %xmm2, %ymm0, %ymm0813; AVX512F-NEXT:    vpor %ymm1, %ymm0, %ymm0814; AVX512F-NEXT:    retq815;816; AVX512VL-LABEL: splatvar_funnnel_v4i64:817; AVX512VL:       # %bb.0:818; AVX512VL-NEXT:    vpbroadcastq {{.*#+}} xmm3 = [63,63]819; AVX512VL-NEXT:    vpand %xmm3, %xmm2, %xmm4820; AVX512VL-NEXT:    vpsrlq %xmm4, %ymm1, %ymm1821; AVX512VL-NEXT:    vpandn %xmm3, %xmm2, %xmm2822; AVX512VL-NEXT:    vpaddq %ymm0, %ymm0, %ymm0823; AVX512VL-NEXT:    vpsllq %xmm2, %ymm0, %ymm0824; AVX512VL-NEXT:    vpor %ymm1, %ymm0, %ymm0825; AVX512VL-NEXT:    retq826;827; AVX512BW-LABEL: splatvar_funnnel_v4i64:828; AVX512BW:       # %bb.0:829; AVX512BW-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [63,63]830; AVX512BW-NEXT:    vpand %xmm3, %xmm2, %xmm4831; AVX512BW-NEXT:    vpsrlq %xmm4, %ymm1, %ymm1832; AVX512BW-NEXT:    vpandn %xmm3, %xmm2, %xmm2833; AVX512BW-NEXT:    vpaddq %ymm0, %ymm0, %ymm0834; AVX512BW-NEXT:    vpsllq %xmm2, %ymm0, %ymm0835; AVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm0836; AVX512BW-NEXT:    retq837;838; AVX512VBMI2-LABEL: splatvar_funnnel_v4i64:839; AVX512VBMI2:       # %bb.0:840; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1841; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0842; AVX512VBMI2-NEXT:    vpbroadcastq %xmm2, %ymm2843; AVX512VBMI2-NEXT:    vpshrdvq %zmm2, %zmm0, %zmm1844; AVX512VBMI2-NEXT:    vmovdqa %ymm1, %ymm0845; AVX512VBMI2-NEXT:    retq846;847; AVX512VLBW-LABEL: splatvar_funnnel_v4i64:848; AVX512VLBW:       # %bb.0:849; AVX512VLBW-NEXT:    vpbroadcastq {{.*#+}} xmm3 = [63,63]850; AVX512VLBW-NEXT:    vpand %xmm3, %xmm2, %xmm4851; AVX512VLBW-NEXT:    vpsrlq %xmm4, %ymm1, %ymm1852; AVX512VLBW-NEXT:    vpandn %xmm3, %xmm2, %xmm2853; AVX512VLBW-NEXT:    vpaddq %ymm0, %ymm0, %ymm0854; AVX512VLBW-NEXT:    vpsllq %xmm2, %ymm0, %ymm0855; AVX512VLBW-NEXT:    vpor %ymm1, %ymm0, %ymm0856; AVX512VLBW-NEXT:    retq857;858; AVX512VLVBMI2-LABEL: splatvar_funnnel_v4i64:859; AVX512VLVBMI2:       # %bb.0:860; AVX512VLVBMI2-NEXT:    vpbroadcastq %xmm2, %ymm2861; AVX512VLVBMI2-NEXT:    vpshrdvq %ymm2, %ymm0, %ymm1862; AVX512VLVBMI2-NEXT:    vmovdqa %ymm1, %ymm0863; AVX512VLVBMI2-NEXT:    retq864;865; XOPAVX1-LABEL: splatvar_funnnel_v4i64:866; XOPAVX1:       # %bb.0:867; XOPAVX1-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [63,63]868; XOPAVX1-NEXT:    vpand %xmm3, %xmm2, %xmm4869; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5870; XOPAVX1-NEXT:    vpsrlq %xmm4, %xmm5, %xmm5871; XOPAVX1-NEXT:    vpsrlq %xmm4, %xmm1, %xmm1872; XOPAVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm1, %ymm1873; XOPAVX1-NEXT:    vpandn %xmm3, %xmm2, %xmm2874; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3875; XOPAVX1-NEXT:    vpaddq %xmm3, %xmm3, %xmm3876; XOPAVX1-NEXT:    vpsllq %xmm2, %xmm3, %xmm3877; XOPAVX1-NEXT:    vpaddq %xmm0, %xmm0, %xmm0878; XOPAVX1-NEXT:    vpsllq %xmm2, %xmm0, %xmm0879; XOPAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0880; XOPAVX1-NEXT:    vorps %ymm1, %ymm0, %ymm0881; XOPAVX1-NEXT:    retq882;883; XOPAVX2-LABEL: splatvar_funnnel_v4i64:884; XOPAVX2:       # %bb.0:885; XOPAVX2-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [63,63]886; XOPAVX2-NEXT:    vpand %xmm3, %xmm2, %xmm4887; XOPAVX2-NEXT:    vpsrlq %xmm4, %ymm1, %ymm1888; XOPAVX2-NEXT:    vpandn %xmm3, %xmm2, %xmm2889; XOPAVX2-NEXT:    vpaddq %ymm0, %ymm0, %ymm0890; XOPAVX2-NEXT:    vpsllq %xmm2, %ymm0, %ymm0891; XOPAVX2-NEXT:    vpor %ymm1, %ymm0, %ymm0892; XOPAVX2-NEXT:    retq893  %splat = shufflevector <4 x i64> %amt, <4 x i64> undef, <4 x i32> zeroinitializer894  %res = call <4 x i64> @llvm.fshr.v4i64(<4 x i64> %x, <4 x i64> %y, <4 x i64> %splat)895  ret <4 x i64> %res896}897 898define <8 x i32> @splatvar_funnnel_v8i32(<8 x i32> %x, <8 x i32> %y, <8 x i32> %amt) nounwind {899; AVX1-LABEL: splatvar_funnnel_v8i32:900; AVX1:       # %bb.0:901; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3902; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4903; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm4[2],xmm3[2],xmm4[3],xmm3[3]904; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2905; AVX1-NEXT:    vpsrlq %xmm2, %xmm5, %xmm5906; AVX1-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm4[0],xmm3[0],xmm4[1],xmm3[1]907; AVX1-NEXT:    vpsrlq %xmm2, %xmm3, %xmm3908; AVX1-NEXT:    vshufps {{.*#+}} xmm3 = xmm3[0,2],xmm5[0,2]909; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm4 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]910; AVX1-NEXT:    vpsrlq %xmm2, %xmm4, %xmm4911; AVX1-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]912; AVX1-NEXT:    vpsrlq %xmm2, %xmm0, %xmm0913; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm4[0,2]914; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0915; AVX1-NEXT:    retq916;917; AVX2-LABEL: splatvar_funnnel_v8i32:918; AVX2:       # %bb.0:919; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm3 = ymm1[2],ymm0[2],ymm1[3],ymm0[3],ymm1[6],ymm0[6],ymm1[7],ymm0[7]920; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2921; AVX2-NEXT:    vpsrlq %xmm2, %ymm3, %ymm3922; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[4],ymm0[4],ymm1[5],ymm0[5]923; AVX2-NEXT:    vpsrlq %xmm2, %ymm0, %ymm0924; AVX2-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,2],ymm3[0,2],ymm0[4,6],ymm3[4,6]925; AVX2-NEXT:    retq926;927; AVX512F-LABEL: splatvar_funnnel_v8i32:928; AVX512F:       # %bb.0:929; AVX512F-NEXT:    vpunpckhdq {{.*#+}} ymm3 = ymm1[2],ymm0[2],ymm1[3],ymm0[3],ymm1[6],ymm0[6],ymm1[7],ymm0[7]930; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2931; AVX512F-NEXT:    vpsrlq %xmm2, %ymm3, %ymm3932; AVX512F-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[4],ymm0[4],ymm1[5],ymm0[5]933; AVX512F-NEXT:    vpsrlq %xmm2, %ymm0, %ymm0934; AVX512F-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,2],ymm3[0,2],ymm0[4,6],ymm3[4,6]935; AVX512F-NEXT:    retq936;937; AVX512VL-LABEL: splatvar_funnnel_v8i32:938; AVX512VL:       # %bb.0:939; AVX512VL-NEXT:    vpunpckhdq {{.*#+}} ymm3 = ymm1[2],ymm0[2],ymm1[3],ymm0[3],ymm1[6],ymm0[6],ymm1[7],ymm0[7]940; AVX512VL-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2941; AVX512VL-NEXT:    vpsrlq %xmm2, %ymm3, %ymm3942; AVX512VL-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[4],ymm0[4],ymm1[5],ymm0[5]943; AVX512VL-NEXT:    vpsrlq %xmm2, %ymm0, %ymm0944; AVX512VL-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,2],ymm3[0,2],ymm0[4,6],ymm3[4,6]945; AVX512VL-NEXT:    retq946;947; AVX512BW-LABEL: splatvar_funnnel_v8i32:948; AVX512BW:       # %bb.0:949; AVX512BW-NEXT:    vpunpckhdq {{.*#+}} ymm3 = ymm1[2],ymm0[2],ymm1[3],ymm0[3],ymm1[6],ymm0[6],ymm1[7],ymm0[7]950; AVX512BW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2951; AVX512BW-NEXT:    vpsrlq %xmm2, %ymm3, %ymm3952; AVX512BW-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[4],ymm0[4],ymm1[5],ymm0[5]953; AVX512BW-NEXT:    vpsrlq %xmm2, %ymm0, %ymm0954; AVX512BW-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,2],ymm3[0,2],ymm0[4,6],ymm3[4,6]955; AVX512BW-NEXT:    retq956;957; AVX512VBMI2-LABEL: splatvar_funnnel_v8i32:958; AVX512VBMI2:       # %bb.0:959; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1960; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0961; AVX512VBMI2-NEXT:    vpbroadcastd %xmm2, %ymm2962; AVX512VBMI2-NEXT:    vpshrdvd %zmm2, %zmm0, %zmm1963; AVX512VBMI2-NEXT:    vmovdqa %ymm1, %ymm0964; AVX512VBMI2-NEXT:    retq965;966; AVX512VLBW-LABEL: splatvar_funnnel_v8i32:967; AVX512VLBW:       # %bb.0:968; AVX512VLBW-NEXT:    vpunpckhdq {{.*#+}} ymm3 = ymm1[2],ymm0[2],ymm1[3],ymm0[3],ymm1[6],ymm0[6],ymm1[7],ymm0[7]969; AVX512VLBW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2970; AVX512VLBW-NEXT:    vpsrlq %xmm2, %ymm3, %ymm3971; AVX512VLBW-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[4],ymm0[4],ymm1[5],ymm0[5]972; AVX512VLBW-NEXT:    vpsrlq %xmm2, %ymm0, %ymm0973; AVX512VLBW-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,2],ymm3[0,2],ymm0[4,6],ymm3[4,6]974; AVX512VLBW-NEXT:    retq975;976; AVX512VLVBMI2-LABEL: splatvar_funnnel_v8i32:977; AVX512VLVBMI2:       # %bb.0:978; AVX512VLVBMI2-NEXT:    vpbroadcastd %xmm2, %ymm2979; AVX512VLVBMI2-NEXT:    vpshrdvd %ymm2, %ymm0, %ymm1980; AVX512VLVBMI2-NEXT:    vmovdqa %ymm1, %ymm0981; AVX512VLVBMI2-NEXT:    retq982;983; XOPAVX1-LABEL: splatvar_funnnel_v8i32:984; XOPAVX1:       # %bb.0:985; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3986; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4987; XOPAVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm4[2],xmm3[2],xmm4[3],xmm3[3]988; XOPAVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2989; XOPAVX1-NEXT:    vpsrlq %xmm2, %xmm5, %xmm5990; XOPAVX1-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm4[0],xmm3[0],xmm4[1],xmm3[1]991; XOPAVX1-NEXT:    vpsrlq %xmm2, %xmm3, %xmm3992; XOPAVX1-NEXT:    vshufps {{.*#+}} xmm3 = xmm3[0,2],xmm5[0,2]993; XOPAVX1-NEXT:    vpunpckhdq {{.*#+}} xmm4 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]994; XOPAVX1-NEXT:    vpsrlq %xmm2, %xmm4, %xmm4995; XOPAVX1-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]996; XOPAVX1-NEXT:    vpsrlq %xmm2, %xmm0, %xmm0997; XOPAVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm4[0,2]998; XOPAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0999; XOPAVX1-NEXT:    retq1000;1001; XOPAVX2-LABEL: splatvar_funnnel_v8i32:1002; XOPAVX2:       # %bb.0:1003; XOPAVX2-NEXT:    vpunpckhdq {{.*#+}} ymm3 = ymm1[2],ymm0[2],ymm1[3],ymm0[3],ymm1[6],ymm0[6],ymm1[7],ymm0[7]1004; XOPAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21005; XOPAVX2-NEXT:    vpsrlq %xmm2, %ymm3, %ymm31006; XOPAVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[4],ymm0[4],ymm1[5],ymm0[5]1007; XOPAVX2-NEXT:    vpsrlq %xmm2, %ymm0, %ymm01008; XOPAVX2-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,2],ymm3[0,2],ymm0[4,6],ymm3[4,6]1009; XOPAVX2-NEXT:    retq1010  %splat = shufflevector <8 x i32> %amt, <8 x i32> undef, <8 x i32> zeroinitializer1011  %res = call <8 x i32> @llvm.fshr.v8i32(<8 x i32> %x, <8 x i32> %y, <8 x i32> %splat)1012  ret <8 x i32> %res1013}1014 1015define <16 x i16> @splatvar_funnnel_v16i16(<16 x i16> %x, <16 x i16> %y, <16 x i16> %amt) nounwind {1016; AVX1-LABEL: splatvar_funnnel_v16i16:1017; AVX1:       # %bb.0:1018; AVX1-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [15,0]1019; AVX1-NEXT:    vpand %xmm3, %xmm2, %xmm41020; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm51021; AVX1-NEXT:    vpsrlw %xmm4, %xmm5, %xmm51022; AVX1-NEXT:    vpandn %xmm3, %xmm2, %xmm21023; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31024; AVX1-NEXT:    vpaddw %xmm3, %xmm3, %xmm31025; AVX1-NEXT:    vpsllw %xmm2, %xmm3, %xmm31026; AVX1-NEXT:    vpor %xmm5, %xmm3, %xmm31027; AVX1-NEXT:    vpsrlw %xmm4, %xmm1, %xmm11028; AVX1-NEXT:    vpaddw %xmm0, %xmm0, %xmm01029; AVX1-NEXT:    vpsllw %xmm2, %xmm0, %xmm01030; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm01031; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm01032; AVX1-NEXT:    retq1033;1034; AVX2-LABEL: splatvar_funnnel_v16i16:1035; AVX2:       # %bb.0:1036; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm3 = [15,0,0,0,15,0,0,0]1037; AVX2-NEXT:    vpand %xmm3, %xmm2, %xmm41038; AVX2-NEXT:    vpsrlw %xmm4, %ymm1, %ymm11039; AVX2-NEXT:    vpandn %xmm3, %xmm2, %xmm21040; AVX2-NEXT:    vpaddw %ymm0, %ymm0, %ymm01041; AVX2-NEXT:    vpsllw %xmm2, %ymm0, %ymm01042; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01043; AVX2-NEXT:    retq1044;1045; AVX512F-LABEL: splatvar_funnnel_v16i16:1046; AVX512F:       # %bb.0:1047; AVX512F-NEXT:    vpbroadcastq {{.*#+}} xmm3 = [15,0,0,0,15,0,0,0]1048; AVX512F-NEXT:    vpand %xmm3, %xmm2, %xmm41049; AVX512F-NEXT:    vpsrlw %xmm4, %ymm1, %ymm11050; AVX512F-NEXT:    vpandn %xmm3, %xmm2, %xmm21051; AVX512F-NEXT:    vpaddw %ymm0, %ymm0, %ymm01052; AVX512F-NEXT:    vpsllw %xmm2, %ymm0, %ymm01053; AVX512F-NEXT:    vpor %ymm1, %ymm0, %ymm01054; AVX512F-NEXT:    retq1055;1056; AVX512VL-LABEL: splatvar_funnnel_v16i16:1057; AVX512VL:       # %bb.0:1058; AVX512VL-NEXT:    vpbroadcastq {{.*#+}} xmm3 = [15,0,0,0,15,0,0,0]1059; AVX512VL-NEXT:    vpand %xmm3, %xmm2, %xmm41060; AVX512VL-NEXT:    vpsrlw %xmm4, %ymm1, %ymm11061; AVX512VL-NEXT:    vpandn %xmm3, %xmm2, %xmm21062; AVX512VL-NEXT:    vpaddw %ymm0, %ymm0, %ymm01063; AVX512VL-NEXT:    vpsllw %xmm2, %ymm0, %ymm01064; AVX512VL-NEXT:    vpor %ymm1, %ymm0, %ymm01065; AVX512VL-NEXT:    retq1066;1067; AVX512BW-LABEL: splatvar_funnnel_v16i16:1068; AVX512BW:       # %bb.0:1069; AVX512BW-NEXT:    vpbroadcastq {{.*#+}} xmm3 = [15,0,0,0,15,0,0,0]1070; AVX512BW-NEXT:    vpand %xmm3, %xmm2, %xmm41071; AVX512BW-NEXT:    vpsrlw %xmm4, %ymm1, %ymm11072; AVX512BW-NEXT:    vpandn %xmm3, %xmm2, %xmm21073; AVX512BW-NEXT:    vpaddw %ymm0, %ymm0, %ymm01074; AVX512BW-NEXT:    vpsllw %xmm2, %ymm0, %ymm01075; AVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm01076; AVX512BW-NEXT:    retq1077;1078; AVX512VBMI2-LABEL: splatvar_funnnel_v16i16:1079; AVX512VBMI2:       # %bb.0:1080; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm11081; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01082; AVX512VBMI2-NEXT:    vpbroadcastw %xmm2, %ymm21083; AVX512VBMI2-NEXT:    vpshrdvw %zmm2, %zmm0, %zmm11084; AVX512VBMI2-NEXT:    vmovdqa %ymm1, %ymm01085; AVX512VBMI2-NEXT:    retq1086;1087; AVX512VLBW-LABEL: splatvar_funnnel_v16i16:1088; AVX512VLBW:       # %bb.0:1089; AVX512VLBW-NEXT:    vpbroadcastq {{.*#+}} xmm3 = [15,0,0,0,15,0,0,0]1090; AVX512VLBW-NEXT:    vpand %xmm3, %xmm2, %xmm41091; AVX512VLBW-NEXT:    vpsrlw %xmm4, %ymm1, %ymm11092; AVX512VLBW-NEXT:    vpandn %xmm3, %xmm2, %xmm21093; AVX512VLBW-NEXT:    vpaddw %ymm0, %ymm0, %ymm01094; AVX512VLBW-NEXT:    vpsllw %xmm2, %ymm0, %ymm01095; AVX512VLBW-NEXT:    vpor %ymm1, %ymm0, %ymm01096; AVX512VLBW-NEXT:    retq1097;1098; AVX512VLVBMI2-LABEL: splatvar_funnnel_v16i16:1099; AVX512VLVBMI2:       # %bb.0:1100; AVX512VLVBMI2-NEXT:    vpbroadcastw %xmm2, %ymm21101; AVX512VLVBMI2-NEXT:    vpshrdvw %ymm2, %ymm0, %ymm11102; AVX512VLVBMI2-NEXT:    vmovdqa %ymm1, %ymm01103; AVX512VLVBMI2-NEXT:    retq1104;1105; XOPAVX1-LABEL: splatvar_funnnel_v16i16:1106; XOPAVX1:       # %bb.0:1107; XOPAVX1-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [15,0]1108; XOPAVX1-NEXT:    vpand %xmm3, %xmm2, %xmm41109; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm51110; XOPAVX1-NEXT:    vpsrlw %xmm4, %xmm5, %xmm51111; XOPAVX1-NEXT:    vpandn %xmm3, %xmm2, %xmm21112; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31113; XOPAVX1-NEXT:    vpaddw %xmm3, %xmm3, %xmm31114; XOPAVX1-NEXT:    vpsllw %xmm2, %xmm3, %xmm31115; XOPAVX1-NEXT:    vpor %xmm5, %xmm3, %xmm31116; XOPAVX1-NEXT:    vpsrlw %xmm4, %xmm1, %xmm11117; XOPAVX1-NEXT:    vpaddw %xmm0, %xmm0, %xmm01118; XOPAVX1-NEXT:    vpsllw %xmm2, %xmm0, %xmm01119; XOPAVX1-NEXT:    vpor %xmm1, %xmm0, %xmm01120; XOPAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm01121; XOPAVX1-NEXT:    retq1122;1123; XOPAVX2-LABEL: splatvar_funnnel_v16i16:1124; XOPAVX2:       # %bb.0:1125; XOPAVX2-NEXT:    vpbroadcastq {{.*#+}} xmm3 = [15,0,0,0,15,0,0,0]1126; XOPAVX2-NEXT:    vpand %xmm3, %xmm2, %xmm41127; XOPAVX2-NEXT:    vpsrlw %xmm4, %ymm1, %ymm11128; XOPAVX2-NEXT:    vpandn %xmm3, %xmm2, %xmm21129; XOPAVX2-NEXT:    vpaddw %ymm0, %ymm0, %ymm01130; XOPAVX2-NEXT:    vpsllw %xmm2, %ymm0, %ymm01131; XOPAVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01132; XOPAVX2-NEXT:    retq1133  %splat = shufflevector <16 x i16> %amt, <16 x i16> undef, <16 x i32> zeroinitializer1134  %res = call <16 x i16> @llvm.fshr.v16i16(<16 x i16> %x, <16 x i16> %y, <16 x i16> %splat)1135  ret <16 x i16> %res1136}1137 1138define <32 x i8> @splatvar_funnnel_v32i8(<32 x i8> %x, <32 x i8> %y, <32 x i8> %amt) nounwind {1139; AVX1-LABEL: splatvar_funnnel_v32i8:1140; AVX1:       # %bb.0:1141; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31142; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm41143; AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm5 = xmm4[8],xmm3[8],xmm4[9],xmm3[9],xmm4[10],xmm3[10],xmm4[11],xmm3[11],xmm4[12],xmm3[12],xmm4[13],xmm3[13],xmm4[14],xmm3[14],xmm4[15],xmm3[15]1144; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21145; AVX1-NEXT:    vpsrlw %xmm2, %xmm5, %xmm51146; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm6 = [255,255,255,255,255,255,255,255]1147; AVX1-NEXT:    vpand %xmm6, %xmm5, %xmm51148; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm3 = xmm4[0],xmm3[0],xmm4[1],xmm3[1],xmm4[2],xmm3[2],xmm4[3],xmm3[3],xmm4[4],xmm3[4],xmm4[5],xmm3[5],xmm4[6],xmm3[6],xmm4[7],xmm3[7]1149; AVX1-NEXT:    vpsrlw %xmm2, %xmm3, %xmm31150; AVX1-NEXT:    vpand %xmm6, %xmm3, %xmm31151; AVX1-NEXT:    vpackuswb %xmm5, %xmm3, %xmm31152; AVX1-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]1153; AVX1-NEXT:    vpsrlw %xmm2, %xmm4, %xmm41154; AVX1-NEXT:    vpand %xmm6, %xmm4, %xmm41155; 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]1156; AVX1-NEXT:    vpsrlw %xmm2, %xmm0, %xmm01157; AVX1-NEXT:    vpand %xmm6, %xmm0, %xmm01158; AVX1-NEXT:    vpackuswb %xmm4, %xmm0, %xmm01159; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm01160; AVX1-NEXT:    retq1161;1162; AVX2-LABEL: splatvar_funnnel_v32i8:1163; AVX2:       # %bb.0:1164; AVX2-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm1[8],ymm0[8],ymm1[9],ymm0[9],ymm1[10],ymm0[10],ymm1[11],ymm0[11],ymm1[12],ymm0[12],ymm1[13],ymm0[13],ymm1[14],ymm0[14],ymm1[15],ymm0[15],ymm1[24],ymm0[24],ymm1[25],ymm0[25],ymm1[26],ymm0[26],ymm1[27],ymm0[27],ymm1[28],ymm0[28],ymm1[29],ymm0[29],ymm1[30],ymm0[30],ymm1[31],ymm0[31]1165; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21166; AVX2-NEXT:    vpsrlw %xmm2, %ymm3, %ymm31167; AVX2-NEXT:    vpbroadcastw {{.*#+}} ymm4 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]1168; AVX2-NEXT:    vpand %ymm4, %ymm3, %ymm31169; AVX2-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[2],ymm0[2],ymm1[3],ymm0[3],ymm1[4],ymm0[4],ymm1[5],ymm0[5],ymm1[6],ymm0[6],ymm1[7],ymm0[7],ymm1[16],ymm0[16],ymm1[17],ymm0[17],ymm1[18],ymm0[18],ymm1[19],ymm0[19],ymm1[20],ymm0[20],ymm1[21],ymm0[21],ymm1[22],ymm0[22],ymm1[23],ymm0[23]1170; AVX2-NEXT:    vpsrlw %xmm2, %ymm0, %ymm01171; AVX2-NEXT:    vpand %ymm4, %ymm0, %ymm01172; AVX2-NEXT:    vpackuswb %ymm3, %ymm0, %ymm01173; AVX2-NEXT:    retq1174;1175; AVX512F-LABEL: splatvar_funnnel_v32i8:1176; AVX512F:       # %bb.0:1177; AVX512F-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm1[8],ymm0[8],ymm1[9],ymm0[9],ymm1[10],ymm0[10],ymm1[11],ymm0[11],ymm1[12],ymm0[12],ymm1[13],ymm0[13],ymm1[14],ymm0[14],ymm1[15],ymm0[15],ymm1[24],ymm0[24],ymm1[25],ymm0[25],ymm1[26],ymm0[26],ymm1[27],ymm0[27],ymm1[28],ymm0[28],ymm1[29],ymm0[29],ymm1[30],ymm0[30],ymm1[31],ymm0[31]1178; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21179; AVX512F-NEXT:    vpsrlw %xmm2, %ymm3, %ymm31180; AVX512F-NEXT:    vpbroadcastw {{.*#+}} ymm4 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]1181; AVX512F-NEXT:    vpand %ymm4, %ymm3, %ymm31182; AVX512F-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[2],ymm0[2],ymm1[3],ymm0[3],ymm1[4],ymm0[4],ymm1[5],ymm0[5],ymm1[6],ymm0[6],ymm1[7],ymm0[7],ymm1[16],ymm0[16],ymm1[17],ymm0[17],ymm1[18],ymm0[18],ymm1[19],ymm0[19],ymm1[20],ymm0[20],ymm1[21],ymm0[21],ymm1[22],ymm0[22],ymm1[23],ymm0[23]1183; AVX512F-NEXT:    vpsrlw %xmm2, %ymm0, %ymm01184; AVX512F-NEXT:    vpand %ymm4, %ymm0, %ymm01185; AVX512F-NEXT:    vpackuswb %ymm3, %ymm0, %ymm01186; AVX512F-NEXT:    retq1187;1188; AVX512VL-LABEL: splatvar_funnnel_v32i8:1189; AVX512VL:       # %bb.0:1190; AVX512VL-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm1[8],ymm0[8],ymm1[9],ymm0[9],ymm1[10],ymm0[10],ymm1[11],ymm0[11],ymm1[12],ymm0[12],ymm1[13],ymm0[13],ymm1[14],ymm0[14],ymm1[15],ymm0[15],ymm1[24],ymm0[24],ymm1[25],ymm0[25],ymm1[26],ymm0[26],ymm1[27],ymm0[27],ymm1[28],ymm0[28],ymm1[29],ymm0[29],ymm1[30],ymm0[30],ymm1[31],ymm0[31]1191; AVX512VL-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21192; AVX512VL-NEXT:    vpsrlw %xmm2, %ymm3, %ymm31193; AVX512VL-NEXT:    vpbroadcastd {{.*#+}} ymm4 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]1194; AVX512VL-NEXT:    vpand %ymm4, %ymm3, %ymm31195; AVX512VL-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[2],ymm0[2],ymm1[3],ymm0[3],ymm1[4],ymm0[4],ymm1[5],ymm0[5],ymm1[6],ymm0[6],ymm1[7],ymm0[7],ymm1[16],ymm0[16],ymm1[17],ymm0[17],ymm1[18],ymm0[18],ymm1[19],ymm0[19],ymm1[20],ymm0[20],ymm1[21],ymm0[21],ymm1[22],ymm0[22],ymm1[23],ymm0[23]1196; AVX512VL-NEXT:    vpsrlw %xmm2, %ymm0, %ymm01197; AVX512VL-NEXT:    vpand %ymm4, %ymm0, %ymm01198; AVX512VL-NEXT:    vpackuswb %ymm3, %ymm0, %ymm01199; AVX512VL-NEXT:    retq1200;1201; AVX512BW-LABEL: splatvar_funnnel_v32i8:1202; AVX512BW:       # %bb.0:1203; AVX512BW-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm1[8],ymm0[8],ymm1[9],ymm0[9],ymm1[10],ymm0[10],ymm1[11],ymm0[11],ymm1[12],ymm0[12],ymm1[13],ymm0[13],ymm1[14],ymm0[14],ymm1[15],ymm0[15],ymm1[24],ymm0[24],ymm1[25],ymm0[25],ymm1[26],ymm0[26],ymm1[27],ymm0[27],ymm1[28],ymm0[28],ymm1[29],ymm0[29],ymm1[30],ymm0[30],ymm1[31],ymm0[31]1204; AVX512BW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21205; AVX512BW-NEXT:    vpsrlw %xmm2, %ymm3, %ymm31206; AVX512BW-NEXT:    vpbroadcastw {{.*#+}} ymm4 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]1207; AVX512BW-NEXT:    vpand %ymm4, %ymm3, %ymm31208; AVX512BW-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[2],ymm0[2],ymm1[3],ymm0[3],ymm1[4],ymm0[4],ymm1[5],ymm0[5],ymm1[6],ymm0[6],ymm1[7],ymm0[7],ymm1[16],ymm0[16],ymm1[17],ymm0[17],ymm1[18],ymm0[18],ymm1[19],ymm0[19],ymm1[20],ymm0[20],ymm1[21],ymm0[21],ymm1[22],ymm0[22],ymm1[23],ymm0[23]1209; AVX512BW-NEXT:    vpsrlw %xmm2, %ymm0, %ymm01210; AVX512BW-NEXT:    vpand %ymm4, %ymm0, %ymm01211; AVX512BW-NEXT:    vpackuswb %ymm3, %ymm0, %ymm01212; AVX512BW-NEXT:    retq1213;1214; AVX512VBMI2-LABEL: splatvar_funnnel_v32i8:1215; AVX512VBMI2:       # %bb.0:1216; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm11217; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01218; AVX512VBMI2-NEXT:    vmovdqa64 {{.*#+}} zmm3 = [0,64,1,65,2,66,3,67,4,68,5,69,6,70,7,71,16,80,17,81,18,82,19,83,20,84,21,85,22,86,23,87,8,72,9,73,10,74,11,75,12,76,13,77,14,78,15,79,24,88,25,89,26,90,27,91,28,92,29,93,30,94,31,95]1219; AVX512VBMI2-NEXT:    vpermi2b %zmm0, %zmm1, %zmm31220; AVX512VBMI2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm01221; AVX512VBMI2-NEXT:    vpsrlw %xmm0, %zmm3, %zmm01222; AVX512VBMI2-NEXT:    vmovdqa {{.*#+}} ymm1 = [0,2,4,6,8,10,12,14,32,34,36,38,40,42,44,46,16,18,20,22,24,26,28,30,48,50,52,54,56,58,60,62]1223; AVX512VBMI2-NEXT:    vpermb %zmm0, %zmm1, %zmm01224; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01225; AVX512VBMI2-NEXT:    retq1226;1227; AVX512VLBW-LABEL: splatvar_funnnel_v32i8:1228; AVX512VLBW:       # %bb.0:1229; AVX512VLBW-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm1[8],ymm0[8],ymm1[9],ymm0[9],ymm1[10],ymm0[10],ymm1[11],ymm0[11],ymm1[12],ymm0[12],ymm1[13],ymm0[13],ymm1[14],ymm0[14],ymm1[15],ymm0[15],ymm1[24],ymm0[24],ymm1[25],ymm0[25],ymm1[26],ymm0[26],ymm1[27],ymm0[27],ymm1[28],ymm0[28],ymm1[29],ymm0[29],ymm1[30],ymm0[30],ymm1[31],ymm0[31]1230; AVX512VLBW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21231; AVX512VLBW-NEXT:    vpsrlw %xmm2, %ymm3, %ymm31232; AVX512VLBW-NEXT:    vpbroadcastw {{.*#+}} ymm4 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]1233; AVX512VLBW-NEXT:    vpand %ymm4, %ymm3, %ymm31234; AVX512VLBW-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[2],ymm0[2],ymm1[3],ymm0[3],ymm1[4],ymm0[4],ymm1[5],ymm0[5],ymm1[6],ymm0[6],ymm1[7],ymm0[7],ymm1[16],ymm0[16],ymm1[17],ymm0[17],ymm1[18],ymm0[18],ymm1[19],ymm0[19],ymm1[20],ymm0[20],ymm1[21],ymm0[21],ymm1[22],ymm0[22],ymm1[23],ymm0[23]1235; AVX512VLBW-NEXT:    vpsrlw %xmm2, %ymm0, %ymm01236; AVX512VLBW-NEXT:    vpand %ymm4, %ymm0, %ymm01237; AVX512VLBW-NEXT:    vpackuswb %ymm3, %ymm0, %ymm01238; AVX512VLBW-NEXT:    retq1239;1240; AVX512VLVBMI2-LABEL: splatvar_funnnel_v32i8:1241; AVX512VLVBMI2:       # %bb.0:1242; AVX512VLVBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm11243; AVX512VLVBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01244; AVX512VLVBMI2-NEXT:    vmovdqa64 {{.*#+}} zmm3 = [8,72,9,73,10,74,11,75,12,76,13,77,14,78,15,79,24,88,25,89,26,90,27,91,28,92,29,93,30,94,31,95,0,64,1,65,2,66,3,67,4,68,5,69,6,70,7,71,16,80,17,81,18,82,19,83,20,84,21,85,22,86,23,87]1245; AVX512VLVBMI2-NEXT:    vpermi2b %zmm0, %zmm1, %zmm31246; AVX512VLVBMI2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm01247; AVX512VLVBMI2-NEXT:    vpsrlw %xmm0, %zmm3, %zmm01248; AVX512VLVBMI2-NEXT:    vmovdqa {{.*#+}} ymm1 = [32,34,36,38,40,42,44,46,0,2,4,6,8,10,12,14,48,50,52,54,56,58,60,62,16,18,20,22,24,26,28,30]1249; AVX512VLVBMI2-NEXT:    vpermb %zmm0, %zmm1, %zmm01250; AVX512VLVBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01251; AVX512VLVBMI2-NEXT:    retq1252;1253; XOPAVX1-LABEL: splatvar_funnnel_v32i8:1254; XOPAVX1:       # %bb.0:1255; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31256; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm41257; XOPAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm5 = xmm4[8],xmm3[8],xmm4[9],xmm3[9],xmm4[10],xmm3[10],xmm4[11],xmm3[11],xmm4[12],xmm3[12],xmm4[13],xmm3[13],xmm4[14],xmm3[14],xmm4[15],xmm3[15]1258; XOPAVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21259; XOPAVX1-NEXT:    vpsrlw %xmm2, %xmm5, %xmm51260; XOPAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm3 = xmm4[0],xmm3[0],xmm4[1],xmm3[1],xmm4[2],xmm3[2],xmm4[3],xmm3[3],xmm4[4],xmm3[4],xmm4[5],xmm3[5],xmm4[6],xmm3[6],xmm4[7],xmm3[7]1261; XOPAVX1-NEXT:    vpsrlw %xmm2, %xmm3, %xmm31262; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30]1263; XOPAVX1-NEXT:    vpperm %xmm4, %xmm5, %xmm3, %xmm31264; XOPAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm5 = 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]1265; XOPAVX1-NEXT:    vpsrlw %xmm2, %xmm5, %xmm51266; XOPAVX1-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]1267; XOPAVX1-NEXT:    vpsrlw %xmm2, %xmm0, %xmm01268; XOPAVX1-NEXT:    vpperm %xmm4, %xmm5, %xmm0, %xmm01269; XOPAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm01270; XOPAVX1-NEXT:    retq1271;1272; XOPAVX2-LABEL: splatvar_funnnel_v32i8:1273; XOPAVX2:       # %bb.0:1274; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm31275; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm41276; XOPAVX2-NEXT:    vpunpckhbw {{.*#+}} xmm5 = xmm4[8],xmm3[8],xmm4[9],xmm3[9],xmm4[10],xmm3[10],xmm4[11],xmm3[11],xmm4[12],xmm3[12],xmm4[13],xmm3[13],xmm4[14],xmm3[14],xmm4[15],xmm3[15]1277; XOPAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21278; XOPAVX2-NEXT:    vpsrlw %xmm2, %xmm5, %xmm51279; XOPAVX2-NEXT:    vpunpcklbw {{.*#+}} xmm3 = xmm4[0],xmm3[0],xmm4[1],xmm3[1],xmm4[2],xmm3[2],xmm4[3],xmm3[3],xmm4[4],xmm3[4],xmm4[5],xmm3[5],xmm4[6],xmm3[6],xmm4[7],xmm3[7]1280; XOPAVX2-NEXT:    vpsrlw %xmm2, %xmm3, %xmm31281; XOPAVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = [0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30]1282; XOPAVX2-NEXT:    vpperm %xmm4, %xmm5, %xmm3, %xmm31283; XOPAVX2-NEXT:    vpunpckhbw {{.*#+}} xmm5 = 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]1284; XOPAVX2-NEXT:    vpsrlw %xmm2, %xmm5, %xmm51285; XOPAVX2-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]1286; XOPAVX2-NEXT:    vpsrlw %xmm2, %xmm0, %xmm01287; XOPAVX2-NEXT:    vpperm %xmm4, %xmm5, %xmm0, %xmm01288; XOPAVX2-NEXT:    vinserti128 $1, %xmm3, %ymm0, %ymm01289; XOPAVX2-NEXT:    retq1290  %splat = shufflevector <32 x i8> %amt, <32 x i8> undef, <32 x i32> zeroinitializer1291  %res = call <32 x i8> @llvm.fshr.v32i8(<32 x i8> %x, <32 x i8> %y, <32 x i8> %splat)1292  ret <32 x i8> %res1293}1294 1295;1296; Constant Shifts1297;1298 1299define <4 x i64> @constant_funnnel_v4i64(<4 x i64> %x, <4 x i64> %y) nounwind {1300; AVX1-LABEL: constant_funnnel_v4i64:1301; AVX1:       # %bb.0:1302; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm21303; AVX1-NEXT:    vpsrlq $60, %xmm2, %xmm31304; AVX1-NEXT:    vpsrlq $50, %xmm2, %xmm21305; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm3[4,5,6,7]1306; AVX1-NEXT:    vpsrlq $14, %xmm1, %xmm31307; AVX1-NEXT:    vpsrlq $4, %xmm1, %xmm11308; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm3[4,5,6,7]1309; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm11310; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm21311; AVX1-NEXT:    vpsllq $4, %xmm2, %xmm31312; AVX1-NEXT:    vpsllq $14, %xmm2, %xmm21313; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm3[4,5,6,7]1314; AVX1-NEXT:    vpsllq $50, %xmm0, %xmm31315; AVX1-NEXT:    vpsllq $60, %xmm0, %xmm01316; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm3[4,5,6,7]1317; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01318; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01319; AVX1-NEXT:    retq1320;1321; AVX2-LABEL: constant_funnnel_v4i64:1322; AVX2:       # %bb.0:1323; AVX2-NEXT:    vpsrlvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11324; AVX2-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01325; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01326; AVX2-NEXT:    retq1327;1328; AVX512F-LABEL: constant_funnnel_v4i64:1329; AVX512F:       # %bb.0:1330; AVX512F-NEXT:    vpsrlvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11331; AVX512F-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01332; AVX512F-NEXT:    vpor %ymm1, %ymm0, %ymm01333; AVX512F-NEXT:    retq1334;1335; AVX512VL-LABEL: constant_funnnel_v4i64:1336; AVX512VL:       # %bb.0:1337; AVX512VL-NEXT:    vpsrlvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11338; AVX512VL-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01339; AVX512VL-NEXT:    vpor %ymm1, %ymm0, %ymm01340; AVX512VL-NEXT:    retq1341;1342; AVX512BW-LABEL: constant_funnnel_v4i64:1343; AVX512BW:       # %bb.0:1344; AVX512BW-NEXT:    vpsrlvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11345; AVX512BW-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01346; AVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm01347; AVX512BW-NEXT:    retq1348;1349; AVX512VBMI2-LABEL: constant_funnnel_v4i64:1350; AVX512VBMI2:       # %bb.0:1351; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm11352; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01353; AVX512VBMI2-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [4,14,50,60]1354; AVX512VBMI2-NEXT:    vpshrdvq %zmm2, %zmm0, %zmm11355; AVX512VBMI2-NEXT:    vmovdqa %ymm1, %ymm01356; AVX512VBMI2-NEXT:    retq1357;1358; AVX512VLBW-LABEL: constant_funnnel_v4i64:1359; AVX512VLBW:       # %bb.0:1360; AVX512VLBW-NEXT:    vpsrlvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11361; AVX512VLBW-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01362; AVX512VLBW-NEXT:    vpor %ymm1, %ymm0, %ymm01363; AVX512VLBW-NEXT:    retq1364;1365; AVX512VLVBMI2-LABEL: constant_funnnel_v4i64:1366; AVX512VLVBMI2:       # %bb.0:1367; AVX512VLVBMI2-NEXT:    vpshrdvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm11368; AVX512VLVBMI2-NEXT:    vmovdqa %ymm1, %ymm01369; AVX512VLVBMI2-NEXT:    retq1370;1371; XOPAVX1-LABEL: constant_funnnel_v4i64:1372; XOPAVX1:       # %bb.0:1373; XOPAVX1-NEXT:    vpshlq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm21374; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm11375; XOPAVX1-NEXT:    vpshlq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11376; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm11377; XOPAVX1-NEXT:    vpshlq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm21378; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01379; XOPAVX1-NEXT:    vpshlq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01380; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm01381; XOPAVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01382; XOPAVX1-NEXT:    retq1383;1384; XOPAVX2-LABEL: constant_funnnel_v4i64:1385; XOPAVX2:       # %bb.0:1386; XOPAVX2-NEXT:    vpsrlvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11387; XOPAVX2-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01388; XOPAVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01389; XOPAVX2-NEXT:    retq1390  %res = call <4 x i64> @llvm.fshr.v4i64(<4 x i64> %x, <4 x i64> %y, <4 x i64> <i64 4, i64 14, i64 50, i64 60>)1391  ret <4 x i64> %res1392}1393 1394define <8 x i32> @constant_funnnel_v8i32(<8 x i32> %x, <8 x i32> %y) nounwind {1395; AVX1-LABEL: constant_funnnel_v8i32:1396; AVX1:       # %bb.0:1397; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm21398; AVX1-NEXT:    vpsrld $11, %xmm2, %xmm31399; AVX1-NEXT:    vpsrld $9, %xmm2, %xmm41400; AVX1-NEXT:    vpblendw {{.*#+}} xmm3 = xmm4[0,1,2,3],xmm3[4,5,6,7]1401; AVX1-NEXT:    vpsrld $10, %xmm2, %xmm41402; AVX1-NEXT:    vpsrld $8, %xmm2, %xmm21403; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm4[4,5,6,7]1404; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1],xmm3[2,3],xmm2[4,5],xmm3[6,7]1405; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31406; AVX1-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3, %xmm3 # [16777216,8388608,4194304,2097152]1407; AVX1-NEXT:    vpor %xmm2, %xmm3, %xmm21408; AVX1-NEXT:    vpsrld $7, %xmm1, %xmm31409; AVX1-NEXT:    vpsrld $5, %xmm1, %xmm41410; AVX1-NEXT:    vpblendw {{.*#+}} xmm3 = xmm4[0,1,2,3],xmm3[4,5,6,7]1411; AVX1-NEXT:    vpsrld $6, %xmm1, %xmm41412; AVX1-NEXT:    vpsrld $4, %xmm1, %xmm11413; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm4[4,5,6,7]1414; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm3[2,3],xmm1[4,5],xmm3[6,7]1415; AVX1-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [268435456,134217728,67108864,33554432]1416; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm01417; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01418; AVX1-NEXT:    retq1419;1420; AVX2-LABEL: constant_funnnel_v8i32:1421; AVX2:       # %bb.0:1422; AVX2-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11423; AVX2-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01424; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01425; AVX2-NEXT:    retq1426;1427; AVX512F-LABEL: constant_funnnel_v8i32:1428; AVX512F:       # %bb.0:1429; AVX512F-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11430; AVX512F-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01431; AVX512F-NEXT:    vpor %ymm1, %ymm0, %ymm01432; AVX512F-NEXT:    retq1433;1434; AVX512VL-LABEL: constant_funnnel_v8i32:1435; AVX512VL:       # %bb.0:1436; AVX512VL-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11437; AVX512VL-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01438; AVX512VL-NEXT:    vpor %ymm1, %ymm0, %ymm01439; AVX512VL-NEXT:    retq1440;1441; AVX512BW-LABEL: constant_funnnel_v8i32:1442; AVX512BW:       # %bb.0:1443; AVX512BW-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11444; AVX512BW-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01445; AVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm01446; AVX512BW-NEXT:    retq1447;1448; AVX512VBMI2-LABEL: constant_funnnel_v8i32:1449; AVX512VBMI2:       # %bb.0:1450; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm11451; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01452; AVX512VBMI2-NEXT:    vpmovsxbd {{.*#+}} ymm2 = [4,5,6,7,8,9,10,11]1453; AVX512VBMI2-NEXT:    vpshrdvd %zmm2, %zmm0, %zmm11454; AVX512VBMI2-NEXT:    vmovdqa %ymm1, %ymm01455; AVX512VBMI2-NEXT:    retq1456;1457; AVX512VLBW-LABEL: constant_funnnel_v8i32:1458; AVX512VLBW:       # %bb.0:1459; AVX512VLBW-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11460; AVX512VLBW-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01461; AVX512VLBW-NEXT:    vpor %ymm1, %ymm0, %ymm01462; AVX512VLBW-NEXT:    retq1463;1464; AVX512VLVBMI2-LABEL: constant_funnnel_v8i32:1465; AVX512VLVBMI2:       # %bb.0:1466; AVX512VLVBMI2-NEXT:    vpshrdvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm11467; AVX512VLVBMI2-NEXT:    vmovdqa %ymm1, %ymm01468; AVX512VLVBMI2-NEXT:    retq1469;1470; XOPAVX1-LABEL: constant_funnnel_v8i32:1471; XOPAVX1:       # %bb.0:1472; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm21473; XOPAVX1-NEXT:    vpshld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21474; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31475; XOPAVX1-NEXT:    vpshld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3, %xmm31476; XOPAVX1-NEXT:    vpor %xmm2, %xmm3, %xmm21477; XOPAVX1-NEXT:    vpshld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11478; XOPAVX1-NEXT:    vpshld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01479; XOPAVX1-NEXT:    vpor %xmm1, %xmm0, %xmm01480; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01481; XOPAVX1-NEXT:    retq1482;1483; XOPAVX2-LABEL: constant_funnnel_v8i32:1484; XOPAVX2:       # %bb.0:1485; XOPAVX2-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11486; XOPAVX2-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01487; XOPAVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01488; XOPAVX2-NEXT:    retq1489  %res = call <8 x i32> @llvm.fshr.v8i32(<8 x i32> %x, <8 x i32> %y, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11>)1490  ret <8 x i32> %res1491}1492 1493define <16 x i16> @constant_funnnel_v16i16(<16 x i16> %x, <16 x i16> %y) nounwind {1494; AVX1-LABEL: constant_funnnel_v16i16:1495; AVX1:       # %bb.0:1496; AVX1-NEXT:    vpmulhuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm2 # [u,32768,16384,8192,4096,2048,1024,512]1497; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm1[0],xmm2[1,2,3,4,5,6,7]1498; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm11499; AVX1-NEXT:    vpmulhuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1 # [256,128,64,32,16,8,4,2]1500; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm11501; AVX1-NEXT:    vpaddw %xmm0, %xmm0, %xmm21502; AVX1-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2 # [32768,16384,8192,4096,2048,1024,512,256]1503; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01504; AVX1-NEXT:    vpaddw %xmm0, %xmm0, %xmm01505; AVX1-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [128,64,32,16,8,4,2,1]1506; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm01507; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01508; AVX1-NEXT:    retq1509;1510; AVX2-LABEL: constant_funnnel_v16i16:1511; AVX2:       # %bb.0:1512; AVX2-NEXT:    vpmulhuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm2 # [u,32768,16384,8192,4096,2048,1024,512,256,128,64,32,16,8,4,2]1513; AVX2-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3,4,5,6,7]1514; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm2[4,5,6,7]1515; AVX2-NEXT:    vpaddw %ymm0, %ymm0, %ymm01516; AVX2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [32768,16384,8192,4096,2048,1024,512,256,128,64,32,16,8,4,2,1]1517; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01518; AVX2-NEXT:    retq1519;1520; AVX512F-LABEL: constant_funnnel_v16i16:1521; AVX512F:       # %bb.0:1522; AVX512F-NEXT:    vpmulhuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm2 # [u,32768,16384,8192,4096,2048,1024,512,256,128,64,32,16,8,4,2]1523; AVX512F-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3,4,5,6,7]1524; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm2[4,5,6,7]1525; AVX512F-NEXT:    vpaddw %ymm0, %ymm0, %ymm01526; AVX512F-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [32768,16384,8192,4096,2048,1024,512,256,128,64,32,16,8,4,2,1]1527; AVX512F-NEXT:    vpor %ymm1, %ymm0, %ymm01528; AVX512F-NEXT:    retq1529;1530; AVX512VL-LABEL: constant_funnnel_v16i16:1531; AVX512VL:       # %bb.0:1532; AVX512VL-NEXT:    vpmulhuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm2 # [u,32768,16384,8192,4096,2048,1024,512,256,128,64,32,16,8,4,2]1533; AVX512VL-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3,4,5,6,7]1534; AVX512VL-NEXT:    vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm2[4,5,6,7]1535; AVX512VL-NEXT:    vpaddw %ymm0, %ymm0, %ymm01536; AVX512VL-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [32768,16384,8192,4096,2048,1024,512,256,128,64,32,16,8,4,2,1]1537; AVX512VL-NEXT:    vpor %ymm1, %ymm0, %ymm01538; AVX512VL-NEXT:    retq1539;1540; AVX512BW-LABEL: constant_funnnel_v16i16:1541; AVX512BW:       # %bb.0:1542; AVX512BW-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm11543; AVX512BW-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]1544; AVX512BW-NEXT:    vpsrlvw %zmm2, %zmm1, %zmm11545; AVX512BW-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0]1546; AVX512BW-NEXT:    vpaddw %ymm0, %ymm0, %ymm01547; AVX512BW-NEXT:    vpsllvw %zmm2, %zmm0, %zmm01548; AVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm01549; AVX512BW-NEXT:    retq1550;1551; AVX512VBMI2-LABEL: constant_funnnel_v16i16:1552; AVX512VBMI2:       # %bb.0:1553; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm11554; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01555; AVX512VBMI2-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]1556; AVX512VBMI2-NEXT:    vpshrdvw %zmm2, %zmm0, %zmm11557; AVX512VBMI2-NEXT:    vmovdqa %ymm1, %ymm01558; AVX512VBMI2-NEXT:    retq1559;1560; AVX512VLBW-LABEL: constant_funnnel_v16i16:1561; AVX512VLBW:       # %bb.0:1562; AVX512VLBW-NEXT:    vpsrlvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11563; AVX512VLBW-NEXT:    vpaddw %ymm0, %ymm0, %ymm01564; AVX512VLBW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01565; AVX512VLBW-NEXT:    vpor %ymm1, %ymm0, %ymm01566; AVX512VLBW-NEXT:    retq1567;1568; AVX512VLVBMI2-LABEL: constant_funnnel_v16i16:1569; AVX512VLVBMI2:       # %bb.0:1570; AVX512VLVBMI2-NEXT:    vpshrdvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm11571; AVX512VLVBMI2-NEXT:    vmovdqa %ymm1, %ymm01572; AVX512VLVBMI2-NEXT:    retq1573;1574; XOPAVX1-LABEL: constant_funnnel_v16i16:1575; XOPAVX1:       # %bb.0:1576; XOPAVX1-NEXT:    vpshlw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm21577; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm11578; XOPAVX1-NEXT:    vpshlw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11579; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm11580; XOPAVX1-NEXT:    vpaddw %xmm0, %xmm0, %xmm21581; XOPAVX1-NEXT:    vpshlw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21582; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01583; XOPAVX1-NEXT:    vpaddw %xmm0, %xmm0, %xmm01584; XOPAVX1-NEXT:    vpshlw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01585; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm01586; XOPAVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01587; XOPAVX1-NEXT:    retq1588;1589; XOPAVX2-LABEL: constant_funnnel_v16i16:1590; XOPAVX2:       # %bb.0:1591; XOPAVX2-NEXT:    vpmulhuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm2 # [u,32768,16384,8192,4096,2048,1024,512,256,128,64,32,16,8,4,2]1592; XOPAVX2-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3,4,5,6,7]1593; XOPAVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm2[4,5,6,7]1594; XOPAVX2-NEXT:    vpaddw %ymm0, %ymm0, %ymm01595; XOPAVX2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [32768,16384,8192,4096,2048,1024,512,256,128,64,32,16,8,4,2,1]1596; XOPAVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01597; XOPAVX2-NEXT:    retq1598  %res = call <16 x i16> @llvm.fshr.v16i16(<16 x i16> %x, <16 x i16> %y, <16 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>)1599  ret <16 x i16> %res1600}1601 1602define <32 x i8> @constant_funnnel_v32i8(<32 x i8> %x, <32 x i8> %y) nounwind {1603; AVX1-LABEL: constant_funnnel_v32i8:1604; AVX1:       # %bb.0:1605; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm21606; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm31607; AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm4 = xmm2[8],xmm3[8],xmm2[9],xmm3[9],xmm2[10],xmm3[10],xmm2[11],xmm3[11],xmm2[12],xmm3[12],xmm2[13],xmm3[13],xmm2[14],xmm3[14],xmm2[15],xmm3[15]1608; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [256,2,4,8,16,32,64,128]1609; AVX1-NEXT:    vpmullw %xmm5, %xmm4, %xmm41610; AVX1-NEXT:    vpsrlw $8, %xmm4, %xmm41611; AVX1-NEXT:    vpmovzxbw {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero1612; AVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [256,128,64,32,16,8,4,2]1613; AVX1-NEXT:    vpmullw %xmm6, %xmm2, %xmm21614; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm21615; AVX1-NEXT:    vpackuswb %xmm4, %xmm2, %xmm21616; AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm1[8],xmm3[8],xmm1[9],xmm3[9],xmm1[10],xmm3[10],xmm1[11],xmm3[11],xmm1[12],xmm3[12],xmm1[13],xmm3[13],xmm1[14],xmm3[14],xmm1[15],xmm3[15]1617; AVX1-NEXT:    vpmullw %xmm5, %xmm3, %xmm31618; AVX1-NEXT:    vpsrlw $8, %xmm3, %xmm31619; 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],zero1620; AVX1-NEXT:    vpmullw %xmm6, %xmm1, %xmm11621; AVX1-NEXT:    vpsrlw $8, %xmm1, %xmm11622; AVX1-NEXT:    vpackuswb %xmm3, %xmm1, %xmm11623; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm11624; AVX1-NEXT:    vpaddb %xmm0, %xmm0, %xmm21625; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,64,0,16,0,4,0,1,0,1,0,4,0,16,0,64]1626; AVX1-NEXT:    vpmaddubsw %xmm3, %xmm2, %xmm41627; AVX1-NEXT:    vpsllw $8, %xmm4, %xmm41628; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01629; AVX1-NEXT:    vpaddb %xmm0, %xmm0, %xmm01630; AVX1-NEXT:    vpmaddubsw %xmm3, %xmm0, %xmm31631; AVX1-NEXT:    vpsllw $8, %xmm3, %xmm31632; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm4, %ymm31633; AVX1-NEXT:    vorps %ymm1, %ymm3, %ymm11634; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [128,64,32,16,8,4,2,1,128,1,2,4,8,16,32,64]1635; AVX1-NEXT:    vpmullw %xmm3, %xmm0, %xmm01636; AVX1-NEXT:    vpmullw %xmm3, %xmm2, %xmm21637; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm01638; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01639; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01640; AVX1-NEXT:    retq1641;1642; AVX2-LABEL: constant_funnnel_v32i8:1643; AVX2:       # %bb.0:1644; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm21645; AVX2-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm1[8],ymm2[8],ymm1[9],ymm2[9],ymm1[10],ymm2[10],ymm1[11],ymm2[11],ymm1[12],ymm2[12],ymm1[13],ymm2[13],ymm1[14],ymm2[14],ymm1[15],ymm2[15],ymm1[24],ymm2[24],ymm1[25],ymm2[25],ymm1[26],ymm2[26],ymm1[27],ymm2[27],ymm1[28],ymm2[28],ymm1[29],ymm2[29],ymm1[30],ymm2[30],ymm1[31],ymm2[31]1646; AVX2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm3, %ymm3 # [256,2,4,8,16,32,64,128,256,2,4,8,16,32,64,128]1647; AVX2-NEXT:    vpsrlw $8, %ymm3, %ymm31648; AVX2-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm1[0],ymm2[0],ymm1[1],ymm2[1],ymm1[2],ymm2[2],ymm1[3],ymm2[3],ymm1[4],ymm2[4],ymm1[5],ymm2[5],ymm1[6],ymm2[6],ymm1[7],ymm2[7],ymm1[16],ymm2[16],ymm1[17],ymm2[17],ymm1[18],ymm2[18],ymm1[19],ymm2[19],ymm1[20],ymm2[20],ymm1[21],ymm2[21],ymm1[22],ymm2[22],ymm1[23],ymm2[23]1649; AVX2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [256,128,64,32,16,8,4,2,256,128,64,32,16,8,4,2]1650; AVX2-NEXT:    vpsrlw $8, %ymm1, %ymm11651; AVX2-NEXT:    vpackuswb %ymm3, %ymm1, %ymm11652; AVX2-NEXT:    vpaddb %ymm0, %ymm0, %ymm01653; AVX2-NEXT:    vpmaddubsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm2 # [0,64,0,16,0,4,0,1,0,1,0,4,0,16,0,64,0,64,0,16,0,4,0,1,0,1,0,4,0,16,0,64]1654; AVX2-NEXT:    vpsllw $8, %ymm2, %ymm21655; AVX2-NEXT:    vpor %ymm1, %ymm2, %ymm11656; 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,128,64,32,16,8,4,2,1,128,1,2,4,8,16,32,64]1657; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01658; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01659; AVX2-NEXT:    retq1660;1661; AVX512F-LABEL: constant_funnnel_v32i8:1662; AVX512F:       # %bb.0:1663; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm21664; AVX512F-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm1[8],ymm2[8],ymm1[9],ymm2[9],ymm1[10],ymm2[10],ymm1[11],ymm2[11],ymm1[12],ymm2[12],ymm1[13],ymm2[13],ymm1[14],ymm2[14],ymm1[15],ymm2[15],ymm1[24],ymm2[24],ymm1[25],ymm2[25],ymm1[26],ymm2[26],ymm1[27],ymm2[27],ymm1[28],ymm2[28],ymm1[29],ymm2[29],ymm1[30],ymm2[30],ymm1[31],ymm2[31]1665; AVX512F-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm3, %ymm3 # [256,2,4,8,16,32,64,128,256,2,4,8,16,32,64,128]1666; AVX512F-NEXT:    vpsrlw $8, %ymm3, %ymm31667; AVX512F-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm1[0],ymm2[0],ymm1[1],ymm2[1],ymm1[2],ymm2[2],ymm1[3],ymm2[3],ymm1[4],ymm2[4],ymm1[5],ymm2[5],ymm1[6],ymm2[6],ymm1[7],ymm2[7],ymm1[16],ymm2[16],ymm1[17],ymm2[17],ymm1[18],ymm2[18],ymm1[19],ymm2[19],ymm1[20],ymm2[20],ymm1[21],ymm2[21],ymm1[22],ymm2[22],ymm1[23],ymm2[23]1668; AVX512F-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [256,128,64,32,16,8,4,2,256,128,64,32,16,8,4,2]1669; AVX512F-NEXT:    vpsrlw $8, %ymm1, %ymm11670; AVX512F-NEXT:    vpackuswb %ymm3, %ymm1, %ymm11671; AVX512F-NEXT:    vpaddb %ymm0, %ymm0, %ymm01672; AVX512F-NEXT:    vpmaddubsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm2 # [0,64,0,16,0,4,0,1,0,1,0,4,0,16,0,64,0,64,0,16,0,4,0,1,0,1,0,4,0,16,0,64]1673; AVX512F-NEXT:    vpsllw $8, %ymm2, %ymm21674; AVX512F-NEXT:    vpor %ymm1, %ymm2, %ymm11675; AVX512F-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,128,64,32,16,8,4,2,1,128,1,2,4,8,16,32,64]1676; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01677; AVX512F-NEXT:    vpor %ymm1, %ymm0, %ymm01678; AVX512F-NEXT:    retq1679;1680; AVX512VL-LABEL: constant_funnnel_v32i8:1681; AVX512VL:       # %bb.0:1682; AVX512VL-NEXT:    vpxor %xmm2, %xmm2, %xmm21683; AVX512VL-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm1[8],ymm2[8],ymm1[9],ymm2[9],ymm1[10],ymm2[10],ymm1[11],ymm2[11],ymm1[12],ymm2[12],ymm1[13],ymm2[13],ymm1[14],ymm2[14],ymm1[15],ymm2[15],ymm1[24],ymm2[24],ymm1[25],ymm2[25],ymm1[26],ymm2[26],ymm1[27],ymm2[27],ymm1[28],ymm2[28],ymm1[29],ymm2[29],ymm1[30],ymm2[30],ymm1[31],ymm2[31]1684; AVX512VL-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm3, %ymm3 # [256,2,4,8,16,32,64,128,256,2,4,8,16,32,64,128]1685; AVX512VL-NEXT:    vpsrlw $8, %ymm3, %ymm31686; AVX512VL-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm1[0],ymm2[0],ymm1[1],ymm2[1],ymm1[2],ymm2[2],ymm1[3],ymm2[3],ymm1[4],ymm2[4],ymm1[5],ymm2[5],ymm1[6],ymm2[6],ymm1[7],ymm2[7],ymm1[16],ymm2[16],ymm1[17],ymm2[17],ymm1[18],ymm2[18],ymm1[19],ymm2[19],ymm1[20],ymm2[20],ymm1[21],ymm2[21],ymm1[22],ymm2[22],ymm1[23],ymm2[23]1687; AVX512VL-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [256,128,64,32,16,8,4,2,256,128,64,32,16,8,4,2]1688; AVX512VL-NEXT:    vpsrlw $8, %ymm1, %ymm11689; AVX512VL-NEXT:    vpackuswb %ymm3, %ymm1, %ymm11690; AVX512VL-NEXT:    vpaddb %ymm0, %ymm0, %ymm01691; AVX512VL-NEXT:    vpmaddubsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm2 # [0,64,0,16,0,4,0,1,0,1,0,4,0,16,0,64,0,64,0,16,0,4,0,1,0,1,0,4,0,16,0,64]1692; AVX512VL-NEXT:    vpsllw $8, %ymm2, %ymm21693; AVX512VL-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,128,64,32,16,8,4,2,1,128,1,2,4,8,16,32,64]1694; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm01695; AVX512VL-NEXT:    vpternlogq {{.*#+}} ymm0 = ymm0 | ymm1 | ymm21696; AVX512VL-NEXT:    retq1697;1698; AVX512BW-LABEL: constant_funnnel_v32i8:1699; AVX512BW:       # %bb.0:1700; AVX512BW-NEXT:    vpmovzxbw {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero,ymm1[16],zero,ymm1[17],zero,ymm1[18],zero,ymm1[19],zero,ymm1[20],zero,ymm1[21],zero,ymm1[22],zero,ymm1[23],zero,ymm1[24],zero,ymm1[25],zero,ymm1[26],zero,ymm1[27],zero,ymm1[28],zero,ymm1[29],zero,ymm1[30],zero,ymm1[31],zero1701; AVX512BW-NEXT:    vpmovzxbw {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero,ymm0[16],zero,ymm0[17],zero,ymm0[18],zero,ymm0[19],zero,ymm0[20],zero,ymm0[21],zero,ymm0[22],zero,ymm0[23],zero,ymm0[24],zero,ymm0[25],zero,ymm0[26],zero,ymm0[27],zero,ymm0[28],zero,ymm0[29],zero,ymm0[30],zero,ymm0[31],zero1702; AVX512BW-NEXT:    vpsllw $8, %zmm0, %zmm01703; AVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm01704; AVX512BW-NEXT:    vpsrlvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm01705; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm01706; AVX512BW-NEXT:    retq1707;1708; AVX512VBMI2-LABEL: constant_funnnel_v32i8:1709; AVX512VBMI2:       # %bb.0:1710; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm11711; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01712; AVX512VBMI2-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [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,16,80,17,81,18,82,19,83,20,84,21,85,22,86,23,87,24,88,25,89,26,90,27,91,28,92,29,93,30,94,31,95]1713; AVX512VBMI2-NEXT:    vpermi2b %zmm0, %zmm1, %zmm21714; AVX512VBMI2-NEXT:    vpsrlvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm2, %zmm01715; AVX512VBMI2-NEXT:    vpmovwb %zmm0, %ymm01716; AVX512VBMI2-NEXT:    retq1717;1718; AVX512VLBW-LABEL: constant_funnnel_v32i8:1719; AVX512VLBW:       # %bb.0:1720; AVX512VLBW-NEXT:    vpmovzxbw {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero,ymm1[16],zero,ymm1[17],zero,ymm1[18],zero,ymm1[19],zero,ymm1[20],zero,ymm1[21],zero,ymm1[22],zero,ymm1[23],zero,ymm1[24],zero,ymm1[25],zero,ymm1[26],zero,ymm1[27],zero,ymm1[28],zero,ymm1[29],zero,ymm1[30],zero,ymm1[31],zero1721; AVX512VLBW-NEXT:    vpmovzxbw {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero,ymm0[16],zero,ymm0[17],zero,ymm0[18],zero,ymm0[19],zero,ymm0[20],zero,ymm0[21],zero,ymm0[22],zero,ymm0[23],zero,ymm0[24],zero,ymm0[25],zero,ymm0[26],zero,ymm0[27],zero,ymm0[28],zero,ymm0[29],zero,ymm0[30],zero,ymm0[31],zero1722; AVX512VLBW-NEXT:    vpsllw $8, %zmm0, %zmm01723; AVX512VLBW-NEXT:    vporq %zmm1, %zmm0, %zmm01724; AVX512VLBW-NEXT:    vpsrlvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm01725; AVX512VLBW-NEXT:    vpmovwb %zmm0, %ymm01726; AVX512VLBW-NEXT:    retq1727;1728; AVX512VLVBMI2-LABEL: constant_funnnel_v32i8:1729; AVX512VLVBMI2:       # %bb.0:1730; AVX512VLVBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm11731; AVX512VLVBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01732; AVX512VLVBMI2-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [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,16,80,17,81,18,82,19,83,20,84,21,85,22,86,23,87,24,88,25,89,26,90,27,91,28,92,29,93,30,94,31,95]1733; AVX512VLVBMI2-NEXT:    vpermi2b %zmm0, %zmm1, %zmm21734; AVX512VLVBMI2-NEXT:    vpsrlvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm2, %zmm01735; AVX512VLVBMI2-NEXT:    vpmovwb %zmm0, %ymm01736; AVX512VLVBMI2-NEXT:    retq1737;1738; XOPAVX1-LABEL: constant_funnnel_v32i8:1739; XOPAVX1:       # %bb.0:1740; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm21741; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,255,254,253,252,251,250,249,0,249,250,251,252,253,254,255]1742; XOPAVX1-NEXT:    vpshlb %xmm3, %xmm2, %xmm21743; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm41744; XOPAVX1-NEXT:    vpaddb %xmm4, %xmm4, %xmm41745; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [7,6,5,4,3,2,1,0,7,0,1,2,3,4,5,6]1746; XOPAVX1-NEXT:    vpshlb %xmm5, %xmm4, %xmm41747; XOPAVX1-NEXT:    vpor %xmm2, %xmm4, %xmm21748; XOPAVX1-NEXT:    vpshlb %xmm3, %xmm1, %xmm11749; XOPAVX1-NEXT:    vpaddb %xmm0, %xmm0, %xmm01750; XOPAVX1-NEXT:    vpshlb %xmm5, %xmm0, %xmm01751; XOPAVX1-NEXT:    vpor %xmm1, %xmm0, %xmm01752; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01753; XOPAVX1-NEXT:    retq1754;1755; XOPAVX2-LABEL: constant_funnnel_v32i8:1756; XOPAVX2:       # %bb.0:1757; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm21758; XOPAVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,255,254,253,252,251,250,249,0,249,250,251,252,253,254,255]1759; XOPAVX2-NEXT:    vpshlb %xmm3, %xmm2, %xmm21760; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm41761; XOPAVX2-NEXT:    vpaddb %xmm4, %xmm4, %xmm41762; XOPAVX2-NEXT:    vmovdqa {{.*#+}} xmm5 = [7,6,5,4,3,2,1,0,7,0,1,2,3,4,5,6]1763; XOPAVX2-NEXT:    vpshlb %xmm5, %xmm4, %xmm41764; XOPAVX2-NEXT:    vpor %xmm2, %xmm4, %xmm21765; XOPAVX2-NEXT:    vpshlb %xmm3, %xmm1, %xmm11766; XOPAVX2-NEXT:    vpaddb %xmm0, %xmm0, %xmm01767; XOPAVX2-NEXT:    vpshlb %xmm5, %xmm0, %xmm01768; XOPAVX2-NEXT:    vpor %xmm1, %xmm0, %xmm01769; XOPAVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm01770; XOPAVX2-NEXT:    retq1771  %res = call <32 x i8> @llvm.fshr.v32i8(<32 x i8> %x, <32 x i8> %y, <32 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, 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>)1772  ret <32 x i8> %res1773}1774 1775;1776; Uniform Constant Shifts1777;1778 1779define <4 x i64> @splatconstant_funnnel_v4i64(<4 x i64> %x, <4 x i64> %y) nounwind {1780; AVX1-LABEL: splatconstant_funnnel_v4i64:1781; AVX1:       # %bb.0:1782; AVX1-NEXT:    vpsrlq $14, %xmm1, %xmm21783; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm11784; AVX1-NEXT:    vpsrlq $14, %xmm1, %xmm11785; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm11786; AVX1-NEXT:    vpsllq $50, %xmm0, %xmm21787; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01788; AVX1-NEXT:    vpsllq $50, %xmm0, %xmm01789; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm01790; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01791; AVX1-NEXT:    retq1792;1793; AVX2-LABEL: splatconstant_funnnel_v4i64:1794; AVX2:       # %bb.0:1795; AVX2-NEXT:    vpsrlq $14, %ymm1, %ymm11796; AVX2-NEXT:    vpsllq $50, %ymm0, %ymm01797; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01798; AVX2-NEXT:    retq1799;1800; AVX512F-LABEL: splatconstant_funnnel_v4i64:1801; AVX512F:       # %bb.0:1802; AVX512F-NEXT:    vpsrlq $14, %ymm1, %ymm11803; AVX512F-NEXT:    vpsllq $50, %ymm0, %ymm01804; AVX512F-NEXT:    vpor %ymm1, %ymm0, %ymm01805; AVX512F-NEXT:    retq1806;1807; AVX512VL-LABEL: splatconstant_funnnel_v4i64:1808; AVX512VL:       # %bb.0:1809; AVX512VL-NEXT:    vpsrlq $14, %ymm1, %ymm11810; AVX512VL-NEXT:    vpsllq $50, %ymm0, %ymm01811; AVX512VL-NEXT:    vpor %ymm1, %ymm0, %ymm01812; AVX512VL-NEXT:    retq1813;1814; AVX512BW-LABEL: splatconstant_funnnel_v4i64:1815; AVX512BW:       # %bb.0:1816; AVX512BW-NEXT:    vpsrlq $14, %ymm1, %ymm11817; AVX512BW-NEXT:    vpsllq $50, %ymm0, %ymm01818; AVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm01819; AVX512BW-NEXT:    retq1820;1821; AVX512VBMI2-LABEL: splatconstant_funnnel_v4i64:1822; AVX512VBMI2:       # %bb.0:1823; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm11824; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01825; AVX512VBMI2-NEXT:    vpshrdq $14, %zmm0, %zmm1, %zmm01826; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01827; AVX512VBMI2-NEXT:    retq1828;1829; AVX512VLBW-LABEL: splatconstant_funnnel_v4i64:1830; AVX512VLBW:       # %bb.0:1831; AVX512VLBW-NEXT:    vpsrlq $14, %ymm1, %ymm11832; AVX512VLBW-NEXT:    vpsllq $50, %ymm0, %ymm01833; AVX512VLBW-NEXT:    vpor %ymm1, %ymm0, %ymm01834; AVX512VLBW-NEXT:    retq1835;1836; AVX512VLVBMI2-LABEL: splatconstant_funnnel_v4i64:1837; AVX512VLVBMI2:       # %bb.0:1838; AVX512VLVBMI2-NEXT:    vpshrdq $14, %ymm0, %ymm1, %ymm01839; AVX512VLVBMI2-NEXT:    retq1840;1841; XOPAVX1-LABEL: splatconstant_funnnel_v4i64:1842; XOPAVX1:       # %bb.0:1843; XOPAVX1-NEXT:    vpsrlq $14, %xmm1, %xmm21844; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm11845; XOPAVX1-NEXT:    vpsrlq $14, %xmm1, %xmm11846; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm11847; XOPAVX1-NEXT:    vpsllq $50, %xmm0, %xmm21848; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01849; XOPAVX1-NEXT:    vpsllq $50, %xmm0, %xmm01850; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm01851; XOPAVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01852; XOPAVX1-NEXT:    retq1853;1854; XOPAVX2-LABEL: splatconstant_funnnel_v4i64:1855; XOPAVX2:       # %bb.0:1856; XOPAVX2-NEXT:    vpsrlq $14, %ymm1, %ymm11857; XOPAVX2-NEXT:    vpsllq $50, %ymm0, %ymm01858; XOPAVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01859; XOPAVX2-NEXT:    retq1860  %res = call <4 x i64> @llvm.fshr.v4i64(<4 x i64> %x, <4 x i64> %y, <4 x i64> <i64 14, i64 14, i64 14, i64 14>)1861  ret <4 x i64> %res1862}1863 1864define <8 x i32> @splatconstant_funnnel_v8i32(<8 x i32> %x, <8 x i32> %y) nounwind {1865; AVX1-LABEL: splatconstant_funnnel_v8i32:1866; AVX1:       # %bb.0:1867; AVX1-NEXT:    vpsrld $4, %xmm1, %xmm21868; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm11869; AVX1-NEXT:    vpsrld $4, %xmm1, %xmm11870; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm11871; AVX1-NEXT:    vpslld $28, %xmm0, %xmm21872; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01873; AVX1-NEXT:    vpslld $28, %xmm0, %xmm01874; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm01875; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01876; AVX1-NEXT:    retq1877;1878; AVX2-LABEL: splatconstant_funnnel_v8i32:1879; AVX2:       # %bb.0:1880; AVX2-NEXT:    vpsrld $4, %ymm1, %ymm11881; AVX2-NEXT:    vpslld $28, %ymm0, %ymm01882; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01883; AVX2-NEXT:    retq1884;1885; AVX512F-LABEL: splatconstant_funnnel_v8i32:1886; AVX512F:       # %bb.0:1887; AVX512F-NEXT:    vpsrld $4, %ymm1, %ymm11888; AVX512F-NEXT:    vpslld $28, %ymm0, %ymm01889; AVX512F-NEXT:    vpor %ymm1, %ymm0, %ymm01890; AVX512F-NEXT:    retq1891;1892; AVX512VL-LABEL: splatconstant_funnnel_v8i32:1893; AVX512VL:       # %bb.0:1894; AVX512VL-NEXT:    vpsrld $4, %ymm1, %ymm11895; AVX512VL-NEXT:    vpslld $28, %ymm0, %ymm01896; AVX512VL-NEXT:    vpor %ymm1, %ymm0, %ymm01897; AVX512VL-NEXT:    retq1898;1899; AVX512BW-LABEL: splatconstant_funnnel_v8i32:1900; AVX512BW:       # %bb.0:1901; AVX512BW-NEXT:    vpsrld $4, %ymm1, %ymm11902; AVX512BW-NEXT:    vpslld $28, %ymm0, %ymm01903; AVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm01904; AVX512BW-NEXT:    retq1905;1906; AVX512VBMI2-LABEL: splatconstant_funnnel_v8i32:1907; AVX512VBMI2:       # %bb.0:1908; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm11909; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01910; AVX512VBMI2-NEXT:    vpshrdd $4, %zmm0, %zmm1, %zmm01911; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01912; AVX512VBMI2-NEXT:    retq1913;1914; AVX512VLBW-LABEL: splatconstant_funnnel_v8i32:1915; AVX512VLBW:       # %bb.0:1916; AVX512VLBW-NEXT:    vpsrld $4, %ymm1, %ymm11917; AVX512VLBW-NEXT:    vpslld $28, %ymm0, %ymm01918; AVX512VLBW-NEXT:    vpor %ymm1, %ymm0, %ymm01919; AVX512VLBW-NEXT:    retq1920;1921; AVX512VLVBMI2-LABEL: splatconstant_funnnel_v8i32:1922; AVX512VLVBMI2:       # %bb.0:1923; AVX512VLVBMI2-NEXT:    vpshrdd $4, %ymm0, %ymm1, %ymm01924; AVX512VLVBMI2-NEXT:    retq1925;1926; XOPAVX1-LABEL: splatconstant_funnnel_v8i32:1927; XOPAVX1:       # %bb.0:1928; XOPAVX1-NEXT:    vpsrld $4, %xmm1, %xmm21929; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm11930; XOPAVX1-NEXT:    vpsrld $4, %xmm1, %xmm11931; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm11932; XOPAVX1-NEXT:    vpslld $28, %xmm0, %xmm21933; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01934; XOPAVX1-NEXT:    vpslld $28, %xmm0, %xmm01935; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm01936; XOPAVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01937; XOPAVX1-NEXT:    retq1938;1939; XOPAVX2-LABEL: splatconstant_funnnel_v8i32:1940; XOPAVX2:       # %bb.0:1941; XOPAVX2-NEXT:    vpsrld $4, %ymm1, %ymm11942; XOPAVX2-NEXT:    vpslld $28, %ymm0, %ymm01943; XOPAVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01944; XOPAVX2-NEXT:    retq1945  %res = call <8 x i32> @llvm.fshr.v8i32(<8 x i32> %x, <8 x i32> %y, <8 x i32> <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>)1946  ret <8 x i32> %res1947}1948 1949define <16 x i16> @splatconstant_funnnel_v16i16(<16 x i16> %x, <16 x i16> %y) nounwind {1950; AVX1-LABEL: splatconstant_funnnel_v16i16:1951; AVX1:       # %bb.0:1952; AVX1-NEXT:    vpsrlw $7, %xmm1, %xmm21953; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm11954; AVX1-NEXT:    vpsrlw $7, %xmm1, %xmm11955; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm11956; AVX1-NEXT:    vpsllw $9, %xmm0, %xmm21957; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01958; AVX1-NEXT:    vpsllw $9, %xmm0, %xmm01959; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm01960; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01961; AVX1-NEXT:    retq1962;1963; AVX2-LABEL: splatconstant_funnnel_v16i16:1964; AVX2:       # %bb.0:1965; AVX2-NEXT:    vpsrlw $7, %ymm1, %ymm11966; AVX2-NEXT:    vpsllw $9, %ymm0, %ymm01967; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01968; AVX2-NEXT:    retq1969;1970; AVX512F-LABEL: splatconstant_funnnel_v16i16:1971; AVX512F:       # %bb.0:1972; AVX512F-NEXT:    vpsrlw $7, %ymm1, %ymm11973; AVX512F-NEXT:    vpsllw $9, %ymm0, %ymm01974; AVX512F-NEXT:    vpor %ymm1, %ymm0, %ymm01975; AVX512F-NEXT:    retq1976;1977; AVX512VL-LABEL: splatconstant_funnnel_v16i16:1978; AVX512VL:       # %bb.0:1979; AVX512VL-NEXT:    vpsrlw $7, %ymm1, %ymm11980; AVX512VL-NEXT:    vpsllw $9, %ymm0, %ymm01981; AVX512VL-NEXT:    vpor %ymm1, %ymm0, %ymm01982; AVX512VL-NEXT:    retq1983;1984; AVX512BW-LABEL: splatconstant_funnnel_v16i16:1985; AVX512BW:       # %bb.0:1986; AVX512BW-NEXT:    vpsrlw $7, %ymm1, %ymm11987; AVX512BW-NEXT:    vpsllw $9, %ymm0, %ymm01988; AVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm01989; AVX512BW-NEXT:    retq1990;1991; AVX512VBMI2-LABEL: splatconstant_funnnel_v16i16:1992; AVX512VBMI2:       # %bb.0:1993; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm11994; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01995; AVX512VBMI2-NEXT:    vpshrdw $7, %zmm0, %zmm1, %zmm01996; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01997; AVX512VBMI2-NEXT:    retq1998;1999; AVX512VLBW-LABEL: splatconstant_funnnel_v16i16:2000; AVX512VLBW:       # %bb.0:2001; AVX512VLBW-NEXT:    vpsrlw $7, %ymm1, %ymm12002; AVX512VLBW-NEXT:    vpsllw $9, %ymm0, %ymm02003; AVX512VLBW-NEXT:    vpor %ymm1, %ymm0, %ymm02004; AVX512VLBW-NEXT:    retq2005;2006; AVX512VLVBMI2-LABEL: splatconstant_funnnel_v16i16:2007; AVX512VLVBMI2:       # %bb.0:2008; AVX512VLVBMI2-NEXT:    vpshrdw $7, %ymm0, %ymm1, %ymm02009; AVX512VLVBMI2-NEXT:    retq2010;2011; XOPAVX1-LABEL: splatconstant_funnnel_v16i16:2012; XOPAVX1:       # %bb.0:2013; XOPAVX1-NEXT:    vpsrlw $7, %xmm1, %xmm22014; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm12015; XOPAVX1-NEXT:    vpsrlw $7, %xmm1, %xmm12016; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm12017; XOPAVX1-NEXT:    vpsllw $9, %xmm0, %xmm22018; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02019; XOPAVX1-NEXT:    vpsllw $9, %xmm0, %xmm02020; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm02021; XOPAVX1-NEXT:    vorps %ymm1, %ymm0, %ymm02022; XOPAVX1-NEXT:    retq2023;2024; XOPAVX2-LABEL: splatconstant_funnnel_v16i16:2025; XOPAVX2:       # %bb.0:2026; XOPAVX2-NEXT:    vpsrlw $7, %ymm1, %ymm12027; XOPAVX2-NEXT:    vpsllw $9, %ymm0, %ymm02028; XOPAVX2-NEXT:    vpor %ymm1, %ymm0, %ymm02029; XOPAVX2-NEXT:    retq2030  %res = call <16 x i16> @llvm.fshr.v16i16(<16 x i16> %x, <16 x i16> %y, <16 x i16> <i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7>)2031  ret <16 x i16> %res2032}2033 2034define <32 x i8> @splatconstant_funnnel_v32i8(<32 x i8> %x, <32 x i8> %y) nounwind {2035; AVX1-LABEL: splatconstant_funnnel_v32i8:2036; AVX1:       # %bb.0:2037; AVX1-NEXT:    vpsrlw $4, %xmm1, %xmm22038; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm12039; AVX1-NEXT:    vpsrlw $4, %xmm1, %xmm12040; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm12041; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm12042; AVX1-NEXT:    vpsllw $4, %xmm0, %xmm22043; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02044; AVX1-NEXT:    vpsllw $4, %xmm0, %xmm02045; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm02046; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02047; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm02048; AVX1-NEXT:    retq2049;2050; AVX2-LABEL: splatconstant_funnnel_v32i8:2051; AVX2:       # %bb.0:2052; AVX2-NEXT:    vpsrlw $4, %ymm1, %ymm12053; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm12054; AVX2-NEXT:    vpsllw $4, %ymm0, %ymm02055; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02056; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm02057; AVX2-NEXT:    retq2058;2059; AVX512F-LABEL: splatconstant_funnnel_v32i8:2060; AVX512F:       # %bb.0:2061; AVX512F-NEXT:    vpsllw $4, %ymm0, %ymm22062; AVX512F-NEXT:    vpsrlw $4, %ymm1, %ymm02063; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 = zmm0 ^ (m32bcst & (zmm0 ^ zmm2))2064; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm02065; AVX512F-NEXT:    retq2066;2067; AVX512VL-LABEL: splatconstant_funnnel_v32i8:2068; AVX512VL:       # %bb.0:2069; AVX512VL-NEXT:    vpsllw $4, %ymm0, %ymm22070; AVX512VL-NEXT:    vpsrlw $4, %ymm1, %ymm02071; AVX512VL-NEXT:    vpternlogd {{.*#+}} ymm0 = ymm0 ^ (m32bcst & (ymm0 ^ ymm2))2072; AVX512VL-NEXT:    retq2073;2074; AVX512BW-LABEL: splatconstant_funnnel_v32i8:2075; AVX512BW:       # %bb.0:2076; AVX512BW-NEXT:    vpsllw $4, %ymm0, %ymm22077; AVX512BW-NEXT:    vpsrlw $4, %ymm1, %ymm02078; AVX512BW-NEXT:    vpternlogd {{.*#+}} zmm0 = zmm0 ^ (m32bcst & (zmm0 ^ zmm2))2079; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm02080; AVX512BW-NEXT:    retq2081;2082; AVX512VBMI2-LABEL: splatconstant_funnnel_v32i8:2083; AVX512VBMI2:       # %bb.0:2084; AVX512VBMI2-NEXT:    vpsllw $4, %ymm0, %ymm22085; AVX512VBMI2-NEXT:    vpsrlw $4, %ymm1, %ymm02086; AVX512VBMI2-NEXT:    vpternlogd {{.*#+}} zmm0 = zmm0 ^ (m32bcst & (zmm0 ^ zmm2))2087; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm02088; AVX512VBMI2-NEXT:    retq2089;2090; AVX512VLBW-LABEL: splatconstant_funnnel_v32i8:2091; AVX512VLBW:       # %bb.0:2092; AVX512VLBW-NEXT:    vpsllw $4, %ymm0, %ymm22093; AVX512VLBW-NEXT:    vpsrlw $4, %ymm1, %ymm02094; AVX512VLBW-NEXT:    vpternlogd {{.*#+}} ymm0 = ymm0 ^ (m32bcst & (ymm0 ^ ymm2))2095; AVX512VLBW-NEXT:    retq2096;2097; AVX512VLVBMI2-LABEL: splatconstant_funnnel_v32i8:2098; AVX512VLVBMI2:       # %bb.0:2099; AVX512VLVBMI2-NEXT:    vpsllw $4, %ymm0, %ymm22100; AVX512VLVBMI2-NEXT:    vpsrlw $4, %ymm1, %ymm02101; AVX512VLVBMI2-NEXT:    vpternlogd {{.*#+}} ymm0 = ymm0 ^ (m32bcst & (ymm0 ^ ymm2))2102; AVX512VLVBMI2-NEXT:    retq2103;2104; XOPAVX1-LABEL: splatconstant_funnnel_v32i8:2105; XOPAVX1:       # %bb.0:2106; XOPAVX1-NEXT:    vpsrlw $4, %xmm1, %xmm22107; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm12108; XOPAVX1-NEXT:    vpsrlw $4, %xmm1, %xmm12109; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm12110; XOPAVX1-NEXT:    vpsllw $4, %xmm0, %xmm22111; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02112; XOPAVX1-NEXT:    vpsllw $4, %xmm0, %xmm02113; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm02114; XOPAVX1-NEXT:    vpcmov {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm0, %ymm02115; XOPAVX1-NEXT:    retq2116;2117; XOPAVX2-LABEL: splatconstant_funnnel_v32i8:2118; XOPAVX2:       # %bb.0:2119; XOPAVX2-NEXT:    vpsrlw $4, %ymm1, %ymm12120; XOPAVX2-NEXT:    vpsllw $4, %ymm0, %ymm02121; XOPAVX2-NEXT:    vpcmov {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm0, %ymm02122; XOPAVX2-NEXT:    retq2123  %res = call <32 x i8> @llvm.fshr.v32i8(<32 x i8> %x, <32 x i8> %y, <32 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, 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>)2124  ret <32 x i8> %res2125}2126