brintos

brintos / llvm-project-archived public Read only

0
0
Text · 82.7 KiB · 25f8f94 Raw
1215 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefixes=AVX512F3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vl | FileCheck %s --check-prefixes=AVX512VL4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw | FileCheck %s --check-prefixes=AVX512BW5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vbmi,+avx512vbmi2 | FileCheck %s --check-prefixes=AVX512VBMI26; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw,+avx512vl | FileCheck %s --check-prefixes=AVX512VLBW7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vbmi,+avx512vbmi2,+avx512vl | FileCheck %s --check-prefixes=AVX512VLVBMI28 9declare <8 x i64> @llvm.fshr.v8i64(<8 x i64>, <8 x i64>, <8 x i64>)10declare <16 x i32> @llvm.fshr.v16i32(<16 x i32>, <16 x i32>, <16 x i32>)11declare <32 x i16> @llvm.fshr.v32i16(<32 x i16>, <32 x i16>, <32 x i16>)12declare <64 x i8> @llvm.fshr.v64i8(<64 x i8>, <64 x i8>, <64 x i8>)13 14;15; Variable Shifts16;17 18define <8 x i64> @var_funnnel_v8i64(<8 x i64> %x, <8 x i64> %y, <8 x i64> %amt) nounwind {19; AVX512F-LABEL: var_funnnel_v8i64:20; AVX512F:       # %bb.0:21; AVX512F-NEXT:    vpbroadcastq {{.*#+}} zmm3 = [63,63,63,63,63,63,63,63]22; AVX512F-NEXT:    vpandq %zmm3, %zmm2, %zmm423; AVX512F-NEXT:    vpsrlvq %zmm4, %zmm1, %zmm124; AVX512F-NEXT:    vpandnq %zmm3, %zmm2, %zmm225; AVX512F-NEXT:    vpaddq %zmm0, %zmm0, %zmm026; AVX512F-NEXT:    vpsllvq %zmm2, %zmm0, %zmm027; AVX512F-NEXT:    vporq %zmm1, %zmm0, %zmm028; AVX512F-NEXT:    retq29;30; AVX512VL-LABEL: var_funnnel_v8i64:31; AVX512VL:       # %bb.0:32; AVX512VL-NEXT:    vpbroadcastq {{.*#+}} zmm3 = [63,63,63,63,63,63,63,63]33; AVX512VL-NEXT:    vpandq %zmm3, %zmm2, %zmm434; AVX512VL-NEXT:    vpsrlvq %zmm4, %zmm1, %zmm135; AVX512VL-NEXT:    vpandnq %zmm3, %zmm2, %zmm236; AVX512VL-NEXT:    vpaddq %zmm0, %zmm0, %zmm037; AVX512VL-NEXT:    vpsllvq %zmm2, %zmm0, %zmm038; AVX512VL-NEXT:    vporq %zmm1, %zmm0, %zmm039; AVX512VL-NEXT:    retq40;41; AVX512BW-LABEL: var_funnnel_v8i64:42; AVX512BW:       # %bb.0:43; AVX512BW-NEXT:    vpbroadcastq {{.*#+}} zmm3 = [63,63,63,63,63,63,63,63]44; AVX512BW-NEXT:    vpandq %zmm3, %zmm2, %zmm445; AVX512BW-NEXT:    vpsrlvq %zmm4, %zmm1, %zmm146; AVX512BW-NEXT:    vpandnq %zmm3, %zmm2, %zmm247; AVX512BW-NEXT:    vpaddq %zmm0, %zmm0, %zmm048; AVX512BW-NEXT:    vpsllvq %zmm2, %zmm0, %zmm049; AVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm050; AVX512BW-NEXT:    retq51;52; AVX512VBMI2-LABEL: var_funnnel_v8i64:53; AVX512VBMI2:       # %bb.0:54; AVX512VBMI2-NEXT:    vpshrdvq %zmm2, %zmm0, %zmm155; AVX512VBMI2-NEXT:    vmovdqa64 %zmm1, %zmm056; AVX512VBMI2-NEXT:    retq57;58; AVX512VLBW-LABEL: var_funnnel_v8i64:59; AVX512VLBW:       # %bb.0:60; AVX512VLBW-NEXT:    vpbroadcastq {{.*#+}} zmm3 = [63,63,63,63,63,63,63,63]61; AVX512VLBW-NEXT:    vpandq %zmm3, %zmm2, %zmm462; AVX512VLBW-NEXT:    vpsrlvq %zmm4, %zmm1, %zmm163; AVX512VLBW-NEXT:    vpandnq %zmm3, %zmm2, %zmm264; AVX512VLBW-NEXT:    vpaddq %zmm0, %zmm0, %zmm065; AVX512VLBW-NEXT:    vpsllvq %zmm2, %zmm0, %zmm066; AVX512VLBW-NEXT:    vporq %zmm1, %zmm0, %zmm067; AVX512VLBW-NEXT:    retq68;69; AVX512VLVBMI2-LABEL: var_funnnel_v8i64:70; AVX512VLVBMI2:       # %bb.0:71; AVX512VLVBMI2-NEXT:    vpshrdvq %zmm2, %zmm0, %zmm172; AVX512VLVBMI2-NEXT:    vmovdqa64 %zmm1, %zmm073; AVX512VLVBMI2-NEXT:    retq74  %res = call <8 x i64> @llvm.fshr.v8i64(<8 x i64> %x, <8 x i64> %y, <8 x i64> %amt)75  ret <8 x i64> %res76}77 78define <16 x i32> @var_funnnel_v16i32(<16 x i32> %x, <16 x i32> %y, <16 x i32> %amt) nounwind {79; AVX512F-LABEL: var_funnnel_v16i32:80; AVX512F:       # %bb.0:81; AVX512F-NEXT:    vpbroadcastd {{.*#+}} zmm3 = [31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31]82; AVX512F-NEXT:    vpandd %zmm3, %zmm2, %zmm483; AVX512F-NEXT:    vpsrlvd %zmm4, %zmm1, %zmm184; AVX512F-NEXT:    vpandnd %zmm3, %zmm2, %zmm285; AVX512F-NEXT:    vpaddd %zmm0, %zmm0, %zmm086; AVX512F-NEXT:    vpsllvd %zmm2, %zmm0, %zmm087; AVX512F-NEXT:    vpord %zmm1, %zmm0, %zmm088; AVX512F-NEXT:    retq89;90; AVX512VL-LABEL: var_funnnel_v16i32:91; AVX512VL:       # %bb.0:92; AVX512VL-NEXT:    vpbroadcastd {{.*#+}} zmm3 = [31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31]93; AVX512VL-NEXT:    vpandd %zmm3, %zmm2, %zmm494; AVX512VL-NEXT:    vpsrlvd %zmm4, %zmm1, %zmm195; AVX512VL-NEXT:    vpandnd %zmm3, %zmm2, %zmm296; AVX512VL-NEXT:    vpaddd %zmm0, %zmm0, %zmm097; AVX512VL-NEXT:    vpsllvd %zmm2, %zmm0, %zmm098; AVX512VL-NEXT:    vpord %zmm1, %zmm0, %zmm099; AVX512VL-NEXT:    retq100;101; AVX512BW-LABEL: var_funnnel_v16i32:102; AVX512BW:       # %bb.0:103; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} zmm3 = [31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31]104; AVX512BW-NEXT:    vpandd %zmm3, %zmm2, %zmm4105; AVX512BW-NEXT:    vpsrlvd %zmm4, %zmm1, %zmm1106; AVX512BW-NEXT:    vpandnd %zmm3, %zmm2, %zmm2107; AVX512BW-NEXT:    vpaddd %zmm0, %zmm0, %zmm0108; AVX512BW-NEXT:    vpsllvd %zmm2, %zmm0, %zmm0109; AVX512BW-NEXT:    vpord %zmm1, %zmm0, %zmm0110; AVX512BW-NEXT:    retq111;112; AVX512VBMI2-LABEL: var_funnnel_v16i32:113; AVX512VBMI2:       # %bb.0:114; AVX512VBMI2-NEXT:    vpshrdvd %zmm2, %zmm0, %zmm1115; AVX512VBMI2-NEXT:    vmovdqa64 %zmm1, %zmm0116; AVX512VBMI2-NEXT:    retq117;118; AVX512VLBW-LABEL: var_funnnel_v16i32:119; AVX512VLBW:       # %bb.0:120; AVX512VLBW-NEXT:    vpbroadcastd {{.*#+}} zmm3 = [31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31]121; AVX512VLBW-NEXT:    vpandd %zmm3, %zmm2, %zmm4122; AVX512VLBW-NEXT:    vpsrlvd %zmm4, %zmm1, %zmm1123; AVX512VLBW-NEXT:    vpandnd %zmm3, %zmm2, %zmm2124; AVX512VLBW-NEXT:    vpaddd %zmm0, %zmm0, %zmm0125; AVX512VLBW-NEXT:    vpsllvd %zmm2, %zmm0, %zmm0126; AVX512VLBW-NEXT:    vpord %zmm1, %zmm0, %zmm0127; AVX512VLBW-NEXT:    retq128;129; AVX512VLVBMI2-LABEL: var_funnnel_v16i32:130; AVX512VLVBMI2:       # %bb.0:131; AVX512VLVBMI2-NEXT:    vpshrdvd %zmm2, %zmm0, %zmm1132; AVX512VLVBMI2-NEXT:    vmovdqa64 %zmm1, %zmm0133; AVX512VLVBMI2-NEXT:    retq134  %res = call <16 x i32> @llvm.fshr.v16i32(<16 x i32> %x, <16 x i32> %y, <16 x i32> %amt)135  ret <16 x i32> %res136}137 138define <32 x i16> @var_funnnel_v32i16(<32 x i16> %x, <32 x i16> %y, <32 x i16> %amt) nounwind {139; AVX512F-LABEL: var_funnnel_v32i16:140; AVX512F:       # %bb.0:141; AVX512F-NEXT:    vpmovzxwd {{.*#+}} zmm3 = 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],zero142; AVX512F-NEXT:    vpmovzxwd {{.*#+}} zmm4 = 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],zero143; AVX512F-NEXT:    vpslld $16, %zmm4, %zmm4144; AVX512F-NEXT:    vpord %zmm3, %zmm4, %zmm3145; AVX512F-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm2, %zmm2146; AVX512F-NEXT:    vpmovzxwd {{.*#+}} zmm4 = ymm2[0],zero,ymm2[1],zero,ymm2[2],zero,ymm2[3],zero,ymm2[4],zero,ymm2[5],zero,ymm2[6],zero,ymm2[7],zero,ymm2[8],zero,ymm2[9],zero,ymm2[10],zero,ymm2[11],zero,ymm2[12],zero,ymm2[13],zero,ymm2[14],zero,ymm2[15],zero147; AVX512F-NEXT:    vpsrlvd %zmm4, %zmm3, %zmm3148; AVX512F-NEXT:    vpmovdw %zmm3, %ymm3149; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm1150; 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],zero151; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm0152; 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],zero153; AVX512F-NEXT:    vpslld $16, %zmm0, %zmm0154; AVX512F-NEXT:    vpord %zmm1, %zmm0, %zmm0155; AVX512F-NEXT:    vextracti64x4 $1, %zmm2, %ymm1156; 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],zero157; AVX512F-NEXT:    vpsrlvd %zmm1, %zmm0, %zmm0158; AVX512F-NEXT:    vpmovdw %zmm0, %ymm0159; AVX512F-NEXT:    vinserti64x4 $1, %ymm0, %zmm3, %zmm0160; AVX512F-NEXT:    retq161;162; AVX512VL-LABEL: var_funnnel_v32i16:163; AVX512VL:       # %bb.0:164; AVX512VL-NEXT:    vpmovzxwd {{.*#+}} zmm3 = 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],zero165; AVX512VL-NEXT:    vpmovzxwd {{.*#+}} zmm4 = 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],zero166; AVX512VL-NEXT:    vpslld $16, %zmm4, %zmm4167; AVX512VL-NEXT:    vpord %zmm3, %zmm4, %zmm3168; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm2, %zmm2169; AVX512VL-NEXT:    vpmovzxwd {{.*#+}} zmm4 = ymm2[0],zero,ymm2[1],zero,ymm2[2],zero,ymm2[3],zero,ymm2[4],zero,ymm2[5],zero,ymm2[6],zero,ymm2[7],zero,ymm2[8],zero,ymm2[9],zero,ymm2[10],zero,ymm2[11],zero,ymm2[12],zero,ymm2[13],zero,ymm2[14],zero,ymm2[15],zero170; AVX512VL-NEXT:    vpsrlvd %zmm4, %zmm3, %zmm3171; AVX512VL-NEXT:    vpmovdw %zmm3, %ymm3172; AVX512VL-NEXT:    vextracti64x4 $1, %zmm1, %ymm1173; 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],zero174; AVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm0175; 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],zero176; AVX512VL-NEXT:    vpslld $16, %zmm0, %zmm0177; AVX512VL-NEXT:    vpord %zmm1, %zmm0, %zmm0178; AVX512VL-NEXT:    vextracti64x4 $1, %zmm2, %ymm1179; 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],zero180; AVX512VL-NEXT:    vpsrlvd %zmm1, %zmm0, %zmm0181; AVX512VL-NEXT:    vpmovdw %zmm0, %ymm0182; AVX512VL-NEXT:    vinserti64x4 $1, %ymm0, %zmm3, %zmm0183; AVX512VL-NEXT:    retq184;185; AVX512BW-LABEL: var_funnnel_v32i16:186; AVX512BW:       # %bb.0:187; AVX512BW-NEXT:    vpbroadcastw {{.*#+}} zmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]188; AVX512BW-NEXT:    vpandq %zmm3, %zmm2, %zmm4189; AVX512BW-NEXT:    vpsrlvw %zmm4, %zmm1, %zmm1190; AVX512BW-NEXT:    vpandnq %zmm3, %zmm2, %zmm2191; AVX512BW-NEXT:    vpaddw %zmm0, %zmm0, %zmm0192; AVX512BW-NEXT:    vpsllvw %zmm2, %zmm0, %zmm0193; AVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm0194; AVX512BW-NEXT:    retq195;196; AVX512VBMI2-LABEL: var_funnnel_v32i16:197; AVX512VBMI2:       # %bb.0:198; AVX512VBMI2-NEXT:    vpshrdvw %zmm2, %zmm0, %zmm1199; AVX512VBMI2-NEXT:    vmovdqa64 %zmm1, %zmm0200; AVX512VBMI2-NEXT:    retq201;202; AVX512VLBW-LABEL: var_funnnel_v32i16:203; AVX512VLBW:       # %bb.0:204; AVX512VLBW-NEXT:    vpbroadcastw {{.*#+}} zmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]205; AVX512VLBW-NEXT:    vpandq %zmm3, %zmm2, %zmm4206; AVX512VLBW-NEXT:    vpsrlvw %zmm4, %zmm1, %zmm1207; AVX512VLBW-NEXT:    vpandnq %zmm3, %zmm2, %zmm2208; AVX512VLBW-NEXT:    vpaddw %zmm0, %zmm0, %zmm0209; AVX512VLBW-NEXT:    vpsllvw %zmm2, %zmm0, %zmm0210; AVX512VLBW-NEXT:    vporq %zmm1, %zmm0, %zmm0211; AVX512VLBW-NEXT:    retq212;213; AVX512VLVBMI2-LABEL: var_funnnel_v32i16:214; AVX512VLVBMI2:       # %bb.0:215; AVX512VLVBMI2-NEXT:    vpshrdvw %zmm2, %zmm0, %zmm1216; AVX512VLVBMI2-NEXT:    vmovdqa64 %zmm1, %zmm0217; AVX512VLVBMI2-NEXT:    retq218  %res = call <32 x i16> @llvm.fshr.v32i16(<32 x i16> %x, <32 x i16> %y, <32 x i16> %amt)219  ret <32 x i16> %res220}221 222define <64 x i8> @var_funnnel_v64i8(<64 x i8> %x, <64 x i8> %y, <64 x i8> %amt) nounwind {223; AVX512F-LABEL: var_funnnel_v64i8:224; AVX512F:       # %bb.0:225; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm5226; AVX512F-NEXT:    vpsrlw $4, %ymm5, %ymm3227; AVX512F-NEXT:    vpbroadcastb {{.*#+}} ymm6 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]228; AVX512F-NEXT:    vpand %ymm6, %ymm3, %ymm7229; AVX512F-NEXT:    vpbroadcastd {{.*#+}} zmm3 = [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,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]230; AVX512F-NEXT:    vpandq %zmm3, %zmm2, %zmm2231; AVX512F-NEXT:    vextracti64x4 $1, %zmm2, %ymm4232; AVX512F-NEXT:    vpsllw $5, %ymm4, %ymm8233; AVX512F-NEXT:    vpblendvb %ymm8, %ymm7, %ymm5, %ymm5234; AVX512F-NEXT:    vpsrlw $2, %ymm5, %ymm7235; AVX512F-NEXT:    vpbroadcastb {{.*#+}} ymm9 = [63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63]236; AVX512F-NEXT:    vpand %ymm7, %ymm9, %ymm7237; AVX512F-NEXT:    vpaddb %ymm8, %ymm8, %ymm8238; AVX512F-NEXT:    vpblendvb %ymm8, %ymm7, %ymm5, %ymm5239; AVX512F-NEXT:    vpsrlw $1, %ymm5, %ymm7240; AVX512F-NEXT:    vpbroadcastb {{.*#+}} ymm10 = [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]241; AVX512F-NEXT:    vpand %ymm7, %ymm10, %ymm7242; AVX512F-NEXT:    vpaddb %ymm8, %ymm8, %ymm8243; AVX512F-NEXT:    vpblendvb %ymm8, %ymm7, %ymm5, %ymm5244; AVX512F-NEXT:    vpsrlw $4, %ymm1, %ymm7245; AVX512F-NEXT:    vpand %ymm6, %ymm7, %ymm6246; AVX512F-NEXT:    vpsllw $5, %ymm2, %ymm7247; AVX512F-NEXT:    vpblendvb %ymm7, %ymm6, %ymm1, %ymm1248; AVX512F-NEXT:    vpsrlw $2, %ymm1, %ymm6249; AVX512F-NEXT:    vpand %ymm6, %ymm9, %ymm6250; AVX512F-NEXT:    vpaddb %ymm7, %ymm7, %ymm7251; AVX512F-NEXT:    vpblendvb %ymm7, %ymm6, %ymm1, %ymm1252; AVX512F-NEXT:    vpsrlw $1, %ymm1, %ymm6253; AVX512F-NEXT:    vpand %ymm6, %ymm10, %ymm6254; AVX512F-NEXT:    vpaddb %ymm7, %ymm7, %ymm7255; AVX512F-NEXT:    vpblendvb %ymm7, %ymm6, %ymm1, %ymm1256; AVX512F-NEXT:    vinserti64x4 $1, %ymm5, %zmm1, %zmm1257; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm5258; AVX512F-NEXT:    vpaddb %ymm5, %ymm5, %ymm5259; AVX512F-NEXT:    vpsllw $4, %ymm5, %ymm6260; AVX512F-NEXT:    vpbroadcastb {{.*#+}} ymm7 = [240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240]261; AVX512F-NEXT:    vpand %ymm7, %ymm6, %ymm6262; AVX512F-NEXT:    vpxor %ymm3, %ymm4, %ymm4263; AVX512F-NEXT:    vpsllw $5, %ymm4, %ymm4264; AVX512F-NEXT:    vpblendvb %ymm4, %ymm6, %ymm5, %ymm5265; AVX512F-NEXT:    vpsllw $2, %ymm5, %ymm6266; AVX512F-NEXT:    vpbroadcastb {{.*#+}} ymm8 = [252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252]267; AVX512F-NEXT:    vpand %ymm6, %ymm8, %ymm6268; AVX512F-NEXT:    vpaddb %ymm4, %ymm4, %ymm4269; AVX512F-NEXT:    vpblendvb %ymm4, %ymm6, %ymm5, %ymm5270; AVX512F-NEXT:    vpaddb %ymm5, %ymm5, %ymm6271; AVX512F-NEXT:    vpaddb %ymm4, %ymm4, %ymm4272; AVX512F-NEXT:    vpblendvb %ymm4, %ymm6, %ymm5, %ymm4273; AVX512F-NEXT:    vpaddb %ymm0, %ymm0, %ymm0274; AVX512F-NEXT:    vpsllw $4, %ymm0, %ymm5275; AVX512F-NEXT:    vpand %ymm7, %ymm5, %ymm5276; AVX512F-NEXT:    vpxor %ymm3, %ymm2, %ymm2277; AVX512F-NEXT:    vpsllw $5, %ymm2, %ymm2278; AVX512F-NEXT:    vpblendvb %ymm2, %ymm5, %ymm0, %ymm0279; AVX512F-NEXT:    vpsllw $2, %ymm0, %ymm3280; AVX512F-NEXT:    vpand %ymm3, %ymm8, %ymm3281; AVX512F-NEXT:    vpaddb %ymm2, %ymm2, %ymm2282; AVX512F-NEXT:    vpblendvb %ymm2, %ymm3, %ymm0, %ymm0283; AVX512F-NEXT:    vpaddb %ymm0, %ymm0, %ymm3284; AVX512F-NEXT:    vpaddb %ymm2, %ymm2, %ymm2285; AVX512F-NEXT:    vpblendvb %ymm2, %ymm3, %ymm0, %ymm0286; AVX512F-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm0287; AVX512F-NEXT:    vporq %zmm1, %zmm0, %zmm0288; AVX512F-NEXT:    retq289;290; AVX512VL-LABEL: var_funnnel_v64i8:291; AVX512VL:       # %bb.0:292; AVX512VL-NEXT:    vextracti64x4 $1, %zmm1, %ymm4293; AVX512VL-NEXT:    vpsrlw $4, %ymm4, %ymm3294; AVX512VL-NEXT:    vpbroadcastd {{.*#+}} ymm5 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]295; AVX512VL-NEXT:    vpand %ymm5, %ymm3, %ymm6296; AVX512VL-NEXT:    vpbroadcastd {{.*#+}} zmm7 = [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,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]297; AVX512VL-NEXT:    vpandq %zmm7, %zmm2, %zmm2298; AVX512VL-NEXT:    vextracti64x4 $1, %zmm2, %ymm3299; AVX512VL-NEXT:    vpsllw $5, %ymm3, %ymm8300; AVX512VL-NEXT:    vpblendvb %ymm8, %ymm6, %ymm4, %ymm4301; AVX512VL-NEXT:    vpsrlw $2, %ymm4, %ymm6302; AVX512VL-NEXT:    vpbroadcastd {{.*#+}} ymm9 = [63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63]303; AVX512VL-NEXT:    vpand %ymm6, %ymm9, %ymm6304; AVX512VL-NEXT:    vpaddb %ymm8, %ymm8, %ymm8305; AVX512VL-NEXT:    vpblendvb %ymm8, %ymm6, %ymm4, %ymm4306; AVX512VL-NEXT:    vpsrlw $1, %ymm4, %ymm6307; AVX512VL-NEXT:    vpbroadcastd {{.*#+}} ymm10 = [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]308; AVX512VL-NEXT:    vpand %ymm6, %ymm10, %ymm6309; AVX512VL-NEXT:    vpaddb %ymm8, %ymm8, %ymm8310; AVX512VL-NEXT:    vpblendvb %ymm8, %ymm6, %ymm4, %ymm4311; AVX512VL-NEXT:    vpsrlw $4, %ymm1, %ymm6312; AVX512VL-NEXT:    vpand %ymm5, %ymm6, %ymm5313; AVX512VL-NEXT:    vpsllw $5, %ymm2, %ymm6314; AVX512VL-NEXT:    vpblendvb %ymm6, %ymm5, %ymm1, %ymm1315; AVX512VL-NEXT:    vpsrlw $2, %ymm1, %ymm5316; AVX512VL-NEXT:    vpand %ymm5, %ymm9, %ymm5317; AVX512VL-NEXT:    vpaddb %ymm6, %ymm6, %ymm6318; AVX512VL-NEXT:    vpblendvb %ymm6, %ymm5, %ymm1, %ymm1319; AVX512VL-NEXT:    vpsrlw $1, %ymm1, %ymm5320; AVX512VL-NEXT:    vpand %ymm5, %ymm10, %ymm5321; AVX512VL-NEXT:    vpaddb %ymm6, %ymm6, %ymm6322; AVX512VL-NEXT:    vpblendvb %ymm6, %ymm5, %ymm1, %ymm1323; AVX512VL-NEXT:    vinserti64x4 $1, %ymm4, %zmm1, %zmm1324; AVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm4325; AVX512VL-NEXT:    vpaddb %ymm4, %ymm4, %ymm4326; AVX512VL-NEXT:    vpsllw $4, %ymm4, %ymm5327; AVX512VL-NEXT:    vpbroadcastd {{.*#+}} ymm6 = [240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240]328; AVX512VL-NEXT:    vpand %ymm6, %ymm5, %ymm5329; AVX512VL-NEXT:    vpxor %ymm7, %ymm3, %ymm3330; AVX512VL-NEXT:    vpsllw $5, %ymm3, %ymm3331; AVX512VL-NEXT:    vpblendvb %ymm3, %ymm5, %ymm4, %ymm4332; AVX512VL-NEXT:    vpsllw $2, %ymm4, %ymm5333; AVX512VL-NEXT:    vpbroadcastd {{.*#+}} ymm8 = [252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252]334; AVX512VL-NEXT:    vpand %ymm5, %ymm8, %ymm5335; AVX512VL-NEXT:    vpaddb %ymm3, %ymm3, %ymm3336; AVX512VL-NEXT:    vpblendvb %ymm3, %ymm5, %ymm4, %ymm4337; AVX512VL-NEXT:    vpaddb %ymm4, %ymm4, %ymm5338; AVX512VL-NEXT:    vpaddb %ymm3, %ymm3, %ymm3339; AVX512VL-NEXT:    vpblendvb %ymm3, %ymm5, %ymm4, %ymm3340; AVX512VL-NEXT:    vpaddb %ymm0, %ymm0, %ymm0341; AVX512VL-NEXT:    vpsllw $4, %ymm0, %ymm4342; AVX512VL-NEXT:    vpand %ymm6, %ymm4, %ymm4343; AVX512VL-NEXT:    vpxor %ymm7, %ymm2, %ymm2344; AVX512VL-NEXT:    vpsllw $5, %ymm2, %ymm2345; AVX512VL-NEXT:    vpblendvb %ymm2, %ymm4, %ymm0, %ymm0346; AVX512VL-NEXT:    vpsllw $2, %ymm0, %ymm4347; AVX512VL-NEXT:    vpand %ymm4, %ymm8, %ymm4348; AVX512VL-NEXT:    vpaddb %ymm2, %ymm2, %ymm2349; AVX512VL-NEXT:    vpblendvb %ymm2, %ymm4, %ymm0, %ymm0350; AVX512VL-NEXT:    vpaddb %ymm0, %ymm0, %ymm4351; AVX512VL-NEXT:    vpaddb %ymm2, %ymm2, %ymm2352; AVX512VL-NEXT:    vpblendvb %ymm2, %ymm4, %ymm0, %ymm0353; AVX512VL-NEXT:    vinserti64x4 $1, %ymm3, %zmm0, %zmm0354; AVX512VL-NEXT:    vporq %zmm1, %zmm0, %zmm0355; AVX512VL-NEXT:    retq356;357; AVX512BW-LABEL: var_funnnel_v64i8:358; AVX512BW:       # %bb.0:359; AVX512BW-NEXT:    vpunpckhbw {{.*#+}} zmm3 = zmm1[8],zmm0[8],zmm1[9],zmm0[9],zmm1[10],zmm0[10],zmm1[11],zmm0[11],zmm1[12],zmm0[12],zmm1[13],zmm0[13],zmm1[14],zmm0[14],zmm1[15],zmm0[15],zmm1[24],zmm0[24],zmm1[25],zmm0[25],zmm1[26],zmm0[26],zmm1[27],zmm0[27],zmm1[28],zmm0[28],zmm1[29],zmm0[29],zmm1[30],zmm0[30],zmm1[31],zmm0[31],zmm1[40],zmm0[40],zmm1[41],zmm0[41],zmm1[42],zmm0[42],zmm1[43],zmm0[43],zmm1[44],zmm0[44],zmm1[45],zmm0[45],zmm1[46],zmm0[46],zmm1[47],zmm0[47],zmm1[56],zmm0[56],zmm1[57],zmm0[57],zmm1[58],zmm0[58],zmm1[59],zmm0[59],zmm1[60],zmm0[60],zmm1[61],zmm0[61],zmm1[62],zmm0[62],zmm1[63],zmm0[63]360; AVX512BW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm2, %zmm2361; AVX512BW-NEXT:    vpxor %xmm4, %xmm4, %xmm4362; AVX512BW-NEXT:    vpunpckhbw {{.*#+}} zmm5 = zmm2[8],zmm4[8],zmm2[9],zmm4[9],zmm2[10],zmm4[10],zmm2[11],zmm4[11],zmm2[12],zmm4[12],zmm2[13],zmm4[13],zmm2[14],zmm4[14],zmm2[15],zmm4[15],zmm2[24],zmm4[24],zmm2[25],zmm4[25],zmm2[26],zmm4[26],zmm2[27],zmm4[27],zmm2[28],zmm4[28],zmm2[29],zmm4[29],zmm2[30],zmm4[30],zmm2[31],zmm4[31],zmm2[40],zmm4[40],zmm2[41],zmm4[41],zmm2[42],zmm4[42],zmm2[43],zmm4[43],zmm2[44],zmm4[44],zmm2[45],zmm4[45],zmm2[46],zmm4[46],zmm2[47],zmm4[47],zmm2[56],zmm4[56],zmm2[57],zmm4[57],zmm2[58],zmm4[58],zmm2[59],zmm4[59],zmm2[60],zmm4[60],zmm2[61],zmm4[61],zmm2[62],zmm4[62],zmm2[63],zmm4[63]363; AVX512BW-NEXT:    vpsrlvw %zmm5, %zmm3, %zmm3364; AVX512BW-NEXT:    vpbroadcastw {{.*#+}} zmm5 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]365; AVX512BW-NEXT:    vpandq %zmm5, %zmm3, %zmm3366; AVX512BW-NEXT:    vpunpcklbw {{.*#+}} zmm0 = zmm1[0],zmm0[0],zmm1[1],zmm0[1],zmm1[2],zmm0[2],zmm1[3],zmm0[3],zmm1[4],zmm0[4],zmm1[5],zmm0[5],zmm1[6],zmm0[6],zmm1[7],zmm0[7],zmm1[16],zmm0[16],zmm1[17],zmm0[17],zmm1[18],zmm0[18],zmm1[19],zmm0[19],zmm1[20],zmm0[20],zmm1[21],zmm0[21],zmm1[22],zmm0[22],zmm1[23],zmm0[23],zmm1[32],zmm0[32],zmm1[33],zmm0[33],zmm1[34],zmm0[34],zmm1[35],zmm0[35],zmm1[36],zmm0[36],zmm1[37],zmm0[37],zmm1[38],zmm0[38],zmm1[39],zmm0[39],zmm1[48],zmm0[48],zmm1[49],zmm0[49],zmm1[50],zmm0[50],zmm1[51],zmm0[51],zmm1[52],zmm0[52],zmm1[53],zmm0[53],zmm1[54],zmm0[54],zmm1[55],zmm0[55]367; AVX512BW-NEXT:    vpunpcklbw {{.*#+}} zmm1 = zmm2[0],zmm4[0],zmm2[1],zmm4[1],zmm2[2],zmm4[2],zmm2[3],zmm4[3],zmm2[4],zmm4[4],zmm2[5],zmm4[5],zmm2[6],zmm4[6],zmm2[7],zmm4[7],zmm2[16],zmm4[16],zmm2[17],zmm4[17],zmm2[18],zmm4[18],zmm2[19],zmm4[19],zmm2[20],zmm4[20],zmm2[21],zmm4[21],zmm2[22],zmm4[22],zmm2[23],zmm4[23],zmm2[32],zmm4[32],zmm2[33],zmm4[33],zmm2[34],zmm4[34],zmm2[35],zmm4[35],zmm2[36],zmm4[36],zmm2[37],zmm4[37],zmm2[38],zmm4[38],zmm2[39],zmm4[39],zmm2[48],zmm4[48],zmm2[49],zmm4[49],zmm2[50],zmm4[50],zmm2[51],zmm4[51],zmm2[52],zmm4[52],zmm2[53],zmm4[53],zmm2[54],zmm4[54],zmm2[55],zmm4[55]368; AVX512BW-NEXT:    vpsrlvw %zmm1, %zmm0, %zmm0369; AVX512BW-NEXT:    vpandq %zmm5, %zmm0, %zmm0370; AVX512BW-NEXT:    vpackuswb %zmm3, %zmm0, %zmm0371; AVX512BW-NEXT:    retq372;373; AVX512VBMI2-LABEL: var_funnnel_v64i8:374; AVX512VBMI2:       # %bb.0:375; AVX512VBMI2-NEXT:    vpunpckhbw {{.*#+}} zmm3 = zmm1[8],zmm0[8],zmm1[9],zmm0[9],zmm1[10],zmm0[10],zmm1[11],zmm0[11],zmm1[12],zmm0[12],zmm1[13],zmm0[13],zmm1[14],zmm0[14],zmm1[15],zmm0[15],zmm1[24],zmm0[24],zmm1[25],zmm0[25],zmm1[26],zmm0[26],zmm1[27],zmm0[27],zmm1[28],zmm0[28],zmm1[29],zmm0[29],zmm1[30],zmm0[30],zmm1[31],zmm0[31],zmm1[40],zmm0[40],zmm1[41],zmm0[41],zmm1[42],zmm0[42],zmm1[43],zmm0[43],zmm1[44],zmm0[44],zmm1[45],zmm0[45],zmm1[46],zmm0[46],zmm1[47],zmm0[47],zmm1[56],zmm0[56],zmm1[57],zmm0[57],zmm1[58],zmm0[58],zmm1[59],zmm0[59],zmm1[60],zmm0[60],zmm1[61],zmm0[61],zmm1[62],zmm0[62],zmm1[63],zmm0[63]376; AVX512VBMI2-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm2, %zmm2377; AVX512VBMI2-NEXT:    vpxor %xmm4, %xmm4, %xmm4378; AVX512VBMI2-NEXT:    vpunpckhbw {{.*#+}} zmm5 = zmm2[8],zmm4[8],zmm2[9],zmm4[9],zmm2[10],zmm4[10],zmm2[11],zmm4[11],zmm2[12],zmm4[12],zmm2[13],zmm4[13],zmm2[14],zmm4[14],zmm2[15],zmm4[15],zmm2[24],zmm4[24],zmm2[25],zmm4[25],zmm2[26],zmm4[26],zmm2[27],zmm4[27],zmm2[28],zmm4[28],zmm2[29],zmm4[29],zmm2[30],zmm4[30],zmm2[31],zmm4[31],zmm2[40],zmm4[40],zmm2[41],zmm4[41],zmm2[42],zmm4[42],zmm2[43],zmm4[43],zmm2[44],zmm4[44],zmm2[45],zmm4[45],zmm2[46],zmm4[46],zmm2[47],zmm4[47],zmm2[56],zmm4[56],zmm2[57],zmm4[57],zmm2[58],zmm4[58],zmm2[59],zmm4[59],zmm2[60],zmm4[60],zmm2[61],zmm4[61],zmm2[62],zmm4[62],zmm2[63],zmm4[63]379; AVX512VBMI2-NEXT:    vpsrlvw %zmm5, %zmm3, %zmm3380; AVX512VBMI2-NEXT:    vpunpcklbw {{.*#+}} zmm0 = zmm1[0],zmm0[0],zmm1[1],zmm0[1],zmm1[2],zmm0[2],zmm1[3],zmm0[3],zmm1[4],zmm0[4],zmm1[5],zmm0[5],zmm1[6],zmm0[6],zmm1[7],zmm0[7],zmm1[16],zmm0[16],zmm1[17],zmm0[17],zmm1[18],zmm0[18],zmm1[19],zmm0[19],zmm1[20],zmm0[20],zmm1[21],zmm0[21],zmm1[22],zmm0[22],zmm1[23],zmm0[23],zmm1[32],zmm0[32],zmm1[33],zmm0[33],zmm1[34],zmm0[34],zmm1[35],zmm0[35],zmm1[36],zmm0[36],zmm1[37],zmm0[37],zmm1[38],zmm0[38],zmm1[39],zmm0[39],zmm1[48],zmm0[48],zmm1[49],zmm0[49],zmm1[50],zmm0[50],zmm1[51],zmm0[51],zmm1[52],zmm0[52],zmm1[53],zmm0[53],zmm1[54],zmm0[54],zmm1[55],zmm0[55]381; AVX512VBMI2-NEXT:    vpunpcklbw {{.*#+}} zmm1 = zmm2[0],zmm4[0],zmm2[1],zmm4[1],zmm2[2],zmm4[2],zmm2[3],zmm4[3],zmm2[4],zmm4[4],zmm2[5],zmm4[5],zmm2[6],zmm4[6],zmm2[7],zmm4[7],zmm2[16],zmm4[16],zmm2[17],zmm4[17],zmm2[18],zmm4[18],zmm2[19],zmm4[19],zmm2[20],zmm4[20],zmm2[21],zmm4[21],zmm2[22],zmm4[22],zmm2[23],zmm4[23],zmm2[32],zmm4[32],zmm2[33],zmm4[33],zmm2[34],zmm4[34],zmm2[35],zmm4[35],zmm2[36],zmm4[36],zmm2[37],zmm4[37],zmm2[38],zmm4[38],zmm2[39],zmm4[39],zmm2[48],zmm4[48],zmm2[49],zmm4[49],zmm2[50],zmm4[50],zmm2[51],zmm4[51],zmm2[52],zmm4[52],zmm2[53],zmm4[53],zmm2[54],zmm4[54],zmm2[55],zmm4[55]382; AVX512VBMI2-NEXT:    vpsrlvw %zmm1, %zmm0, %zmm1383; AVX512VBMI2-NEXT:    vmovdqa64 {{.*#+}} zmm0 = [0,2,4,6,8,10,12,14,64,66,68,70,72,74,76,78,16,18,20,22,24,26,28,30,80,82,84,86,88,90,92,94,32,34,36,38,40,42,44,46,96,98,100,102,104,106,108,110,48,50,52,54,56,58,60,62,112,114,116,118,120,122,124,126]384; AVX512VBMI2-NEXT:    vpermi2b %zmm3, %zmm1, %zmm0385; AVX512VBMI2-NEXT:    retq386;387; AVX512VLBW-LABEL: var_funnnel_v64i8:388; AVX512VLBW:       # %bb.0:389; AVX512VLBW-NEXT:    vpunpckhbw {{.*#+}} zmm3 = zmm1[8],zmm0[8],zmm1[9],zmm0[9],zmm1[10],zmm0[10],zmm1[11],zmm0[11],zmm1[12],zmm0[12],zmm1[13],zmm0[13],zmm1[14],zmm0[14],zmm1[15],zmm0[15],zmm1[24],zmm0[24],zmm1[25],zmm0[25],zmm1[26],zmm0[26],zmm1[27],zmm0[27],zmm1[28],zmm0[28],zmm1[29],zmm0[29],zmm1[30],zmm0[30],zmm1[31],zmm0[31],zmm1[40],zmm0[40],zmm1[41],zmm0[41],zmm1[42],zmm0[42],zmm1[43],zmm0[43],zmm1[44],zmm0[44],zmm1[45],zmm0[45],zmm1[46],zmm0[46],zmm1[47],zmm0[47],zmm1[56],zmm0[56],zmm1[57],zmm0[57],zmm1[58],zmm0[58],zmm1[59],zmm0[59],zmm1[60],zmm0[60],zmm1[61],zmm0[61],zmm1[62],zmm0[62],zmm1[63],zmm0[63]390; AVX512VLBW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm2, %zmm2391; AVX512VLBW-NEXT:    vpxor %xmm4, %xmm4, %xmm4392; AVX512VLBW-NEXT:    vpunpckhbw {{.*#+}} zmm5 = zmm2[8],zmm4[8],zmm2[9],zmm4[9],zmm2[10],zmm4[10],zmm2[11],zmm4[11],zmm2[12],zmm4[12],zmm2[13],zmm4[13],zmm2[14],zmm4[14],zmm2[15],zmm4[15],zmm2[24],zmm4[24],zmm2[25],zmm4[25],zmm2[26],zmm4[26],zmm2[27],zmm4[27],zmm2[28],zmm4[28],zmm2[29],zmm4[29],zmm2[30],zmm4[30],zmm2[31],zmm4[31],zmm2[40],zmm4[40],zmm2[41],zmm4[41],zmm2[42],zmm4[42],zmm2[43],zmm4[43],zmm2[44],zmm4[44],zmm2[45],zmm4[45],zmm2[46],zmm4[46],zmm2[47],zmm4[47],zmm2[56],zmm4[56],zmm2[57],zmm4[57],zmm2[58],zmm4[58],zmm2[59],zmm4[59],zmm2[60],zmm4[60],zmm2[61],zmm4[61],zmm2[62],zmm4[62],zmm2[63],zmm4[63]393; AVX512VLBW-NEXT:    vpsrlvw %zmm5, %zmm3, %zmm3394; AVX512VLBW-NEXT:    vpbroadcastw {{.*#+}} zmm5 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]395; AVX512VLBW-NEXT:    vpandq %zmm5, %zmm3, %zmm3396; AVX512VLBW-NEXT:    vpunpcklbw {{.*#+}} zmm0 = zmm1[0],zmm0[0],zmm1[1],zmm0[1],zmm1[2],zmm0[2],zmm1[3],zmm0[3],zmm1[4],zmm0[4],zmm1[5],zmm0[5],zmm1[6],zmm0[6],zmm1[7],zmm0[7],zmm1[16],zmm0[16],zmm1[17],zmm0[17],zmm1[18],zmm0[18],zmm1[19],zmm0[19],zmm1[20],zmm0[20],zmm1[21],zmm0[21],zmm1[22],zmm0[22],zmm1[23],zmm0[23],zmm1[32],zmm0[32],zmm1[33],zmm0[33],zmm1[34],zmm0[34],zmm1[35],zmm0[35],zmm1[36],zmm0[36],zmm1[37],zmm0[37],zmm1[38],zmm0[38],zmm1[39],zmm0[39],zmm1[48],zmm0[48],zmm1[49],zmm0[49],zmm1[50],zmm0[50],zmm1[51],zmm0[51],zmm1[52],zmm0[52],zmm1[53],zmm0[53],zmm1[54],zmm0[54],zmm1[55],zmm0[55]397; AVX512VLBW-NEXT:    vpunpcklbw {{.*#+}} zmm1 = zmm2[0],zmm4[0],zmm2[1],zmm4[1],zmm2[2],zmm4[2],zmm2[3],zmm4[3],zmm2[4],zmm4[4],zmm2[5],zmm4[5],zmm2[6],zmm4[6],zmm2[7],zmm4[7],zmm2[16],zmm4[16],zmm2[17],zmm4[17],zmm2[18],zmm4[18],zmm2[19],zmm4[19],zmm2[20],zmm4[20],zmm2[21],zmm4[21],zmm2[22],zmm4[22],zmm2[23],zmm4[23],zmm2[32],zmm4[32],zmm2[33],zmm4[33],zmm2[34],zmm4[34],zmm2[35],zmm4[35],zmm2[36],zmm4[36],zmm2[37],zmm4[37],zmm2[38],zmm4[38],zmm2[39],zmm4[39],zmm2[48],zmm4[48],zmm2[49],zmm4[49],zmm2[50],zmm4[50],zmm2[51],zmm4[51],zmm2[52],zmm4[52],zmm2[53],zmm4[53],zmm2[54],zmm4[54],zmm2[55],zmm4[55]398; AVX512VLBW-NEXT:    vpsrlvw %zmm1, %zmm0, %zmm0399; AVX512VLBW-NEXT:    vpandq %zmm5, %zmm0, %zmm0400; AVX512VLBW-NEXT:    vpackuswb %zmm3, %zmm0, %zmm0401; AVX512VLBW-NEXT:    retq402;403; AVX512VLVBMI2-LABEL: var_funnnel_v64i8:404; AVX512VLVBMI2:       # %bb.0:405; AVX512VLVBMI2-NEXT:    vpunpckhbw {{.*#+}} zmm3 = zmm1[8],zmm0[8],zmm1[9],zmm0[9],zmm1[10],zmm0[10],zmm1[11],zmm0[11],zmm1[12],zmm0[12],zmm1[13],zmm0[13],zmm1[14],zmm0[14],zmm1[15],zmm0[15],zmm1[24],zmm0[24],zmm1[25],zmm0[25],zmm1[26],zmm0[26],zmm1[27],zmm0[27],zmm1[28],zmm0[28],zmm1[29],zmm0[29],zmm1[30],zmm0[30],zmm1[31],zmm0[31],zmm1[40],zmm0[40],zmm1[41],zmm0[41],zmm1[42],zmm0[42],zmm1[43],zmm0[43],zmm1[44],zmm0[44],zmm1[45],zmm0[45],zmm1[46],zmm0[46],zmm1[47],zmm0[47],zmm1[56],zmm0[56],zmm1[57],zmm0[57],zmm1[58],zmm0[58],zmm1[59],zmm0[59],zmm1[60],zmm0[60],zmm1[61],zmm0[61],zmm1[62],zmm0[62],zmm1[63],zmm0[63]406; AVX512VLVBMI2-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm2, %zmm2407; AVX512VLVBMI2-NEXT:    vpxor %xmm4, %xmm4, %xmm4408; AVX512VLVBMI2-NEXT:    vpunpckhbw {{.*#+}} zmm5 = zmm2[8],zmm4[8],zmm2[9],zmm4[9],zmm2[10],zmm4[10],zmm2[11],zmm4[11],zmm2[12],zmm4[12],zmm2[13],zmm4[13],zmm2[14],zmm4[14],zmm2[15],zmm4[15],zmm2[24],zmm4[24],zmm2[25],zmm4[25],zmm2[26],zmm4[26],zmm2[27],zmm4[27],zmm2[28],zmm4[28],zmm2[29],zmm4[29],zmm2[30],zmm4[30],zmm2[31],zmm4[31],zmm2[40],zmm4[40],zmm2[41],zmm4[41],zmm2[42],zmm4[42],zmm2[43],zmm4[43],zmm2[44],zmm4[44],zmm2[45],zmm4[45],zmm2[46],zmm4[46],zmm2[47],zmm4[47],zmm2[56],zmm4[56],zmm2[57],zmm4[57],zmm2[58],zmm4[58],zmm2[59],zmm4[59],zmm2[60],zmm4[60],zmm2[61],zmm4[61],zmm2[62],zmm4[62],zmm2[63],zmm4[63]409; AVX512VLVBMI2-NEXT:    vpsrlvw %zmm5, %zmm3, %zmm3410; AVX512VLVBMI2-NEXT:    vpunpcklbw {{.*#+}} zmm0 = zmm1[0],zmm0[0],zmm1[1],zmm0[1],zmm1[2],zmm0[2],zmm1[3],zmm0[3],zmm1[4],zmm0[4],zmm1[5],zmm0[5],zmm1[6],zmm0[6],zmm1[7],zmm0[7],zmm1[16],zmm0[16],zmm1[17],zmm0[17],zmm1[18],zmm0[18],zmm1[19],zmm0[19],zmm1[20],zmm0[20],zmm1[21],zmm0[21],zmm1[22],zmm0[22],zmm1[23],zmm0[23],zmm1[32],zmm0[32],zmm1[33],zmm0[33],zmm1[34],zmm0[34],zmm1[35],zmm0[35],zmm1[36],zmm0[36],zmm1[37],zmm0[37],zmm1[38],zmm0[38],zmm1[39],zmm0[39],zmm1[48],zmm0[48],zmm1[49],zmm0[49],zmm1[50],zmm0[50],zmm1[51],zmm0[51],zmm1[52],zmm0[52],zmm1[53],zmm0[53],zmm1[54],zmm0[54],zmm1[55],zmm0[55]411; AVX512VLVBMI2-NEXT:    vpunpcklbw {{.*#+}} zmm1 = zmm2[0],zmm4[0],zmm2[1],zmm4[1],zmm2[2],zmm4[2],zmm2[3],zmm4[3],zmm2[4],zmm4[4],zmm2[5],zmm4[5],zmm2[6],zmm4[6],zmm2[7],zmm4[7],zmm2[16],zmm4[16],zmm2[17],zmm4[17],zmm2[18],zmm4[18],zmm2[19],zmm4[19],zmm2[20],zmm4[20],zmm2[21],zmm4[21],zmm2[22],zmm4[22],zmm2[23],zmm4[23],zmm2[32],zmm4[32],zmm2[33],zmm4[33],zmm2[34],zmm4[34],zmm2[35],zmm4[35],zmm2[36],zmm4[36],zmm2[37],zmm4[37],zmm2[38],zmm4[38],zmm2[39],zmm4[39],zmm2[48],zmm4[48],zmm2[49],zmm4[49],zmm2[50],zmm4[50],zmm2[51],zmm4[51],zmm2[52],zmm4[52],zmm2[53],zmm4[53],zmm2[54],zmm4[54],zmm2[55],zmm4[55]412; AVX512VLVBMI2-NEXT:    vpsrlvw %zmm1, %zmm0, %zmm1413; AVX512VLVBMI2-NEXT:    vmovdqa64 {{.*#+}} zmm0 = [0,2,4,6,8,10,12,14,64,66,68,70,72,74,76,78,16,18,20,22,24,26,28,30,80,82,84,86,88,90,92,94,32,34,36,38,40,42,44,46,96,98,100,102,104,106,108,110,48,50,52,54,56,58,60,62,112,114,116,118,120,122,124,126]414; AVX512VLVBMI2-NEXT:    vpermi2b %zmm3, %zmm1, %zmm0415; AVX512VLVBMI2-NEXT:    retq416  %res = call <64 x i8> @llvm.fshr.v64i8(<64 x i8> %x, <64 x i8> %y, <64 x i8> %amt)417  ret <64 x i8> %res418}419 420;421; Uniform Variable Shifts422;423 424define <8 x i64> @splatvar_funnnel_v8i64(<8 x i64> %x, <8 x i64> %y, <8 x i64> %amt) nounwind {425; AVX512F-LABEL: splatvar_funnnel_v8i64:426; AVX512F:       # %bb.0:427; AVX512F-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [63,63]428; AVX512F-NEXT:    vpand %xmm3, %xmm2, %xmm4429; AVX512F-NEXT:    vpsrlq %xmm4, %zmm1, %zmm1430; AVX512F-NEXT:    vpandn %xmm3, %xmm2, %xmm2431; AVX512F-NEXT:    vpaddq %zmm0, %zmm0, %zmm0432; AVX512F-NEXT:    vpsllq %xmm2, %zmm0, %zmm0433; AVX512F-NEXT:    vporq %zmm1, %zmm0, %zmm0434; AVX512F-NEXT:    retq435;436; AVX512VL-LABEL: splatvar_funnnel_v8i64:437; AVX512VL:       # %bb.0:438; AVX512VL-NEXT:    vpbroadcastq {{.*#+}} xmm3 = [63,63]439; AVX512VL-NEXT:    vpand %xmm3, %xmm2, %xmm4440; AVX512VL-NEXT:    vpsrlq %xmm4, %zmm1, %zmm1441; AVX512VL-NEXT:    vpandn %xmm3, %xmm2, %xmm2442; AVX512VL-NEXT:    vpaddq %zmm0, %zmm0, %zmm0443; AVX512VL-NEXT:    vpsllq %xmm2, %zmm0, %zmm0444; AVX512VL-NEXT:    vporq %zmm1, %zmm0, %zmm0445; AVX512VL-NEXT:    retq446;447; AVX512BW-LABEL: splatvar_funnnel_v8i64:448; AVX512BW:       # %bb.0:449; AVX512BW-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [63,63]450; AVX512BW-NEXT:    vpand %xmm3, %xmm2, %xmm4451; AVX512BW-NEXT:    vpsrlq %xmm4, %zmm1, %zmm1452; AVX512BW-NEXT:    vpandn %xmm3, %xmm2, %xmm2453; AVX512BW-NEXT:    vpaddq %zmm0, %zmm0, %zmm0454; AVX512BW-NEXT:    vpsllq %xmm2, %zmm0, %zmm0455; AVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm0456; AVX512BW-NEXT:    retq457;458; AVX512VBMI2-LABEL: splatvar_funnnel_v8i64:459; AVX512VBMI2:       # %bb.0:460; AVX512VBMI2-NEXT:    vpbroadcastq %xmm2, %zmm2461; AVX512VBMI2-NEXT:    vpshrdvq %zmm2, %zmm0, %zmm1462; AVX512VBMI2-NEXT:    vmovdqa64 %zmm1, %zmm0463; AVX512VBMI2-NEXT:    retq464;465; AVX512VLBW-LABEL: splatvar_funnnel_v8i64:466; AVX512VLBW:       # %bb.0:467; AVX512VLBW-NEXT:    vpbroadcastq {{.*#+}} xmm3 = [63,63]468; AVX512VLBW-NEXT:    vpand %xmm3, %xmm2, %xmm4469; AVX512VLBW-NEXT:    vpsrlq %xmm4, %zmm1, %zmm1470; AVX512VLBW-NEXT:    vpandn %xmm3, %xmm2, %xmm2471; AVX512VLBW-NEXT:    vpaddq %zmm0, %zmm0, %zmm0472; AVX512VLBW-NEXT:    vpsllq %xmm2, %zmm0, %zmm0473; AVX512VLBW-NEXT:    vporq %zmm1, %zmm0, %zmm0474; AVX512VLBW-NEXT:    retq475;476; AVX512VLVBMI2-LABEL: splatvar_funnnel_v8i64:477; AVX512VLVBMI2:       # %bb.0:478; AVX512VLVBMI2-NEXT:    vpbroadcastq %xmm2, %zmm2479; AVX512VLVBMI2-NEXT:    vpshrdvq %zmm2, %zmm0, %zmm1480; AVX512VLVBMI2-NEXT:    vmovdqa64 %zmm1, %zmm0481; AVX512VLVBMI2-NEXT:    retq482  %splat = shufflevector <8 x i64> %amt, <8 x i64> undef, <8 x i32> zeroinitializer483  %res = call <8 x i64> @llvm.fshr.v8i64(<8 x i64> %x, <8 x i64> %y, <8 x i64> %splat)484  ret <8 x i64> %res485}486 487define <16 x i32> @splatvar_funnnel_v16i32(<16 x i32> %x, <16 x i32> %y, <16 x i32> %amt) nounwind {488; AVX512F-LABEL: splatvar_funnnel_v16i32:489; AVX512F:       # %bb.0:490; AVX512F-NEXT:    vpunpckhdq {{.*#+}} zmm3 = zmm1[2],zmm0[2],zmm1[3],zmm0[3],zmm1[6],zmm0[6],zmm1[7],zmm0[7],zmm1[10],zmm0[10],zmm1[11],zmm0[11],zmm1[14],zmm0[14],zmm1[15],zmm0[15]491; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2492; AVX512F-NEXT:    vpsrlq %xmm2, %zmm3, %zmm3493; AVX512F-NEXT:    vpunpckldq {{.*#+}} zmm0 = zmm1[0],zmm0[0],zmm1[1],zmm0[1],zmm1[4],zmm0[4],zmm1[5],zmm0[5],zmm1[8],zmm0[8],zmm1[9],zmm0[9],zmm1[12],zmm0[12],zmm1[13],zmm0[13]494; AVX512F-NEXT:    vpsrlq %xmm2, %zmm0, %zmm0495; AVX512F-NEXT:    vshufps {{.*#+}} zmm0 = zmm0[0,2],zmm3[0,2],zmm0[4,6],zmm3[4,6],zmm0[8,10],zmm3[8,10],zmm0[12,14],zmm3[12,14]496; AVX512F-NEXT:    retq497;498; AVX512VL-LABEL: splatvar_funnnel_v16i32:499; AVX512VL:       # %bb.0:500; AVX512VL-NEXT:    vpunpckhdq {{.*#+}} zmm3 = zmm1[2],zmm0[2],zmm1[3],zmm0[3],zmm1[6],zmm0[6],zmm1[7],zmm0[7],zmm1[10],zmm0[10],zmm1[11],zmm0[11],zmm1[14],zmm0[14],zmm1[15],zmm0[15]501; AVX512VL-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2502; AVX512VL-NEXT:    vpsrlq %xmm2, %zmm3, %zmm3503; AVX512VL-NEXT:    vpunpckldq {{.*#+}} zmm0 = zmm1[0],zmm0[0],zmm1[1],zmm0[1],zmm1[4],zmm0[4],zmm1[5],zmm0[5],zmm1[8],zmm0[8],zmm1[9],zmm0[9],zmm1[12],zmm0[12],zmm1[13],zmm0[13]504; AVX512VL-NEXT:    vpsrlq %xmm2, %zmm0, %zmm0505; AVX512VL-NEXT:    vshufps {{.*#+}} zmm0 = zmm0[0,2],zmm3[0,2],zmm0[4,6],zmm3[4,6],zmm0[8,10],zmm3[8,10],zmm0[12,14],zmm3[12,14]506; AVX512VL-NEXT:    retq507;508; AVX512BW-LABEL: splatvar_funnnel_v16i32:509; AVX512BW:       # %bb.0:510; AVX512BW-NEXT:    vpunpckhdq {{.*#+}} zmm3 = zmm1[2],zmm0[2],zmm1[3],zmm0[3],zmm1[6],zmm0[6],zmm1[7],zmm0[7],zmm1[10],zmm0[10],zmm1[11],zmm0[11],zmm1[14],zmm0[14],zmm1[15],zmm0[15]511; AVX512BW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2512; AVX512BW-NEXT:    vpsrlq %xmm2, %zmm3, %zmm3513; AVX512BW-NEXT:    vpunpckldq {{.*#+}} zmm0 = zmm1[0],zmm0[0],zmm1[1],zmm0[1],zmm1[4],zmm0[4],zmm1[5],zmm0[5],zmm1[8],zmm0[8],zmm1[9],zmm0[9],zmm1[12],zmm0[12],zmm1[13],zmm0[13]514; AVX512BW-NEXT:    vpsrlq %xmm2, %zmm0, %zmm0515; AVX512BW-NEXT:    vshufps {{.*#+}} zmm0 = zmm0[0,2],zmm3[0,2],zmm0[4,6],zmm3[4,6],zmm0[8,10],zmm3[8,10],zmm0[12,14],zmm3[12,14]516; AVX512BW-NEXT:    retq517;518; AVX512VBMI2-LABEL: splatvar_funnnel_v16i32:519; AVX512VBMI2:       # %bb.0:520; AVX512VBMI2-NEXT:    vpbroadcastd %xmm2, %zmm2521; AVX512VBMI2-NEXT:    vpshrdvd %zmm2, %zmm0, %zmm1522; AVX512VBMI2-NEXT:    vmovdqa64 %zmm1, %zmm0523; AVX512VBMI2-NEXT:    retq524;525; AVX512VLBW-LABEL: splatvar_funnnel_v16i32:526; AVX512VLBW:       # %bb.0:527; AVX512VLBW-NEXT:    vpunpckhdq {{.*#+}} zmm3 = zmm1[2],zmm0[2],zmm1[3],zmm0[3],zmm1[6],zmm0[6],zmm1[7],zmm0[7],zmm1[10],zmm0[10],zmm1[11],zmm0[11],zmm1[14],zmm0[14],zmm1[15],zmm0[15]528; AVX512VLBW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2529; AVX512VLBW-NEXT:    vpsrlq %xmm2, %zmm3, %zmm3530; AVX512VLBW-NEXT:    vpunpckldq {{.*#+}} zmm0 = zmm1[0],zmm0[0],zmm1[1],zmm0[1],zmm1[4],zmm0[4],zmm1[5],zmm0[5],zmm1[8],zmm0[8],zmm1[9],zmm0[9],zmm1[12],zmm0[12],zmm1[13],zmm0[13]531; AVX512VLBW-NEXT:    vpsrlq %xmm2, %zmm0, %zmm0532; AVX512VLBW-NEXT:    vshufps {{.*#+}} zmm0 = zmm0[0,2],zmm3[0,2],zmm0[4,6],zmm3[4,6],zmm0[8,10],zmm3[8,10],zmm0[12,14],zmm3[12,14]533; AVX512VLBW-NEXT:    retq534;535; AVX512VLVBMI2-LABEL: splatvar_funnnel_v16i32:536; AVX512VLVBMI2:       # %bb.0:537; AVX512VLVBMI2-NEXT:    vpbroadcastd %xmm2, %zmm2538; AVX512VLVBMI2-NEXT:    vpshrdvd %zmm2, %zmm0, %zmm1539; AVX512VLVBMI2-NEXT:    vmovdqa64 %zmm1, %zmm0540; AVX512VLVBMI2-NEXT:    retq541  %splat = shufflevector <16 x i32> %amt, <16 x i32> undef, <16 x i32> zeroinitializer542  %res = call <16 x i32> @llvm.fshr.v16i32(<16 x i32> %x, <16 x i32> %y, <16 x i32> %splat)543  ret <16 x i32> %res544}545 546define <32 x i16> @splatvar_funnnel_v32i16(<32 x i16> %x, <32 x i16> %y, <32 x i16> %amt) nounwind {547; AVX512F-LABEL: splatvar_funnnel_v32i16:548; AVX512F:       # %bb.0:549; AVX512F-NEXT:    vpbroadcastq {{.*#+}} xmm3 = [15,0,0,0,15,0,0,0]550; AVX512F-NEXT:    vpand %xmm3, %xmm2, %xmm4551; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm5552; AVX512F-NEXT:    vpsrlw %xmm4, %ymm5, %ymm5553; AVX512F-NEXT:    vpsrlw %xmm4, %ymm1, %ymm1554; AVX512F-NEXT:    vinserti64x4 $1, %ymm5, %zmm1, %zmm1555; AVX512F-NEXT:    vpandn %xmm3, %xmm2, %xmm2556; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3557; AVX512F-NEXT:    vpaddw %ymm3, %ymm3, %ymm3558; AVX512F-NEXT:    vpsllw %xmm2, %ymm3, %ymm3559; AVX512F-NEXT:    vpaddw %ymm0, %ymm0, %ymm0560; AVX512F-NEXT:    vpsllw %xmm2, %ymm0, %ymm0561; AVX512F-NEXT:    vinserti64x4 $1, %ymm3, %zmm0, %zmm0562; AVX512F-NEXT:    vporq %zmm1, %zmm0, %zmm0563; AVX512F-NEXT:    retq564;565; AVX512VL-LABEL: splatvar_funnnel_v32i16:566; AVX512VL:       # %bb.0:567; AVX512VL-NEXT:    vpbroadcastq {{.*#+}} xmm3 = [15,0,0,0,15,0,0,0]568; AVX512VL-NEXT:    vpand %xmm3, %xmm2, %xmm4569; AVX512VL-NEXT:    vextracti64x4 $1, %zmm1, %ymm5570; AVX512VL-NEXT:    vpsrlw %xmm4, %ymm5, %ymm5571; AVX512VL-NEXT:    vpsrlw %xmm4, %ymm1, %ymm1572; AVX512VL-NEXT:    vinserti64x4 $1, %ymm5, %zmm1, %zmm1573; AVX512VL-NEXT:    vpandn %xmm3, %xmm2, %xmm2574; AVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm3575; AVX512VL-NEXT:    vpaddw %ymm3, %ymm3, %ymm3576; AVX512VL-NEXT:    vpsllw %xmm2, %ymm3, %ymm3577; AVX512VL-NEXT:    vpaddw %ymm0, %ymm0, %ymm0578; AVX512VL-NEXT:    vpsllw %xmm2, %ymm0, %ymm0579; AVX512VL-NEXT:    vinserti64x4 $1, %ymm3, %zmm0, %zmm0580; AVX512VL-NEXT:    vporq %zmm1, %zmm0, %zmm0581; AVX512VL-NEXT:    retq582;583; AVX512BW-LABEL: splatvar_funnnel_v32i16:584; AVX512BW:       # %bb.0:585; AVX512BW-NEXT:    vpbroadcastq {{.*#+}} xmm3 = [15,0,0,0,15,0,0,0]586; AVX512BW-NEXT:    vpand %xmm3, %xmm2, %xmm4587; AVX512BW-NEXT:    vpsrlw %xmm4, %zmm1, %zmm1588; AVX512BW-NEXT:    vpandn %xmm3, %xmm2, %xmm2589; AVX512BW-NEXT:    vpaddw %zmm0, %zmm0, %zmm0590; AVX512BW-NEXT:    vpsllw %xmm2, %zmm0, %zmm0591; AVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm0592; AVX512BW-NEXT:    retq593;594; AVX512VBMI2-LABEL: splatvar_funnnel_v32i16:595; AVX512VBMI2:       # %bb.0:596; AVX512VBMI2-NEXT:    vpbroadcastw %xmm2, %zmm2597; AVX512VBMI2-NEXT:    vpshrdvw %zmm2, %zmm0, %zmm1598; AVX512VBMI2-NEXT:    vmovdqa64 %zmm1, %zmm0599; AVX512VBMI2-NEXT:    retq600;601; AVX512VLBW-LABEL: splatvar_funnnel_v32i16:602; AVX512VLBW:       # %bb.0:603; AVX512VLBW-NEXT:    vpbroadcastq {{.*#+}} xmm3 = [15,0,0,0,15,0,0,0]604; AVX512VLBW-NEXT:    vpand %xmm3, %xmm2, %xmm4605; AVX512VLBW-NEXT:    vpsrlw %xmm4, %zmm1, %zmm1606; AVX512VLBW-NEXT:    vpandn %xmm3, %xmm2, %xmm2607; AVX512VLBW-NEXT:    vpaddw %zmm0, %zmm0, %zmm0608; AVX512VLBW-NEXT:    vpsllw %xmm2, %zmm0, %zmm0609; AVX512VLBW-NEXT:    vporq %zmm1, %zmm0, %zmm0610; AVX512VLBW-NEXT:    retq611;612; AVX512VLVBMI2-LABEL: splatvar_funnnel_v32i16:613; AVX512VLVBMI2:       # %bb.0:614; AVX512VLVBMI2-NEXT:    vpbroadcastw %xmm2, %zmm2615; AVX512VLVBMI2-NEXT:    vpshrdvw %zmm2, %zmm0, %zmm1616; AVX512VLVBMI2-NEXT:    vmovdqa64 %zmm1, %zmm0617; AVX512VLVBMI2-NEXT:    retq618  %splat = shufflevector <32 x i16> %amt, <32 x i16> undef, <32 x i32> zeroinitializer619  %res = call <32 x i16> @llvm.fshr.v32i16(<32 x i16> %x, <32 x i16> %y, <32 x i16> %splat)620  ret <32 x i16> %res621}622 623define <64 x i8> @splatvar_funnnel_v64i8(<64 x i8> %x, <64 x i8> %y, <64 x i8> %amt) nounwind {624; AVX512F-LABEL: splatvar_funnnel_v64i8:625; AVX512F:       # %bb.0:626; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3627; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm4628; AVX512F-NEXT:    vpunpckhbw {{.*#+}} ymm5 = ymm4[8],ymm3[8],ymm4[9],ymm3[9],ymm4[10],ymm3[10],ymm4[11],ymm3[11],ymm4[12],ymm3[12],ymm4[13],ymm3[13],ymm4[14],ymm3[14],ymm4[15],ymm3[15],ymm4[24],ymm3[24],ymm4[25],ymm3[25],ymm4[26],ymm3[26],ymm4[27],ymm3[27],ymm4[28],ymm3[28],ymm4[29],ymm3[29],ymm4[30],ymm3[30],ymm4[31],ymm3[31]629; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2630; AVX512F-NEXT:    vpsrlw %xmm2, %ymm5, %ymm5631; AVX512F-NEXT:    vpbroadcastw {{.*#+}} ymm6 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]632; AVX512F-NEXT:    vpand %ymm6, %ymm5, %ymm5633; AVX512F-NEXT:    vpunpcklbw {{.*#+}} ymm3 = ymm4[0],ymm3[0],ymm4[1],ymm3[1],ymm4[2],ymm3[2],ymm4[3],ymm3[3],ymm4[4],ymm3[4],ymm4[5],ymm3[5],ymm4[6],ymm3[6],ymm4[7],ymm3[7],ymm4[16],ymm3[16],ymm4[17],ymm3[17],ymm4[18],ymm3[18],ymm4[19],ymm3[19],ymm4[20],ymm3[20],ymm4[21],ymm3[21],ymm4[22],ymm3[22],ymm4[23],ymm3[23]634; AVX512F-NEXT:    vpsrlw %xmm2, %ymm3, %ymm3635; AVX512F-NEXT:    vpand %ymm6, %ymm3, %ymm3636; AVX512F-NEXT:    vpackuswb %ymm5, %ymm3, %ymm3637; AVX512F-NEXT:    vpunpckhbw {{.*#+}} ymm4 = 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]638; AVX512F-NEXT:    vpsrlw %xmm2, %ymm4, %ymm4639; AVX512F-NEXT:    vpand %ymm6, %ymm4, %ymm4640; 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]641; AVX512F-NEXT:    vpsrlw %xmm2, %ymm0, %ymm0642; AVX512F-NEXT:    vpand %ymm6, %ymm0, %ymm0643; AVX512F-NEXT:    vpackuswb %ymm4, %ymm0, %ymm0644; AVX512F-NEXT:    vinserti64x4 $1, %ymm3, %zmm0, %zmm0645; AVX512F-NEXT:    retq646;647; AVX512VL-LABEL: splatvar_funnnel_v64i8:648; AVX512VL:       # %bb.0:649; AVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm3650; AVX512VL-NEXT:    vextracti64x4 $1, %zmm1, %ymm4651; AVX512VL-NEXT:    vpunpckhbw {{.*#+}} ymm5 = ymm4[8],ymm3[8],ymm4[9],ymm3[9],ymm4[10],ymm3[10],ymm4[11],ymm3[11],ymm4[12],ymm3[12],ymm4[13],ymm3[13],ymm4[14],ymm3[14],ymm4[15],ymm3[15],ymm4[24],ymm3[24],ymm4[25],ymm3[25],ymm4[26],ymm3[26],ymm4[27],ymm3[27],ymm4[28],ymm3[28],ymm4[29],ymm3[29],ymm4[30],ymm3[30],ymm4[31],ymm3[31]652; AVX512VL-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2653; AVX512VL-NEXT:    vpsrlw %xmm2, %ymm5, %ymm5654; AVX512VL-NEXT:    vpbroadcastd {{.*#+}} ymm6 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]655; AVX512VL-NEXT:    vpand %ymm6, %ymm5, %ymm5656; AVX512VL-NEXT:    vpunpcklbw {{.*#+}} ymm3 = ymm4[0],ymm3[0],ymm4[1],ymm3[1],ymm4[2],ymm3[2],ymm4[3],ymm3[3],ymm4[4],ymm3[4],ymm4[5],ymm3[5],ymm4[6],ymm3[6],ymm4[7],ymm3[7],ymm4[16],ymm3[16],ymm4[17],ymm3[17],ymm4[18],ymm3[18],ymm4[19],ymm3[19],ymm4[20],ymm3[20],ymm4[21],ymm3[21],ymm4[22],ymm3[22],ymm4[23],ymm3[23]657; AVX512VL-NEXT:    vpsrlw %xmm2, %ymm3, %ymm3658; AVX512VL-NEXT:    vpand %ymm6, %ymm3, %ymm3659; AVX512VL-NEXT:    vpackuswb %ymm5, %ymm3, %ymm3660; AVX512VL-NEXT:    vpunpckhbw {{.*#+}} ymm4 = 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]661; AVX512VL-NEXT:    vpsrlw %xmm2, %ymm4, %ymm4662; AVX512VL-NEXT:    vpand %ymm6, %ymm4, %ymm4663; 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]664; AVX512VL-NEXT:    vpsrlw %xmm2, %ymm0, %ymm0665; AVX512VL-NEXT:    vpand %ymm6, %ymm0, %ymm0666; AVX512VL-NEXT:    vpackuswb %ymm4, %ymm0, %ymm0667; AVX512VL-NEXT:    vinserti64x4 $1, %ymm3, %zmm0, %zmm0668; AVX512VL-NEXT:    retq669;670; AVX512BW-LABEL: splatvar_funnnel_v64i8:671; AVX512BW:       # %bb.0:672; AVX512BW-NEXT:    vpunpckhbw {{.*#+}} zmm3 = zmm1[8],zmm0[8],zmm1[9],zmm0[9],zmm1[10],zmm0[10],zmm1[11],zmm0[11],zmm1[12],zmm0[12],zmm1[13],zmm0[13],zmm1[14],zmm0[14],zmm1[15],zmm0[15],zmm1[24],zmm0[24],zmm1[25],zmm0[25],zmm1[26],zmm0[26],zmm1[27],zmm0[27],zmm1[28],zmm0[28],zmm1[29],zmm0[29],zmm1[30],zmm0[30],zmm1[31],zmm0[31],zmm1[40],zmm0[40],zmm1[41],zmm0[41],zmm1[42],zmm0[42],zmm1[43],zmm0[43],zmm1[44],zmm0[44],zmm1[45],zmm0[45],zmm1[46],zmm0[46],zmm1[47],zmm0[47],zmm1[56],zmm0[56],zmm1[57],zmm0[57],zmm1[58],zmm0[58],zmm1[59],zmm0[59],zmm1[60],zmm0[60],zmm1[61],zmm0[61],zmm1[62],zmm0[62],zmm1[63],zmm0[63]673; AVX512BW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2674; AVX512BW-NEXT:    vpsrlw %xmm2, %zmm3, %zmm3675; AVX512BW-NEXT:    vpbroadcastw {{.*#+}} zmm4 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]676; AVX512BW-NEXT:    vpandq %zmm4, %zmm3, %zmm3677; AVX512BW-NEXT:    vpunpcklbw {{.*#+}} zmm0 = zmm1[0],zmm0[0],zmm1[1],zmm0[1],zmm1[2],zmm0[2],zmm1[3],zmm0[3],zmm1[4],zmm0[4],zmm1[5],zmm0[5],zmm1[6],zmm0[6],zmm1[7],zmm0[7],zmm1[16],zmm0[16],zmm1[17],zmm0[17],zmm1[18],zmm0[18],zmm1[19],zmm0[19],zmm1[20],zmm0[20],zmm1[21],zmm0[21],zmm1[22],zmm0[22],zmm1[23],zmm0[23],zmm1[32],zmm0[32],zmm1[33],zmm0[33],zmm1[34],zmm0[34],zmm1[35],zmm0[35],zmm1[36],zmm0[36],zmm1[37],zmm0[37],zmm1[38],zmm0[38],zmm1[39],zmm0[39],zmm1[48],zmm0[48],zmm1[49],zmm0[49],zmm1[50],zmm0[50],zmm1[51],zmm0[51],zmm1[52],zmm0[52],zmm1[53],zmm0[53],zmm1[54],zmm0[54],zmm1[55],zmm0[55]678; AVX512BW-NEXT:    vpsrlw %xmm2, %zmm0, %zmm0679; AVX512BW-NEXT:    vpandq %zmm4, %zmm0, %zmm0680; AVX512BW-NEXT:    vpackuswb %zmm3, %zmm0, %zmm0681; AVX512BW-NEXT:    retq682;683; AVX512VBMI2-LABEL: splatvar_funnnel_v64i8:684; AVX512VBMI2:       # %bb.0:685; AVX512VBMI2-NEXT:    vpunpckhbw {{.*#+}} zmm3 = zmm1[8],zmm0[8],zmm1[9],zmm0[9],zmm1[10],zmm0[10],zmm1[11],zmm0[11],zmm1[12],zmm0[12],zmm1[13],zmm0[13],zmm1[14],zmm0[14],zmm1[15],zmm0[15],zmm1[24],zmm0[24],zmm1[25],zmm0[25],zmm1[26],zmm0[26],zmm1[27],zmm0[27],zmm1[28],zmm0[28],zmm1[29],zmm0[29],zmm1[30],zmm0[30],zmm1[31],zmm0[31],zmm1[40],zmm0[40],zmm1[41],zmm0[41],zmm1[42],zmm0[42],zmm1[43],zmm0[43],zmm1[44],zmm0[44],zmm1[45],zmm0[45],zmm1[46],zmm0[46],zmm1[47],zmm0[47],zmm1[56],zmm0[56],zmm1[57],zmm0[57],zmm1[58],zmm0[58],zmm1[59],zmm0[59],zmm1[60],zmm0[60],zmm1[61],zmm0[61],zmm1[62],zmm0[62],zmm1[63],zmm0[63]686; AVX512VBMI2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2687; AVX512VBMI2-NEXT:    vpsrlw %xmm2, %zmm3, %zmm3688; AVX512VBMI2-NEXT:    vpunpcklbw {{.*#+}} zmm0 = zmm1[0],zmm0[0],zmm1[1],zmm0[1],zmm1[2],zmm0[2],zmm1[3],zmm0[3],zmm1[4],zmm0[4],zmm1[5],zmm0[5],zmm1[6],zmm0[6],zmm1[7],zmm0[7],zmm1[16],zmm0[16],zmm1[17],zmm0[17],zmm1[18],zmm0[18],zmm1[19],zmm0[19],zmm1[20],zmm0[20],zmm1[21],zmm0[21],zmm1[22],zmm0[22],zmm1[23],zmm0[23],zmm1[32],zmm0[32],zmm1[33],zmm0[33],zmm1[34],zmm0[34],zmm1[35],zmm0[35],zmm1[36],zmm0[36],zmm1[37],zmm0[37],zmm1[38],zmm0[38],zmm1[39],zmm0[39],zmm1[48],zmm0[48],zmm1[49],zmm0[49],zmm1[50],zmm0[50],zmm1[51],zmm0[51],zmm1[52],zmm0[52],zmm1[53],zmm0[53],zmm1[54],zmm0[54],zmm1[55],zmm0[55]689; AVX512VBMI2-NEXT:    vpsrlw %xmm2, %zmm0, %zmm1690; AVX512VBMI2-NEXT:    vmovdqa64 {{.*#+}} zmm0 = [0,2,4,6,8,10,12,14,64,66,68,70,72,74,76,78,16,18,20,22,24,26,28,30,80,82,84,86,88,90,92,94,32,34,36,38,40,42,44,46,96,98,100,102,104,106,108,110,48,50,52,54,56,58,60,62,112,114,116,118,120,122,124,126]691; AVX512VBMI2-NEXT:    vpermi2b %zmm3, %zmm1, %zmm0692; AVX512VBMI2-NEXT:    retq693;694; AVX512VLBW-LABEL: splatvar_funnnel_v64i8:695; AVX512VLBW:       # %bb.0:696; AVX512VLBW-NEXT:    vpunpckhbw {{.*#+}} zmm3 = zmm1[8],zmm0[8],zmm1[9],zmm0[9],zmm1[10],zmm0[10],zmm1[11],zmm0[11],zmm1[12],zmm0[12],zmm1[13],zmm0[13],zmm1[14],zmm0[14],zmm1[15],zmm0[15],zmm1[24],zmm0[24],zmm1[25],zmm0[25],zmm1[26],zmm0[26],zmm1[27],zmm0[27],zmm1[28],zmm0[28],zmm1[29],zmm0[29],zmm1[30],zmm0[30],zmm1[31],zmm0[31],zmm1[40],zmm0[40],zmm1[41],zmm0[41],zmm1[42],zmm0[42],zmm1[43],zmm0[43],zmm1[44],zmm0[44],zmm1[45],zmm0[45],zmm1[46],zmm0[46],zmm1[47],zmm0[47],zmm1[56],zmm0[56],zmm1[57],zmm0[57],zmm1[58],zmm0[58],zmm1[59],zmm0[59],zmm1[60],zmm0[60],zmm1[61],zmm0[61],zmm1[62],zmm0[62],zmm1[63],zmm0[63]697; AVX512VLBW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2698; AVX512VLBW-NEXT:    vpsrlw %xmm2, %zmm3, %zmm3699; AVX512VLBW-NEXT:    vpbroadcastw {{.*#+}} zmm4 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]700; AVX512VLBW-NEXT:    vpandq %zmm4, %zmm3, %zmm3701; AVX512VLBW-NEXT:    vpunpcklbw {{.*#+}} zmm0 = zmm1[0],zmm0[0],zmm1[1],zmm0[1],zmm1[2],zmm0[2],zmm1[3],zmm0[3],zmm1[4],zmm0[4],zmm1[5],zmm0[5],zmm1[6],zmm0[6],zmm1[7],zmm0[7],zmm1[16],zmm0[16],zmm1[17],zmm0[17],zmm1[18],zmm0[18],zmm1[19],zmm0[19],zmm1[20],zmm0[20],zmm1[21],zmm0[21],zmm1[22],zmm0[22],zmm1[23],zmm0[23],zmm1[32],zmm0[32],zmm1[33],zmm0[33],zmm1[34],zmm0[34],zmm1[35],zmm0[35],zmm1[36],zmm0[36],zmm1[37],zmm0[37],zmm1[38],zmm0[38],zmm1[39],zmm0[39],zmm1[48],zmm0[48],zmm1[49],zmm0[49],zmm1[50],zmm0[50],zmm1[51],zmm0[51],zmm1[52],zmm0[52],zmm1[53],zmm0[53],zmm1[54],zmm0[54],zmm1[55],zmm0[55]702; AVX512VLBW-NEXT:    vpsrlw %xmm2, %zmm0, %zmm0703; AVX512VLBW-NEXT:    vpandq %zmm4, %zmm0, %zmm0704; AVX512VLBW-NEXT:    vpackuswb %zmm3, %zmm0, %zmm0705; AVX512VLBW-NEXT:    retq706;707; AVX512VLVBMI2-LABEL: splatvar_funnnel_v64i8:708; AVX512VLVBMI2:       # %bb.0:709; AVX512VLVBMI2-NEXT:    vpunpckhbw {{.*#+}} zmm3 = zmm1[8],zmm0[8],zmm1[9],zmm0[9],zmm1[10],zmm0[10],zmm1[11],zmm0[11],zmm1[12],zmm0[12],zmm1[13],zmm0[13],zmm1[14],zmm0[14],zmm1[15],zmm0[15],zmm1[24],zmm0[24],zmm1[25],zmm0[25],zmm1[26],zmm0[26],zmm1[27],zmm0[27],zmm1[28],zmm0[28],zmm1[29],zmm0[29],zmm1[30],zmm0[30],zmm1[31],zmm0[31],zmm1[40],zmm0[40],zmm1[41],zmm0[41],zmm1[42],zmm0[42],zmm1[43],zmm0[43],zmm1[44],zmm0[44],zmm1[45],zmm0[45],zmm1[46],zmm0[46],zmm1[47],zmm0[47],zmm1[56],zmm0[56],zmm1[57],zmm0[57],zmm1[58],zmm0[58],zmm1[59],zmm0[59],zmm1[60],zmm0[60],zmm1[61],zmm0[61],zmm1[62],zmm0[62],zmm1[63],zmm0[63]710; AVX512VLVBMI2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2711; AVX512VLVBMI2-NEXT:    vpsrlw %xmm2, %zmm3, %zmm3712; AVX512VLVBMI2-NEXT:    vpunpcklbw {{.*#+}} zmm0 = zmm1[0],zmm0[0],zmm1[1],zmm0[1],zmm1[2],zmm0[2],zmm1[3],zmm0[3],zmm1[4],zmm0[4],zmm1[5],zmm0[5],zmm1[6],zmm0[6],zmm1[7],zmm0[7],zmm1[16],zmm0[16],zmm1[17],zmm0[17],zmm1[18],zmm0[18],zmm1[19],zmm0[19],zmm1[20],zmm0[20],zmm1[21],zmm0[21],zmm1[22],zmm0[22],zmm1[23],zmm0[23],zmm1[32],zmm0[32],zmm1[33],zmm0[33],zmm1[34],zmm0[34],zmm1[35],zmm0[35],zmm1[36],zmm0[36],zmm1[37],zmm0[37],zmm1[38],zmm0[38],zmm1[39],zmm0[39],zmm1[48],zmm0[48],zmm1[49],zmm0[49],zmm1[50],zmm0[50],zmm1[51],zmm0[51],zmm1[52],zmm0[52],zmm1[53],zmm0[53],zmm1[54],zmm0[54],zmm1[55],zmm0[55]713; AVX512VLVBMI2-NEXT:    vpsrlw %xmm2, %zmm0, %zmm1714; AVX512VLVBMI2-NEXT:    vmovdqa64 {{.*#+}} zmm0 = [0,2,4,6,8,10,12,14,64,66,68,70,72,74,76,78,16,18,20,22,24,26,28,30,80,82,84,86,88,90,92,94,32,34,36,38,40,42,44,46,96,98,100,102,104,106,108,110,48,50,52,54,56,58,60,62,112,114,116,118,120,122,124,126]715; AVX512VLVBMI2-NEXT:    vpermi2b %zmm3, %zmm1, %zmm0716; AVX512VLVBMI2-NEXT:    retq717  %splat = shufflevector <64 x i8> %amt, <64 x i8> undef, <64 x i32> zeroinitializer718  %res = call <64 x i8> @llvm.fshr.v64i8(<64 x i8> %x, <64 x i8> %y, <64 x i8> %splat)719  ret <64 x i8> %res720}721 722;723; Constant Shifts724;725 726define <8 x i64> @constant_funnnel_v8i64(<8 x i64> %x, <8 x i64> %y) nounwind {727; AVX512F-LABEL: constant_funnnel_v8i64:728; AVX512F:       # %bb.0:729; AVX512F-NEXT:    vpsrlvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1730; AVX512F-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0731; AVX512F-NEXT:    vporq %zmm1, %zmm0, %zmm0732; AVX512F-NEXT:    retq733;734; AVX512VL-LABEL: constant_funnnel_v8i64:735; AVX512VL:       # %bb.0:736; AVX512VL-NEXT:    vpsrlvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1737; AVX512VL-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0738; AVX512VL-NEXT:    vporq %zmm1, %zmm0, %zmm0739; AVX512VL-NEXT:    retq740;741; AVX512BW-LABEL: constant_funnnel_v8i64:742; AVX512BW:       # %bb.0:743; AVX512BW-NEXT:    vpsrlvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1744; AVX512BW-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0745; AVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm0746; AVX512BW-NEXT:    retq747;748; AVX512VBMI2-LABEL: constant_funnnel_v8i64:749; AVX512VBMI2:       # %bb.0:750; AVX512VBMI2-NEXT:    vpshrdvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm1751; AVX512VBMI2-NEXT:    vmovdqa64 %zmm1, %zmm0752; AVX512VBMI2-NEXT:    retq753;754; AVX512VLBW-LABEL: constant_funnnel_v8i64:755; AVX512VLBW:       # %bb.0:756; AVX512VLBW-NEXT:    vpsrlvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1757; AVX512VLBW-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0758; AVX512VLBW-NEXT:    vporq %zmm1, %zmm0, %zmm0759; AVX512VLBW-NEXT:    retq760;761; AVX512VLVBMI2-LABEL: constant_funnnel_v8i64:762; AVX512VLVBMI2:       # %bb.0:763; AVX512VLVBMI2-NEXT:    vpshrdvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm1764; AVX512VLVBMI2-NEXT:    vmovdqa64 %zmm1, %zmm0765; AVX512VLVBMI2-NEXT:    retq766  %res = call <8 x i64> @llvm.fshr.v8i64(<8 x i64> %x, <8 x i64> %y, <8 x i64> <i64 4, i64 14, i64 50, i64 60, i64 4, i64 14, i64 50, i64 60>)767  ret <8 x i64> %res768}769 770define <16 x i32> @constant_funnnel_v16i32(<16 x i32> %x, <16 x i32> %y) nounwind {771; AVX512F-LABEL: constant_funnnel_v16i32:772; AVX512F:       # %bb.0:773; AVX512F-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1774; AVX512F-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0775; AVX512F-NEXT:    vpord %zmm1, %zmm0, %zmm0776; AVX512F-NEXT:    retq777;778; AVX512VL-LABEL: constant_funnnel_v16i32:779; AVX512VL:       # %bb.0:780; AVX512VL-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1781; AVX512VL-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0782; AVX512VL-NEXT:    vpord %zmm1, %zmm0, %zmm0783; AVX512VL-NEXT:    retq784;785; AVX512BW-LABEL: constant_funnnel_v16i32:786; AVX512BW:       # %bb.0:787; AVX512BW-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1788; AVX512BW-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0789; AVX512BW-NEXT:    vpord %zmm1, %zmm0, %zmm0790; AVX512BW-NEXT:    retq791;792; AVX512VBMI2-LABEL: constant_funnnel_v16i32:793; AVX512VBMI2:       # %bb.0:794; AVX512VBMI2-NEXT:    vpshrdvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm1795; AVX512VBMI2-NEXT:    vmovdqa64 %zmm1, %zmm0796; AVX512VBMI2-NEXT:    retq797;798; AVX512VLBW-LABEL: constant_funnnel_v16i32:799; AVX512VLBW:       # %bb.0:800; AVX512VLBW-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1801; AVX512VLBW-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0802; AVX512VLBW-NEXT:    vpord %zmm1, %zmm0, %zmm0803; AVX512VLBW-NEXT:    retq804;805; AVX512VLVBMI2-LABEL: constant_funnnel_v16i32:806; AVX512VLVBMI2:       # %bb.0:807; AVX512VLVBMI2-NEXT:    vpshrdvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm1808; AVX512VLVBMI2-NEXT:    vmovdqa64 %zmm1, %zmm0809; AVX512VLVBMI2-NEXT:    retq810  %res = call <16 x i32> @llvm.fshr.v16i32(<16 x i32> %x, <16 x i32> %y, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11>)811  ret <16 x i32> %res812}813 814define <32 x i16> @constant_funnnel_v32i16(<32 x i16> %x, <32 x i16> %y) nounwind {815; AVX512F-LABEL: constant_funnnel_v32i16:816; AVX512F:       # %bb.0:817; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2818; AVX512F-NEXT:    vmovdqa {{.*#+}} ymm3 = [u,32768,16384,8192,4096,2048,1024,512,256,128,64,32,16,8,4,2]819; AVX512F-NEXT:    vpmulhuw %ymm3, %ymm2, %ymm4820; AVX512F-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0],xmm4[1,2,3,4,5,6,7]821; AVX512F-NEXT:    vpblendd {{.*#+}} ymm2 = ymm2[0,1,2,3],ymm4[4,5,6,7]822; AVX512F-NEXT:    vpmulhuw %ymm3, %ymm1, %ymm3823; AVX512F-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm3[1,2,3,4,5,6,7]824; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm3[4,5,6,7]825; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1826; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm2827; AVX512F-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,32768,16384,8192,4096,2048,1024,512,256,128,64,32,16,8,4,2]828; AVX512F-NEXT:    vpmullw %ymm3, %ymm2, %ymm2829; AVX512F-NEXT:    vpmullw %ymm3, %ymm0, %ymm0830; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0831; AVX512F-NEXT:    vporq %zmm1, %zmm0, %zmm0832; AVX512F-NEXT:    retq833;834; AVX512VL-LABEL: constant_funnnel_v32i16:835; AVX512VL:       # %bb.0:836; AVX512VL-NEXT:    vextracti64x4 $1, %zmm1, %ymm2837; AVX512VL-NEXT:    vmovdqa {{.*#+}} ymm3 = [u,32768,16384,8192,4096,2048,1024,512,256,128,64,32,16,8,4,2]838; AVX512VL-NEXT:    vpmulhuw %ymm3, %ymm2, %ymm4839; AVX512VL-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0],xmm4[1,2,3,4,5,6,7]840; AVX512VL-NEXT:    vpblendd {{.*#+}} ymm2 = ymm2[0,1,2,3],ymm4[4,5,6,7]841; AVX512VL-NEXT:    vpmulhuw %ymm3, %ymm1, %ymm3842; AVX512VL-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm3[1,2,3,4,5,6,7]843; AVX512VL-NEXT:    vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm3[4,5,6,7]844; AVX512VL-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1845; AVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm2846; AVX512VL-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,32768,16384,8192,4096,2048,1024,512,256,128,64,32,16,8,4,2]847; AVX512VL-NEXT:    vpmullw %ymm3, %ymm2, %ymm2848; AVX512VL-NEXT:    vpmullw %ymm3, %ymm0, %ymm0849; AVX512VL-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0850; AVX512VL-NEXT:    vporq %zmm1, %zmm0, %zmm0851; AVX512VL-NEXT:    retq852;853; AVX512BW-LABEL: constant_funnnel_v32i16:854; AVX512BW:       # %bb.0:855; AVX512BW-NEXT:    vpsrlvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1856; AVX512BW-NEXT:    vpaddw %zmm0, %zmm0, %zmm0857; AVX512BW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0858; AVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm0859; AVX512BW-NEXT:    retq860;861; AVX512VBMI2-LABEL: constant_funnnel_v32i16:862; AVX512VBMI2:       # %bb.0:863; AVX512VBMI2-NEXT:    vpshrdvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm1864; AVX512VBMI2-NEXT:    vmovdqa64 %zmm1, %zmm0865; AVX512VBMI2-NEXT:    retq866;867; AVX512VLBW-LABEL: constant_funnnel_v32i16:868; AVX512VLBW:       # %bb.0:869; AVX512VLBW-NEXT:    vpsrlvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1870; AVX512VLBW-NEXT:    vpaddw %zmm0, %zmm0, %zmm0871; AVX512VLBW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0872; AVX512VLBW-NEXT:    vporq %zmm1, %zmm0, %zmm0873; AVX512VLBW-NEXT:    retq874;875; AVX512VLVBMI2-LABEL: constant_funnnel_v32i16:876; AVX512VLVBMI2:       # %bb.0:877; AVX512VLVBMI2-NEXT:    vpshrdvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm1878; AVX512VLVBMI2-NEXT:    vmovdqa64 %zmm1, %zmm0879; AVX512VLVBMI2-NEXT:    retq880  %res = call <32 x i16> @llvm.fshr.v32i16(<32 x i16> %x, <32 x i16> %y, <32 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, 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>)881  ret <32 x i16> %res882}883 884define <64 x i8> @constant_funnnel_v64i8(<64 x i8> %x, <64 x i8> %y) nounwind {885; AVX512F-LABEL: constant_funnnel_v64i8:886; AVX512F:       # %bb.0:887; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2888; AVX512F-NEXT:    vpxor %xmm3, %xmm3, %xmm3889; AVX512F-NEXT:    vpunpckhbw {{.*#+}} ymm4 = ymm2[8],ymm3[8],ymm2[9],ymm3[9],ymm2[10],ymm3[10],ymm2[11],ymm3[11],ymm2[12],ymm3[12],ymm2[13],ymm3[13],ymm2[14],ymm3[14],ymm2[15],ymm3[15],ymm2[24],ymm3[24],ymm2[25],ymm3[25],ymm2[26],ymm3[26],ymm2[27],ymm3[27],ymm2[28],ymm3[28],ymm2[29],ymm3[29],ymm2[30],ymm3[30],ymm2[31],ymm3[31]890; AVX512F-NEXT:    vbroadcasti128 {{.*#+}} ymm5 = [256,2,4,8,16,32,64,128,256,2,4,8,16,32,64,128]891; AVX512F-NEXT:    # ymm5 = mem[0,1,0,1]892; AVX512F-NEXT:    vpmullw %ymm5, %ymm4, %ymm4893; AVX512F-NEXT:    vpsrlw $8, %ymm4, %ymm4894; AVX512F-NEXT:    vpunpcklbw {{.*#+}} ymm2 = ymm2[0],ymm3[0],ymm2[1],ymm3[1],ymm2[2],ymm3[2],ymm2[3],ymm3[3],ymm2[4],ymm3[4],ymm2[5],ymm3[5],ymm2[6],ymm3[6],ymm2[7],ymm3[7],ymm2[16],ymm3[16],ymm2[17],ymm3[17],ymm2[18],ymm3[18],ymm2[19],ymm3[19],ymm2[20],ymm3[20],ymm2[21],ymm3[21],ymm2[22],ymm3[22],ymm2[23],ymm3[23]895; AVX512F-NEXT:    vbroadcasti128 {{.*#+}} ymm6 = [256,128,64,32,16,8,4,2,256,128,64,32,16,8,4,2]896; AVX512F-NEXT:    # ymm6 = mem[0,1,0,1]897; AVX512F-NEXT:    vpmullw %ymm6, %ymm2, %ymm2898; AVX512F-NEXT:    vpsrlw $8, %ymm2, %ymm2899; AVX512F-NEXT:    vpackuswb %ymm4, %ymm2, %ymm2900; AVX512F-NEXT:    vpunpckhbw {{.*#+}} ymm4 = ymm1[8],ymm3[8],ymm1[9],ymm3[9],ymm1[10],ymm3[10],ymm1[11],ymm3[11],ymm1[12],ymm3[12],ymm1[13],ymm3[13],ymm1[14],ymm3[14],ymm1[15],ymm3[15],ymm1[24],ymm3[24],ymm1[25],ymm3[25],ymm1[26],ymm3[26],ymm1[27],ymm3[27],ymm1[28],ymm3[28],ymm1[29],ymm3[29],ymm1[30],ymm3[30],ymm1[31],ymm3[31]901; AVX512F-NEXT:    vpmullw %ymm5, %ymm4, %ymm4902; AVX512F-NEXT:    vpsrlw $8, %ymm4, %ymm4903; AVX512F-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm1[0],ymm3[0],ymm1[1],ymm3[1],ymm1[2],ymm3[2],ymm1[3],ymm3[3],ymm1[4],ymm3[4],ymm1[5],ymm3[5],ymm1[6],ymm3[6],ymm1[7],ymm3[7],ymm1[16],ymm3[16],ymm1[17],ymm3[17],ymm1[18],ymm3[18],ymm1[19],ymm3[19],ymm1[20],ymm3[20],ymm1[21],ymm3[21],ymm1[22],ymm3[22],ymm1[23],ymm3[23]904; AVX512F-NEXT:    vpmullw %ymm6, %ymm1, %ymm1905; AVX512F-NEXT:    vpsrlw $8, %ymm1, %ymm1906; AVX512F-NEXT:    vpackuswb %ymm4, %ymm1, %ymm1907; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1908; AVX512F-NEXT:    vpaddb %ymm0, %ymm0, %ymm2909; AVX512F-NEXT:    vbroadcasti128 {{.*#+}} ymm3 = [0,64,0,16,0,4,0,1,0,1,0,4,0,16,0,64,0,64,0,16,0,4,0,1,0,1,0,4,0,16,0,64]910; AVX512F-NEXT:    # ymm3 = mem[0,1,0,1]911; AVX512F-NEXT:    vpmaddubsw %ymm3, %ymm2, %ymm4912; AVX512F-NEXT:    vpsllw $8, %ymm4, %ymm4913; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm0914; AVX512F-NEXT:    vpaddb %ymm0, %ymm0, %ymm0915; AVX512F-NEXT:    vpmaddubsw %ymm3, %ymm0, %ymm3916; AVX512F-NEXT:    vpsllw $8, %ymm3, %ymm3917; AVX512F-NEXT:    vinserti64x4 $1, %ymm3, %zmm4, %zmm3918; AVX512F-NEXT:    vbroadcasti128 {{.*#+}} ymm4 = [128,64,32,16,8,4,2,1,128,1,2,4,8,16,32,64,128,64,32,16,8,4,2,1,128,1,2,4,8,16,32,64]919; AVX512F-NEXT:    # ymm4 = mem[0,1,0,1]920; AVX512F-NEXT:    vpmullw %ymm4, %ymm0, %ymm0921; AVX512F-NEXT:    vpmullw %ymm4, %ymm2, %ymm2922; AVX512F-NEXT:    vinserti64x4 $1, %ymm0, %zmm2, %zmm0923; AVX512F-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm0924; AVX512F-NEXT:    vpternlogq {{.*#+}} zmm0 = zmm0 | zmm1 | zmm3925; AVX512F-NEXT:    retq926;927; AVX512VL-LABEL: constant_funnnel_v64i8:928; AVX512VL:       # %bb.0:929; AVX512VL-NEXT:    vextracti64x4 $1, %zmm1, %ymm2930; AVX512VL-NEXT:    vpxor %xmm3, %xmm3, %xmm3931; AVX512VL-NEXT:    vpunpckhbw {{.*#+}} ymm4 = ymm2[8],ymm3[8],ymm2[9],ymm3[9],ymm2[10],ymm3[10],ymm2[11],ymm3[11],ymm2[12],ymm3[12],ymm2[13],ymm3[13],ymm2[14],ymm3[14],ymm2[15],ymm3[15],ymm2[24],ymm3[24],ymm2[25],ymm3[25],ymm2[26],ymm3[26],ymm2[27],ymm3[27],ymm2[28],ymm3[28],ymm2[29],ymm3[29],ymm2[30],ymm3[30],ymm2[31],ymm3[31]932; AVX512VL-NEXT:    vbroadcasti128 {{.*#+}} ymm5 = [256,2,4,8,16,32,64,128,256,2,4,8,16,32,64,128]933; AVX512VL-NEXT:    # ymm5 = mem[0,1,0,1]934; AVX512VL-NEXT:    vpmullw %ymm5, %ymm4, %ymm4935; AVX512VL-NEXT:    vpsrlw $8, %ymm4, %ymm4936; AVX512VL-NEXT:    vpunpcklbw {{.*#+}} ymm2 = ymm2[0],ymm3[0],ymm2[1],ymm3[1],ymm2[2],ymm3[2],ymm2[3],ymm3[3],ymm2[4],ymm3[4],ymm2[5],ymm3[5],ymm2[6],ymm3[6],ymm2[7],ymm3[7],ymm2[16],ymm3[16],ymm2[17],ymm3[17],ymm2[18],ymm3[18],ymm2[19],ymm3[19],ymm2[20],ymm3[20],ymm2[21],ymm3[21],ymm2[22],ymm3[22],ymm2[23],ymm3[23]937; AVX512VL-NEXT:    vbroadcasti128 {{.*#+}} ymm6 = [256,128,64,32,16,8,4,2,256,128,64,32,16,8,4,2]938; AVX512VL-NEXT:    # ymm6 = mem[0,1,0,1]939; AVX512VL-NEXT:    vpmullw %ymm6, %ymm2, %ymm2940; AVX512VL-NEXT:    vpsrlw $8, %ymm2, %ymm2941; AVX512VL-NEXT:    vpackuswb %ymm4, %ymm2, %ymm2942; AVX512VL-NEXT:    vpunpckhbw {{.*#+}} ymm4 = ymm1[8],ymm3[8],ymm1[9],ymm3[9],ymm1[10],ymm3[10],ymm1[11],ymm3[11],ymm1[12],ymm3[12],ymm1[13],ymm3[13],ymm1[14],ymm3[14],ymm1[15],ymm3[15],ymm1[24],ymm3[24],ymm1[25],ymm3[25],ymm1[26],ymm3[26],ymm1[27],ymm3[27],ymm1[28],ymm3[28],ymm1[29],ymm3[29],ymm1[30],ymm3[30],ymm1[31],ymm3[31]943; AVX512VL-NEXT:    vpmullw %ymm5, %ymm4, %ymm4944; AVX512VL-NEXT:    vpsrlw $8, %ymm4, %ymm4945; AVX512VL-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm1[0],ymm3[0],ymm1[1],ymm3[1],ymm1[2],ymm3[2],ymm1[3],ymm3[3],ymm1[4],ymm3[4],ymm1[5],ymm3[5],ymm1[6],ymm3[6],ymm1[7],ymm3[7],ymm1[16],ymm3[16],ymm1[17],ymm3[17],ymm1[18],ymm3[18],ymm1[19],ymm3[19],ymm1[20],ymm3[20],ymm1[21],ymm3[21],ymm1[22],ymm3[22],ymm1[23],ymm3[23]946; AVX512VL-NEXT:    vpmullw %ymm6, %ymm1, %ymm1947; AVX512VL-NEXT:    vpsrlw $8, %ymm1, %ymm1948; AVX512VL-NEXT:    vpackuswb %ymm4, %ymm1, %ymm1949; AVX512VL-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm1950; AVX512VL-NEXT:    vpaddb %ymm0, %ymm0, %ymm2951; AVX512VL-NEXT:    vbroadcasti128 {{.*#+}} ymm3 = [0,64,0,16,0,4,0,1,0,1,0,4,0,16,0,64,0,64,0,16,0,4,0,1,0,1,0,4,0,16,0,64]952; AVX512VL-NEXT:    # ymm3 = mem[0,1,0,1]953; AVX512VL-NEXT:    vpmaddubsw %ymm3, %ymm2, %ymm4954; AVX512VL-NEXT:    vpsllw $8, %ymm4, %ymm4955; AVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm0956; AVX512VL-NEXT:    vpaddb %ymm0, %ymm0, %ymm0957; AVX512VL-NEXT:    vpmaddubsw %ymm3, %ymm0, %ymm3958; AVX512VL-NEXT:    vpsllw $8, %ymm3, %ymm3959; AVX512VL-NEXT:    vinserti64x4 $1, %ymm3, %zmm4, %zmm3960; AVX512VL-NEXT:    vbroadcasti128 {{.*#+}} ymm4 = [128,64,32,16,8,4,2,1,128,1,2,4,8,16,32,64,128,64,32,16,8,4,2,1,128,1,2,4,8,16,32,64]961; AVX512VL-NEXT:    # ymm4 = mem[0,1,0,1]962; AVX512VL-NEXT:    vpmullw %ymm4, %ymm0, %ymm0963; AVX512VL-NEXT:    vpmullw %ymm4, %ymm2, %ymm2964; AVX512VL-NEXT:    vinserti64x4 $1, %ymm0, %zmm2, %zmm0965; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm0966; AVX512VL-NEXT:    vpternlogq {{.*#+}} zmm0 = zmm0 | zmm1 | zmm3967; AVX512VL-NEXT:    retq968;969; AVX512BW-LABEL: constant_funnnel_v64i8:970; AVX512BW:       # %bb.0:971; AVX512BW-NEXT:    vpunpckhbw {{.*#+}} zmm2 = zmm1[8],zmm0[8],zmm1[9],zmm0[9],zmm1[10],zmm0[10],zmm1[11],zmm0[11],zmm1[12],zmm0[12],zmm1[13],zmm0[13],zmm1[14],zmm0[14],zmm1[15],zmm0[15],zmm1[24],zmm0[24],zmm1[25],zmm0[25],zmm1[26],zmm0[26],zmm1[27],zmm0[27],zmm1[28],zmm0[28],zmm1[29],zmm0[29],zmm1[30],zmm0[30],zmm1[31],zmm0[31],zmm1[40],zmm0[40],zmm1[41],zmm0[41],zmm1[42],zmm0[42],zmm1[43],zmm0[43],zmm1[44],zmm0[44],zmm1[45],zmm0[45],zmm1[46],zmm0[46],zmm1[47],zmm0[47],zmm1[56],zmm0[56],zmm1[57],zmm0[57],zmm1[58],zmm0[58],zmm1[59],zmm0[59],zmm1[60],zmm0[60],zmm1[61],zmm0[61],zmm1[62],zmm0[62],zmm1[63],zmm0[63]972; AVX512BW-NEXT:    vpsrlvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm2, %zmm2973; AVX512BW-NEXT:    vpbroadcastw {{.*#+}} zmm3 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]974; AVX512BW-NEXT:    vpandq %zmm3, %zmm2, %zmm2975; AVX512BW-NEXT:    vpunpcklbw {{.*#+}} zmm0 = zmm1[0],zmm0[0],zmm1[1],zmm0[1],zmm1[2],zmm0[2],zmm1[3],zmm0[3],zmm1[4],zmm0[4],zmm1[5],zmm0[5],zmm1[6],zmm0[6],zmm1[7],zmm0[7],zmm1[16],zmm0[16],zmm1[17],zmm0[17],zmm1[18],zmm0[18],zmm1[19],zmm0[19],zmm1[20],zmm0[20],zmm1[21],zmm0[21],zmm1[22],zmm0[22],zmm1[23],zmm0[23],zmm1[32],zmm0[32],zmm1[33],zmm0[33],zmm1[34],zmm0[34],zmm1[35],zmm0[35],zmm1[36],zmm0[36],zmm1[37],zmm0[37],zmm1[38],zmm0[38],zmm1[39],zmm0[39],zmm1[48],zmm0[48],zmm1[49],zmm0[49],zmm1[50],zmm0[50],zmm1[51],zmm0[51],zmm1[52],zmm0[52],zmm1[53],zmm0[53],zmm1[54],zmm0[54],zmm1[55],zmm0[55]976; AVX512BW-NEXT:    vpsrlvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0977; AVX512BW-NEXT:    vpandq %zmm3, %zmm0, %zmm0978; AVX512BW-NEXT:    vpackuswb %zmm2, %zmm0, %zmm0979; AVX512BW-NEXT:    retq980;981; AVX512VBMI2-LABEL: constant_funnnel_v64i8:982; AVX512VBMI2:       # %bb.0:983; AVX512VBMI2-NEXT:    vpunpckhbw {{.*#+}} zmm2 = zmm1[8],zmm0[8],zmm1[9],zmm0[9],zmm1[10],zmm0[10],zmm1[11],zmm0[11],zmm1[12],zmm0[12],zmm1[13],zmm0[13],zmm1[14],zmm0[14],zmm1[15],zmm0[15],zmm1[24],zmm0[24],zmm1[25],zmm0[25],zmm1[26],zmm0[26],zmm1[27],zmm0[27],zmm1[28],zmm0[28],zmm1[29],zmm0[29],zmm1[30],zmm0[30],zmm1[31],zmm0[31],zmm1[40],zmm0[40],zmm1[41],zmm0[41],zmm1[42],zmm0[42],zmm1[43],zmm0[43],zmm1[44],zmm0[44],zmm1[45],zmm0[45],zmm1[46],zmm0[46],zmm1[47],zmm0[47],zmm1[56],zmm0[56],zmm1[57],zmm0[57],zmm1[58],zmm0[58],zmm1[59],zmm0[59],zmm1[60],zmm0[60],zmm1[61],zmm0[61],zmm1[62],zmm0[62],zmm1[63],zmm0[63]984; AVX512VBMI2-NEXT:    vpsrlvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm2, %zmm2985; AVX512VBMI2-NEXT:    vpunpcklbw {{.*#+}} zmm0 = zmm1[0],zmm0[0],zmm1[1],zmm0[1],zmm1[2],zmm0[2],zmm1[3],zmm0[3],zmm1[4],zmm0[4],zmm1[5],zmm0[5],zmm1[6],zmm0[6],zmm1[7],zmm0[7],zmm1[16],zmm0[16],zmm1[17],zmm0[17],zmm1[18],zmm0[18],zmm1[19],zmm0[19],zmm1[20],zmm0[20],zmm1[21],zmm0[21],zmm1[22],zmm0[22],zmm1[23],zmm0[23],zmm1[32],zmm0[32],zmm1[33],zmm0[33],zmm1[34],zmm0[34],zmm1[35],zmm0[35],zmm1[36],zmm0[36],zmm1[37],zmm0[37],zmm1[38],zmm0[38],zmm1[39],zmm0[39],zmm1[48],zmm0[48],zmm1[49],zmm0[49],zmm1[50],zmm0[50],zmm1[51],zmm0[51],zmm1[52],zmm0[52],zmm1[53],zmm0[53],zmm1[54],zmm0[54],zmm1[55],zmm0[55]986; AVX512VBMI2-NEXT:    vpsrlvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm1987; AVX512VBMI2-NEXT:    vmovdqa64 {{.*#+}} zmm0 = [0,2,4,6,8,10,12,14,64,66,68,70,72,74,76,78,16,18,20,22,24,26,28,30,80,82,84,86,88,90,92,94,32,34,36,38,40,42,44,46,96,98,100,102,104,106,108,110,48,50,52,54,56,58,60,62,112,114,116,118,120,122,124,126]988; AVX512VBMI2-NEXT:    vpermi2b %zmm2, %zmm1, %zmm0989; AVX512VBMI2-NEXT:    retq990;991; AVX512VLBW-LABEL: constant_funnnel_v64i8:992; AVX512VLBW:       # %bb.0:993; AVX512VLBW-NEXT:    vpunpckhbw {{.*#+}} zmm2 = zmm1[8],zmm0[8],zmm1[9],zmm0[9],zmm1[10],zmm0[10],zmm1[11],zmm0[11],zmm1[12],zmm0[12],zmm1[13],zmm0[13],zmm1[14],zmm0[14],zmm1[15],zmm0[15],zmm1[24],zmm0[24],zmm1[25],zmm0[25],zmm1[26],zmm0[26],zmm1[27],zmm0[27],zmm1[28],zmm0[28],zmm1[29],zmm0[29],zmm1[30],zmm0[30],zmm1[31],zmm0[31],zmm1[40],zmm0[40],zmm1[41],zmm0[41],zmm1[42],zmm0[42],zmm1[43],zmm0[43],zmm1[44],zmm0[44],zmm1[45],zmm0[45],zmm1[46],zmm0[46],zmm1[47],zmm0[47],zmm1[56],zmm0[56],zmm1[57],zmm0[57],zmm1[58],zmm0[58],zmm1[59],zmm0[59],zmm1[60],zmm0[60],zmm1[61],zmm0[61],zmm1[62],zmm0[62],zmm1[63],zmm0[63]994; AVX512VLBW-NEXT:    vpsrlvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm2, %zmm2995; AVX512VLBW-NEXT:    vpbroadcastw {{.*#+}} zmm3 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]996; AVX512VLBW-NEXT:    vpandq %zmm3, %zmm2, %zmm2997; AVX512VLBW-NEXT:    vpunpcklbw {{.*#+}} zmm0 = zmm1[0],zmm0[0],zmm1[1],zmm0[1],zmm1[2],zmm0[2],zmm1[3],zmm0[3],zmm1[4],zmm0[4],zmm1[5],zmm0[5],zmm1[6],zmm0[6],zmm1[7],zmm0[7],zmm1[16],zmm0[16],zmm1[17],zmm0[17],zmm1[18],zmm0[18],zmm1[19],zmm0[19],zmm1[20],zmm0[20],zmm1[21],zmm0[21],zmm1[22],zmm0[22],zmm1[23],zmm0[23],zmm1[32],zmm0[32],zmm1[33],zmm0[33],zmm1[34],zmm0[34],zmm1[35],zmm0[35],zmm1[36],zmm0[36],zmm1[37],zmm0[37],zmm1[38],zmm0[38],zmm1[39],zmm0[39],zmm1[48],zmm0[48],zmm1[49],zmm0[49],zmm1[50],zmm0[50],zmm1[51],zmm0[51],zmm1[52],zmm0[52],zmm1[53],zmm0[53],zmm1[54],zmm0[54],zmm1[55],zmm0[55]998; AVX512VLBW-NEXT:    vpsrlvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0999; AVX512VLBW-NEXT:    vpandq %zmm3, %zmm0, %zmm01000; AVX512VLBW-NEXT:    vpackuswb %zmm2, %zmm0, %zmm01001; AVX512VLBW-NEXT:    retq1002;1003; AVX512VLVBMI2-LABEL: constant_funnnel_v64i8:1004; AVX512VLVBMI2:       # %bb.0:1005; AVX512VLVBMI2-NEXT:    vpunpckhbw {{.*#+}} zmm2 = zmm1[8],zmm0[8],zmm1[9],zmm0[9],zmm1[10],zmm0[10],zmm1[11],zmm0[11],zmm1[12],zmm0[12],zmm1[13],zmm0[13],zmm1[14],zmm0[14],zmm1[15],zmm0[15],zmm1[24],zmm0[24],zmm1[25],zmm0[25],zmm1[26],zmm0[26],zmm1[27],zmm0[27],zmm1[28],zmm0[28],zmm1[29],zmm0[29],zmm1[30],zmm0[30],zmm1[31],zmm0[31],zmm1[40],zmm0[40],zmm1[41],zmm0[41],zmm1[42],zmm0[42],zmm1[43],zmm0[43],zmm1[44],zmm0[44],zmm1[45],zmm0[45],zmm1[46],zmm0[46],zmm1[47],zmm0[47],zmm1[56],zmm0[56],zmm1[57],zmm0[57],zmm1[58],zmm0[58],zmm1[59],zmm0[59],zmm1[60],zmm0[60],zmm1[61],zmm0[61],zmm1[62],zmm0[62],zmm1[63],zmm0[63]1006; AVX512VLVBMI2-NEXT:    vpsrlvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm2, %zmm21007; AVX512VLVBMI2-NEXT:    vpunpcklbw {{.*#+}} zmm0 = zmm1[0],zmm0[0],zmm1[1],zmm0[1],zmm1[2],zmm0[2],zmm1[3],zmm0[3],zmm1[4],zmm0[4],zmm1[5],zmm0[5],zmm1[6],zmm0[6],zmm1[7],zmm0[7],zmm1[16],zmm0[16],zmm1[17],zmm0[17],zmm1[18],zmm0[18],zmm1[19],zmm0[19],zmm1[20],zmm0[20],zmm1[21],zmm0[21],zmm1[22],zmm0[22],zmm1[23],zmm0[23],zmm1[32],zmm0[32],zmm1[33],zmm0[33],zmm1[34],zmm0[34],zmm1[35],zmm0[35],zmm1[36],zmm0[36],zmm1[37],zmm0[37],zmm1[38],zmm0[38],zmm1[39],zmm0[39],zmm1[48],zmm0[48],zmm1[49],zmm0[49],zmm1[50],zmm0[50],zmm1[51],zmm0[51],zmm1[52],zmm0[52],zmm1[53],zmm0[53],zmm1[54],zmm0[54],zmm1[55],zmm0[55]1008; AVX512VLVBMI2-NEXT:    vpsrlvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm11009; AVX512VLVBMI2-NEXT:    vmovdqa64 {{.*#+}} zmm0 = [0,2,4,6,8,10,12,14,64,66,68,70,72,74,76,78,16,18,20,22,24,26,28,30,80,82,84,86,88,90,92,94,32,34,36,38,40,42,44,46,96,98,100,102,104,106,108,110,48,50,52,54,56,58,60,62,112,114,116,118,120,122,124,126]1010; AVX512VLVBMI2-NEXT:    vpermi2b %zmm2, %zmm1, %zmm01011; AVX512VLVBMI2-NEXT:    retq1012  %res = call <64 x i8> @llvm.fshr.v64i8(<64 x i8> %x, <64 x i8> %y, <64 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, 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>)1013  ret <64 x i8> %res1014}1015 1016;1017; Uniform Constant Shifts1018;1019 1020define <8 x i64> @splatconstant_funnnel_v8i64(<8 x i64> %x, <8 x i64> %y) nounwind {1021; AVX512F-LABEL: splatconstant_funnnel_v8i64:1022; AVX512F:       # %bb.0:1023; AVX512F-NEXT:    vpsrlq $14, %zmm1, %zmm11024; AVX512F-NEXT:    vpsllq $50, %zmm0, %zmm01025; AVX512F-NEXT:    vporq %zmm1, %zmm0, %zmm01026; AVX512F-NEXT:    retq1027;1028; AVX512VL-LABEL: splatconstant_funnnel_v8i64:1029; AVX512VL:       # %bb.0:1030; AVX512VL-NEXT:    vpsrlq $14, %zmm1, %zmm11031; AVX512VL-NEXT:    vpsllq $50, %zmm0, %zmm01032; AVX512VL-NEXT:    vporq %zmm1, %zmm0, %zmm01033; AVX512VL-NEXT:    retq1034;1035; AVX512BW-LABEL: splatconstant_funnnel_v8i64:1036; AVX512BW:       # %bb.0:1037; AVX512BW-NEXT:    vpsrlq $14, %zmm1, %zmm11038; AVX512BW-NEXT:    vpsllq $50, %zmm0, %zmm01039; AVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm01040; AVX512BW-NEXT:    retq1041;1042; AVX512VBMI2-LABEL: splatconstant_funnnel_v8i64:1043; AVX512VBMI2:       # %bb.0:1044; AVX512VBMI2-NEXT:    vpshrdq $14, %zmm0, %zmm1, %zmm01045; AVX512VBMI2-NEXT:    retq1046;1047; AVX512VLBW-LABEL: splatconstant_funnnel_v8i64:1048; AVX512VLBW:       # %bb.0:1049; AVX512VLBW-NEXT:    vpsrlq $14, %zmm1, %zmm11050; AVX512VLBW-NEXT:    vpsllq $50, %zmm0, %zmm01051; AVX512VLBW-NEXT:    vporq %zmm1, %zmm0, %zmm01052; AVX512VLBW-NEXT:    retq1053;1054; AVX512VLVBMI2-LABEL: splatconstant_funnnel_v8i64:1055; AVX512VLVBMI2:       # %bb.0:1056; AVX512VLVBMI2-NEXT:    vpshrdq $14, %zmm0, %zmm1, %zmm01057; AVX512VLVBMI2-NEXT:    retq1058  %res = call <8 x i64> @llvm.fshr.v8i64(<8 x i64> %x, <8 x i64> %y, <8 x i64> <i64 14, i64 14, i64 14, i64 14, i64 14, i64 14, i64 14, i64 14>)1059  ret <8 x i64> %res1060}1061 1062define <16 x i32> @splatconstant_funnnel_v16i32(<16 x i32> %x, <16 x i32> %y) nounwind {1063; AVX512F-LABEL: splatconstant_funnnel_v16i32:1064; AVX512F:       # %bb.0:1065; AVX512F-NEXT:    vpsrld $4, %zmm1, %zmm11066; AVX512F-NEXT:    vpslld $28, %zmm0, %zmm01067; AVX512F-NEXT:    vpord %zmm1, %zmm0, %zmm01068; AVX512F-NEXT:    retq1069;1070; AVX512VL-LABEL: splatconstant_funnnel_v16i32:1071; AVX512VL:       # %bb.0:1072; AVX512VL-NEXT:    vpsrld $4, %zmm1, %zmm11073; AVX512VL-NEXT:    vpslld $28, %zmm0, %zmm01074; AVX512VL-NEXT:    vpord %zmm1, %zmm0, %zmm01075; AVX512VL-NEXT:    retq1076;1077; AVX512BW-LABEL: splatconstant_funnnel_v16i32:1078; AVX512BW:       # %bb.0:1079; AVX512BW-NEXT:    vpsrld $4, %zmm1, %zmm11080; AVX512BW-NEXT:    vpslld $28, %zmm0, %zmm01081; AVX512BW-NEXT:    vpord %zmm1, %zmm0, %zmm01082; AVX512BW-NEXT:    retq1083;1084; AVX512VBMI2-LABEL: splatconstant_funnnel_v16i32:1085; AVX512VBMI2:       # %bb.0:1086; AVX512VBMI2-NEXT:    vpshrdd $4, %zmm0, %zmm1, %zmm01087; AVX512VBMI2-NEXT:    retq1088;1089; AVX512VLBW-LABEL: splatconstant_funnnel_v16i32:1090; AVX512VLBW:       # %bb.0:1091; AVX512VLBW-NEXT:    vpsrld $4, %zmm1, %zmm11092; AVX512VLBW-NEXT:    vpslld $28, %zmm0, %zmm01093; AVX512VLBW-NEXT:    vpord %zmm1, %zmm0, %zmm01094; AVX512VLBW-NEXT:    retq1095;1096; AVX512VLVBMI2-LABEL: splatconstant_funnnel_v16i32:1097; AVX512VLVBMI2:       # %bb.0:1098; AVX512VLVBMI2-NEXT:    vpshrdd $4, %zmm0, %zmm1, %zmm01099; AVX512VLVBMI2-NEXT:    retq1100  %res = call <16 x i32> @llvm.fshr.v16i32(<16 x i32> %x, <16 x i32> %y, <16 x i32> <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>)1101  ret <16 x i32> %res1102}1103 1104define <32 x i16> @splatconstant_funnnel_v32i16(<32 x i16> %x, <32 x i16> %y) nounwind {1105; AVX512F-LABEL: splatconstant_funnnel_v32i16:1106; AVX512F:       # %bb.0:1107; AVX512F-NEXT:    vpsrlw $7, %ymm1, %ymm21108; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm11109; AVX512F-NEXT:    vpsrlw $7, %ymm1, %ymm11110; AVX512F-NEXT:    vinserti64x4 $1, %ymm1, %zmm2, %zmm11111; AVX512F-NEXT:    vpsllw $9, %ymm0, %ymm21112; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm01113; AVX512F-NEXT:    vpsllw $9, %ymm0, %ymm01114; AVX512F-NEXT:    vinserti64x4 $1, %ymm0, %zmm2, %zmm01115; AVX512F-NEXT:    vporq %zmm1, %zmm0, %zmm01116; AVX512F-NEXT:    retq1117;1118; AVX512VL-LABEL: splatconstant_funnnel_v32i16:1119; AVX512VL:       # %bb.0:1120; AVX512VL-NEXT:    vpsrlw $7, %ymm1, %ymm21121; AVX512VL-NEXT:    vextracti64x4 $1, %zmm1, %ymm11122; AVX512VL-NEXT:    vpsrlw $7, %ymm1, %ymm11123; AVX512VL-NEXT:    vinserti64x4 $1, %ymm1, %zmm2, %zmm11124; AVX512VL-NEXT:    vpsllw $9, %ymm0, %ymm21125; AVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm01126; AVX512VL-NEXT:    vpsllw $9, %ymm0, %ymm01127; AVX512VL-NEXT:    vinserti64x4 $1, %ymm0, %zmm2, %zmm01128; AVX512VL-NEXT:    vporq %zmm1, %zmm0, %zmm01129; AVX512VL-NEXT:    retq1130;1131; AVX512BW-LABEL: splatconstant_funnnel_v32i16:1132; AVX512BW:       # %bb.0:1133; AVX512BW-NEXT:    vpsrlw $7, %zmm1, %zmm11134; AVX512BW-NEXT:    vpsllw $9, %zmm0, %zmm01135; AVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm01136; AVX512BW-NEXT:    retq1137;1138; AVX512VBMI2-LABEL: splatconstant_funnnel_v32i16:1139; AVX512VBMI2:       # %bb.0:1140; AVX512VBMI2-NEXT:    vpshrdw $7, %zmm0, %zmm1, %zmm01141; AVX512VBMI2-NEXT:    retq1142;1143; AVX512VLBW-LABEL: splatconstant_funnnel_v32i16:1144; AVX512VLBW:       # %bb.0:1145; AVX512VLBW-NEXT:    vpsrlw $7, %zmm1, %zmm11146; AVX512VLBW-NEXT:    vpsllw $9, %zmm0, %zmm01147; AVX512VLBW-NEXT:    vporq %zmm1, %zmm0, %zmm01148; AVX512VLBW-NEXT:    retq1149;1150; AVX512VLVBMI2-LABEL: splatconstant_funnnel_v32i16:1151; AVX512VLVBMI2:       # %bb.0:1152; AVX512VLVBMI2-NEXT:    vpshrdw $7, %zmm0, %zmm1, %zmm01153; AVX512VLVBMI2-NEXT:    retq1154  %res = call <32 x i16> @llvm.fshr.v32i16(<32 x i16> %x, <32 x i16> %y, <32 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, 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>)1155  ret <32 x i16> %res1156}1157 1158define <64 x i8> @splatconstant_funnnel_v64i8(<64 x i8> %x, <64 x i8> %y) nounwind {1159; AVX512F-LABEL: splatconstant_funnnel_v64i8:1160; AVX512F:       # %bb.0:1161; AVX512F-NEXT:    vpsllw $4, %ymm0, %ymm21162; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm01163; AVX512F-NEXT:    vpsllw $4, %ymm0, %ymm01164; AVX512F-NEXT:    vinserti64x4 $1, %ymm0, %zmm2, %zmm21165; AVX512F-NEXT:    vpsrlw $4, %ymm1, %ymm01166; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm11167; AVX512F-NEXT:    vpsrlw $4, %ymm1, %ymm11168; AVX512F-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm01169; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 = zmm0 ^ (m32bcst & (zmm0 ^ zmm2))1170; AVX512F-NEXT:    retq1171;1172; AVX512VL-LABEL: splatconstant_funnnel_v64i8:1173; AVX512VL:       # %bb.0:1174; AVX512VL-NEXT:    vpsllw $4, %ymm0, %ymm21175; AVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm01176; AVX512VL-NEXT:    vpsllw $4, %ymm0, %ymm01177; AVX512VL-NEXT:    vinserti64x4 $1, %ymm0, %zmm2, %zmm21178; AVX512VL-NEXT:    vpsrlw $4, %ymm1, %ymm01179; AVX512VL-NEXT:    vextracti64x4 $1, %zmm1, %ymm11180; AVX512VL-NEXT:    vpsrlw $4, %ymm1, %ymm11181; AVX512VL-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm01182; AVX512VL-NEXT:    vpternlogd {{.*#+}} zmm0 = zmm0 ^ (m32bcst & (zmm0 ^ zmm2))1183; AVX512VL-NEXT:    retq1184;1185; AVX512BW-LABEL: splatconstant_funnnel_v64i8:1186; AVX512BW:       # %bb.0:1187; AVX512BW-NEXT:    vpsllw $4, %zmm0, %zmm21188; AVX512BW-NEXT:    vpsrlw $4, %zmm1, %zmm01189; AVX512BW-NEXT:    vpternlogd {{.*#+}} zmm0 = zmm0 ^ (m32bcst & (zmm0 ^ zmm2))1190; AVX512BW-NEXT:    retq1191;1192; AVX512VBMI2-LABEL: splatconstant_funnnel_v64i8:1193; AVX512VBMI2:       # %bb.0:1194; AVX512VBMI2-NEXT:    vpsllw $4, %zmm0, %zmm21195; AVX512VBMI2-NEXT:    vpsrlw $4, %zmm1, %zmm01196; AVX512VBMI2-NEXT:    vpternlogd {{.*#+}} zmm0 = zmm0 ^ (m32bcst & (zmm0 ^ zmm2))1197; AVX512VBMI2-NEXT:    retq1198;1199; AVX512VLBW-LABEL: splatconstant_funnnel_v64i8:1200; AVX512VLBW:       # %bb.0:1201; AVX512VLBW-NEXT:    vpsllw $4, %zmm0, %zmm21202; AVX512VLBW-NEXT:    vpsrlw $4, %zmm1, %zmm01203; AVX512VLBW-NEXT:    vpternlogd {{.*#+}} zmm0 = zmm0 ^ (m32bcst & (zmm0 ^ zmm2))1204; AVX512VLBW-NEXT:    retq1205;1206; AVX512VLVBMI2-LABEL: splatconstant_funnnel_v64i8:1207; AVX512VLVBMI2:       # %bb.0:1208; AVX512VLVBMI2-NEXT:    vpsllw $4, %zmm0, %zmm21209; AVX512VLVBMI2-NEXT:    vpsrlw $4, %zmm1, %zmm01210; AVX512VLVBMI2-NEXT:    vpternlogd {{.*#+}} zmm0 = zmm0 ^ (m32bcst & (zmm0 ^ zmm2))1211; AVX512VLVBMI2-NEXT:    retq1212  %res = call <64 x i8> @llvm.fshr.v64i8(<64 x i8> %x, <64 x i8> %y, <64 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, 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>)1213  ret <64 x i8> %res1214}1215