brintos

brintos / llvm-project-archived public Read only

0
0
Text · 120.2 KiB · 2fadf5f Raw
2335 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.fshl.v4i64(<4 x i64>, <4 x i64>, <4 x i64>)15declare <8 x i32> @llvm.fshl.v8i32(<8 x i32>, <8 x i32>, <8 x i32>)16declare <16 x i16> @llvm.fshl.v16i16(<16 x i16>, <16 x i16>, <16 x i16>)17declare <32 x i8> @llvm.fshl.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:    vandnps %ymm3, %ymm2, %ymm428; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm529; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm630; AVX1-NEXT:    vpsrlq $1, %xmm6, %xmm631; AVX1-NEXT:    vpsrlq %xmm5, %xmm6, %xmm732; AVX1-NEXT:    vpshufd {{.*#+}} xmm5 = xmm5[2,3,2,3]33; AVX1-NEXT:    vpsrlq %xmm5, %xmm6, %xmm534; AVX1-NEXT:    vpblendw {{.*#+}} xmm5 = xmm7[0,1,2,3],xmm5[4,5,6,7]35; AVX1-NEXT:    vpsrlq $1, %xmm1, %xmm136; AVX1-NEXT:    vpsrlq %xmm4, %xmm1, %xmm637; AVX1-NEXT:    vpshufd {{.*#+}} xmm4 = xmm4[2,3,2,3]38; AVX1-NEXT:    vpsrlq %xmm4, %xmm1, %xmm139; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm6[0,1,2,3],xmm1[4,5,6,7]40; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm1, %ymm141; AVX1-NEXT:    vandps %ymm3, %ymm2, %ymm242; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm343; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm444; AVX1-NEXT:    vpsllq %xmm3, %xmm4, %xmm545; AVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm3[2,3,2,3]46; AVX1-NEXT:    vpsllq %xmm3, %xmm4, %xmm347; AVX1-NEXT:    vpblendw {{.*#+}} xmm3 = xmm5[0,1,2,3],xmm3[4,5,6,7]48; 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:    vpandn %ymm3, %ymm2, %ymm460; AVX2-NEXT:    vpsrlq $1, %ymm1, %ymm161; AVX2-NEXT:    vpsrlvq %ymm4, %ymm1, %ymm162; AVX2-NEXT:    vpand %ymm3, %ymm2, %ymm263; 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:    vpandn %ymm3, %ymm2, %ymm471; AVX512F-NEXT:    vpsrlq $1, %ymm1, %ymm172; AVX512F-NEXT:    vpsrlvq %ymm4, %ymm1, %ymm173; AVX512F-NEXT:    vpand %ymm3, %ymm2, %ymm274; 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:    vpandn %ymm3, %ymm2, %ymm482; AVX512VL-NEXT:    vpsrlq $1, %ymm1, %ymm183; AVX512VL-NEXT:    vpsrlvq %ymm4, %ymm1, %ymm184; AVX512VL-NEXT:    vpand %ymm3, %ymm2, %ymm285; 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:    vpandn %ymm3, %ymm2, %ymm493; AVX512BW-NEXT:    vpsrlq $1, %ymm1, %ymm194; AVX512BW-NEXT:    vpsrlvq %ymm4, %ymm1, %ymm195; AVX512BW-NEXT:    vpand %ymm3, %ymm2, %ymm296; 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:    vpshldvq %zmm2, %zmm1, %zmm0106; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0107; 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:    vpandn %ymm3, %ymm2, %ymm4113; AVX512VLBW-NEXT:    vpsrlq $1, %ymm1, %ymm1114; AVX512VLBW-NEXT:    vpsrlvq %ymm4, %ymm1, %ymm1115; AVX512VLBW-NEXT:    vpand %ymm3, %ymm2, %ymm2116; 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:    vpshldvq %ymm2, %ymm1, %ymm0123; AVX512VLVBMI2-NEXT:    retq124;125; XOPAVX1-LABEL: var_funnnel_v4i64:126; XOPAVX1:       # %bb.0:127; XOPAVX1-NEXT:    vbroadcastsd {{.*#+}} ymm3 = [63,63,63,63]128; XOPAVX1-NEXT:    vandps %ymm3, %ymm2, %ymm4129; XOPAVX1-NEXT:    vextractf128 $1, %ymm4, %xmm5130; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6131; XOPAVX1-NEXT:    vpshlq %xmm5, %xmm6, %xmm5132; XOPAVX1-NEXT:    vpshlq %xmm4, %xmm0, %xmm0133; XOPAVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm0, %ymm0134; XOPAVX1-NEXT:    vandnps %ymm3, %ymm2, %ymm2135; XOPAVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3136; XOPAVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4137; XOPAVX1-NEXT:    vpsubq %xmm3, %xmm4, %xmm3138; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5139; XOPAVX1-NEXT:    vpsrlq $1, %xmm5, %xmm5140; XOPAVX1-NEXT:    vpshlq %xmm3, %xmm5, %xmm3141; XOPAVX1-NEXT:    vpsubq %xmm2, %xmm4, %xmm2142; XOPAVX1-NEXT:    vpsrlq $1, %xmm1, %xmm1143; XOPAVX1-NEXT:    vpshlq %xmm2, %xmm1, %xmm1144; XOPAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1145; XOPAVX1-NEXT:    vorps %ymm1, %ymm0, %ymm0146; XOPAVX1-NEXT:    retq147;148; XOPAVX2-LABEL: var_funnnel_v4i64:149; XOPAVX2:       # %bb.0:150; XOPAVX2-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [63,63,63,63]151; XOPAVX2-NEXT:    vpandn %ymm3, %ymm2, %ymm4152; XOPAVX2-NEXT:    vpsrlq $1, %ymm1, %ymm1153; XOPAVX2-NEXT:    vpsrlvq %ymm4, %ymm1, %ymm1154; XOPAVX2-NEXT:    vpand %ymm3, %ymm2, %ymm2155; XOPAVX2-NEXT:    vpsllvq %ymm2, %ymm0, %ymm0156; XOPAVX2-NEXT:    vpor %ymm1, %ymm0, %ymm0157; XOPAVX2-NEXT:    retq158  %res = call <4 x i64> @llvm.fshl.v4i64(<4 x i64> %x, <4 x i64> %y, <4 x i64> %amt)159  ret <4 x i64> %res160}161 162define <8 x i32> @var_funnnel_v8i32(<8 x i32> %x, <8 x i32> %y, <8 x i32> %amt) nounwind {163; AVX1-LABEL: var_funnnel_v8i32:164; AVX1:       # %bb.0:165; AVX1-NEXT:    vbroadcastss {{.*#+}} ymm3 = [31,31,31,31,31,31,31,31]166; AVX1-NEXT:    vandps %ymm3, %ymm2, %ymm2167; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4168; AVX1-NEXT:    vxorps %xmm3, %xmm4, %xmm5169; AVX1-NEXT:    vpsrldq {{.*#+}} xmm6 = xmm5[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero170; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm7171; AVX1-NEXT:    vpsrld $1, %xmm7, %xmm7172; AVX1-NEXT:    vpsrld %xmm6, %xmm7, %xmm6173; AVX1-NEXT:    vpsrlq $32, %xmm5, %xmm8174; AVX1-NEXT:    vpsrld %xmm8, %xmm7, %xmm8175; AVX1-NEXT:    vpblendw {{.*#+}} xmm6 = xmm8[0,1,2,3],xmm6[4,5,6,7]176; AVX1-NEXT:    vpxor %xmm8, %xmm8, %xmm8177; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm9 = xmm5[2],xmm8[2],xmm5[3],xmm8[3]178; AVX1-NEXT:    vpsrld %xmm9, %xmm7, %xmm9179; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm5 = xmm5[0],zero,xmm5[1],zero180; AVX1-NEXT:    vpsrld %xmm5, %xmm7, %xmm5181; AVX1-NEXT:    vpblendw {{.*#+}} xmm5 = xmm5[0,1,2,3],xmm9[4,5,6,7]182; AVX1-NEXT:    vpblendw {{.*#+}} xmm5 = xmm5[0,1],xmm6[2,3],xmm5[4,5],xmm6[6,7]183; 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, %xmm7188; AVX1-NEXT:    vpmulld %xmm4, %xmm7, %xmm4189; AVX1-NEXT:    vpor %xmm5, %xmm4, %xmm4190; AVX1-NEXT:    vxorps %xmm3, %xmm2, %xmm3191; AVX1-NEXT:    vpsrldq {{.*#+}} xmm5 = xmm3[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero192; AVX1-NEXT:    vpsrld $1, %xmm1, %xmm1193; AVX1-NEXT:    vpsrld %xmm5, %xmm1, %xmm5194; AVX1-NEXT:    vpsrlq $32, %xmm3, %xmm7195; AVX1-NEXT:    vpsrld %xmm7, %xmm1, %xmm7196; AVX1-NEXT:    vpblendw {{.*#+}} xmm5 = xmm7[0,1,2,3],xmm5[4,5,6,7]197; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm7 = xmm3[2],xmm8[2],xmm3[3],xmm8[3]198; AVX1-NEXT:    vpsrld %xmm7, %xmm1, %xmm7199; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm3 = xmm3[0],zero,xmm3[1],zero200; AVX1-NEXT:    vpsrld %xmm3, %xmm1, %xmm1201; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm7[4,5,6,7]202; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm5[2,3],xmm1[4,5],xmm5[6,7]203; AVX1-NEXT:    vpslld $23, %xmm2, %xmm2204; AVX1-NEXT:    vpaddd %xmm6, %xmm2, %xmm2205; AVX1-NEXT:    vcvttps2dq %xmm2, %xmm2206; AVX1-NEXT:    vpmulld %xmm2, %xmm0, %xmm0207; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0208; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0209; AVX1-NEXT:    retq210;211; AVX2-LABEL: var_funnnel_v8i32:212; AVX2:       # %bb.0:213; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm3 = [31,31,31,31,31,31,31,31]214; AVX2-NEXT:    vpandn %ymm3, %ymm2, %ymm4215; AVX2-NEXT:    vpsrld $1, %ymm1, %ymm1216; AVX2-NEXT:    vpsrlvd %ymm4, %ymm1, %ymm1217; AVX2-NEXT:    vpand %ymm3, %ymm2, %ymm2218; AVX2-NEXT:    vpsllvd %ymm2, %ymm0, %ymm0219; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm0220; AVX2-NEXT:    retq221;222; AVX512F-LABEL: var_funnnel_v8i32:223; AVX512F:       # %bb.0:224; AVX512F-NEXT:    vpbroadcastd {{.*#+}} ymm3 = [31,31,31,31,31,31,31,31]225; AVX512F-NEXT:    vpandn %ymm3, %ymm2, %ymm4226; AVX512F-NEXT:    vpsrld $1, %ymm1, %ymm1227; AVX512F-NEXT:    vpsrlvd %ymm4, %ymm1, %ymm1228; AVX512F-NEXT:    vpand %ymm3, %ymm2, %ymm2229; AVX512F-NEXT:    vpsllvd %ymm2, %ymm0, %ymm0230; AVX512F-NEXT:    vpor %ymm1, %ymm0, %ymm0231; AVX512F-NEXT:    retq232;233; AVX512VL-LABEL: var_funnnel_v8i32:234; AVX512VL:       # %bb.0:235; AVX512VL-NEXT:    vpbroadcastd {{.*#+}} ymm3 = [31,31,31,31,31,31,31,31]236; AVX512VL-NEXT:    vpandn %ymm3, %ymm2, %ymm4237; AVX512VL-NEXT:    vpsrld $1, %ymm1, %ymm1238; AVX512VL-NEXT:    vpsrlvd %ymm4, %ymm1, %ymm1239; AVX512VL-NEXT:    vpand %ymm3, %ymm2, %ymm2240; AVX512VL-NEXT:    vpsllvd %ymm2, %ymm0, %ymm0241; AVX512VL-NEXT:    vpor %ymm1, %ymm0, %ymm0242; AVX512VL-NEXT:    retq243;244; AVX512BW-LABEL: var_funnnel_v8i32:245; AVX512BW:       # %bb.0:246; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} ymm3 = [31,31,31,31,31,31,31,31]247; AVX512BW-NEXT:    vpandn %ymm3, %ymm2, %ymm4248; AVX512BW-NEXT:    vpsrld $1, %ymm1, %ymm1249; AVX512BW-NEXT:    vpsrlvd %ymm4, %ymm1, %ymm1250; AVX512BW-NEXT:    vpand %ymm3, %ymm2, %ymm2251; AVX512BW-NEXT:    vpsllvd %ymm2, %ymm0, %ymm0252; AVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm0253; AVX512BW-NEXT:    retq254;255; AVX512VBMI2-LABEL: var_funnnel_v8i32:256; AVX512VBMI2:       # %bb.0:257; AVX512VBMI2-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2258; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1259; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0260; AVX512VBMI2-NEXT:    vpshldvd %zmm2, %zmm1, %zmm0261; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0262; AVX512VBMI2-NEXT:    retq263;264; AVX512VLBW-LABEL: var_funnnel_v8i32:265; AVX512VLBW:       # %bb.0:266; AVX512VLBW-NEXT:    vpbroadcastd {{.*#+}} ymm3 = [31,31,31,31,31,31,31,31]267; AVX512VLBW-NEXT:    vpandn %ymm3, %ymm2, %ymm4268; AVX512VLBW-NEXT:    vpsrld $1, %ymm1, %ymm1269; AVX512VLBW-NEXT:    vpsrlvd %ymm4, %ymm1, %ymm1270; AVX512VLBW-NEXT:    vpand %ymm3, %ymm2, %ymm2271; AVX512VLBW-NEXT:    vpsllvd %ymm2, %ymm0, %ymm0272; AVX512VLBW-NEXT:    vpor %ymm1, %ymm0, %ymm0273; AVX512VLBW-NEXT:    retq274;275; AVX512VLVBMI2-LABEL: var_funnnel_v8i32:276; AVX512VLVBMI2:       # %bb.0:277; AVX512VLVBMI2-NEXT:    vpshldvd %ymm2, %ymm1, %ymm0278; AVX512VLVBMI2-NEXT:    retq279;280; XOPAVX1-LABEL: var_funnnel_v8i32:281; XOPAVX1:       # %bb.0:282; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3283; XOPAVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2284; XOPAVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4285; XOPAVX1-NEXT:    vpshld %xmm4, %xmm3, %xmm3286; XOPAVX1-NEXT:    vbroadcastss {{.*#+}} xmm5 = [4294967265,4294967265,4294967265,4294967265]287; XOPAVX1-NEXT:    vpaddd %xmm5, %xmm4, %xmm4288; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6289; XOPAVX1-NEXT:    vpsrld $1, %xmm6, %xmm6290; XOPAVX1-NEXT:    vpshld %xmm4, %xmm6, %xmm4291; XOPAVX1-NEXT:    vpor %xmm4, %xmm3, %xmm3292; XOPAVX1-NEXT:    vpshld %xmm2, %xmm0, %xmm0293; XOPAVX1-NEXT:    vpaddd %xmm5, %xmm2, %xmm2294; XOPAVX1-NEXT:    vpsrld $1, %xmm1, %xmm1295; XOPAVX1-NEXT:    vpshld %xmm2, %xmm1, %xmm1296; XOPAVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0297; XOPAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0298; XOPAVX1-NEXT:    retq299;300; XOPAVX2-LABEL: var_funnnel_v8i32:301; XOPAVX2:       # %bb.0:302; XOPAVX2-NEXT:    vpbroadcastd {{.*#+}} ymm3 = [31,31,31,31,31,31,31,31]303; XOPAVX2-NEXT:    vpandn %ymm3, %ymm2, %ymm4304; XOPAVX2-NEXT:    vpsrld $1, %ymm1, %ymm1305; XOPAVX2-NEXT:    vpsrlvd %ymm4, %ymm1, %ymm1306; XOPAVX2-NEXT:    vpand %ymm3, %ymm2, %ymm2307; XOPAVX2-NEXT:    vpsllvd %ymm2, %ymm0, %ymm0308; XOPAVX2-NEXT:    vpor %ymm1, %ymm0, %ymm0309; XOPAVX2-NEXT:    retq310  %res = call <8 x i32> @llvm.fshl.v8i32(<8 x i32> %x, <8 x i32> %y, <8 x i32> %amt)311  ret <8 x i32> %res312}313 314define <16 x i16> @var_funnnel_v16i16(<16 x i16> %x, <16 x i16> %y, <16 x i16> %amt) nounwind {315; AVX1-LABEL: var_funnnel_v16i16:316; AVX1:       # %bb.0:317; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3318; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4319; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm5 = xmm4[4],xmm3[4],xmm4[5],xmm3[5],xmm4[6],xmm3[6],xmm4[7],xmm3[7]320; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2321; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6322; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm7 = xmm6[4,4,5,5,6,6,7,7]323; AVX1-NEXT:    vpslld $23, %xmm7, %xmm7324; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm8 = [1065353216,1065353216,1065353216,1065353216]325; AVX1-NEXT:    vpaddd %xmm7, %xmm8, %xmm7326; AVX1-NEXT:    vcvttps2dq %xmm7, %xmm7327; AVX1-NEXT:    vpmulld %xmm7, %xmm5, %xmm5328; AVX1-NEXT:    vpsrld $16, %xmm5, %xmm5329; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm3 = xmm4[0],xmm3[0],xmm4[1],xmm3[1],xmm4[2],xmm3[2],xmm4[3],xmm3[3]330; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm4 = xmm6[0],zero,xmm6[1],zero,xmm6[2],zero,xmm6[3],zero331; AVX1-NEXT:    vpslld $23, %xmm4, %xmm4332; AVX1-NEXT:    vpaddd %xmm4, %xmm8, %xmm4333; AVX1-NEXT:    vcvttps2dq %xmm4, %xmm4334; AVX1-NEXT:    vpmulld %xmm4, %xmm3, %xmm3335; AVX1-NEXT:    vpsrld $16, %xmm3, %xmm3336; AVX1-NEXT:    vpackusdw %xmm5, %xmm3, %xmm3337; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm4 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]338; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm5 = xmm2[4,4,5,5,6,6,7,7]339; AVX1-NEXT:    vpslld $23, %xmm5, %xmm5340; AVX1-NEXT:    vpaddd %xmm5, %xmm8, %xmm5341; AVX1-NEXT:    vcvttps2dq %xmm5, %xmm5342; AVX1-NEXT:    vpmulld %xmm5, %xmm4, %xmm4343; AVX1-NEXT:    vpsrld $16, %xmm4, %xmm4344; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]345; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm1 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero346; AVX1-NEXT:    vpslld $23, %xmm1, %xmm1347; AVX1-NEXT:    vpaddd %xmm1, %xmm8, %xmm1348; AVX1-NEXT:    vcvttps2dq %xmm1, %xmm1349; AVX1-NEXT:    vpmulld %xmm1, %xmm0, %xmm0350; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm0351; AVX1-NEXT:    vpackusdw %xmm4, %xmm0, %xmm0352; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0353; AVX1-NEXT:    retq354;355; AVX2-LABEL: var_funnnel_v16i16:356; AVX2:       # %bb.0:357; 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]358; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2359; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4360; 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]361; AVX2-NEXT:    vpsllvd %ymm5, %ymm3, %ymm3362; AVX2-NEXT:    vpsrld $16, %ymm3, %ymm3363; 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]364; 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]365; AVX2-NEXT:    vpsllvd %ymm1, %ymm0, %ymm0366; AVX2-NEXT:    vpsrld $16, %ymm0, %ymm0367; AVX2-NEXT:    vpackusdw %ymm3, %ymm0, %ymm0368; AVX2-NEXT:    retq369;370; AVX512F-LABEL: var_funnnel_v16i16:371; AVX512F:       # %bb.0:372; 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],zero373; 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],zero374; AVX512F-NEXT:    vpslld $16, %zmm0, %zmm0375; AVX512F-NEXT:    vpord %zmm1, %zmm0, %zmm0376; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm1377; 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],zero378; AVX512F-NEXT:    vpsllvd %zmm1, %zmm0, %zmm0379; AVX512F-NEXT:    vpsrld $16, %zmm0, %zmm0380; AVX512F-NEXT:    vpmovdw %zmm0, %ymm0381; AVX512F-NEXT:    retq382;383; AVX512VL-LABEL: var_funnnel_v16i16:384; AVX512VL:       # %bb.0:385; 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],zero386; 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],zero387; AVX512VL-NEXT:    vpslld $16, %zmm0, %zmm0388; AVX512VL-NEXT:    vpord %zmm1, %zmm0, %zmm0389; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm2, %ymm1390; 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],zero391; AVX512VL-NEXT:    vpsllvd %zmm1, %zmm0, %zmm0392; AVX512VL-NEXT:    vpsrld $16, %zmm0, %zmm0393; AVX512VL-NEXT:    vpmovdw %zmm0, %ymm0394; AVX512VL-NEXT:    retq395;396; AVX512BW-LABEL: var_funnnel_v16i16:397; AVX512BW:       # %bb.0:398; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0399; AVX512BW-NEXT:    vpbroadcastw {{.*#+}} ymm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]400; AVX512BW-NEXT:    vpandn %ymm3, %ymm2, %ymm4401; AVX512BW-NEXT:    vpsrlw $1, %ymm1, %ymm1402; AVX512BW-NEXT:    vpsrlvw %zmm4, %zmm1, %zmm1403; AVX512BW-NEXT:    vpand %ymm3, %ymm2, %ymm2404; AVX512BW-NEXT:    vpsllvw %zmm2, %zmm0, %zmm0405; AVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm0406; AVX512BW-NEXT:    retq407;408; AVX512VBMI2-LABEL: var_funnnel_v16i16:409; AVX512VBMI2:       # %bb.0:410; AVX512VBMI2-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2411; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1412; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0413; AVX512VBMI2-NEXT:    vpshldvw %zmm2, %zmm1, %zmm0414; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0415; AVX512VBMI2-NEXT:    retq416;417; AVX512VLBW-LABEL: var_funnnel_v16i16:418; AVX512VLBW:       # %bb.0:419; AVX512VLBW-NEXT:    vpbroadcastw {{.*#+}} ymm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]420; AVX512VLBW-NEXT:    vpandn %ymm3, %ymm2, %ymm4421; AVX512VLBW-NEXT:    vpsrlw $1, %ymm1, %ymm1422; AVX512VLBW-NEXT:    vpsrlvw %ymm4, %ymm1, %ymm1423; AVX512VLBW-NEXT:    vpand %ymm3, %ymm2, %ymm2424; AVX512VLBW-NEXT:    vpsllvw %ymm2, %ymm0, %ymm0425; AVX512VLBW-NEXT:    vpor %ymm1, %ymm0, %ymm0426; AVX512VLBW-NEXT:    retq427;428; AVX512VLVBMI2-LABEL: var_funnnel_v16i16:429; AVX512VLVBMI2:       # %bb.0:430; AVX512VLVBMI2-NEXT:    vpshldvw %ymm2, %ymm1, %ymm0431; AVX512VLVBMI2-NEXT:    retq432;433; XOPAVX1-LABEL: var_funnnel_v16i16:434; XOPAVX1:       # %bb.0:435; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3436; XOPAVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2437; XOPAVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4438; XOPAVX1-NEXT:    vpshlw %xmm4, %xmm3, %xmm3439; XOPAVX1-NEXT:    vbroadcastss {{.*#+}} xmm5 = [65521,65521,65521,65521,65521,65521,65521,65521]440; XOPAVX1-NEXT:    vpaddw %xmm5, %xmm4, %xmm4441; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6442; XOPAVX1-NEXT:    vpsrlw $1, %xmm6, %xmm6443; XOPAVX1-NEXT:    vpshlw %xmm4, %xmm6, %xmm4444; XOPAVX1-NEXT:    vpor %xmm4, %xmm3, %xmm3445; XOPAVX1-NEXT:    vpshlw %xmm2, %xmm0, %xmm0446; XOPAVX1-NEXT:    vpaddw %xmm5, %xmm2, %xmm2447; XOPAVX1-NEXT:    vpsrlw $1, %xmm1, %xmm1448; XOPAVX1-NEXT:    vpshlw %xmm2, %xmm1, %xmm1449; XOPAVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0450; XOPAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0451; XOPAVX1-NEXT:    retq452;453; XOPAVX2-LABEL: var_funnnel_v16i16:454; XOPAVX2:       # %bb.0:455; XOPAVX2-NEXT:    vpbroadcastw {{.*#+}} ymm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]456; XOPAVX2-NEXT:    vpand %ymm3, %ymm2, %ymm4457; XOPAVX2-NEXT:    vextracti128 $1, %ymm4, %xmm5458; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm6459; XOPAVX2-NEXT:    vpshlw %xmm5, %xmm6, %xmm5460; XOPAVX2-NEXT:    vpshlw %xmm4, %xmm0, %xmm0461; XOPAVX2-NEXT:    vinserti128 $1, %xmm5, %ymm0, %ymm0462; XOPAVX2-NEXT:    vpandn %ymm3, %ymm2, %ymm2463; XOPAVX2-NEXT:    vextracti128 $1, %ymm2, %xmm3464; XOPAVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4465; XOPAVX2-NEXT:    vpsubw %xmm3, %xmm4, %xmm3466; XOPAVX2-NEXT:    vpsrlw $1, %ymm1, %ymm1467; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm5468; XOPAVX2-NEXT:    vpshlw %xmm3, %xmm5, %xmm3469; XOPAVX2-NEXT:    vpsubw %xmm2, %xmm4, %xmm2470; XOPAVX2-NEXT:    vpshlw %xmm2, %xmm1, %xmm1471; XOPAVX2-NEXT:    vinserti128 $1, %xmm3, %ymm1, %ymm1472; XOPAVX2-NEXT:    vpor %ymm1, %ymm0, %ymm0473; XOPAVX2-NEXT:    retq474  %res = call <16 x i16> @llvm.fshl.v16i16(<16 x i16> %x, <16 x i16> %y, <16 x i16> %amt)475  ret <16 x i16> %res476}477 478define <32 x i8> @var_funnnel_v32i8(<32 x i8> %x, <32 x i8> %y, <32 x i8> %amt) nounwind {479; AVX1-LABEL: var_funnnel_v32i8:480; AVX1:       # %bb.0:481; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2482; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4483; AVX1-NEXT:    vpxor %xmm5, %xmm5, %xmm5484; AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm6 = xmm4[8],xmm5[8],xmm4[9],xmm5[9],xmm4[10],xmm5[10],xmm4[11],xmm5[11],xmm4[12],xmm5[12],xmm4[13],xmm5[13],xmm4[14],xmm5[14],xmm4[15],xmm5[15]485; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm3 = xmm6[4,4,5,5,6,6,7,7]486; AVX1-NEXT:    vpslld $23, %xmm3, %xmm7487; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm3 = [1065353216,1065353216,1065353216,1065353216]488; AVX1-NEXT:    vpaddd %xmm3, %xmm7, %xmm7489; AVX1-NEXT:    vcvttps2dq %xmm7, %xmm7490; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm6 = xmm6[0],zero,xmm6[1],zero,xmm6[2],zero,xmm6[3],zero491; AVX1-NEXT:    vpslld $23, %xmm6, %xmm6492; AVX1-NEXT:    vpaddd %xmm3, %xmm6, %xmm6493; AVX1-NEXT:    vcvttps2dq %xmm6, %xmm6494; AVX1-NEXT:    vpackusdw %xmm7, %xmm6, %xmm6495; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7496; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm8497; AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm9 = xmm8[8],xmm7[8],xmm8[9],xmm7[9],xmm8[10],xmm7[10],xmm8[11],xmm7[11],xmm8[12],xmm7[12],xmm8[13],xmm7[13],xmm8[14],xmm7[14],xmm8[15],xmm7[15]498; AVX1-NEXT:    vpmullw %xmm6, %xmm9, %xmm6499; AVX1-NEXT:    vpsrlw $8, %xmm6, %xmm6500; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm9 = xmm4[0],zero,zero,zero,xmm4[1],zero,zero,zero,xmm4[2],zero,zero,zero,xmm4[3],zero,zero,zero501; AVX1-NEXT:    vpslld $23, %xmm9, %xmm9502; AVX1-NEXT:    vpaddd %xmm3, %xmm9, %xmm9503; AVX1-NEXT:    vcvttps2dq %xmm9, %xmm9504; AVX1-NEXT:    vpmovzxbw {{.*#+}} xmm4 = xmm4[0],zero,xmm4[1],zero,xmm4[2],zero,xmm4[3],zero,xmm4[4],zero,xmm4[5],zero,xmm4[6],zero,xmm4[7],zero505; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm4 = xmm4[4,4,5,5,6,6,7,7]506; AVX1-NEXT:    vpslld $23, %xmm4, %xmm4507; AVX1-NEXT:    vpaddd %xmm3, %xmm4, %xmm4508; AVX1-NEXT:    vcvttps2dq %xmm4, %xmm4509; AVX1-NEXT:    vpackusdw %xmm4, %xmm9, %xmm4510; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm7 = xmm8[0],xmm7[0],xmm8[1],xmm7[1],xmm8[2],xmm7[2],xmm8[3],xmm7[3],xmm8[4],xmm7[4],xmm8[5],xmm7[5],xmm8[6],xmm7[6],xmm8[7],xmm7[7]511; AVX1-NEXT:    vpmullw %xmm4, %xmm7, %xmm4512; AVX1-NEXT:    vpsrlw $8, %xmm4, %xmm4513; AVX1-NEXT:    vpackuswb %xmm6, %xmm4, %xmm4514; AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm5 = xmm2[8],xmm5[8],xmm2[9],xmm5[9],xmm2[10],xmm5[10],xmm2[11],xmm5[11],xmm2[12],xmm5[12],xmm2[13],xmm5[13],xmm2[14],xmm5[14],xmm2[15],xmm5[15]515; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm6 = xmm5[4,4,5,5,6,6,7,7]516; AVX1-NEXT:    vpslld $23, %xmm6, %xmm6517; AVX1-NEXT:    vpaddd %xmm3, %xmm6, %xmm6518; AVX1-NEXT:    vcvttps2dq %xmm6, %xmm6519; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm5 = xmm5[0],zero,xmm5[1],zero,xmm5[2],zero,xmm5[3],zero520; AVX1-NEXT:    vpslld $23, %xmm5, %xmm5521; AVX1-NEXT:    vpaddd %xmm3, %xmm5, %xmm5522; AVX1-NEXT:    vcvttps2dq %xmm5, %xmm5523; AVX1-NEXT:    vpackusdw %xmm6, %xmm5, %xmm5524; AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm6 = 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]525; AVX1-NEXT:    vpmullw %xmm5, %xmm6, %xmm5526; AVX1-NEXT:    vpsrlw $8, %xmm5, %xmm5527; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm6 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero528; AVX1-NEXT:    vpslld $23, %xmm6, %xmm6529; AVX1-NEXT:    vpaddd %xmm3, %xmm6, %xmm6530; AVX1-NEXT:    vcvttps2dq %xmm6, %xmm6531; 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],zero532; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm2 = xmm2[4,4,5,5,6,6,7,7]533; AVX1-NEXT:    vpslld $23, %xmm2, %xmm2534; AVX1-NEXT:    vpaddd %xmm3, %xmm2, %xmm2535; AVX1-NEXT:    vcvttps2dq %xmm2, %xmm2536; AVX1-NEXT:    vpackusdw %xmm2, %xmm6, %xmm2537; 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]538; AVX1-NEXT:    vpmullw %xmm2, %xmm0, %xmm0539; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0540; AVX1-NEXT:    vpackuswb %xmm5, %xmm0, %xmm0541; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0542; AVX1-NEXT:    retq543;544; AVX2-LABEL: var_funnnel_v32i8:545; AVX2:       # %bb.0:546; 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]547; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4548; AVX2-NEXT:    vpunpckhwd {{.*#+}} ymm5 = ymm4[4],ymm3[4],ymm4[5],ymm3[5],ymm4[6],ymm3[6],ymm4[7],ymm3[7],ymm4[12],ymm3[12],ymm4[13],ymm3[13],ymm4[14],ymm3[14],ymm4[15],ymm3[15]549; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2550; AVX2-NEXT:    vpunpckhbw {{.*#+}} ymm6 = ymm2[8],ymm4[8],ymm2[9],ymm4[9],ymm2[10],ymm4[10],ymm2[11],ymm4[11],ymm2[12],ymm4[12],ymm2[13],ymm4[13],ymm2[14],ymm4[14],ymm2[15],ymm4[15],ymm2[24],ymm4[24],ymm2[25],ymm4[25],ymm2[26],ymm4[26],ymm2[27],ymm4[27],ymm2[28],ymm4[28],ymm2[29],ymm4[29],ymm2[30],ymm4[30],ymm2[31],ymm4[31]551; AVX2-NEXT:    vpunpckhwd {{.*#+}} ymm7 = ymm6[4],ymm4[4],ymm6[5],ymm4[5],ymm6[6],ymm4[6],ymm6[7],ymm4[7],ymm6[12],ymm4[12],ymm6[13],ymm4[13],ymm6[14],ymm4[14],ymm6[15],ymm4[15]552; AVX2-NEXT:    vpsllvd %ymm7, %ymm5, %ymm5553; AVX2-NEXT:    vpsrld $16, %ymm5, %ymm5554; AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm3 = ymm4[0],ymm3[0],ymm4[1],ymm3[1],ymm4[2],ymm3[2],ymm4[3],ymm3[3],ymm4[8],ymm3[8],ymm4[9],ymm3[9],ymm4[10],ymm3[10],ymm4[11],ymm3[11]555; AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm6 = ymm6[0],ymm4[0],ymm6[1],ymm4[1],ymm6[2],ymm4[2],ymm6[3],ymm4[3],ymm6[8],ymm4[8],ymm6[9],ymm4[9],ymm6[10],ymm4[10],ymm6[11],ymm4[11]556; AVX2-NEXT:    vpsllvd %ymm6, %ymm3, %ymm3557; AVX2-NEXT:    vpsrld $16, %ymm3, %ymm3558; AVX2-NEXT:    vpackusdw %ymm5, %ymm3, %ymm3559; AVX2-NEXT:    vpsrlw $8, %ymm3, %ymm3560; 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]561; AVX2-NEXT:    vpunpckhwd {{.*#+}} ymm1 = ymm4[4],ymm0[4],ymm4[5],ymm0[5],ymm4[6],ymm0[6],ymm4[7],ymm0[7],ymm4[12],ymm0[12],ymm4[13],ymm0[13],ymm4[14],ymm0[14],ymm4[15],ymm0[15]562; AVX2-NEXT:    vpunpcklbw {{.*#+}} ymm2 = ymm2[0],ymm4[0],ymm2[1],ymm4[1],ymm2[2],ymm4[2],ymm2[3],ymm4[3],ymm2[4],ymm4[4],ymm2[5],ymm4[5],ymm2[6],ymm4[6],ymm2[7],ymm4[7],ymm2[16],ymm4[16],ymm2[17],ymm4[17],ymm2[18],ymm4[18],ymm2[19],ymm4[19],ymm2[20],ymm4[20],ymm2[21],ymm4[21],ymm2[22],ymm4[22],ymm2[23],ymm4[23]563; 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]564; AVX2-NEXT:    vpsllvd %ymm5, %ymm1, %ymm1565; AVX2-NEXT:    vpsrld $16, %ymm1, %ymm1566; AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm4[0],ymm0[0],ymm4[1],ymm0[1],ymm4[2],ymm0[2],ymm4[3],ymm0[3],ymm4[8],ymm0[8],ymm4[9],ymm0[9],ymm4[10],ymm0[10],ymm4[11],ymm0[11]567; AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm2 = 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]568; AVX2-NEXT:    vpsllvd %ymm2, %ymm0, %ymm0569; AVX2-NEXT:    vpsrld $16, %ymm0, %ymm0570; AVX2-NEXT:    vpackusdw %ymm1, %ymm0, %ymm0571; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0572; AVX2-NEXT:    vpackuswb %ymm3, %ymm0, %ymm0573; AVX2-NEXT:    retq574;575; AVX512F-LABEL: var_funnnel_v32i8:576; AVX512F:       # %bb.0:577; 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]578; AVX512F-NEXT:    vpandn %ymm3, %ymm2, %ymm4579; AVX512F-NEXT:    vpsllw $5, %ymm4, %ymm4580; AVX512F-NEXT:    vpsrlw $1, %ymm1, %ymm1581; AVX512F-NEXT:    vpbroadcastb {{.*#+}} ymm5 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]582; AVX512F-NEXT:    vpand %ymm5, %ymm1, %ymm1583; AVX512F-NEXT:    vpsrlw $4, %ymm1, %ymm6584; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm6, %ymm6585; AVX512F-NEXT:    vpblendvb %ymm4, %ymm6, %ymm1, %ymm1586; AVX512F-NEXT:    vpsrlw $2, %ymm1, %ymm6587; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm6, %ymm6588; AVX512F-NEXT:    vpaddb %ymm4, %ymm4, %ymm4589; AVX512F-NEXT:    vpblendvb %ymm4, %ymm6, %ymm1, %ymm1590; AVX512F-NEXT:    vpsrlw $1, %ymm1, %ymm6591; AVX512F-NEXT:    vpand %ymm5, %ymm6, %ymm5592; AVX512F-NEXT:    vpaddb %ymm4, %ymm4, %ymm4593; AVX512F-NEXT:    vpblendvb %ymm4, %ymm5, %ymm1, %ymm1594; AVX512F-NEXT:    vpand %ymm3, %ymm2, %ymm2595; AVX512F-NEXT:    vpsllw $5, %ymm2, %ymm2596; AVX512F-NEXT:    vpaddb %ymm2, %ymm2, %ymm3597; AVX512F-NEXT:    vpsllw $4, %ymm0, %ymm4598; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm4, %ymm4599; AVX512F-NEXT:    vpblendvb %ymm2, %ymm4, %ymm0, %ymm0600; AVX512F-NEXT:    vpsllw $2, %ymm0, %ymm2601; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2602; AVX512F-NEXT:    vpblendvb %ymm3, %ymm2, %ymm0, %ymm0603; AVX512F-NEXT:    vpaddb %ymm0, %ymm0, %ymm2604; AVX512F-NEXT:    vpaddb %ymm3, %ymm3, %ymm3605; AVX512F-NEXT:    vpblendvb %ymm3, %ymm2, %ymm0, %ymm0606; AVX512F-NEXT:    vpor %ymm1, %ymm0, %ymm0607; AVX512F-NEXT:    retq608;609; AVX512VL-LABEL: var_funnnel_v32i8:610; AVX512VL:       # %bb.0:611; 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]612; AVX512VL-NEXT:    vpandn %ymm3, %ymm2, %ymm4613; AVX512VL-NEXT:    vpsllw $5, %ymm4, %ymm4614; AVX512VL-NEXT:    vpsrlw $1, %ymm1, %ymm1615; AVX512VL-NEXT:    vpbroadcastd {{.*#+}} ymm5 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]616; AVX512VL-NEXT:    vpand %ymm5, %ymm1, %ymm1617; AVX512VL-NEXT:    vpsrlw $4, %ymm1, %ymm6618; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm6, %ymm6619; AVX512VL-NEXT:    vpblendvb %ymm4, %ymm6, %ymm1, %ymm1620; AVX512VL-NEXT:    vpsrlw $2, %ymm1, %ymm6621; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm6, %ymm6622; AVX512VL-NEXT:    vpaddb %ymm4, %ymm4, %ymm4623; AVX512VL-NEXT:    vpblendvb %ymm4, %ymm6, %ymm1, %ymm1624; AVX512VL-NEXT:    vpsrlw $1, %ymm1, %ymm6625; AVX512VL-NEXT:    vpand %ymm5, %ymm6, %ymm5626; AVX512VL-NEXT:    vpaddb %ymm4, %ymm4, %ymm4627; AVX512VL-NEXT:    vpblendvb %ymm4, %ymm5, %ymm1, %ymm1628; AVX512VL-NEXT:    vpand %ymm3, %ymm2, %ymm2629; AVX512VL-NEXT:    vpsllw $5, %ymm2, %ymm2630; AVX512VL-NEXT:    vpaddb %ymm2, %ymm2, %ymm3631; AVX512VL-NEXT:    vpsllw $4, %ymm0, %ymm4632; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm4, %ymm4633; AVX512VL-NEXT:    vpblendvb %ymm2, %ymm4, %ymm0, %ymm0634; AVX512VL-NEXT:    vpsllw $2, %ymm0, %ymm2635; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm2, %ymm2636; AVX512VL-NEXT:    vpblendvb %ymm3, %ymm2, %ymm0, %ymm0637; AVX512VL-NEXT:    vpaddb %ymm0, %ymm0, %ymm2638; AVX512VL-NEXT:    vpaddb %ymm3, %ymm3, %ymm3639; AVX512VL-NEXT:    vpblendvb %ymm3, %ymm2, %ymm0, %ymm0640; AVX512VL-NEXT:    vpor %ymm1, %ymm0, %ymm0641; AVX512VL-NEXT:    retq642;643; AVX512BW-LABEL: var_funnnel_v32i8:644; AVX512BW:       # %bb.0:645; 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],zero646; 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],zero647; AVX512BW-NEXT:    vpsllw $8, %zmm0, %zmm0648; AVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm0649; AVX512BW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm1650; 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],zero651; AVX512BW-NEXT:    vpsllvw %zmm1, %zmm0, %zmm0652; AVX512BW-NEXT:    vpsrlw $8, %zmm0, %zmm0653; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0654; AVX512BW-NEXT:    retq655;656; AVX512VBMI2-LABEL: var_funnnel_v32i8:657; AVX512VBMI2:       # %bb.0:658; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1659; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0660; 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]661; AVX512VBMI2-NEXT:    vpermi2b %zmm0, %zmm1, %zmm3662; AVX512VBMI2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm0663; 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],zero664; AVX512VBMI2-NEXT:    vpsllvw %zmm0, %zmm3, %zmm0665; AVX512VBMI2-NEXT:    vpsrlw $8, %zmm0, %zmm0666; AVX512VBMI2-NEXT:    vpmovwb %zmm0, %ymm0667; AVX512VBMI2-NEXT:    retq668;669; AVX512VLBW-LABEL: var_funnnel_v32i8:670; AVX512VLBW:       # %bb.0:671; 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],zero672; 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],zero673; AVX512VLBW-NEXT:    vpsllw $8, %zmm0, %zmm0674; AVX512VLBW-NEXT:    vporq %zmm1, %zmm0, %zmm0675; AVX512VLBW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm2, %ymm1676; 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],zero677; AVX512VLBW-NEXT:    vpsllvw %zmm1, %zmm0, %zmm0678; AVX512VLBW-NEXT:    vpsrlw $8, %zmm0, %zmm0679; AVX512VLBW-NEXT:    vpmovwb %zmm0, %ymm0680; AVX512VLBW-NEXT:    retq681;682; AVX512VLVBMI2-LABEL: var_funnnel_v32i8:683; AVX512VLVBMI2:       # %bb.0:684; AVX512VLVBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1685; AVX512VLVBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0686; 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]687; AVX512VLVBMI2-NEXT:    vpermi2b %zmm0, %zmm1, %zmm3688; AVX512VLVBMI2-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm2, %ymm0689; 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],zero690; AVX512VLVBMI2-NEXT:    vpsllvw %zmm0, %zmm3, %zmm0691; AVX512VLVBMI2-NEXT:    vpsrlw $8, %zmm0, %zmm0692; AVX512VLVBMI2-NEXT:    vpmovwb %zmm0, %ymm0693; AVX512VLVBMI2-NEXT:    retq694;695; XOPAVX1-LABEL: var_funnnel_v32i8:696; XOPAVX1:       # %bb.0:697; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3698; XOPAVX1-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4699; XOPAVX1-NEXT:    vpshlb %xmm4, %xmm3, %xmm3700; XOPAVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2701; XOPAVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5702; XOPAVX1-NEXT:    vbroadcastss {{.*#+}} xmm6 = [249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249]703; XOPAVX1-NEXT:    vpaddb %xmm6, %xmm5, %xmm7704; XOPAVX1-NEXT:    vpshlb %xmm7, %xmm3, %xmm3705; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7706; XOPAVX1-NEXT:    vpshlb %xmm5, %xmm7, %xmm5707; XOPAVX1-NEXT:    vpor %xmm3, %xmm5, %xmm3708; XOPAVX1-NEXT:    vpshlb %xmm4, %xmm1, %xmm1709; XOPAVX1-NEXT:    vpaddb %xmm6, %xmm2, %xmm4710; XOPAVX1-NEXT:    vpshlb %xmm4, %xmm1, %xmm1711; XOPAVX1-NEXT:    vpshlb %xmm2, %xmm0, %xmm0712; XOPAVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0713; XOPAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0714; XOPAVX1-NEXT:    retq715;716; XOPAVX2-LABEL: var_funnnel_v32i8:717; XOPAVX2:       # %bb.0:718; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm3719; XOPAVX2-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4720; XOPAVX2-NEXT:    vpshlb %xmm4, %xmm3, %xmm3721; XOPAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2722; XOPAVX2-NEXT:    vextracti128 $1, %ymm2, %xmm5723; XOPAVX2-NEXT:    vpbroadcastb {{.*#+}} xmm6 = [249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249]724; XOPAVX2-NEXT:    vpaddb %xmm6, %xmm5, %xmm7725; XOPAVX2-NEXT:    vpshlb %xmm7, %xmm3, %xmm3726; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm7727; XOPAVX2-NEXT:    vpshlb %xmm5, %xmm7, %xmm5728; XOPAVX2-NEXT:    vpor %xmm3, %xmm5, %xmm3729; XOPAVX2-NEXT:    vpshlb %xmm4, %xmm1, %xmm1730; XOPAVX2-NEXT:    vpaddb %xmm6, %xmm2, %xmm4731; XOPAVX2-NEXT:    vpshlb %xmm4, %xmm1, %xmm1732; XOPAVX2-NEXT:    vpshlb %xmm2, %xmm0, %xmm0733; XOPAVX2-NEXT:    vpor %xmm1, %xmm0, %xmm0734; XOPAVX2-NEXT:    vinserti128 $1, %xmm3, %ymm0, %ymm0735; XOPAVX2-NEXT:    retq736  %res = call <32 x i8> @llvm.fshl.v32i8(<32 x i8> %x, <32 x i8> %y, <32 x i8> %amt)737  ret <32 x i8> %res738}739 740;741; Uniform Variable Shifts742;743 744define <4 x i64> @splatvar_funnnel_v4i64(<4 x i64> %x, <4 x i64> %y, <4 x i64> %amt) nounwind {745; AVX1-LABEL: splatvar_funnnel_v4i64:746; AVX1:       # %bb.0:747; AVX1-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [63,63]748; AVX1-NEXT:    vpandn %xmm3, %xmm2, %xmm4749; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5750; AVX1-NEXT:    vpsrlq $1, %xmm5, %xmm5751; AVX1-NEXT:    vpsrlq %xmm4, %xmm5, %xmm5752; AVX1-NEXT:    vpsrlq $1, %xmm1, %xmm1753; AVX1-NEXT:    vpsrlq %xmm4, %xmm1, %xmm1754; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm1, %ymm1755; AVX1-NEXT:    vpand %xmm3, %xmm2, %xmm2756; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3757; AVX1-NEXT:    vpsllq %xmm2, %xmm3, %xmm3758; AVX1-NEXT:    vpsllq %xmm2, %xmm0, %xmm0759; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0760; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm0761; AVX1-NEXT:    retq762;763; AVX2-LABEL: splatvar_funnnel_v4i64:764; AVX2:       # %bb.0:765; AVX2-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [63,63]766; AVX2-NEXT:    vpandn %xmm3, %xmm2, %xmm4767; AVX2-NEXT:    vpsrlq $1, %ymm1, %ymm1768; AVX2-NEXT:    vpsrlq %xmm4, %ymm1, %ymm1769; AVX2-NEXT:    vpand %xmm3, %xmm2, %xmm2770; AVX2-NEXT:    vpsllq %xmm2, %ymm0, %ymm0771; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm0772; AVX2-NEXT:    retq773;774; AVX512F-LABEL: splatvar_funnnel_v4i64:775; AVX512F:       # %bb.0:776; AVX512F-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [63,63]777; AVX512F-NEXT:    vpandn %xmm3, %xmm2, %xmm4778; AVX512F-NEXT:    vpsrlq $1, %ymm1, %ymm1779; AVX512F-NEXT:    vpsrlq %xmm4, %ymm1, %ymm1780; AVX512F-NEXT:    vpand %xmm3, %xmm2, %xmm2781; AVX512F-NEXT:    vpsllq %xmm2, %ymm0, %ymm0782; AVX512F-NEXT:    vpor %ymm1, %ymm0, %ymm0783; AVX512F-NEXT:    retq784;785; AVX512VL-LABEL: splatvar_funnnel_v4i64:786; AVX512VL:       # %bb.0:787; AVX512VL-NEXT:    vpbroadcastq {{.*#+}} xmm3 = [63,63]788; AVX512VL-NEXT:    vpandn %xmm3, %xmm2, %xmm4789; AVX512VL-NEXT:    vpsrlq $1, %ymm1, %ymm1790; AVX512VL-NEXT:    vpsrlq %xmm4, %ymm1, %ymm1791; AVX512VL-NEXT:    vpand %xmm3, %xmm2, %xmm2792; AVX512VL-NEXT:    vpsllq %xmm2, %ymm0, %ymm0793; AVX512VL-NEXT:    vpor %ymm1, %ymm0, %ymm0794; AVX512VL-NEXT:    retq795;796; AVX512BW-LABEL: splatvar_funnnel_v4i64:797; AVX512BW:       # %bb.0:798; AVX512BW-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [63,63]799; AVX512BW-NEXT:    vpandn %xmm3, %xmm2, %xmm4800; AVX512BW-NEXT:    vpsrlq $1, %ymm1, %ymm1801; AVX512BW-NEXT:    vpsrlq %xmm4, %ymm1, %ymm1802; AVX512BW-NEXT:    vpand %xmm3, %xmm2, %xmm2803; AVX512BW-NEXT:    vpsllq %xmm2, %ymm0, %ymm0804; AVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm0805; AVX512BW-NEXT:    retq806;807; AVX512VBMI2-LABEL: splatvar_funnnel_v4i64:808; AVX512VBMI2:       # %bb.0:809; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1810; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0811; AVX512VBMI2-NEXT:    vpbroadcastq %xmm2, %ymm2812; AVX512VBMI2-NEXT:    vpshldvq %zmm2, %zmm1, %zmm0813; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0814; AVX512VBMI2-NEXT:    retq815;816; AVX512VLBW-LABEL: splatvar_funnnel_v4i64:817; AVX512VLBW:       # %bb.0:818; AVX512VLBW-NEXT:    vpbroadcastq {{.*#+}} xmm3 = [63,63]819; AVX512VLBW-NEXT:    vpandn %xmm3, %xmm2, %xmm4820; AVX512VLBW-NEXT:    vpsrlq $1, %ymm1, %ymm1821; AVX512VLBW-NEXT:    vpsrlq %xmm4, %ymm1, %ymm1822; AVX512VLBW-NEXT:    vpand %xmm3, %xmm2, %xmm2823; AVX512VLBW-NEXT:    vpsllq %xmm2, %ymm0, %ymm0824; AVX512VLBW-NEXT:    vpor %ymm1, %ymm0, %ymm0825; AVX512VLBW-NEXT:    retq826;827; AVX512VLVBMI2-LABEL: splatvar_funnnel_v4i64:828; AVX512VLVBMI2:       # %bb.0:829; AVX512VLVBMI2-NEXT:    vpbroadcastq %xmm2, %ymm2830; AVX512VLVBMI2-NEXT:    vpshldvq %ymm2, %ymm1, %ymm0831; AVX512VLVBMI2-NEXT:    retq832;833; XOPAVX1-LABEL: splatvar_funnnel_v4i64:834; XOPAVX1:       # %bb.0:835; XOPAVX1-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [63,63]836; XOPAVX1-NEXT:    vpandn %xmm3, %xmm2, %xmm4837; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5838; XOPAVX1-NEXT:    vpsrlq $1, %xmm5, %xmm5839; XOPAVX1-NEXT:    vpsrlq %xmm4, %xmm5, %xmm5840; XOPAVX1-NEXT:    vpsrlq $1, %xmm1, %xmm1841; XOPAVX1-NEXT:    vpsrlq %xmm4, %xmm1, %xmm1842; XOPAVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm1, %ymm1843; XOPAVX1-NEXT:    vpand %xmm3, %xmm2, %xmm2844; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3845; XOPAVX1-NEXT:    vpsllq %xmm2, %xmm3, %xmm3846; XOPAVX1-NEXT:    vpsllq %xmm2, %xmm0, %xmm0847; XOPAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0848; XOPAVX1-NEXT:    vorps %ymm1, %ymm0, %ymm0849; XOPAVX1-NEXT:    retq850;851; XOPAVX2-LABEL: splatvar_funnnel_v4i64:852; XOPAVX2:       # %bb.0:853; XOPAVX2-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [63,63]854; XOPAVX2-NEXT:    vpandn %xmm3, %xmm2, %xmm4855; XOPAVX2-NEXT:    vpsrlq $1, %ymm1, %ymm1856; XOPAVX2-NEXT:    vpsrlq %xmm4, %ymm1, %ymm1857; XOPAVX2-NEXT:    vpand %xmm3, %xmm2, %xmm2858; XOPAVX2-NEXT:    vpsllq %xmm2, %ymm0, %ymm0859; XOPAVX2-NEXT:    vpor %ymm1, %ymm0, %ymm0860; XOPAVX2-NEXT:    retq861  %splat = shufflevector <4 x i64> %amt, <4 x i64> undef, <4 x i32> zeroinitializer862  %res = call <4 x i64> @llvm.fshl.v4i64(<4 x i64> %x, <4 x i64> %y, <4 x i64> %splat)863  ret <4 x i64> %res864}865 866define <8 x i32> @splatvar_funnnel_v8i32(<8 x i32> %x, <8 x i32> %y, <8 x i32> %amt) nounwind {867; AVX1-LABEL: splatvar_funnnel_v8i32:868; AVX1:       # %bb.0:869; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3870; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4871; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm4[2],xmm3[2],xmm4[3],xmm3[3]872; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2873; AVX1-NEXT:    vpsllq %xmm2, %xmm5, %xmm5874; AVX1-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm4[0],xmm3[0],xmm4[1],xmm3[1]875; AVX1-NEXT:    vpsllq %xmm2, %xmm3, %xmm3876; AVX1-NEXT:    vshufps {{.*#+}} xmm3 = xmm3[1,3],xmm5[1,3]877; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm4 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]878; AVX1-NEXT:    vpsllq %xmm2, %xmm4, %xmm4879; AVX1-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]880; AVX1-NEXT:    vpsllq %xmm2, %xmm0, %xmm0881; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[1,3],xmm4[1,3]882; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0883; AVX1-NEXT:    retq884;885; AVX2-LABEL: splatvar_funnnel_v8i32:886; AVX2:       # %bb.0:887; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm3 = ymm1[2],ymm0[2],ymm1[3],ymm0[3],ymm1[6],ymm0[6],ymm1[7],ymm0[7]888; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2889; AVX2-NEXT:    vpsllq %xmm2, %ymm3, %ymm3890; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[4],ymm0[4],ymm1[5],ymm0[5]891; AVX2-NEXT:    vpsllq %xmm2, %ymm0, %ymm0892; AVX2-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm3[1,3],ymm0[5,7],ymm3[5,7]893; AVX2-NEXT:    retq894;895; AVX512F-LABEL: splatvar_funnnel_v8i32:896; AVX512F:       # %bb.0:897; AVX512F-NEXT:    vpunpckhdq {{.*#+}} ymm3 = ymm1[2],ymm0[2],ymm1[3],ymm0[3],ymm1[6],ymm0[6],ymm1[7],ymm0[7]898; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2899; AVX512F-NEXT:    vpsllq %xmm2, %ymm3, %ymm3900; AVX512F-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[4],ymm0[4],ymm1[5],ymm0[5]901; AVX512F-NEXT:    vpsllq %xmm2, %ymm0, %ymm0902; AVX512F-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm3[1,3],ymm0[5,7],ymm3[5,7]903; AVX512F-NEXT:    retq904;905; AVX512VL-LABEL: splatvar_funnnel_v8i32:906; AVX512VL:       # %bb.0:907; AVX512VL-NEXT:    vpunpckhdq {{.*#+}} ymm3 = ymm1[2],ymm0[2],ymm1[3],ymm0[3],ymm1[6],ymm0[6],ymm1[7],ymm0[7]908; AVX512VL-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2909; AVX512VL-NEXT:    vpsllq %xmm2, %ymm3, %ymm3910; AVX512VL-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[4],ymm0[4],ymm1[5],ymm0[5]911; AVX512VL-NEXT:    vpsllq %xmm2, %ymm0, %ymm0912; AVX512VL-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm3[1,3],ymm0[5,7],ymm3[5,7]913; AVX512VL-NEXT:    retq914;915; AVX512BW-LABEL: splatvar_funnnel_v8i32:916; AVX512BW:       # %bb.0:917; AVX512BW-NEXT:    vpunpckhdq {{.*#+}} ymm3 = ymm1[2],ymm0[2],ymm1[3],ymm0[3],ymm1[6],ymm0[6],ymm1[7],ymm0[7]918; AVX512BW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2919; AVX512BW-NEXT:    vpsllq %xmm2, %ymm3, %ymm3920; AVX512BW-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[4],ymm0[4],ymm1[5],ymm0[5]921; AVX512BW-NEXT:    vpsllq %xmm2, %ymm0, %ymm0922; AVX512BW-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm3[1,3],ymm0[5,7],ymm3[5,7]923; AVX512BW-NEXT:    retq924;925; AVX512VBMI2-LABEL: splatvar_funnnel_v8i32:926; AVX512VBMI2:       # %bb.0:927; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1928; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0929; AVX512VBMI2-NEXT:    vpbroadcastd %xmm2, %ymm2930; AVX512VBMI2-NEXT:    vpshldvd %zmm2, %zmm1, %zmm0931; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0932; AVX512VBMI2-NEXT:    retq933;934; AVX512VLBW-LABEL: splatvar_funnnel_v8i32:935; AVX512VLBW:       # %bb.0:936; AVX512VLBW-NEXT:    vpunpckhdq {{.*#+}} ymm3 = ymm1[2],ymm0[2],ymm1[3],ymm0[3],ymm1[6],ymm0[6],ymm1[7],ymm0[7]937; AVX512VLBW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2938; AVX512VLBW-NEXT:    vpsllq %xmm2, %ymm3, %ymm3939; AVX512VLBW-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[4],ymm0[4],ymm1[5],ymm0[5]940; AVX512VLBW-NEXT:    vpsllq %xmm2, %ymm0, %ymm0941; AVX512VLBW-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm3[1,3],ymm0[5,7],ymm3[5,7]942; AVX512VLBW-NEXT:    retq943;944; AVX512VLVBMI2-LABEL: splatvar_funnnel_v8i32:945; AVX512VLVBMI2:       # %bb.0:946; AVX512VLVBMI2-NEXT:    vpbroadcastd %xmm2, %ymm2947; AVX512VLVBMI2-NEXT:    vpshldvd %ymm2, %ymm1, %ymm0948; AVX512VLVBMI2-NEXT:    retq949;950; XOPAVX1-LABEL: splatvar_funnnel_v8i32:951; XOPAVX1:       # %bb.0:952; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3953; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4954; XOPAVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm4[2],xmm3[2],xmm4[3],xmm3[3]955; XOPAVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2956; XOPAVX1-NEXT:    vpsllq %xmm2, %xmm5, %xmm5957; XOPAVX1-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm4[0],xmm3[0],xmm4[1],xmm3[1]958; XOPAVX1-NEXT:    vpsllq %xmm2, %xmm3, %xmm3959; XOPAVX1-NEXT:    vshufps {{.*#+}} xmm3 = xmm3[1,3],xmm5[1,3]960; XOPAVX1-NEXT:    vpunpckhdq {{.*#+}} xmm4 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]961; XOPAVX1-NEXT:    vpsllq %xmm2, %xmm4, %xmm4962; XOPAVX1-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]963; XOPAVX1-NEXT:    vpsllq %xmm2, %xmm0, %xmm0964; XOPAVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[1,3],xmm4[1,3]965; XOPAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0966; XOPAVX1-NEXT:    retq967;968; XOPAVX2-LABEL: splatvar_funnnel_v8i32:969; XOPAVX2:       # %bb.0:970; XOPAVX2-NEXT:    vpunpckhdq {{.*#+}} ymm3 = ymm1[2],ymm0[2],ymm1[3],ymm0[3],ymm1[6],ymm0[6],ymm1[7],ymm0[7]971; XOPAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2972; XOPAVX2-NEXT:    vpsllq %xmm2, %ymm3, %ymm3973; XOPAVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[4],ymm0[4],ymm1[5],ymm0[5]974; XOPAVX2-NEXT:    vpsllq %xmm2, %ymm0, %ymm0975; XOPAVX2-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm3[1,3],ymm0[5,7],ymm3[5,7]976; XOPAVX2-NEXT:    retq977  %splat = shufflevector <8 x i32> %amt, <8 x i32> undef, <8 x i32> zeroinitializer978  %res = call <8 x i32> @llvm.fshl.v8i32(<8 x i32> %x, <8 x i32> %y, <8 x i32> %splat)979  ret <8 x i32> %res980}981 982define <16 x i16> @splatvar_funnnel_v16i16(<16 x i16> %x, <16 x i16> %y, <16 x i16> %amt) nounwind {983; AVX1-LABEL: splatvar_funnnel_v16i16:984; AVX1:       # %bb.0:985; AVX1-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [15,0]986; AVX1-NEXT:    vpandn %xmm3, %xmm2, %xmm4987; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5988; AVX1-NEXT:    vpsrlw $1, %xmm5, %xmm5989; AVX1-NEXT:    vpsrlw %xmm4, %xmm5, %xmm5990; AVX1-NEXT:    vpand %xmm3, %xmm2, %xmm2991; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3992; AVX1-NEXT:    vpsllw %xmm2, %xmm3, %xmm3993; AVX1-NEXT:    vpor %xmm5, %xmm3, %xmm3994; AVX1-NEXT:    vpsrlw $1, %xmm1, %xmm1995; AVX1-NEXT:    vpsrlw %xmm4, %xmm1, %xmm1996; AVX1-NEXT:    vpsllw %xmm2, %xmm0, %xmm0997; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0998; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0999; AVX1-NEXT:    retq1000;1001; AVX2-LABEL: splatvar_funnnel_v16i16:1002; AVX2:       # %bb.0:1003; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm3 = [15,0,0,0,15,0,0,0]1004; AVX2-NEXT:    vpandn %xmm3, %xmm2, %xmm41005; AVX2-NEXT:    vpsrlw $1, %ymm1, %ymm11006; AVX2-NEXT:    vpsrlw %xmm4, %ymm1, %ymm11007; AVX2-NEXT:    vpand %xmm3, %xmm2, %xmm21008; AVX2-NEXT:    vpsllw %xmm2, %ymm0, %ymm01009; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01010; AVX2-NEXT:    retq1011;1012; AVX512F-LABEL: splatvar_funnnel_v16i16:1013; AVX512F:       # %bb.0:1014; AVX512F-NEXT:    vpbroadcastq {{.*#+}} xmm3 = [15,0,0,0,15,0,0,0]1015; AVX512F-NEXT:    vpandn %xmm3, %xmm2, %xmm41016; AVX512F-NEXT:    vpsrlw $1, %ymm1, %ymm11017; AVX512F-NEXT:    vpsrlw %xmm4, %ymm1, %ymm11018; AVX512F-NEXT:    vpand %xmm3, %xmm2, %xmm21019; AVX512F-NEXT:    vpsllw %xmm2, %ymm0, %ymm01020; AVX512F-NEXT:    vpor %ymm1, %ymm0, %ymm01021; AVX512F-NEXT:    retq1022;1023; AVX512VL-LABEL: splatvar_funnnel_v16i16:1024; AVX512VL:       # %bb.0:1025; AVX512VL-NEXT:    vpbroadcastq {{.*#+}} xmm3 = [15,0,0,0,15,0,0,0]1026; AVX512VL-NEXT:    vpandn %xmm3, %xmm2, %xmm41027; AVX512VL-NEXT:    vpsrlw $1, %ymm1, %ymm11028; AVX512VL-NEXT:    vpsrlw %xmm4, %ymm1, %ymm11029; AVX512VL-NEXT:    vpand %xmm3, %xmm2, %xmm21030; AVX512VL-NEXT:    vpsllw %xmm2, %ymm0, %ymm01031; AVX512VL-NEXT:    vpor %ymm1, %ymm0, %ymm01032; AVX512VL-NEXT:    retq1033;1034; AVX512BW-LABEL: splatvar_funnnel_v16i16:1035; AVX512BW:       # %bb.0:1036; AVX512BW-NEXT:    vpbroadcastq {{.*#+}} xmm3 = [15,0,0,0,15,0,0,0]1037; AVX512BW-NEXT:    vpandn %xmm3, %xmm2, %xmm41038; AVX512BW-NEXT:    vpsrlw $1, %ymm1, %ymm11039; AVX512BW-NEXT:    vpsrlw %xmm4, %ymm1, %ymm11040; AVX512BW-NEXT:    vpand %xmm3, %xmm2, %xmm21041; AVX512BW-NEXT:    vpsllw %xmm2, %ymm0, %ymm01042; AVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm01043; AVX512BW-NEXT:    retq1044;1045; AVX512VBMI2-LABEL: splatvar_funnnel_v16i16:1046; AVX512VBMI2:       # %bb.0:1047; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm11048; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01049; AVX512VBMI2-NEXT:    vpbroadcastw %xmm2, %ymm21050; AVX512VBMI2-NEXT:    vpshldvw %zmm2, %zmm1, %zmm01051; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01052; AVX512VBMI2-NEXT:    retq1053;1054; AVX512VLBW-LABEL: splatvar_funnnel_v16i16:1055; AVX512VLBW:       # %bb.0:1056; AVX512VLBW-NEXT:    vpbroadcastq {{.*#+}} xmm3 = [15,0,0,0,15,0,0,0]1057; AVX512VLBW-NEXT:    vpandn %xmm3, %xmm2, %xmm41058; AVX512VLBW-NEXT:    vpsrlw $1, %ymm1, %ymm11059; AVX512VLBW-NEXT:    vpsrlw %xmm4, %ymm1, %ymm11060; AVX512VLBW-NEXT:    vpand %xmm3, %xmm2, %xmm21061; AVX512VLBW-NEXT:    vpsllw %xmm2, %ymm0, %ymm01062; AVX512VLBW-NEXT:    vpor %ymm1, %ymm0, %ymm01063; AVX512VLBW-NEXT:    retq1064;1065; AVX512VLVBMI2-LABEL: splatvar_funnnel_v16i16:1066; AVX512VLVBMI2:       # %bb.0:1067; AVX512VLVBMI2-NEXT:    vpbroadcastw %xmm2, %ymm21068; AVX512VLVBMI2-NEXT:    vpshldvw %ymm2, %ymm1, %ymm01069; AVX512VLVBMI2-NEXT:    retq1070;1071; XOPAVX1-LABEL: splatvar_funnnel_v16i16:1072; XOPAVX1:       # %bb.0:1073; XOPAVX1-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [15,0]1074; XOPAVX1-NEXT:    vpandn %xmm3, %xmm2, %xmm41075; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm51076; XOPAVX1-NEXT:    vpsrlw $1, %xmm5, %xmm51077; XOPAVX1-NEXT:    vpsrlw %xmm4, %xmm5, %xmm51078; XOPAVX1-NEXT:    vpand %xmm3, %xmm2, %xmm21079; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31080; XOPAVX1-NEXT:    vpsllw %xmm2, %xmm3, %xmm31081; XOPAVX1-NEXT:    vpor %xmm5, %xmm3, %xmm31082; XOPAVX1-NEXT:    vpsrlw $1, %xmm1, %xmm11083; XOPAVX1-NEXT:    vpsrlw %xmm4, %xmm1, %xmm11084; XOPAVX1-NEXT:    vpsllw %xmm2, %xmm0, %xmm01085; XOPAVX1-NEXT:    vpor %xmm1, %xmm0, %xmm01086; XOPAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm01087; XOPAVX1-NEXT:    retq1088;1089; XOPAVX2-LABEL: splatvar_funnnel_v16i16:1090; XOPAVX2:       # %bb.0:1091; XOPAVX2-NEXT:    vpbroadcastq {{.*#+}} xmm3 = [15,0,0,0,15,0,0,0]1092; XOPAVX2-NEXT:    vpandn %xmm3, %xmm2, %xmm41093; XOPAVX2-NEXT:    vpsrlw $1, %ymm1, %ymm11094; XOPAVX2-NEXT:    vpsrlw %xmm4, %ymm1, %ymm11095; XOPAVX2-NEXT:    vpand %xmm3, %xmm2, %xmm21096; XOPAVX2-NEXT:    vpsllw %xmm2, %ymm0, %ymm01097; XOPAVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01098; XOPAVX2-NEXT:    retq1099  %splat = shufflevector <16 x i16> %amt, <16 x i16> undef, <16 x i32> zeroinitializer1100  %res = call <16 x i16> @llvm.fshl.v16i16(<16 x i16> %x, <16 x i16> %y, <16 x i16> %splat)1101  ret <16 x i16> %res1102}1103 1104define <32 x i8> @splatvar_funnnel_v32i8(<32 x i8> %x, <32 x i8> %y, <32 x i8> %amt) nounwind {1105; AVX1-LABEL: splatvar_funnnel_v32i8:1106; AVX1:       # %bb.0:1107; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31108; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm41109; 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]1110; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21111; AVX1-NEXT:    vpsllw %xmm2, %xmm5, %xmm51112; AVX1-NEXT:    vpsrlw $8, %xmm5, %xmm51113; 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]1114; AVX1-NEXT:    vpsllw %xmm2, %xmm3, %xmm31115; AVX1-NEXT:    vpsrlw $8, %xmm3, %xmm31116; AVX1-NEXT:    vpackuswb %xmm5, %xmm3, %xmm31117; 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]1118; AVX1-NEXT:    vpsllw %xmm2, %xmm4, %xmm41119; AVX1-NEXT:    vpsrlw $8, %xmm4, %xmm41120; 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]1121; AVX1-NEXT:    vpsllw %xmm2, %xmm0, %xmm01122; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm01123; AVX1-NEXT:    vpackuswb %xmm4, %xmm0, %xmm01124; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm01125; AVX1-NEXT:    retq1126;1127; AVX2-LABEL: splatvar_funnnel_v32i8:1128; AVX2:       # %bb.0:1129; 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]1130; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21131; AVX2-NEXT:    vpsllw %xmm2, %ymm3, %ymm31132; AVX2-NEXT:    vpsrlw $8, %ymm3, %ymm31133; 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]1134; AVX2-NEXT:    vpsllw %xmm2, %ymm0, %ymm01135; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm01136; AVX2-NEXT:    vpackuswb %ymm3, %ymm0, %ymm01137; AVX2-NEXT:    retq1138;1139; AVX512F-LABEL: splatvar_funnnel_v32i8:1140; AVX512F:       # %bb.0:1141; 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]1142; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21143; AVX512F-NEXT:    vpsllw %xmm2, %ymm3, %ymm31144; AVX512F-NEXT:    vpsrlw $8, %ymm3, %ymm31145; 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]1146; AVX512F-NEXT:    vpsllw %xmm2, %ymm0, %ymm01147; AVX512F-NEXT:    vpsrlw $8, %ymm0, %ymm01148; AVX512F-NEXT:    vpackuswb %ymm3, %ymm0, %ymm01149; AVX512F-NEXT:    retq1150;1151; AVX512VL-LABEL: splatvar_funnnel_v32i8:1152; AVX512VL:       # %bb.0:1153; 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]1154; AVX512VL-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21155; AVX512VL-NEXT:    vpsllw %xmm2, %ymm3, %ymm31156; AVX512VL-NEXT:    vpsrlw $8, %ymm3, %ymm31157; 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]1158; AVX512VL-NEXT:    vpsllw %xmm2, %ymm0, %ymm01159; AVX512VL-NEXT:    vpsrlw $8, %ymm0, %ymm01160; AVX512VL-NEXT:    vpackuswb %ymm3, %ymm0, %ymm01161; AVX512VL-NEXT:    retq1162;1163; AVX512BW-LABEL: splatvar_funnnel_v32i8:1164; AVX512BW:       # %bb.0:1165; 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]1166; AVX512BW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21167; AVX512BW-NEXT:    vpsllw %xmm2, %ymm3, %ymm31168; AVX512BW-NEXT:    vpsrlw $8, %ymm3, %ymm31169; 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]1170; AVX512BW-NEXT:    vpsllw %xmm2, %ymm0, %ymm01171; AVX512BW-NEXT:    vpsrlw $8, %ymm0, %ymm01172; AVX512BW-NEXT:    vpackuswb %ymm3, %ymm0, %ymm01173; AVX512BW-NEXT:    retq1174;1175; AVX512VBMI2-LABEL: splatvar_funnnel_v32i8:1176; AVX512VBMI2:       # %bb.0:1177; AVX512VBMI2-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; AVX512VBMI2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21179; AVX512VBMI2-NEXT:    vpsllw %xmm2, %ymm3, %ymm31180; AVX512VBMI2-NEXT:    vpsrlw $8, %ymm3, %ymm31181; AVX512VBMI2-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]1182; AVX512VBMI2-NEXT:    vpsllw %xmm2, %ymm0, %ymm01183; AVX512VBMI2-NEXT:    vpsrlw $8, %ymm0, %ymm01184; AVX512VBMI2-NEXT:    vpackuswb %ymm3, %ymm0, %ymm01185; AVX512VBMI2-NEXT:    retq1186;1187; AVX512VLBW-LABEL: splatvar_funnnel_v32i8:1188; AVX512VLBW:       # %bb.0:1189; 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]1190; AVX512VLBW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21191; AVX512VLBW-NEXT:    vpsllw %xmm2, %ymm3, %ymm31192; AVX512VLBW-NEXT:    vpsrlw $8, %ymm3, %ymm31193; 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]1194; AVX512VLBW-NEXT:    vpsllw %xmm2, %ymm0, %ymm01195; AVX512VLBW-NEXT:    vpsrlw $8, %ymm0, %ymm01196; AVX512VLBW-NEXT:    vpackuswb %ymm3, %ymm0, %ymm01197; AVX512VLBW-NEXT:    retq1198;1199; AVX512VLVBMI2-LABEL: splatvar_funnnel_v32i8:1200; AVX512VLVBMI2:       # %bb.0:1201; AVX512VLVBMI2-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]1202; AVX512VLVBMI2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21203; AVX512VLVBMI2-NEXT:    vpsllw %xmm2, %ymm3, %ymm31204; AVX512VLVBMI2-NEXT:    vpsrlw $8, %ymm3, %ymm31205; AVX512VLVBMI2-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]1206; AVX512VLVBMI2-NEXT:    vpsllw %xmm2, %ymm0, %ymm01207; AVX512VLVBMI2-NEXT:    vpsrlw $8, %ymm0, %ymm01208; AVX512VLVBMI2-NEXT:    vpackuswb %ymm3, %ymm0, %ymm01209; AVX512VLVBMI2-NEXT:    retq1210;1211; XOPAVX1-LABEL: splatvar_funnnel_v32i8:1212; XOPAVX1:       # %bb.0:1213; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31214; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm41215; 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]1216; XOPAVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21217; XOPAVX1-NEXT:    vpsllw %xmm2, %xmm5, %xmm51218; 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]1219; XOPAVX1-NEXT:    vpsllw %xmm2, %xmm3, %xmm31220; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31]1221; XOPAVX1-NEXT:    vpperm %xmm4, %xmm5, %xmm3, %xmm31222; 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]1223; XOPAVX1-NEXT:    vpsllw %xmm2, %xmm5, %xmm51224; 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]1225; XOPAVX1-NEXT:    vpsllw %xmm2, %xmm0, %xmm01226; XOPAVX1-NEXT:    vpperm %xmm4, %xmm5, %xmm0, %xmm01227; XOPAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm01228; XOPAVX1-NEXT:    retq1229;1230; XOPAVX2-LABEL: splatvar_funnnel_v32i8:1231; XOPAVX2:       # %bb.0:1232; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm31233; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm41234; 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]1235; XOPAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21236; XOPAVX2-NEXT:    vpsllw %xmm2, %xmm5, %xmm51237; 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]1238; XOPAVX2-NEXT:    vpsllw %xmm2, %xmm3, %xmm31239; XOPAVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = [1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31]1240; XOPAVX2-NEXT:    vpperm %xmm4, %xmm5, %xmm3, %xmm31241; 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]1242; XOPAVX2-NEXT:    vpsllw %xmm2, %xmm5, %xmm51243; 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]1244; XOPAVX2-NEXT:    vpsllw %xmm2, %xmm0, %xmm01245; XOPAVX2-NEXT:    vpperm %xmm4, %xmm5, %xmm0, %xmm01246; XOPAVX2-NEXT:    vinserti128 $1, %xmm3, %ymm0, %ymm01247; XOPAVX2-NEXT:    retq1248  %splat = shufflevector <32 x i8> %amt, <32 x i8> undef, <32 x i32> zeroinitializer1249  %res = call <32 x i8> @llvm.fshl.v32i8(<32 x i8> %x, <32 x i8> %y, <32 x i8> %splat)1250  ret <32 x i8> %res1251}1252 1253; Harder PR37426 - https://bugs.llvm.org/show_bug.cgi?id=374261254; CGP should sink splatted select operands through the funnel shift.1255 1256define void @fancierRotate2(ptr %arr, ptr %control, i32 %rot0, i32 %rot1) {1257; AVX1-LABEL: fancierRotate2:1258; AVX1:       # %bb.0: # %entry1259; AVX1-NEXT:    vmovd %edx, %xmm11260; AVX1-NEXT:    vmovd %ecx, %xmm21261; AVX1-NEXT:    movq $-1024, %rax # imm = 0xFC001262; AVX1-NEXT:    vpxor %xmm0, %xmm0, %xmm01263; AVX1-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [31,0]1264; AVX1-NEXT:    vpand %xmm3, %xmm1, %xmm11265; AVX1-NEXT:    vpand %xmm3, %xmm2, %xmm21266; AVX1-NEXT:    .p2align 41267; AVX1-NEXT:  .LBB8_1: # %loop1268; AVX1-NEXT:    # =>This Inner Loop Header: Depth=11269; AVX1-NEXT:    vmovq {{.*#+}} xmm3 = mem[0],zero1270; AVX1-NEXT:    vpcmpeqb %xmm0, %xmm3, %xmm31271; AVX1-NEXT:    vpmovsxbd %xmm3, %xmm41272; AVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm3[1,1,1,1]1273; AVX1-NEXT:    vpmovsxbd %xmm3, %xmm31274; AVX1-NEXT:    vmovdqu 4096(%rdi,%rax,4), %xmm51275; AVX1-NEXT:    vmovdqu 4112(%rdi,%rax,4), %xmm61276; AVX1-NEXT:    vpshufd {{.*#+}} xmm7 = xmm5[2,2,3,3]1277; AVX1-NEXT:    vpsllq %xmm1, %xmm7, %xmm81278; AVX1-NEXT:    vpshufd {{.*#+}} xmm5 = xmm5[0,0,1,1]1279; AVX1-NEXT:    vpsllq %xmm1, %xmm5, %xmm91280; AVX1-NEXT:    vshufps {{.*#+}} xmm8 = xmm9[1,3],xmm8[1,3]1281; AVX1-NEXT:    vpshufd {{.*#+}} xmm9 = xmm6[2,2,3,3]1282; AVX1-NEXT:    vpsllq %xmm1, %xmm9, %xmm101283; AVX1-NEXT:    vpshufd {{.*#+}} xmm6 = xmm6[0,0,1,1]1284; AVX1-NEXT:    vpsllq %xmm1, %xmm6, %xmm111285; AVX1-NEXT:    vshufps {{.*#+}} xmm10 = xmm11[1,3],xmm10[1,3]1286; AVX1-NEXT:    vpsllq %xmm2, %xmm7, %xmm71287; AVX1-NEXT:    vpsllq %xmm2, %xmm5, %xmm51288; AVX1-NEXT:    vshufps {{.*#+}} xmm5 = xmm5[1,3],xmm7[1,3]1289; AVX1-NEXT:    vblendvps %xmm4, %xmm8, %xmm5, %xmm41290; AVX1-NEXT:    vpsllq %xmm2, %xmm9, %xmm51291; AVX1-NEXT:    vpsllq %xmm2, %xmm6, %xmm61292; AVX1-NEXT:    vshufps {{.*#+}} xmm5 = xmm6[1,3],xmm5[1,3]1293; AVX1-NEXT:    vblendvps %xmm3, %xmm10, %xmm5, %xmm31294; AVX1-NEXT:    vmovups %xmm4, 4096(%rdi,%rax,4)1295; AVX1-NEXT:    vmovups %xmm3, 4112(%rdi,%rax,4)1296; AVX1-NEXT:    addq $8, %rax1297; AVX1-NEXT:    jne .LBB8_11298; AVX1-NEXT:  # %bb.2: # %exit1299; AVX1-NEXT:    retq1300;1301; AVX2-LABEL: fancierRotate2:1302; AVX2:       # %bb.0: # %entry1303; AVX2-NEXT:    vmovd %edx, %xmm01304; AVX2-NEXT:    vpbroadcastd %xmm0, %ymm01305; AVX2-NEXT:    vmovd %ecx, %xmm11306; AVX2-NEXT:    vpbroadcastd %xmm1, %ymm11307; AVX2-NEXT:    movq $-1024, %rax # imm = 0xFC001308; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm21309; AVX2-NEXT:    vbroadcastss {{.*#+}} ymm3 = [31,31,31,31,31,31,31,31]1310; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm4 = [32,32,32,32,32,32,32,32]1311; AVX2-NEXT:    .p2align 41312; AVX2-NEXT:  .LBB8_1: # %loop1313; AVX2-NEXT:    # =>This Inner Loop Header: Depth=11314; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm5 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero1315; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm5, %ymm51316; AVX2-NEXT:    vblendvps %ymm5, %ymm0, %ymm1, %ymm51317; AVX2-NEXT:    vandps %ymm3, %ymm5, %ymm51318; AVX2-NEXT:    vmovdqu 4096(%rdi,%rax,4), %ymm61319; AVX2-NEXT:    vpsllvd %ymm5, %ymm6, %ymm71320; AVX2-NEXT:    vpsubd %ymm5, %ymm4, %ymm51321; AVX2-NEXT:    vpsrlvd %ymm5, %ymm6, %ymm51322; AVX2-NEXT:    vpor %ymm5, %ymm7, %ymm51323; AVX2-NEXT:    vmovdqu %ymm5, 4096(%rdi,%rax,4)1324; AVX2-NEXT:    addq $8, %rax1325; AVX2-NEXT:    jne .LBB8_11326; AVX2-NEXT:  # %bb.2: # %exit1327; AVX2-NEXT:    vzeroupper1328; AVX2-NEXT:    retq1329;1330; AVX512F-LABEL: fancierRotate2:1331; AVX512F:       # %bb.0: # %entry1332; AVX512F-NEXT:    vmovd %edx, %xmm01333; AVX512F-NEXT:    vpbroadcastd %xmm0, %ymm01334; AVX512F-NEXT:    vmovd %ecx, %xmm11335; AVX512F-NEXT:    vpbroadcastd %xmm1, %ymm11336; AVX512F-NEXT:    movq $-1024, %rax # imm = 0xFC001337; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm21338; AVX512F-NEXT:    .p2align 41339; AVX512F-NEXT:  .LBB8_1: # %loop1340; AVX512F-NEXT:    # =>This Inner Loop Header: Depth=11341; AVX512F-NEXT:    vpmovzxbd {{.*#+}} ymm3 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero1342; AVX512F-NEXT:    vpcmpeqd %ymm2, %ymm3, %ymm31343; AVX512F-NEXT:    vblendvps %ymm3, %ymm0, %ymm1, %ymm31344; AVX512F-NEXT:    vmovdqu 4096(%rdi,%rax,4), %ymm41345; AVX512F-NEXT:    vprolvd %zmm3, %zmm4, %zmm31346; AVX512F-NEXT:    vmovdqu %ymm3, 4096(%rdi,%rax,4)1347; AVX512F-NEXT:    addq $8, %rax1348; AVX512F-NEXT:    jne .LBB8_11349; AVX512F-NEXT:  # %bb.2: # %exit1350; AVX512F-NEXT:    vzeroupper1351; AVX512F-NEXT:    retq1352;1353; AVX512VL-LABEL: fancierRotate2:1354; AVX512VL:       # %bb.0: # %entry1355; AVX512VL-NEXT:    vpbroadcastd %edx, %ymm01356; AVX512VL-NEXT:    vpbroadcastd %ecx, %ymm11357; AVX512VL-NEXT:    movq $-1024, %rax # imm = 0xFC001358; AVX512VL-NEXT:    .p2align 41359; AVX512VL-NEXT:  .LBB8_1: # %loop1360; AVX512VL-NEXT:    # =>This Inner Loop Header: Depth=11361; AVX512VL-NEXT:    vpmovzxbd {{.*#+}} ymm2 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero1362; AVX512VL-NEXT:    vptestnmd %ymm2, %ymm2, %k11363; AVX512VL-NEXT:    vpblendmd %ymm0, %ymm1, %ymm2 {%k1}1364; AVX512VL-NEXT:    vmovdqu 4096(%rdi,%rax,4), %ymm31365; AVX512VL-NEXT:    vprolvd %ymm2, %ymm3, %ymm21366; AVX512VL-NEXT:    vmovdqu %ymm2, 4096(%rdi,%rax,4)1367; AVX512VL-NEXT:    addq $8, %rax1368; AVX512VL-NEXT:    jne .LBB8_11369; AVX512VL-NEXT:  # %bb.2: # %exit1370; AVX512VL-NEXT:    vzeroupper1371; AVX512VL-NEXT:    retq1372;1373; AVX512BW-LABEL: fancierRotate2:1374; AVX512BW:       # %bb.0: # %entry1375; AVX512BW-NEXT:    vmovd %edx, %xmm01376; AVX512BW-NEXT:    vpbroadcastd %xmm0, %ymm01377; AVX512BW-NEXT:    vmovd %ecx, %xmm11378; AVX512BW-NEXT:    vpbroadcastd %xmm1, %ymm11379; AVX512BW-NEXT:    movq $-1024, %rax # imm = 0xFC001380; AVX512BW-NEXT:    vpxor %xmm2, %xmm2, %xmm21381; AVX512BW-NEXT:    .p2align 41382; AVX512BW-NEXT:  .LBB8_1: # %loop1383; AVX512BW-NEXT:    # =>This Inner Loop Header: Depth=11384; AVX512BW-NEXT:    vpmovzxbd {{.*#+}} ymm3 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero1385; AVX512BW-NEXT:    vpcmpeqd %ymm2, %ymm3, %ymm31386; AVX512BW-NEXT:    vblendvps %ymm3, %ymm0, %ymm1, %ymm31387; AVX512BW-NEXT:    vmovdqu 4096(%rdi,%rax,4), %ymm41388; AVX512BW-NEXT:    vprolvd %zmm3, %zmm4, %zmm31389; AVX512BW-NEXT:    vmovdqu %ymm3, 4096(%rdi,%rax,4)1390; AVX512BW-NEXT:    addq $8, %rax1391; AVX512BW-NEXT:    jne .LBB8_11392; AVX512BW-NEXT:  # %bb.2: # %exit1393; AVX512BW-NEXT:    vzeroupper1394; AVX512BW-NEXT:    retq1395;1396; AVX512VBMI2-LABEL: fancierRotate2:1397; AVX512VBMI2:       # %bb.0: # %entry1398; AVX512VBMI2-NEXT:    vmovd %edx, %xmm01399; AVX512VBMI2-NEXT:    vpbroadcastd %xmm0, %ymm01400; AVX512VBMI2-NEXT:    vmovd %ecx, %xmm11401; AVX512VBMI2-NEXT:    vpbroadcastd %xmm1, %ymm11402; AVX512VBMI2-NEXT:    movq $-1024, %rax # imm = 0xFC001403; AVX512VBMI2-NEXT:    vpxor %xmm2, %xmm2, %xmm21404; AVX512VBMI2-NEXT:    .p2align 41405; AVX512VBMI2-NEXT:  .LBB8_1: # %loop1406; AVX512VBMI2-NEXT:    # =>This Inner Loop Header: Depth=11407; AVX512VBMI2-NEXT:    vpmovzxbd {{.*#+}} ymm3 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero1408; AVX512VBMI2-NEXT:    vpcmpeqd %ymm2, %ymm3, %ymm31409; AVX512VBMI2-NEXT:    vblendvps %ymm3, %ymm0, %ymm1, %ymm31410; AVX512VBMI2-NEXT:    vmovdqu 4096(%rdi,%rax,4), %ymm41411; AVX512VBMI2-NEXT:    vprolvd %zmm3, %zmm4, %zmm31412; AVX512VBMI2-NEXT:    vmovdqu %ymm3, 4096(%rdi,%rax,4)1413; AVX512VBMI2-NEXT:    addq $8, %rax1414; AVX512VBMI2-NEXT:    jne .LBB8_11415; AVX512VBMI2-NEXT:  # %bb.2: # %exit1416; AVX512VBMI2-NEXT:    vzeroupper1417; AVX512VBMI2-NEXT:    retq1418;1419; AVX512VLBW-LABEL: fancierRotate2:1420; AVX512VLBW:       # %bb.0: # %entry1421; AVX512VLBW-NEXT:    vpbroadcastd %edx, %ymm01422; AVX512VLBW-NEXT:    vpbroadcastd %ecx, %ymm11423; AVX512VLBW-NEXT:    movq $-1024, %rax # imm = 0xFC001424; AVX512VLBW-NEXT:    .p2align 41425; AVX512VLBW-NEXT:  .LBB8_1: # %loop1426; AVX512VLBW-NEXT:    # =>This Inner Loop Header: Depth=11427; AVX512VLBW-NEXT:    vmovq {{.*#+}} xmm2 = mem[0],zero1428; AVX512VLBW-NEXT:    vptestnmb %xmm2, %xmm2, %k11429; AVX512VLBW-NEXT:    vpblendmd %ymm0, %ymm1, %ymm2 {%k1}1430; AVX512VLBW-NEXT:    vmovdqu 4096(%rdi,%rax,4), %ymm31431; AVX512VLBW-NEXT:    vprolvd %ymm2, %ymm3, %ymm21432; AVX512VLBW-NEXT:    vmovdqu %ymm2, 4096(%rdi,%rax,4)1433; AVX512VLBW-NEXT:    addq $8, %rax1434; AVX512VLBW-NEXT:    jne .LBB8_11435; AVX512VLBW-NEXT:  # %bb.2: # %exit1436; AVX512VLBW-NEXT:    vzeroupper1437; AVX512VLBW-NEXT:    retq1438;1439; AVX512VLVBMI2-LABEL: fancierRotate2:1440; AVX512VLVBMI2:       # %bb.0: # %entry1441; AVX512VLVBMI2-NEXT:    vpbroadcastd %edx, %ymm01442; AVX512VLVBMI2-NEXT:    vpbroadcastd %ecx, %ymm11443; AVX512VLVBMI2-NEXT:    movq $-1024, %rax # imm = 0xFC001444; AVX512VLVBMI2-NEXT:    .p2align 41445; AVX512VLVBMI2-NEXT:  .LBB8_1: # %loop1446; AVX512VLVBMI2-NEXT:    # =>This Inner Loop Header: Depth=11447; AVX512VLVBMI2-NEXT:    vmovq {{.*#+}} xmm2 = mem[0],zero1448; AVX512VLVBMI2-NEXT:    vptestnmb %xmm2, %xmm2, %k11449; AVX512VLVBMI2-NEXT:    vpblendmd %ymm0, %ymm1, %ymm2 {%k1}1450; AVX512VLVBMI2-NEXT:    vmovdqu 4096(%rdi,%rax,4), %ymm31451; AVX512VLVBMI2-NEXT:    vprolvd %ymm2, %ymm3, %ymm21452; AVX512VLVBMI2-NEXT:    vmovdqu %ymm2, 4096(%rdi,%rax,4)1453; AVX512VLVBMI2-NEXT:    addq $8, %rax1454; AVX512VLVBMI2-NEXT:    jne .LBB8_11455; AVX512VLVBMI2-NEXT:  # %bb.2: # %exit1456; AVX512VLVBMI2-NEXT:    vzeroupper1457; AVX512VLVBMI2-NEXT:    retq1458;1459; XOPAVX1-LABEL: fancierRotate2:1460; XOPAVX1:       # %bb.0: # %entry1461; XOPAVX1-NEXT:    vmovd %edx, %xmm01462; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]1463; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm01464; XOPAVX1-NEXT:    vmovd %ecx, %xmm11465; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,0,0,0]1466; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm1, %ymm11467; XOPAVX1-NEXT:    movq $-1024, %rax # imm = 0xFC001468; XOPAVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm21469; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31470; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm41471; XOPAVX1-NEXT:    .p2align 41472; XOPAVX1-NEXT:  .LBB8_1: # %loop1473; XOPAVX1-NEXT:    # =>This Inner Loop Header: Depth=11474; XOPAVX1-NEXT:    vmovq {{.*#+}} xmm5 = mem[0],zero1475; XOPAVX1-NEXT:    vpcomeqb %xmm2, %xmm5, %xmm51476; XOPAVX1-NEXT:    vpmovsxbd %xmm5, %xmm61477; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm5 = xmm5[1,1,1,1]1478; XOPAVX1-NEXT:    vpmovsxbd %xmm5, %xmm51479; XOPAVX1-NEXT:    vblendvps %xmm5, %xmm3, %xmm4, %xmm51480; XOPAVX1-NEXT:    vprotd %xmm5, 4112(%rdi,%rax,4), %xmm51481; XOPAVX1-NEXT:    vblendvps %xmm6, %xmm0, %xmm1, %xmm61482; XOPAVX1-NEXT:    vprotd %xmm6, 4096(%rdi,%rax,4), %xmm61483; XOPAVX1-NEXT:    vmovdqu %xmm6, 4096(%rdi,%rax,4)1484; XOPAVX1-NEXT:    vmovdqu %xmm5, 4112(%rdi,%rax,4)1485; XOPAVX1-NEXT:    addq $8, %rax1486; XOPAVX1-NEXT:    jne .LBB8_11487; XOPAVX1-NEXT:  # %bb.2: # %exit1488; XOPAVX1-NEXT:    vzeroupper1489; XOPAVX1-NEXT:    retq1490;1491; XOPAVX2-LABEL: fancierRotate2:1492; XOPAVX2:       # %bb.0: # %entry1493; XOPAVX2-NEXT:    vmovd %edx, %xmm01494; XOPAVX2-NEXT:    vpbroadcastd %xmm0, %ymm01495; XOPAVX2-NEXT:    vmovd %ecx, %xmm11496; XOPAVX2-NEXT:    vpbroadcastd %xmm1, %ymm11497; XOPAVX2-NEXT:    movq $-1024, %rax # imm = 0xFC001498; XOPAVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm21499; XOPAVX2-NEXT:    .p2align 41500; XOPAVX2-NEXT:  .LBB8_1: # %loop1501; XOPAVX2-NEXT:    # =>This Inner Loop Header: Depth=11502; XOPAVX2-NEXT:    vpmovzxbd {{.*#+}} ymm3 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero1503; XOPAVX2-NEXT:    vpcmpeqd %ymm2, %ymm3, %ymm31504; XOPAVX2-NEXT:    vblendvps %ymm3, %ymm0, %ymm1, %ymm31505; XOPAVX2-NEXT:    vextractf128 $1, %ymm3, %xmm41506; XOPAVX2-NEXT:    vprotd %xmm4, 4112(%rdi,%rax,4), %xmm41507; XOPAVX2-NEXT:    vprotd %xmm3, 4096(%rdi,%rax,4), %xmm31508; XOPAVX2-NEXT:    vmovdqu %xmm3, 4096(%rdi,%rax,4)1509; XOPAVX2-NEXT:    vmovdqu %xmm4, 4112(%rdi,%rax,4)1510; XOPAVX2-NEXT:    addq $8, %rax1511; XOPAVX2-NEXT:    jne .LBB8_11512; XOPAVX2-NEXT:  # %bb.2: # %exit1513; XOPAVX2-NEXT:    vzeroupper1514; XOPAVX2-NEXT:    retq1515entry:1516  %i0 = insertelement <8 x i32> undef, i32 %rot0, i32 01517  %s0 = shufflevector <8 x i32> %i0, <8 x i32> undef, <8 x i32> zeroinitializer1518  %i1 = insertelement <8 x i32> undef, i32 %rot1, i32 01519  %s1 = shufflevector <8 x i32> %i1, <8 x i32> undef, <8 x i32> zeroinitializer1520  br label %loop1521 1522loop:1523  %index = phi i64 [ 0, %entry ], [ %index.next, %loop ]1524  %t0 = getelementptr inbounds i8, ptr %control, i64 %index1525  %wide.load = load <8 x i8>, ptr %t0, align 11526  %t2 = icmp eq <8 x i8> %wide.load, zeroinitializer1527  %shamt = select <8 x i1> %t2, <8 x i32> %s0, <8 x i32> %s11528  %t4 = getelementptr inbounds i32, ptr %arr, i64 %index1529  %wide.load21 = load <8 x i32>, ptr %t4, align 41530  %rot = call <8 x i32> @llvm.fshl.v8i32(<8 x i32> %wide.load21, <8 x i32> %wide.load21, <8 x i32> %shamt)1531  store <8 x i32> %rot, ptr %t4, align 41532  %index.next = add i64 %index, 81533  %t7 = icmp eq i64 %index.next, 10241534  br i1 %t7, label %exit, label %loop1535 1536exit:1537  ret void1538}1539 1540;1541; Constant Shifts1542;1543 1544define <4 x i64> @constant_funnnel_v4i64(<4 x i64> %x, <4 x i64> %y) nounwind {1545; AVX1-LABEL: constant_funnnel_v4i64:1546; AVX1:       # %bb.0:1547; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm21548; AVX1-NEXT:    vpsrlq $4, %xmm2, %xmm31549; AVX1-NEXT:    vpsrlq $14, %xmm2, %xmm21550; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm3[4,5,6,7]1551; AVX1-NEXT:    vpsrlq $50, %xmm1, %xmm31552; AVX1-NEXT:    vpsrlq $60, %xmm1, %xmm11553; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm3[4,5,6,7]1554; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm11555; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm21556; AVX1-NEXT:    vpsllq $60, %xmm2, %xmm31557; AVX1-NEXT:    vpsllq $50, %xmm2, %xmm21558; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm3[4,5,6,7]1559; AVX1-NEXT:    vpsllq $14, %xmm0, %xmm31560; AVX1-NEXT:    vpsllq $4, %xmm0, %xmm01561; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm3[4,5,6,7]1562; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01563; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01564; AVX1-NEXT:    retq1565;1566; AVX2-LABEL: constant_funnnel_v4i64:1567; AVX2:       # %bb.0:1568; AVX2-NEXT:    vpsrlvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11569; AVX2-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01570; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01571; AVX2-NEXT:    retq1572;1573; AVX512F-LABEL: constant_funnnel_v4i64:1574; AVX512F:       # %bb.0:1575; AVX512F-NEXT:    vpsrlvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11576; AVX512F-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01577; AVX512F-NEXT:    vpor %ymm1, %ymm0, %ymm01578; AVX512F-NEXT:    retq1579;1580; AVX512VL-LABEL: constant_funnnel_v4i64:1581; AVX512VL:       # %bb.0:1582; AVX512VL-NEXT:    vpsrlvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11583; AVX512VL-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01584; AVX512VL-NEXT:    vpor %ymm1, %ymm0, %ymm01585; AVX512VL-NEXT:    retq1586;1587; AVX512BW-LABEL: constant_funnnel_v4i64:1588; AVX512BW:       # %bb.0:1589; AVX512BW-NEXT:    vpsrlvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11590; AVX512BW-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01591; AVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm01592; AVX512BW-NEXT:    retq1593;1594; AVX512VBMI2-LABEL: constant_funnnel_v4i64:1595; AVX512VBMI2:       # %bb.0:1596; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm11597; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01598; AVX512VBMI2-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [4,14,50,60]1599; AVX512VBMI2-NEXT:    vpshldvq %zmm2, %zmm1, %zmm01600; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01601; AVX512VBMI2-NEXT:    retq1602;1603; AVX512VLBW-LABEL: constant_funnnel_v4i64:1604; AVX512VLBW:       # %bb.0:1605; AVX512VLBW-NEXT:    vpsrlvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11606; AVX512VLBW-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01607; AVX512VLBW-NEXT:    vpor %ymm1, %ymm0, %ymm01608; AVX512VLBW-NEXT:    retq1609;1610; AVX512VLVBMI2-LABEL: constant_funnnel_v4i64:1611; AVX512VLVBMI2:       # %bb.0:1612; AVX512VLVBMI2-NEXT:    vpshldvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm01613; AVX512VLVBMI2-NEXT:    retq1614;1615; XOPAVX1-LABEL: constant_funnnel_v4i64:1616; XOPAVX1:       # %bb.0:1617; XOPAVX1-NEXT:    vpshlq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm21618; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm11619; XOPAVX1-NEXT:    vpshlq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11620; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm11621; XOPAVX1-NEXT:    vpshlq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm21622; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01623; XOPAVX1-NEXT:    vpshlq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01624; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm01625; XOPAVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01626; XOPAVX1-NEXT:    retq1627;1628; XOPAVX2-LABEL: constant_funnnel_v4i64:1629; XOPAVX2:       # %bb.0:1630; XOPAVX2-NEXT:    vpsrlvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11631; XOPAVX2-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01632; XOPAVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01633; XOPAVX2-NEXT:    retq1634  %res = call <4 x i64> @llvm.fshl.v4i64(<4 x i64> %x, <4 x i64> %y, <4 x i64> <i64 4, i64 14, i64 50, i64 60>)1635  ret <4 x i64> %res1636}1637 1638define <8 x i32> @constant_funnnel_v8i32(<8 x i32> %x, <8 x i32> %y) nounwind {1639; AVX1-LABEL: constant_funnnel_v8i32:1640; AVX1:       # %bb.0:1641; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm21642; AVX1-NEXT:    vpsrld $21, %xmm2, %xmm31643; AVX1-NEXT:    vpsrld $23, %xmm2, %xmm41644; AVX1-NEXT:    vpblendw {{.*#+}} xmm3 = xmm4[0,1,2,3],xmm3[4,5,6,7]1645; AVX1-NEXT:    vpsrld $22, %xmm2, %xmm41646; AVX1-NEXT:    vpsrld $24, %xmm2, %xmm21647; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm4[4,5,6,7]1648; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1],xmm3[2,3],xmm2[4,5],xmm3[6,7]1649; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31650; AVX1-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3, %xmm3 # [256,512,1024,2048]1651; AVX1-NEXT:    vpor %xmm2, %xmm3, %xmm21652; AVX1-NEXT:    vpsrld $25, %xmm1, %xmm31653; AVX1-NEXT:    vpsrld $27, %xmm1, %xmm41654; AVX1-NEXT:    vpblendw {{.*#+}} xmm3 = xmm4[0,1,2,3],xmm3[4,5,6,7]1655; AVX1-NEXT:    vpsrld $26, %xmm1, %xmm41656; AVX1-NEXT:    vpsrld $28, %xmm1, %xmm11657; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm4[4,5,6,7]1658; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm3[2,3],xmm1[4,5],xmm3[6,7]1659; AVX1-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [16,32,64,128]1660; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm01661; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01662; AVX1-NEXT:    retq1663;1664; AVX2-LABEL: constant_funnnel_v8i32:1665; AVX2:       # %bb.0:1666; AVX2-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11667; AVX2-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01668; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01669; AVX2-NEXT:    retq1670;1671; AVX512F-LABEL: constant_funnnel_v8i32:1672; AVX512F:       # %bb.0:1673; AVX512F-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11674; AVX512F-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01675; AVX512F-NEXT:    vpor %ymm1, %ymm0, %ymm01676; AVX512F-NEXT:    retq1677;1678; AVX512VL-LABEL: constant_funnnel_v8i32:1679; AVX512VL:       # %bb.0:1680; AVX512VL-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11681; AVX512VL-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01682; AVX512VL-NEXT:    vpor %ymm1, %ymm0, %ymm01683; AVX512VL-NEXT:    retq1684;1685; AVX512BW-LABEL: constant_funnnel_v8i32:1686; AVX512BW:       # %bb.0:1687; AVX512BW-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11688; AVX512BW-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01689; AVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm01690; AVX512BW-NEXT:    retq1691;1692; AVX512VBMI2-LABEL: constant_funnnel_v8i32:1693; AVX512VBMI2:       # %bb.0:1694; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm11695; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01696; AVX512VBMI2-NEXT:    vpmovsxbd {{.*#+}} ymm2 = [4,5,6,7,8,9,10,11]1697; AVX512VBMI2-NEXT:    vpshldvd %zmm2, %zmm1, %zmm01698; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01699; AVX512VBMI2-NEXT:    retq1700;1701; AVX512VLBW-LABEL: constant_funnnel_v8i32:1702; AVX512VLBW:       # %bb.0:1703; AVX512VLBW-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11704; AVX512VLBW-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01705; AVX512VLBW-NEXT:    vpor %ymm1, %ymm0, %ymm01706; AVX512VLBW-NEXT:    retq1707;1708; AVX512VLVBMI2-LABEL: constant_funnnel_v8i32:1709; AVX512VLVBMI2:       # %bb.0:1710; AVX512VLVBMI2-NEXT:    vpshldvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm01711; AVX512VLVBMI2-NEXT:    retq1712;1713; XOPAVX1-LABEL: constant_funnnel_v8i32:1714; XOPAVX1:       # %bb.0:1715; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm21716; XOPAVX1-NEXT:    vpshld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21717; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31718; XOPAVX1-NEXT:    vpshld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3, %xmm31719; XOPAVX1-NEXT:    vpor %xmm2, %xmm3, %xmm21720; XOPAVX1-NEXT:    vpshld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11721; XOPAVX1-NEXT:    vpshld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01722; XOPAVX1-NEXT:    vpor %xmm1, %xmm0, %xmm01723; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01724; XOPAVX1-NEXT:    retq1725;1726; XOPAVX2-LABEL: constant_funnnel_v8i32:1727; XOPAVX2:       # %bb.0:1728; XOPAVX2-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11729; XOPAVX2-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01730; XOPAVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01731; XOPAVX2-NEXT:    retq1732  %res = call <8 x i32> @llvm.fshl.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>)1733  ret <8 x i32> %res1734}1735 1736define <16 x i16> @constant_funnnel_v16i16(<16 x i16> %x, <16 x i16> %y) nounwind {1737; AVX1-LABEL: constant_funnnel_v16i16:1738; AVX1:       # %bb.0:1739; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm21740; AVX1-NEXT:    vpsrlw $1, %xmm2, %xmm21741; AVX1-NEXT:    vpmulhuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm3 # [512,1024,2048,4096,8192,16384,32768,u]1742; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm3[0,1,2,3,4,5,6],xmm2[7]1743; AVX1-NEXT:    vpsrlw $1, %xmm1, %xmm11744; AVX1-NEXT:    vpmulhuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1 # [2,4,8,16,32,64,128,256]1745; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm11746; AVX1-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm2 # [1,2,4,8,16,32,64,128]1747; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01748; AVX1-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [256,512,1024,2048,4096,8192,16384,32768]1749; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm01750; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01751; AVX1-NEXT:    retq1752;1753; AVX2-LABEL: constant_funnnel_v16i16:1754; AVX2:       # %bb.0:1755; AVX2-NEXT:    vpsrlw $1, %ymm1, %ymm11756; AVX2-NEXT:    vpmulhuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm2 # [2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,u]1757; AVX2-NEXT:    vpblendw {{.*#+}} ymm1 = ymm2[0,1,2,3,4,5,6],ymm1[7],ymm2[8,9,10,11,12,13,14],ymm1[15]1758; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]1759; AVX2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768]1760; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01761; AVX2-NEXT:    retq1762;1763; AVX512F-LABEL: constant_funnnel_v16i16:1764; AVX512F:       # %bb.0:1765; AVX512F-NEXT:    vpsrlw $1, %ymm1, %ymm11766; AVX512F-NEXT:    vpmulhuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm2 # [2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,u]1767; AVX512F-NEXT:    vpblendw {{.*#+}} ymm1 = ymm2[0,1,2,3,4,5,6],ymm1[7],ymm2[8,9,10,11,12,13,14],ymm1[15]1768; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]1769; AVX512F-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768]1770; AVX512F-NEXT:    vpor %ymm1, %ymm0, %ymm01771; AVX512F-NEXT:    retq1772;1773; AVX512VL-LABEL: constant_funnnel_v16i16:1774; AVX512VL:       # %bb.0:1775; AVX512VL-NEXT:    vpsrlw $1, %ymm1, %ymm11776; AVX512VL-NEXT:    vpmulhuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm2 # [2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,u]1777; AVX512VL-NEXT:    vpblendw {{.*#+}} ymm1 = ymm2[0,1,2,3,4,5,6],ymm1[7],ymm2[8,9,10,11,12,13,14],ymm1[15]1778; AVX512VL-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]1779; AVX512VL-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768]1780; AVX512VL-NEXT:    vpor %ymm1, %ymm0, %ymm01781; AVX512VL-NEXT:    retq1782;1783; AVX512BW-LABEL: constant_funnnel_v16i16:1784; AVX512BW:       # %bb.0:1785; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01786; AVX512BW-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]1787; AVX512BW-NEXT:    vpsllvw %zmm2, %zmm0, %zmm01788; AVX512BW-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0]1789; AVX512BW-NEXT:    vpsrlw $1, %ymm1, %ymm11790; AVX512BW-NEXT:    vpsrlvw %zmm2, %zmm1, %zmm11791; AVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm01792; AVX512BW-NEXT:    retq1793;1794; AVX512VBMI2-LABEL: constant_funnnel_v16i16:1795; AVX512VBMI2:       # %bb.0:1796; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm11797; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01798; AVX512VBMI2-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]1799; AVX512VBMI2-NEXT:    vpshldvw %zmm2, %zmm1, %zmm01800; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01801; AVX512VBMI2-NEXT:    retq1802;1803; AVX512VLBW-LABEL: constant_funnnel_v16i16:1804; AVX512VLBW:       # %bb.0:1805; AVX512VLBW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01806; AVX512VLBW-NEXT:    vpsrlw $1, %ymm1, %ymm11807; AVX512VLBW-NEXT:    vpsrlvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11808; AVX512VLBW-NEXT:    vpor %ymm1, %ymm0, %ymm01809; AVX512VLBW-NEXT:    retq1810;1811; AVX512VLVBMI2-LABEL: constant_funnnel_v16i16:1812; AVX512VLVBMI2:       # %bb.0:1813; AVX512VLVBMI2-NEXT:    vpshldvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm01814; AVX512VLVBMI2-NEXT:    retq1815;1816; XOPAVX1-LABEL: constant_funnnel_v16i16:1817; XOPAVX1:       # %bb.0:1818; XOPAVX1-NEXT:    vpshlw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm21819; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01820; XOPAVX1-NEXT:    vpshlw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01821; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm01822; XOPAVX1-NEXT:    vpsrlw $1, %xmm1, %xmm21823; XOPAVX1-NEXT:    vpshlw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21824; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm11825; XOPAVX1-NEXT:    vpsrlw $1, %xmm1, %xmm11826; XOPAVX1-NEXT:    vpshlw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11827; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm11828; XOPAVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01829; XOPAVX1-NEXT:    retq1830;1831; XOPAVX2-LABEL: constant_funnnel_v16i16:1832; XOPAVX2:       # %bb.0:1833; XOPAVX2-NEXT:    vpsrlw $1, %ymm1, %ymm11834; XOPAVX2-NEXT:    vpmulhuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm2 # [2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,u]1835; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm1 = ymm2[0,1,2,3,4,5,6],ymm1[7],ymm2[8,9,10,11,12,13,14],ymm1[15]1836; XOPAVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]1837; XOPAVX2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768]1838; XOPAVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01839; XOPAVX2-NEXT:    retq1840  %res = call <16 x i16> @llvm.fshl.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>)1841  ret <16 x i16> %res1842}1843 1844define <32 x i8> @constant_funnnel_v32i8(<32 x i8> %x, <32 x i8> %y) nounwind {1845; AVX1-LABEL: constant_funnnel_v32i8:1846; AVX1:       # %bb.0:1847; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm21848; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm31849; AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm4 = xmm3[8],xmm2[8],xmm3[9],xmm2[9],xmm3[10],xmm2[10],xmm3[11],xmm2[11],xmm3[12],xmm2[12],xmm3[13],xmm2[13],xmm3[14],xmm2[14],xmm3[15],xmm2[15]1850; AVX1-NEXT:    vpmovzxbw {{.*#+}} xmm5 = [1,128,64,32,16,8,4,2]1851; AVX1-NEXT:    vpmullw %xmm5, %xmm4, %xmm41852; AVX1-NEXT:    vpsrlw $8, %xmm4, %xmm41853; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3],xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]1854; AVX1-NEXT:    vpmovzxbw {{.*#+}} xmm3 = [1,2,4,8,16,32,64,128]1855; AVX1-NEXT:    vpmullw %xmm3, %xmm2, %xmm21856; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm21857; AVX1-NEXT:    vpackuswb %xmm4, %xmm2, %xmm21858; 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]1859; AVX1-NEXT:    vpmullw %xmm5, %xmm4, %xmm41860; AVX1-NEXT:    vpsrlw $8, %xmm4, %xmm41861; 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]1862; AVX1-NEXT:    vpmullw %xmm3, %xmm0, %xmm01863; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm01864; AVX1-NEXT:    vpackuswb %xmm4, %xmm0, %xmm01865; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01866; AVX1-NEXT:    retq1867;1868; AVX2-LABEL: constant_funnnel_v32i8:1869; AVX2:       # %bb.0:1870; AVX2-NEXT:    vpunpckhbw {{.*#+}} ymm2 = 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]1871; AVX2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2 # [1,128,64,32,16,8,4,2,1,128,64,32,16,8,4,2]1872; AVX2-NEXT:    vpsrlw $8, %ymm2, %ymm21873; 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]1874; AVX2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]1875; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm01876; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm01877; AVX2-NEXT:    retq1878;1879; AVX512F-LABEL: constant_funnnel_v32i8:1880; AVX512F:       # %bb.0:1881; AVX512F-NEXT:    vpunpckhbw {{.*#+}} ymm2 = 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]1882; AVX512F-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2 # [1,128,64,32,16,8,4,2,1,128,64,32,16,8,4,2]1883; AVX512F-NEXT:    vpsrlw $8, %ymm2, %ymm21884; 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]1885; AVX512F-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]1886; AVX512F-NEXT:    vpsrlw $8, %ymm0, %ymm01887; AVX512F-NEXT:    vpackuswb %ymm2, %ymm0, %ymm01888; AVX512F-NEXT:    retq1889;1890; AVX512VL-LABEL: constant_funnnel_v32i8:1891; AVX512VL:       # %bb.0:1892; AVX512VL-NEXT:    vpunpckhbw {{.*#+}} ymm2 = 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]1893; AVX512VL-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2 # [1,128,64,32,16,8,4,2,1,128,64,32,16,8,4,2]1894; AVX512VL-NEXT:    vpsrlw $8, %ymm2, %ymm21895; 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]1896; AVX512VL-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]1897; AVX512VL-NEXT:    vpsrlw $8, %ymm0, %ymm01898; AVX512VL-NEXT:    vpackuswb %ymm2, %ymm0, %ymm01899; AVX512VL-NEXT:    retq1900;1901; AVX512BW-LABEL: constant_funnnel_v32i8:1902; AVX512BW:       # %bb.0:1903; 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],zero1904; 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],zero1905; AVX512BW-NEXT:    vpsllw $8, %zmm0, %zmm01906; AVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm01907; AVX512BW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm01908; AVX512BW-NEXT:    vpsrlw $8, %zmm0, %zmm01909; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm01910; AVX512BW-NEXT:    retq1911;1912; AVX512VBMI2-LABEL: constant_funnnel_v32i8:1913; AVX512VBMI2:       # %bb.0:1914; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm11915; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01916; 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]1917; AVX512VBMI2-NEXT:    vpermi2b %zmm0, %zmm1, %zmm21918; AVX512VBMI2-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm2, %zmm01919; AVX512VBMI2-NEXT:    vpsrlw $8, %zmm0, %zmm01920; AVX512VBMI2-NEXT:    vpmovwb %zmm0, %ymm01921; AVX512VBMI2-NEXT:    retq1922;1923; AVX512VLBW-LABEL: constant_funnnel_v32i8:1924; AVX512VLBW:       # %bb.0:1925; 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],zero1926; 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],zero1927; AVX512VLBW-NEXT:    vpsllw $8, %zmm0, %zmm01928; AVX512VLBW-NEXT:    vporq %zmm1, %zmm0, %zmm01929; AVX512VLBW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm01930; AVX512VLBW-NEXT:    vpsrlw $8, %zmm0, %zmm01931; AVX512VLBW-NEXT:    vpmovwb %zmm0, %ymm01932; AVX512VLBW-NEXT:    retq1933;1934; AVX512VLVBMI2-LABEL: constant_funnnel_v32i8:1935; AVX512VLVBMI2:       # %bb.0:1936; AVX512VLVBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm11937; AVX512VLVBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01938; 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]1939; AVX512VLVBMI2-NEXT:    vpermi2b %zmm0, %zmm1, %zmm21940; AVX512VLVBMI2-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm2, %zmm01941; AVX512VLVBMI2-NEXT:    vpsrlw $8, %zmm0, %zmm01942; AVX512VLVBMI2-NEXT:    vpmovwb %zmm0, %ymm01943; AVX512VLVBMI2-NEXT:    retq1944;1945; XOPAVX1-LABEL: constant_funnnel_v32i8:1946; XOPAVX1:       # %bb.0:1947; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm21948; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,2,3,4,5,6,7,0,7,6,5,4,3,2,1]1949; XOPAVX1-NEXT:    vpshlb %xmm3, %xmm2, %xmm21950; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm41951; XOPAVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm51952; XOPAVX1-NEXT:    vpshlb %xmm5, %xmm4, %xmm41953; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [249,250,251,252,253,254,255,0,249,0,255,254,253,252,251,250]1954; XOPAVX1-NEXT:    vpshlb %xmm6, %xmm4, %xmm41955; XOPAVX1-NEXT:    vpor %xmm4, %xmm2, %xmm21956; XOPAVX1-NEXT:    vpshlb %xmm3, %xmm0, %xmm01957; XOPAVX1-NEXT:    vpshlb %xmm5, %xmm1, %xmm11958; XOPAVX1-NEXT:    vpshlb %xmm6, %xmm1, %xmm11959; XOPAVX1-NEXT:    vpor %xmm1, %xmm0, %xmm01960; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01961; XOPAVX1-NEXT:    retq1962;1963; XOPAVX2-LABEL: constant_funnnel_v32i8:1964; XOPAVX2:       # %bb.0:1965; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm21966; XOPAVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,2,3,4,5,6,7,0,7,6,5,4,3,2,1]1967; XOPAVX2-NEXT:    vpshlb %xmm3, %xmm2, %xmm21968; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm41969; XOPAVX2-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm51970; XOPAVX2-NEXT:    vpshlb %xmm5, %xmm4, %xmm41971; XOPAVX2-NEXT:    vmovdqa {{.*#+}} xmm6 = [249,250,251,252,253,254,255,0,249,0,255,254,253,252,251,250]1972; XOPAVX2-NEXT:    vpshlb %xmm6, %xmm4, %xmm41973; XOPAVX2-NEXT:    vpor %xmm4, %xmm2, %xmm21974; XOPAVX2-NEXT:    vpshlb %xmm3, %xmm0, %xmm01975; XOPAVX2-NEXT:    vpshlb %xmm5, %xmm1, %xmm11976; XOPAVX2-NEXT:    vpshlb %xmm6, %xmm1, %xmm11977; XOPAVX2-NEXT:    vpor %xmm1, %xmm0, %xmm01978; XOPAVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm01979; XOPAVX2-NEXT:    retq1980  %res = call <32 x i8> @llvm.fshl.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>)1981  ret <32 x i8> %res1982}1983 1984;1985; Uniform Constant Shifts1986;1987 1988define <4 x i64> @splatconstant_funnnel_v4i64(<4 x i64> %x, <4 x i64> %y) nounwind {1989; AVX1-LABEL: splatconstant_funnnel_v4i64:1990; AVX1:       # %bb.0:1991; AVX1-NEXT:    vpsrlq $50, %xmm1, %xmm21992; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm11993; AVX1-NEXT:    vpsrlq $50, %xmm1, %xmm11994; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm11995; AVX1-NEXT:    vpsllq $14, %xmm0, %xmm21996; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01997; AVX1-NEXT:    vpsllq $14, %xmm0, %xmm01998; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm01999; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm02000; AVX1-NEXT:    retq2001;2002; AVX2-LABEL: splatconstant_funnnel_v4i64:2003; AVX2:       # %bb.0:2004; AVX2-NEXT:    vpsrlq $50, %ymm1, %ymm12005; AVX2-NEXT:    vpsllq $14, %ymm0, %ymm02006; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm02007; AVX2-NEXT:    retq2008;2009; AVX512F-LABEL: splatconstant_funnnel_v4i64:2010; AVX512F:       # %bb.0:2011; AVX512F-NEXT:    vpsrlq $50, %ymm1, %ymm12012; AVX512F-NEXT:    vpsllq $14, %ymm0, %ymm02013; AVX512F-NEXT:    vpor %ymm1, %ymm0, %ymm02014; AVX512F-NEXT:    retq2015;2016; AVX512VL-LABEL: splatconstant_funnnel_v4i64:2017; AVX512VL:       # %bb.0:2018; AVX512VL-NEXT:    vpsrlq $50, %ymm1, %ymm12019; AVX512VL-NEXT:    vpsllq $14, %ymm0, %ymm02020; AVX512VL-NEXT:    vpor %ymm1, %ymm0, %ymm02021; AVX512VL-NEXT:    retq2022;2023; AVX512BW-LABEL: splatconstant_funnnel_v4i64:2024; AVX512BW:       # %bb.0:2025; AVX512BW-NEXT:    vpsrlq $50, %ymm1, %ymm12026; AVX512BW-NEXT:    vpsllq $14, %ymm0, %ymm02027; AVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm02028; AVX512BW-NEXT:    retq2029;2030; AVX512VBMI2-LABEL: splatconstant_funnnel_v4i64:2031; AVX512VBMI2:       # %bb.0:2032; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm12033; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm02034; AVX512VBMI2-NEXT:    vpshldq $14, %zmm1, %zmm0, %zmm02035; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm02036; AVX512VBMI2-NEXT:    retq2037;2038; AVX512VLBW-LABEL: splatconstant_funnnel_v4i64:2039; AVX512VLBW:       # %bb.0:2040; AVX512VLBW-NEXT:    vpsrlq $50, %ymm1, %ymm12041; AVX512VLBW-NEXT:    vpsllq $14, %ymm0, %ymm02042; AVX512VLBW-NEXT:    vpor %ymm1, %ymm0, %ymm02043; AVX512VLBW-NEXT:    retq2044;2045; AVX512VLVBMI2-LABEL: splatconstant_funnnel_v4i64:2046; AVX512VLVBMI2:       # %bb.0:2047; AVX512VLVBMI2-NEXT:    vpshldq $14, %ymm1, %ymm0, %ymm02048; AVX512VLVBMI2-NEXT:    retq2049;2050; XOPAVX1-LABEL: splatconstant_funnnel_v4i64:2051; XOPAVX1:       # %bb.0:2052; XOPAVX1-NEXT:    vpsrlq $50, %xmm1, %xmm22053; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm12054; XOPAVX1-NEXT:    vpsrlq $50, %xmm1, %xmm12055; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm12056; XOPAVX1-NEXT:    vpsllq $14, %xmm0, %xmm22057; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02058; XOPAVX1-NEXT:    vpsllq $14, %xmm0, %xmm02059; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm02060; XOPAVX1-NEXT:    vorps %ymm1, %ymm0, %ymm02061; XOPAVX1-NEXT:    retq2062;2063; XOPAVX2-LABEL: splatconstant_funnnel_v4i64:2064; XOPAVX2:       # %bb.0:2065; XOPAVX2-NEXT:    vpsrlq $50, %ymm1, %ymm12066; XOPAVX2-NEXT:    vpsllq $14, %ymm0, %ymm02067; XOPAVX2-NEXT:    vpor %ymm1, %ymm0, %ymm02068; XOPAVX2-NEXT:    retq2069  %res = call <4 x i64> @llvm.fshl.v4i64(<4 x i64> %x, <4 x i64> %y, <4 x i64> <i64 14, i64 14, i64 14, i64 14>)2070  ret <4 x i64> %res2071}2072 2073define <8 x i32> @splatconstant_funnnel_v8i32(<8 x i32> %x, <8 x i32> %y) nounwind {2074; AVX1-LABEL: splatconstant_funnnel_v8i32:2075; AVX1:       # %bb.0:2076; AVX1-NEXT:    vpsrld $28, %xmm1, %xmm22077; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm12078; AVX1-NEXT:    vpsrld $28, %xmm1, %xmm12079; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm12080; AVX1-NEXT:    vpslld $4, %xmm0, %xmm22081; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02082; AVX1-NEXT:    vpslld $4, %xmm0, %xmm02083; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm02084; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm02085; AVX1-NEXT:    retq2086;2087; AVX2-LABEL: splatconstant_funnnel_v8i32:2088; AVX2:       # %bb.0:2089; AVX2-NEXT:    vpsrld $28, %ymm1, %ymm12090; AVX2-NEXT:    vpslld $4, %ymm0, %ymm02091; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm02092; AVX2-NEXT:    retq2093;2094; AVX512F-LABEL: splatconstant_funnnel_v8i32:2095; AVX512F:       # %bb.0:2096; AVX512F-NEXT:    vpsrld $28, %ymm1, %ymm12097; AVX512F-NEXT:    vpslld $4, %ymm0, %ymm02098; AVX512F-NEXT:    vpor %ymm1, %ymm0, %ymm02099; AVX512F-NEXT:    retq2100;2101; AVX512VL-LABEL: splatconstant_funnnel_v8i32:2102; AVX512VL:       # %bb.0:2103; AVX512VL-NEXT:    vpsrld $28, %ymm1, %ymm12104; AVX512VL-NEXT:    vpslld $4, %ymm0, %ymm02105; AVX512VL-NEXT:    vpor %ymm1, %ymm0, %ymm02106; AVX512VL-NEXT:    retq2107;2108; AVX512BW-LABEL: splatconstant_funnnel_v8i32:2109; AVX512BW:       # %bb.0:2110; AVX512BW-NEXT:    vpsrld $28, %ymm1, %ymm12111; AVX512BW-NEXT:    vpslld $4, %ymm0, %ymm02112; AVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm02113; AVX512BW-NEXT:    retq2114;2115; AVX512VBMI2-LABEL: splatconstant_funnnel_v8i32:2116; AVX512VBMI2:       # %bb.0:2117; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm12118; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm02119; AVX512VBMI2-NEXT:    vpshldd $4, %zmm1, %zmm0, %zmm02120; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm02121; AVX512VBMI2-NEXT:    retq2122;2123; AVX512VLBW-LABEL: splatconstant_funnnel_v8i32:2124; AVX512VLBW:       # %bb.0:2125; AVX512VLBW-NEXT:    vpsrld $28, %ymm1, %ymm12126; AVX512VLBW-NEXT:    vpslld $4, %ymm0, %ymm02127; AVX512VLBW-NEXT:    vpor %ymm1, %ymm0, %ymm02128; AVX512VLBW-NEXT:    retq2129;2130; AVX512VLVBMI2-LABEL: splatconstant_funnnel_v8i32:2131; AVX512VLVBMI2:       # %bb.0:2132; AVX512VLVBMI2-NEXT:    vpshldd $4, %ymm1, %ymm0, %ymm02133; AVX512VLVBMI2-NEXT:    retq2134;2135; XOPAVX1-LABEL: splatconstant_funnnel_v8i32:2136; XOPAVX1:       # %bb.0:2137; XOPAVX1-NEXT:    vpsrld $28, %xmm1, %xmm22138; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm12139; XOPAVX1-NEXT:    vpsrld $28, %xmm1, %xmm12140; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm12141; XOPAVX1-NEXT:    vpslld $4, %xmm0, %xmm22142; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02143; XOPAVX1-NEXT:    vpslld $4, %xmm0, %xmm02144; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm02145; XOPAVX1-NEXT:    vorps %ymm1, %ymm0, %ymm02146; XOPAVX1-NEXT:    retq2147;2148; XOPAVX2-LABEL: splatconstant_funnnel_v8i32:2149; XOPAVX2:       # %bb.0:2150; XOPAVX2-NEXT:    vpsrld $28, %ymm1, %ymm12151; XOPAVX2-NEXT:    vpslld $4, %ymm0, %ymm02152; XOPAVX2-NEXT:    vpor %ymm1, %ymm0, %ymm02153; XOPAVX2-NEXT:    retq2154  %res = call <8 x i32> @llvm.fshl.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>)2155  ret <8 x i32> %res2156}2157 2158define <16 x i16> @splatconstant_funnnel_v16i16(<16 x i16> %x, <16 x i16> %y) nounwind {2159; AVX1-LABEL: splatconstant_funnnel_v16i16:2160; AVX1:       # %bb.0:2161; AVX1-NEXT:    vpsrlw $9, %xmm1, %xmm22162; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm12163; AVX1-NEXT:    vpsrlw $9, %xmm1, %xmm12164; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm12165; AVX1-NEXT:    vpsllw $7, %xmm0, %xmm22166; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02167; AVX1-NEXT:    vpsllw $7, %xmm0, %xmm02168; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm02169; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm02170; AVX1-NEXT:    retq2171;2172; AVX2-LABEL: splatconstant_funnnel_v16i16:2173; AVX2:       # %bb.0:2174; AVX2-NEXT:    vpsrlw $9, %ymm1, %ymm12175; AVX2-NEXT:    vpsllw $7, %ymm0, %ymm02176; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm02177; AVX2-NEXT:    retq2178;2179; AVX512F-LABEL: splatconstant_funnnel_v16i16:2180; AVX512F:       # %bb.0:2181; AVX512F-NEXT:    vpsrlw $9, %ymm1, %ymm12182; AVX512F-NEXT:    vpsllw $7, %ymm0, %ymm02183; AVX512F-NEXT:    vpor %ymm1, %ymm0, %ymm02184; AVX512F-NEXT:    retq2185;2186; AVX512VL-LABEL: splatconstant_funnnel_v16i16:2187; AVX512VL:       # %bb.0:2188; AVX512VL-NEXT:    vpsrlw $9, %ymm1, %ymm12189; AVX512VL-NEXT:    vpsllw $7, %ymm0, %ymm02190; AVX512VL-NEXT:    vpor %ymm1, %ymm0, %ymm02191; AVX512VL-NEXT:    retq2192;2193; AVX512BW-LABEL: splatconstant_funnnel_v16i16:2194; AVX512BW:       # %bb.0:2195; AVX512BW-NEXT:    vpsrlw $9, %ymm1, %ymm12196; AVX512BW-NEXT:    vpsllw $7, %ymm0, %ymm02197; AVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm02198; AVX512BW-NEXT:    retq2199;2200; AVX512VBMI2-LABEL: splatconstant_funnnel_v16i16:2201; AVX512VBMI2:       # %bb.0:2202; AVX512VBMI2-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm12203; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm02204; AVX512VBMI2-NEXT:    vpshldw $7, %zmm1, %zmm0, %zmm02205; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm02206; AVX512VBMI2-NEXT:    retq2207;2208; AVX512VLBW-LABEL: splatconstant_funnnel_v16i16:2209; AVX512VLBW:       # %bb.0:2210; AVX512VLBW-NEXT:    vpsrlw $9, %ymm1, %ymm12211; AVX512VLBW-NEXT:    vpsllw $7, %ymm0, %ymm02212; AVX512VLBW-NEXT:    vpor %ymm1, %ymm0, %ymm02213; AVX512VLBW-NEXT:    retq2214;2215; AVX512VLVBMI2-LABEL: splatconstant_funnnel_v16i16:2216; AVX512VLVBMI2:       # %bb.0:2217; AVX512VLVBMI2-NEXT:    vpshldw $7, %ymm1, %ymm0, %ymm02218; AVX512VLVBMI2-NEXT:    retq2219;2220; XOPAVX1-LABEL: splatconstant_funnnel_v16i16:2221; XOPAVX1:       # %bb.0:2222; XOPAVX1-NEXT:    vpsrlw $9, %xmm1, %xmm22223; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm12224; XOPAVX1-NEXT:    vpsrlw $9, %xmm1, %xmm12225; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm12226; XOPAVX1-NEXT:    vpsllw $7, %xmm0, %xmm22227; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02228; XOPAVX1-NEXT:    vpsllw $7, %xmm0, %xmm02229; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm02230; XOPAVX1-NEXT:    vorps %ymm1, %ymm0, %ymm02231; XOPAVX1-NEXT:    retq2232;2233; XOPAVX2-LABEL: splatconstant_funnnel_v16i16:2234; XOPAVX2:       # %bb.0:2235; XOPAVX2-NEXT:    vpsrlw $9, %ymm1, %ymm12236; XOPAVX2-NEXT:    vpsllw $7, %ymm0, %ymm02237; XOPAVX2-NEXT:    vpor %ymm1, %ymm0, %ymm02238; XOPAVX2-NEXT:    retq2239  %res = call <16 x i16> @llvm.fshl.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>)2240  ret <16 x i16> %res2241}2242 2243define <32 x i8> @splatconstant_funnnel_v32i8(<32 x i8> %x, <32 x i8> %y) nounwind {2244; AVX1-LABEL: splatconstant_funnnel_v32i8:2245; AVX1:       # %bb.0:2246; AVX1-NEXT:    vpsrlw $4, %xmm1, %xmm22247; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm12248; AVX1-NEXT:    vpsrlw $4, %xmm1, %xmm12249; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm12250; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm12251; AVX1-NEXT:    vpsllw $4, %xmm0, %xmm22252; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02253; AVX1-NEXT:    vpsllw $4, %xmm0, %xmm02254; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm02255; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02256; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm02257; AVX1-NEXT:    retq2258;2259; AVX2-LABEL: splatconstant_funnnel_v32i8:2260; AVX2:       # %bb.0:2261; AVX2-NEXT:    vpsrlw $4, %ymm1, %ymm12262; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm12263; AVX2-NEXT:    vpsllw $4, %ymm0, %ymm02264; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02265; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm02266; AVX2-NEXT:    retq2267;2268; AVX512F-LABEL: splatconstant_funnnel_v32i8:2269; AVX512F:       # %bb.0:2270; AVX512F-NEXT:    vpsllw $4, %ymm0, %ymm22271; AVX512F-NEXT:    vpsrlw $4, %ymm1, %ymm02272; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 = zmm0 ^ (m32bcst & (zmm0 ^ zmm2))2273; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm02274; AVX512F-NEXT:    retq2275;2276; AVX512VL-LABEL: splatconstant_funnnel_v32i8:2277; AVX512VL:       # %bb.0:2278; AVX512VL-NEXT:    vpsllw $4, %ymm0, %ymm22279; AVX512VL-NEXT:    vpsrlw $4, %ymm1, %ymm02280; AVX512VL-NEXT:    vpternlogd {{.*#+}} ymm0 = ymm0 ^ (m32bcst & (ymm0 ^ ymm2))2281; AVX512VL-NEXT:    retq2282;2283; AVX512BW-LABEL: splatconstant_funnnel_v32i8:2284; AVX512BW:       # %bb.0:2285; AVX512BW-NEXT:    vpsllw $4, %ymm0, %ymm22286; AVX512BW-NEXT:    vpsrlw $4, %ymm1, %ymm02287; AVX512BW-NEXT:    vpternlogd {{.*#+}} zmm0 = zmm0 ^ (m32bcst & (zmm0 ^ zmm2))2288; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm02289; AVX512BW-NEXT:    retq2290;2291; AVX512VBMI2-LABEL: splatconstant_funnnel_v32i8:2292; AVX512VBMI2:       # %bb.0:2293; AVX512VBMI2-NEXT:    vpsllw $4, %ymm0, %ymm22294; AVX512VBMI2-NEXT:    vpsrlw $4, %ymm1, %ymm02295; AVX512VBMI2-NEXT:    vpternlogd {{.*#+}} zmm0 = zmm0 ^ (m32bcst & (zmm0 ^ zmm2))2296; AVX512VBMI2-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm02297; AVX512VBMI2-NEXT:    retq2298;2299; AVX512VLBW-LABEL: splatconstant_funnnel_v32i8:2300; AVX512VLBW:       # %bb.0:2301; AVX512VLBW-NEXT:    vpsllw $4, %ymm0, %ymm22302; AVX512VLBW-NEXT:    vpsrlw $4, %ymm1, %ymm02303; AVX512VLBW-NEXT:    vpternlogd {{.*#+}} ymm0 = ymm0 ^ (m32bcst & (ymm0 ^ ymm2))2304; AVX512VLBW-NEXT:    retq2305;2306; AVX512VLVBMI2-LABEL: splatconstant_funnnel_v32i8:2307; AVX512VLVBMI2:       # %bb.0:2308; AVX512VLVBMI2-NEXT:    vpsllw $4, %ymm0, %ymm22309; AVX512VLVBMI2-NEXT:    vpsrlw $4, %ymm1, %ymm02310; AVX512VLVBMI2-NEXT:    vpternlogd {{.*#+}} ymm0 = ymm0 ^ (m32bcst & (ymm0 ^ ymm2))2311; AVX512VLVBMI2-NEXT:    retq2312;2313; XOPAVX1-LABEL: splatconstant_funnnel_v32i8:2314; XOPAVX1:       # %bb.0:2315; XOPAVX1-NEXT:    vpsrlw $4, %xmm1, %xmm22316; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm12317; XOPAVX1-NEXT:    vpsrlw $4, %xmm1, %xmm12318; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm12319; XOPAVX1-NEXT:    vpsllw $4, %xmm0, %xmm22320; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02321; XOPAVX1-NEXT:    vpsllw $4, %xmm0, %xmm02322; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm02323; XOPAVX1-NEXT:    vpcmov {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm0, %ymm02324; XOPAVX1-NEXT:    retq2325;2326; XOPAVX2-LABEL: splatconstant_funnnel_v32i8:2327; XOPAVX2:       # %bb.0:2328; XOPAVX2-NEXT:    vpsrlw $4, %ymm1, %ymm12329; XOPAVX2-NEXT:    vpsllw $4, %ymm0, %ymm02330; XOPAVX2-NEXT:    vpcmov {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm0, %ymm02331; XOPAVX2-NEXT:    retq2332  %res = call <32 x i8> @llvm.fshl.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>)2333  ret <32 x i8> %res2334}2335