brintos

brintos / llvm-project-archived public Read only

0
0
Text · 197.7 KiB · 7001bf7 Raw
2845 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2,+gfni | FileCheck %s --check-prefixes=GFNISSE3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx,+gfni | FileCheck %s --check-prefixes=GFNIAVX,GFNIAVX1OR2,GFNIAVX14; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+gfni | FileCheck %s --check-prefixes=GFNIAVX,GFNIAVX1OR2,GFNIAVX25; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+gfni | FileCheck %s --check-prefixes=GFNIAVX,GFNIAVX512,GFNIAVX512VL6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl,+gfni | FileCheck %s --check-prefixes=GFNIAVX,GFNIAVX512,GFNIAVX512BW7 8;9; 128 Bit Vector Funnel Shifts10;11 12define <16 x i8> @var_fshl_v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %amt) nounwind {13; GFNISSE-LABEL: var_fshl_v16i8:14; GFNISSE:       # %bb.0:15; GFNISSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm216; GFNISSE-NEXT:    pxor %xmm3, %xmm317; GFNISSE-NEXT:    pmovzxbd {{.*#+}} xmm4 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero18; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm5 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero19; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm3[8],xmm2[9],xmm3[9],xmm2[10],xmm3[10],xmm2[11],xmm3[11],xmm2[12],xmm3[12],xmm2[13],xmm3[13],xmm2[14],xmm3[14],xmm2[15],xmm3[15]20; GFNISSE-NEXT:    pmovzxwd {{.*#+}} xmm3 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero21; GFNISSE-NEXT:    punpckhwd {{.*#+}} xmm2 = xmm2[4,4,5,5,6,6,7,7]22; GFNISSE-NEXT:    pslld $23, %xmm223; GFNISSE-NEXT:    movdqa {{.*#+}} xmm6 = [1065353216,1065353216,1065353216,1065353216]24; GFNISSE-NEXT:    paddd %xmm6, %xmm225; GFNISSE-NEXT:    cvttps2dq %xmm2, %xmm226; GFNISSE-NEXT:    pslld $23, %xmm327; GFNISSE-NEXT:    paddd %xmm6, %xmm328; GFNISSE-NEXT:    cvttps2dq %xmm3, %xmm329; GFNISSE-NEXT:    packusdw %xmm2, %xmm330; GFNISSE-NEXT:    movdqa %xmm1, %xmm731; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm7 = xmm7[8],xmm0[8],xmm7[9],xmm0[9],xmm7[10],xmm0[10],xmm7[11],xmm0[11],xmm7[12],xmm0[12],xmm7[13],xmm0[13],xmm7[14],xmm0[14],xmm7[15],xmm0[15]32; GFNISSE-NEXT:    pmullw %xmm3, %xmm733; GFNISSE-NEXT:    psrlw $8, %xmm734; GFNISSE-NEXT:    pslld $23, %xmm435; GFNISSE-NEXT:    paddd %xmm6, %xmm436; GFNISSE-NEXT:    cvttps2dq %xmm4, %xmm237; GFNISSE-NEXT:    punpckhwd {{.*#+}} xmm5 = xmm5[4,4,5,5,6,6,7,7]38; GFNISSE-NEXT:    pslld $23, %xmm539; GFNISSE-NEXT:    paddd %xmm6, %xmm540; GFNISSE-NEXT:    cvttps2dq %xmm5, %xmm341; GFNISSE-NEXT:    packusdw %xmm3, %xmm242; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]43; GFNISSE-NEXT:    pmullw %xmm1, %xmm244; GFNISSE-NEXT:    psrlw $8, %xmm245; GFNISSE-NEXT:    packuswb %xmm7, %xmm246; GFNISSE-NEXT:    movdqa %xmm2, %xmm047; GFNISSE-NEXT:    retq48;49; GFNIAVX1-LABEL: var_fshl_v16i8:50; GFNIAVX1:       # %bb.0:51; GFNIAVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm252; GFNIAVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm353; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm2[8],xmm3[8],xmm2[9],xmm3[9],xmm2[10],xmm3[10],xmm2[11],xmm3[11],xmm2[12],xmm3[12],xmm2[13],xmm3[13],xmm2[14],xmm3[14],xmm2[15],xmm3[15]54; GFNIAVX1-NEXT:    vpunpckhwd {{.*#+}} xmm4 = xmm3[4,4,5,5,6,6,7,7]55; GFNIAVX1-NEXT:    vpslld $23, %xmm4, %xmm456; GFNIAVX1-NEXT:    vbroadcastss {{.*#+}} xmm5 = [1065353216,1065353216,1065353216,1065353216]57; GFNIAVX1-NEXT:    vpaddd %xmm5, %xmm4, %xmm458; GFNIAVX1-NEXT:    vcvttps2dq %xmm4, %xmm459; GFNIAVX1-NEXT:    vpmovzxwd {{.*#+}} xmm3 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero60; GFNIAVX1-NEXT:    vpslld $23, %xmm3, %xmm361; GFNIAVX1-NEXT:    vpaddd %xmm5, %xmm3, %xmm362; GFNIAVX1-NEXT:    vcvttps2dq %xmm3, %xmm363; GFNIAVX1-NEXT:    vpackusdw %xmm4, %xmm3, %xmm364; GFNIAVX1-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]65; GFNIAVX1-NEXT:    vpmullw %xmm3, %xmm4, %xmm366; GFNIAVX1-NEXT:    vpsrlw $8, %xmm3, %xmm367; GFNIAVX1-NEXT:    vpmovzxbd {{.*#+}} xmm4 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero68; GFNIAVX1-NEXT:    vpslld $23, %xmm4, %xmm469; GFNIAVX1-NEXT:    vpaddd %xmm5, %xmm4, %xmm470; GFNIAVX1-NEXT:    vcvttps2dq %xmm4, %xmm471; GFNIAVX1-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],zero72; GFNIAVX1-NEXT:    vpunpckhwd {{.*#+}} xmm2 = xmm2[4,4,5,5,6,6,7,7]73; GFNIAVX1-NEXT:    vpslld $23, %xmm2, %xmm274; GFNIAVX1-NEXT:    vpaddd %xmm5, %xmm2, %xmm275; GFNIAVX1-NEXT:    vcvttps2dq %xmm2, %xmm276; GFNIAVX1-NEXT:    vpackusdw %xmm2, %xmm4, %xmm277; GFNIAVX1-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]78; GFNIAVX1-NEXT:    vpmullw %xmm2, %xmm0, %xmm079; GFNIAVX1-NEXT:    vpsrlw $8, %xmm0, %xmm080; GFNIAVX1-NEXT:    vpackuswb %xmm3, %xmm0, %xmm081; GFNIAVX1-NEXT:    retq82;83; GFNIAVX2-LABEL: var_fshl_v16i8:84; GFNIAVX2:       # %bb.0:85; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15]86; GFNIAVX2-NEXT:    vpmovzxwd {{.*#+}} ymm3 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero,xmm3[4],zero,xmm3[5],zero,xmm3[6],zero,xmm3[7],zero87; GFNIAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm288; GFNIAVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm489; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} xmm4 = xmm2[8],xmm4[8],xmm2[9],xmm4[9],xmm2[10],xmm4[10],xmm2[11],xmm4[11],xmm2[12],xmm4[12],xmm2[13],xmm4[13],xmm2[14],xmm4[14],xmm2[15],xmm4[15]90; GFNIAVX2-NEXT:    vpmovzxwd {{.*#+}} ymm4 = xmm4[0],zero,xmm4[1],zero,xmm4[2],zero,xmm4[3],zero,xmm4[4],zero,xmm4[5],zero,xmm4[6],zero,xmm4[7],zero91; GFNIAVX2-NEXT:    vpsllvd %ymm4, %ymm3, %ymm392; GFNIAVX2-NEXT:    vmovdqa {{.*#+}} ymm4 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15,16,17,20,21,24,25,28,29,24,25,28,29,28,29,30,31]93; GFNIAVX2-NEXT:    vpshufb %ymm4, %ymm3, %ymm394; GFNIAVX2-NEXT:    vpermq {{.*#+}} ymm3 = ymm3[0,2,2,3]95; GFNIAVX2-NEXT:    vpsrlw $8, %xmm3, %xmm396; GFNIAVX2-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]97; GFNIAVX2-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero98; GFNIAVX2-NEXT:    vpmovzxbd {{.*#+}} ymm1 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero,xmm2[4],zero,zero,zero,xmm2[5],zero,zero,zero,xmm2[6],zero,zero,zero,xmm2[7],zero,zero,zero99; GFNIAVX2-NEXT:    vpsllvd %ymm1, %ymm0, %ymm0100; GFNIAVX2-NEXT:    vpshufb %ymm4, %ymm0, %ymm0101; GFNIAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]102; GFNIAVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0103; GFNIAVX2-NEXT:    vpackuswb %xmm3, %xmm0, %xmm0104; GFNIAVX2-NEXT:    vzeroupper105; GFNIAVX2-NEXT:    retq106;107; GFNIAVX512VL-LABEL: var_fshl_v16i8:108; GFNIAVX512VL:       # %bb.0:109; GFNIAVX512VL-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]110; GFNIAVX512VL-NEXT:    vpandn %xmm3, %xmm2, %xmm4111; GFNIAVX512VL-NEXT:    vpmovzxbd {{.*#+}} zmm4 = xmm4[0],zero,zero,zero,xmm4[1],zero,zero,zero,xmm4[2],zero,zero,zero,xmm4[3],zero,zero,zero,xmm4[4],zero,zero,zero,xmm4[5],zero,zero,zero,xmm4[6],zero,zero,zero,xmm4[7],zero,zero,zero,xmm4[8],zero,zero,zero,xmm4[9],zero,zero,zero,xmm4[10],zero,zero,zero,xmm4[11],zero,zero,zero,xmm4[12],zero,zero,zero,xmm4[13],zero,zero,zero,xmm4[14],zero,zero,zero,xmm4[15],zero,zero,zero112; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm1, %xmm1113; GFNIAVX512VL-NEXT:    vpmovzxbd {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero114; GFNIAVX512VL-NEXT:    vpsrlvd %zmm4, %zmm1, %zmm1115; GFNIAVX512VL-NEXT:    vpand %xmm3, %xmm2, %xmm2116; GFNIAVX512VL-NEXT:    vpmovzxbd {{.*#+}} zmm2 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero,xmm2[4],zero,zero,zero,xmm2[5],zero,zero,zero,xmm2[6],zero,zero,zero,xmm2[7],zero,zero,zero,xmm2[8],zero,zero,zero,xmm2[9],zero,zero,zero,xmm2[10],zero,zero,zero,xmm2[11],zero,zero,zero,xmm2[12],zero,zero,zero,xmm2[13],zero,zero,zero,xmm2[14],zero,zero,zero,xmm2[15],zero,zero,zero117; GFNIAVX512VL-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero118; GFNIAVX512VL-NEXT:    vpsllvd %zmm2, %zmm0, %zmm0119; GFNIAVX512VL-NEXT:    vpord %zmm1, %zmm0, %zmm0120; GFNIAVX512VL-NEXT:    vpmovdb %zmm0, %xmm0121; GFNIAVX512VL-NEXT:    vzeroupper122; GFNIAVX512VL-NEXT:    retq123;124; GFNIAVX512BW-LABEL: var_fshl_v16i8:125; GFNIAVX512BW:       # %bb.0:126; GFNIAVX512BW-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero127; GFNIAVX512BW-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero128; GFNIAVX512BW-NEXT:    vpsllw $8, %ymm0, %ymm0129; GFNIAVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm0130; GFNIAVX512BW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm2, %xmm1131; GFNIAVX512BW-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero132; GFNIAVX512BW-NEXT:    vpsllvw %ymm1, %ymm0, %ymm0133; GFNIAVX512BW-NEXT:    vpsrlw $8, %ymm0, %ymm0134; GFNIAVX512BW-NEXT:    vpmovwb %ymm0, %xmm0135; GFNIAVX512BW-NEXT:    vzeroupper136; GFNIAVX512BW-NEXT:    retq137  %res = call <16 x i8> @llvm.fshl.v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %amt)138  ret <16 x i8> %res139}140 141define <16 x i8> @var_fshr_v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %amt) nounwind {142; GFNISSE-LABEL: var_fshr_v16i8:143; GFNISSE:       # %bb.0:144; GFNISSE-NEXT:    movdqa %xmm2, %xmm3145; GFNISSE-NEXT:    movdqa %xmm0, %xmm2146; GFNISSE-NEXT:    movdqa {{.*#+}} xmm5 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]147; GFNISSE-NEXT:    movdqa %xmm3, %xmm0148; GFNISSE-NEXT:    pand %xmm5, %xmm0149; GFNISSE-NEXT:    psllw $5, %xmm0150; GFNISSE-NEXT:    movdqa %xmm0, %xmm4151; GFNISSE-NEXT:    paddb %xmm0, %xmm4152; GFNISSE-NEXT:    movdqa %xmm1, %xmm6153; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm6154; GFNISSE-NEXT:    pblendvb %xmm0, %xmm6, %xmm1155; GFNISSE-NEXT:    movdqa %xmm1, %xmm6156; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm6157; GFNISSE-NEXT:    movdqa %xmm4, %xmm0158; GFNISSE-NEXT:    pblendvb %xmm0, %xmm6, %xmm1159; GFNISSE-NEXT:    movdqa %xmm1, %xmm6160; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm6161; GFNISSE-NEXT:    paddb %xmm4, %xmm4162; GFNISSE-NEXT:    movdqa %xmm4, %xmm0163; GFNISSE-NEXT:    pblendvb %xmm0, %xmm6, %xmm1164; GFNISSE-NEXT:    pandn %xmm5, %xmm3165; GFNISSE-NEXT:    psllw $5, %xmm3166; GFNISSE-NEXT:    movdqa %xmm3, %xmm4167; GFNISSE-NEXT:    paddb %xmm3, %xmm4168; GFNISSE-NEXT:    paddb %xmm2, %xmm2169; GFNISSE-NEXT:    movdqa %xmm2, %xmm5170; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5171; GFNISSE-NEXT:    movdqa %xmm3, %xmm0172; GFNISSE-NEXT:    pblendvb %xmm0, %xmm5, %xmm2173; GFNISSE-NEXT:    movdqa %xmm2, %xmm3174; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3175; GFNISSE-NEXT:    movdqa %xmm4, %xmm0176; GFNISSE-NEXT:    pblendvb %xmm0, %xmm3, %xmm2177; GFNISSE-NEXT:    movdqa %xmm2, %xmm3178; GFNISSE-NEXT:    paddb %xmm2, %xmm3179; GFNISSE-NEXT:    paddb %xmm4, %xmm4180; GFNISSE-NEXT:    movdqa %xmm4, %xmm0181; GFNISSE-NEXT:    pblendvb %xmm0, %xmm3, %xmm2182; GFNISSE-NEXT:    por %xmm1, %xmm2183; GFNISSE-NEXT:    movdqa %xmm2, %xmm0184; GFNISSE-NEXT:    retq185;186; GFNIAVX1-LABEL: var_fshr_v16i8:187; GFNIAVX1:       # %bb.0:188; GFNIAVX1-NEXT:    vbroadcastss {{.*#+}} xmm3 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]189; GFNIAVX1-NEXT:    vpand %xmm3, %xmm2, %xmm4190; GFNIAVX1-NEXT:    vpsllw $5, %xmm4, %xmm4191; GFNIAVX1-NEXT:    vpaddb %xmm4, %xmm4, %xmm5192; GFNIAVX1-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm6193; GFNIAVX1-NEXT:    vpblendvb %xmm4, %xmm6, %xmm1, %xmm1194; GFNIAVX1-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm4195; GFNIAVX1-NEXT:    vpblendvb %xmm5, %xmm4, %xmm1, %xmm1196; GFNIAVX1-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm4197; GFNIAVX1-NEXT:    vpaddb %xmm5, %xmm5, %xmm5198; GFNIAVX1-NEXT:    vpblendvb %xmm5, %xmm4, %xmm1, %xmm1199; GFNIAVX1-NEXT:    vpandn %xmm3, %xmm2, %xmm2200; GFNIAVX1-NEXT:    vpsllw $5, %xmm2, %xmm2201; GFNIAVX1-NEXT:    vpaddb %xmm2, %xmm2, %xmm3202; GFNIAVX1-NEXT:    vpaddb %xmm0, %xmm0, %xmm0203; GFNIAVX1-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm4204; GFNIAVX1-NEXT:    vpblendvb %xmm2, %xmm4, %xmm0, %xmm0205; GFNIAVX1-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm2206; GFNIAVX1-NEXT:    vpblendvb %xmm3, %xmm2, %xmm0, %xmm0207; GFNIAVX1-NEXT:    vpaddb %xmm0, %xmm0, %xmm2208; GFNIAVX1-NEXT:    vpaddb %xmm3, %xmm3, %xmm3209; GFNIAVX1-NEXT:    vpblendvb %xmm3, %xmm2, %xmm0, %xmm0210; GFNIAVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0211; GFNIAVX1-NEXT:    retq212;213; GFNIAVX2-LABEL: var_fshr_v16i8:214; GFNIAVX2:       # %bb.0:215; GFNIAVX2-NEXT:    vpbroadcastb {{.*#+}} xmm3 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]216; GFNIAVX2-NEXT:    vpand %xmm3, %xmm2, %xmm4217; GFNIAVX2-NEXT:    vpsllw $5, %xmm4, %xmm4218; GFNIAVX2-NEXT:    vpaddb %xmm4, %xmm4, %xmm5219; GFNIAVX2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm6220; GFNIAVX2-NEXT:    vpblendvb %xmm4, %xmm6, %xmm1, %xmm1221; GFNIAVX2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm4222; GFNIAVX2-NEXT:    vpblendvb %xmm5, %xmm4, %xmm1, %xmm1223; GFNIAVX2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm4224; GFNIAVX2-NEXT:    vpaddb %xmm5, %xmm5, %xmm5225; GFNIAVX2-NEXT:    vpblendvb %xmm5, %xmm4, %xmm1, %xmm1226; GFNIAVX2-NEXT:    vpandn %xmm3, %xmm2, %xmm2227; GFNIAVX2-NEXT:    vpsllw $5, %xmm2, %xmm2228; GFNIAVX2-NEXT:    vpaddb %xmm2, %xmm2, %xmm3229; GFNIAVX2-NEXT:    vpaddb %xmm0, %xmm0, %xmm0230; GFNIAVX2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm4231; GFNIAVX2-NEXT:    vpblendvb %xmm2, %xmm4, %xmm0, %xmm0232; GFNIAVX2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm2233; GFNIAVX2-NEXT:    vpblendvb %xmm3, %xmm2, %xmm0, %xmm0234; GFNIAVX2-NEXT:    vpaddb %xmm0, %xmm0, %xmm2235; GFNIAVX2-NEXT:    vpaddb %xmm3, %xmm3, %xmm3236; GFNIAVX2-NEXT:    vpblendvb %xmm3, %xmm2, %xmm0, %xmm0237; GFNIAVX2-NEXT:    vpor %xmm1, %xmm0, %xmm0238; GFNIAVX2-NEXT:    retq239;240; GFNIAVX512VL-LABEL: var_fshr_v16i8:241; GFNIAVX512VL:       # %bb.0:242; GFNIAVX512VL-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]243; GFNIAVX512VL-NEXT:    vpand %xmm3, %xmm2, %xmm4244; GFNIAVX512VL-NEXT:    vpmovzxbd {{.*#+}} zmm4 = xmm4[0],zero,zero,zero,xmm4[1],zero,zero,zero,xmm4[2],zero,zero,zero,xmm4[3],zero,zero,zero,xmm4[4],zero,zero,zero,xmm4[5],zero,zero,zero,xmm4[6],zero,zero,zero,xmm4[7],zero,zero,zero,xmm4[8],zero,zero,zero,xmm4[9],zero,zero,zero,xmm4[10],zero,zero,zero,xmm4[11],zero,zero,zero,xmm4[12],zero,zero,zero,xmm4[13],zero,zero,zero,xmm4[14],zero,zero,zero,xmm4[15],zero,zero,zero245; GFNIAVX512VL-NEXT:    vpmovzxbd {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero246; GFNIAVX512VL-NEXT:    vpsrlvd %zmm4, %zmm1, %zmm1247; GFNIAVX512VL-NEXT:    vpandn %xmm3, %xmm2, %xmm2248; GFNIAVX512VL-NEXT:    vpmovzxbd {{.*#+}} zmm2 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero,xmm2[4],zero,zero,zero,xmm2[5],zero,zero,zero,xmm2[6],zero,zero,zero,xmm2[7],zero,zero,zero,xmm2[8],zero,zero,zero,xmm2[9],zero,zero,zero,xmm2[10],zero,zero,zero,xmm2[11],zero,zero,zero,xmm2[12],zero,zero,zero,xmm2[13],zero,zero,zero,xmm2[14],zero,zero,zero,xmm2[15],zero,zero,zero249; GFNIAVX512VL-NEXT:    vpaddb %xmm0, %xmm0, %xmm0250; GFNIAVX512VL-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero251; GFNIAVX512VL-NEXT:    vpsllvd %zmm2, %zmm0, %zmm0252; GFNIAVX512VL-NEXT:    vpord %zmm1, %zmm0, %zmm0253; GFNIAVX512VL-NEXT:    vpmovdb %zmm0, %xmm0254; GFNIAVX512VL-NEXT:    vzeroupper255; GFNIAVX512VL-NEXT:    retq256;257; GFNIAVX512BW-LABEL: var_fshr_v16i8:258; GFNIAVX512BW:       # %bb.0:259; GFNIAVX512BW-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero260; GFNIAVX512BW-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero261; GFNIAVX512BW-NEXT:    vpsllw $8, %ymm0, %ymm0262; GFNIAVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm0263; GFNIAVX512BW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm2, %xmm1264; GFNIAVX512BW-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero265; GFNIAVX512BW-NEXT:    vpsrlvw %ymm1, %ymm0, %ymm0266; GFNIAVX512BW-NEXT:    vpmovwb %ymm0, %xmm0267; GFNIAVX512BW-NEXT:    vzeroupper268; GFNIAVX512BW-NEXT:    retq269  %res = call <16 x i8> @llvm.fshr.v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %amt)270  ret <16 x i8> %res271}272 273define <16 x i8> @splatvar_fshl_v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %amt) nounwind {274; GFNISSE-LABEL: splatvar_fshl_v16i8:275; GFNISSE:       # %bb.0:276; GFNISSE-NEXT:    movdqa %xmm1, %xmm3277; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm0[8],xmm3[9],xmm0[9],xmm3[10],xmm0[10],xmm3[11],xmm0[11],xmm3[12],xmm0[12],xmm3[13],xmm0[13],xmm3[14],xmm0[14],xmm3[15],xmm0[15]278; GFNISSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2279; GFNISSE-NEXT:    psllw %xmm2, %xmm3280; GFNISSE-NEXT:    psrlw $8, %xmm3281; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]282; GFNISSE-NEXT:    psllw %xmm2, %xmm1283; GFNISSE-NEXT:    psrlw $8, %xmm1284; GFNISSE-NEXT:    packuswb %xmm3, %xmm1285; GFNISSE-NEXT:    movdqa %xmm1, %xmm0286; GFNISSE-NEXT:    retq287;288; GFNIAVX-LABEL: splatvar_fshl_v16i8:289; GFNIAVX:       # %bb.0:290; GFNIAVX-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15]291; GFNIAVX-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2292; GFNIAVX-NEXT:    vpsllw %xmm2, %xmm3, %xmm3293; GFNIAVX-NEXT:    vpsrlw $8, %xmm3, %xmm3294; GFNIAVX-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]295; GFNIAVX-NEXT:    vpsllw %xmm2, %xmm0, %xmm0296; GFNIAVX-NEXT:    vpsrlw $8, %xmm0, %xmm0297; GFNIAVX-NEXT:    vpackuswb %xmm3, %xmm0, %xmm0298; GFNIAVX-NEXT:    retq299  %splat = shufflevector <16 x i8> %amt, <16 x i8> undef, <16 x i32> zeroinitializer300  %res = call <16 x i8> @llvm.fshl.v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %splat)301  ret <16 x i8> %res302}303 304define <16 x i8> @splatvar_fshr_v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %amt) nounwind {305; GFNISSE-LABEL: splatvar_fshr_v16i8:306; GFNISSE:       # %bb.0:307; GFNISSE-NEXT:    movdqa %xmm1, %xmm4308; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm0[8],xmm4[9],xmm0[9],xmm4[10],xmm0[10],xmm4[11],xmm0[11],xmm4[12],xmm0[12],xmm4[13],xmm0[13],xmm4[14],xmm0[14],xmm4[15],xmm0[15]309; GFNISSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2310; GFNISSE-NEXT:    psrlw %xmm2, %xmm4311; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm3 = [255,255,255,255,255,255,255,255]312; GFNISSE-NEXT:    pand %xmm3, %xmm4313; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]314; GFNISSE-NEXT:    psrlw %xmm2, %xmm1315; GFNISSE-NEXT:    pand %xmm1, %xmm3316; GFNISSE-NEXT:    packuswb %xmm4, %xmm3317; GFNISSE-NEXT:    movdqa %xmm3, %xmm0318; GFNISSE-NEXT:    retq319;320; GFNIAVX1-LABEL: splatvar_fshr_v16i8:321; GFNIAVX1:       # %bb.0:322; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15]323; GFNIAVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2324; GFNIAVX1-NEXT:    vpsrlw %xmm2, %xmm3, %xmm3325; GFNIAVX1-NEXT:    vbroadcastss {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]326; GFNIAVX1-NEXT:    vpand %xmm4, %xmm3, %xmm3327; GFNIAVX1-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]328; GFNIAVX1-NEXT:    vpsrlw %xmm2, %xmm0, %xmm0329; GFNIAVX1-NEXT:    vpand %xmm4, %xmm0, %xmm0330; GFNIAVX1-NEXT:    vpackuswb %xmm3, %xmm0, %xmm0331; GFNIAVX1-NEXT:    retq332;333; GFNIAVX2-LABEL: splatvar_fshr_v16i8:334; GFNIAVX2:       # %bb.0:335; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15]336; GFNIAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2337; GFNIAVX2-NEXT:    vpsrlw %xmm2, %xmm3, %xmm3338; GFNIAVX2-NEXT:    vpbroadcastw {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]339; GFNIAVX2-NEXT:    vpand %xmm4, %xmm3, %xmm3340; GFNIAVX2-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]341; GFNIAVX2-NEXT:    vpsrlw %xmm2, %xmm0, %xmm0342; GFNIAVX2-NEXT:    vpand %xmm4, %xmm0, %xmm0343; GFNIAVX2-NEXT:    vpackuswb %xmm3, %xmm0, %xmm0344; GFNIAVX2-NEXT:    retq345;346; GFNIAVX512VL-LABEL: splatvar_fshr_v16i8:347; GFNIAVX512VL:       # %bb.0:348; GFNIAVX512VL-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15]349; GFNIAVX512VL-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2350; GFNIAVX512VL-NEXT:    vpsrlw %xmm2, %xmm3, %xmm3351; GFNIAVX512VL-NEXT:    vpbroadcastd {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]352; GFNIAVX512VL-NEXT:    vpand %xmm4, %xmm3, %xmm3353; GFNIAVX512VL-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]354; GFNIAVX512VL-NEXT:    vpsrlw %xmm2, %xmm0, %xmm0355; GFNIAVX512VL-NEXT:    vpand %xmm4, %xmm0, %xmm0356; GFNIAVX512VL-NEXT:    vpackuswb %xmm3, %xmm0, %xmm0357; GFNIAVX512VL-NEXT:    retq358;359; GFNIAVX512BW-LABEL: splatvar_fshr_v16i8:360; GFNIAVX512BW:       # %bb.0:361; GFNIAVX512BW-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15]362; GFNIAVX512BW-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]363; GFNIAVX512BW-NEXT:    vinserti128 $1, %xmm3, %ymm0, %ymm0364; GFNIAVX512BW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm1365; GFNIAVX512BW-NEXT:    vpsrlw %xmm1, %ymm0, %ymm0366; GFNIAVX512BW-NEXT:    vpmovwb %ymm0, %xmm0367; GFNIAVX512BW-NEXT:    vzeroupper368; GFNIAVX512BW-NEXT:    retq369  %splat = shufflevector <16 x i8> %amt, <16 x i8> undef, <16 x i32> zeroinitializer370  %res = call <16 x i8> @llvm.fshr.v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %splat)371  ret <16 x i8> %res372}373 374define <16 x i8> @constant_fshl_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {375; GFNISSE-LABEL: constant_fshl_v16i8:376; GFNISSE:       # %bb.0:377; GFNISSE-NEXT:    movdqa %xmm1, %xmm2378; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm0[8],xmm2[9],xmm0[9],xmm2[10],xmm0[10],xmm2[11],xmm0[11],xmm2[12],xmm0[12],xmm2[13],xmm0[13],xmm2[14],xmm0[14],xmm2[15],xmm0[15]379; GFNISSE-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [1,128,64,32,16,8,4,2]380; GFNISSE-NEXT:    psrlw $8, %xmm2381; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]382; GFNISSE-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [1,2,4,8,16,32,64,128]383; GFNISSE-NEXT:    psrlw $8, %xmm1384; GFNISSE-NEXT:    packuswb %xmm2, %xmm1385; GFNISSE-NEXT:    movdqa %xmm1, %xmm0386; GFNISSE-NEXT:    retq387;388; GFNIAVX1OR2-LABEL: constant_fshl_v16i8:389; GFNIAVX1OR2:       # %bb.0:390; GFNIAVX1OR2-NEXT:    vpunpckhbw {{.*#+}} xmm2 = 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]391; GFNIAVX1OR2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2 # [1,128,64,32,16,8,4,2]392; GFNIAVX1OR2-NEXT:    vpsrlw $8, %xmm2, %xmm2393; GFNIAVX1OR2-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]394; GFNIAVX1OR2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [1,2,4,8,16,32,64,128]395; GFNIAVX1OR2-NEXT:    vpsrlw $8, %xmm0, %xmm0396; GFNIAVX1OR2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0397; GFNIAVX1OR2-NEXT:    retq398;399; GFNIAVX512VL-LABEL: constant_fshl_v16i8:400; GFNIAVX512VL:       # %bb.0:401; GFNIAVX512VL-NEXT:    vpunpckhbw {{.*#+}} xmm2 = 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]402; GFNIAVX512VL-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2 # [1,128,64,32,16,8,4,2]403; GFNIAVX512VL-NEXT:    vpsrlw $8, %xmm2, %xmm2404; GFNIAVX512VL-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]405; GFNIAVX512VL-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [1,2,4,8,16,32,64,128]406; GFNIAVX512VL-NEXT:    vpsrlw $8, %xmm0, %xmm0407; GFNIAVX512VL-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0408; GFNIAVX512VL-NEXT:    retq409;410; GFNIAVX512BW-LABEL: constant_fshl_v16i8:411; GFNIAVX512BW:       # %bb.0:412; GFNIAVX512BW-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero413; GFNIAVX512BW-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero414; GFNIAVX512BW-NEXT:    vpsllw $8, %ymm0, %ymm0415; GFNIAVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm0416; GFNIAVX512BW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0417; GFNIAVX512BW-NEXT:    vpsrlw $8, %ymm0, %ymm0418; GFNIAVX512BW-NEXT:    vpmovwb %ymm0, %xmm0419; GFNIAVX512BW-NEXT:    vzeroupper420; GFNIAVX512BW-NEXT:    retq421  %res = call <16 x i8> @llvm.fshl.v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1>)422  ret <16 x i8> %res423}424 425define <16 x i8> @constant_fshr_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {426; GFNISSE-LABEL: constant_fshr_v16i8:427; GFNISSE:       # %bb.0:428; GFNISSE-NEXT:    movdqa %xmm1, %xmm2429; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm0[8],xmm2[9],xmm0[9],xmm2[10],xmm0[10],xmm2[11],xmm0[11],xmm2[12],xmm0[12],xmm2[13],xmm0[13],xmm2[14],xmm0[14],xmm2[15],xmm0[15]430; GFNISSE-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [1,128,64,32,16,8,4,2]431; GFNISSE-NEXT:    psrlw $8, %xmm2432; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]433; GFNISSE-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [1,2,4,8,16,32,64,128]434; GFNISSE-NEXT:    psrlw $8, %xmm1435; GFNISSE-NEXT:    packuswb %xmm2, %xmm1436; GFNISSE-NEXT:    movdqa %xmm1, %xmm0437; GFNISSE-NEXT:    retq438;439; GFNIAVX1OR2-LABEL: constant_fshr_v16i8:440; GFNIAVX1OR2:       # %bb.0:441; GFNIAVX1OR2-NEXT:    vpunpckhbw {{.*#+}} xmm2 = 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]442; GFNIAVX1OR2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2 # [1,128,64,32,16,8,4,2]443; GFNIAVX1OR2-NEXT:    vpsrlw $8, %xmm2, %xmm2444; GFNIAVX1OR2-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]445; GFNIAVX1OR2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [1,2,4,8,16,32,64,128]446; GFNIAVX1OR2-NEXT:    vpsrlw $8, %xmm0, %xmm0447; GFNIAVX1OR2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0448; GFNIAVX1OR2-NEXT:    retq449;450; GFNIAVX512VL-LABEL: constant_fshr_v16i8:451; GFNIAVX512VL:       # %bb.0:452; GFNIAVX512VL-NEXT:    vpunpckhbw {{.*#+}} xmm2 = 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]453; GFNIAVX512VL-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2 # [1,128,64,32,16,8,4,2]454; GFNIAVX512VL-NEXT:    vpsrlw $8, %xmm2, %xmm2455; GFNIAVX512VL-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]456; GFNIAVX512VL-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [1,2,4,8,16,32,64,128]457; GFNIAVX512VL-NEXT:    vpsrlw $8, %xmm0, %xmm0458; GFNIAVX512VL-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0459; GFNIAVX512VL-NEXT:    retq460;461; GFNIAVX512BW-LABEL: constant_fshr_v16i8:462; GFNIAVX512BW:       # %bb.0:463; GFNIAVX512BW-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero464; GFNIAVX512BW-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero465; GFNIAVX512BW-NEXT:    vpsllw $8, %ymm0, %ymm0466; GFNIAVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm0467; GFNIAVX512BW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0468; GFNIAVX512BW-NEXT:    vpsrlw $8, %ymm0, %ymm0469; GFNIAVX512BW-NEXT:    vpmovwb %ymm0, %xmm0470; GFNIAVX512BW-NEXT:    vzeroupper471; GFNIAVX512BW-NEXT:    retq472  %res = call <16 x i8> @llvm.fshl.v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1>)473  ret <16 x i8> %res474}475 476define <16 x i8> @splatconstant_fshl_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {477; GFNISSE-LABEL: splatconstant_fshl_v16i8:478; GFNISSE:       # %bb.0:479; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1480; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0481; GFNISSE-NEXT:    por %xmm1, %xmm0482; GFNISSE-NEXT:    retq483;484; GFNIAVX1OR2-LABEL: splatconstant_fshl_v16i8:485; GFNIAVX1OR2:       # %bb.0:486; GFNIAVX1OR2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1487; GFNIAVX1OR2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0488; GFNIAVX1OR2-NEXT:    vpor %xmm1, %xmm0, %xmm0489; GFNIAVX1OR2-NEXT:    retq490;491; GFNIAVX512-LABEL: splatconstant_fshl_v16i8:492; GFNIAVX512:       # %bb.0:493; GFNIAVX512-NEXT:    vpsllw $3, %xmm0, %xmm2494; GFNIAVX512-NEXT:    vpsrlw $5, %xmm1, %xmm0495; GFNIAVX512-NEXT:    vpternlogd {{.*#+}} xmm0 = xmm0 ^ (m32bcst & (xmm0 ^ xmm2))496; GFNIAVX512-NEXT:    retq497  %res = call <16 x i8> @llvm.fshl.v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3>)498  ret <16 x i8> %res499}500declare <16 x i8> @llvm.fshl.v16i8(<16 x i8>, <16 x i8>, <16 x i8>)501 502define <16 x i8> @splatconstant_fshr_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {503; GFNISSE-LABEL: splatconstant_fshr_v16i8:504; GFNISSE:       # %bb.0:505; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1506; GFNISSE-NEXT:    paddb %xmm0, %xmm0507; GFNISSE-NEXT:    por %xmm1, %xmm0508; GFNISSE-NEXT:    retq509;510; GFNIAVX1OR2-LABEL: splatconstant_fshr_v16i8:511; GFNIAVX1OR2:       # %bb.0:512; GFNIAVX1OR2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1513; GFNIAVX1OR2-NEXT:    vpaddb %xmm0, %xmm0, %xmm0514; GFNIAVX1OR2-NEXT:    vpor %xmm1, %xmm0, %xmm0515; GFNIAVX1OR2-NEXT:    retq516;517; GFNIAVX512-LABEL: splatconstant_fshr_v16i8:518; GFNIAVX512:       # %bb.0:519; GFNIAVX512-NEXT:    vpaddw %xmm0, %xmm0, %xmm2520; GFNIAVX512-NEXT:    vpsrlw $7, %xmm1, %xmm0521; GFNIAVX512-NEXT:    vpternlogd {{.*#+}} xmm0 = xmm0 ^ (m32bcst & (xmm0 ^ xmm2))522; GFNIAVX512-NEXT:    retq523  %res = call <16 x i8> @llvm.fshr.v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>)524  ret <16 x i8> %res525}526declare <16 x i8> @llvm.fshr.v16i8(<16 x i8>, <16 x i8>, <16 x i8>)527 528;529; 256 Bit Vector Funnel Shifts530;531 532define <32 x i8> @var_fshl_v32i8(<32 x i8> %a, <32 x i8> %b, <32 x i8> %amt) nounwind {533; GFNISSE-LABEL: var_fshl_v32i8:534; GFNISSE:       # %bb.0:535; GFNISSE-NEXT:    movdqa %xmm0, %xmm6536; GFNISSE-NEXT:    movdqa {{.*#+}} xmm8 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]537; GFNISSE-NEXT:    pand %xmm8, %xmm4538; GFNISSE-NEXT:    pxor %xmm7, %xmm7539; GFNISSE-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm4[0],zero,zero,zero,xmm4[1],zero,zero,zero,xmm4[2],zero,zero,zero,xmm4[3],zero,zero,zero540; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm9 = xmm4[0],zero,xmm4[1],zero,xmm4[2],zero,xmm4[3],zero,xmm4[4],zero,xmm4[5],zero,xmm4[6],zero,xmm4[7],zero541; GFNISSE-NEXT:    movdqa %xmm4, %xmm10542; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm10 = xmm10[8],xmm7[8],xmm10[9],xmm7[9],xmm10[10],xmm7[10],xmm10[11],xmm7[11],xmm10[12],xmm7[12],xmm10[13],xmm7[13],xmm10[14],xmm7[14],xmm10[15],xmm7[15]543; GFNISSE-NEXT:    pmovzxwd {{.*#+}} xmm11 = xmm10[0],zero,xmm10[1],zero,xmm10[2],zero,xmm10[3],zero544; GFNISSE-NEXT:    punpckhwd {{.*#+}} xmm10 = xmm10[4,4,5,5,6,6,7,7]545; GFNISSE-NEXT:    pslld $23, %xmm10546; GFNISSE-NEXT:    movdqa {{.*#+}} xmm4 = [1065353216,1065353216,1065353216,1065353216]547; GFNISSE-NEXT:    paddd %xmm4, %xmm10548; GFNISSE-NEXT:    cvttps2dq %xmm10, %xmm10549; GFNISSE-NEXT:    pslld $23, %xmm11550; GFNISSE-NEXT:    paddd %xmm4, %xmm11551; GFNISSE-NEXT:    cvttps2dq %xmm11, %xmm11552; GFNISSE-NEXT:    packusdw %xmm10, %xmm11553; GFNISSE-NEXT:    movdqa %xmm2, %xmm10554; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm10 = xmm10[8],xmm6[8],xmm10[9],xmm6[9],xmm10[10],xmm6[10],xmm10[11],xmm6[11],xmm10[12],xmm6[12],xmm10[13],xmm6[13],xmm10[14],xmm6[14],xmm10[15],xmm6[15]555; GFNISSE-NEXT:    pmullw %xmm11, %xmm10556; GFNISSE-NEXT:    psrlw $8, %xmm10557; GFNISSE-NEXT:    pslld $23, %xmm0558; GFNISSE-NEXT:    paddd %xmm4, %xmm0559; GFNISSE-NEXT:    cvttps2dq %xmm0, %xmm0560; GFNISSE-NEXT:    punpckhwd {{.*#+}} xmm9 = xmm9[4,4,5,5,6,6,7,7]561; GFNISSE-NEXT:    pslld $23, %xmm9562; GFNISSE-NEXT:    paddd %xmm4, %xmm9563; GFNISSE-NEXT:    cvttps2dq %xmm9, %xmm9564; GFNISSE-NEXT:    packusdw %xmm9, %xmm0565; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm6[0],xmm2[1],xmm6[1],xmm2[2],xmm6[2],xmm2[3],xmm6[3],xmm2[4],xmm6[4],xmm2[5],xmm6[5],xmm2[6],xmm6[6],xmm2[7],xmm6[7]566; GFNISSE-NEXT:    pmullw %xmm2, %xmm0567; GFNISSE-NEXT:    psrlw $8, %xmm0568; GFNISSE-NEXT:    packuswb %xmm10, %xmm0569; GFNISSE-NEXT:    pand %xmm8, %xmm5570; GFNISSE-NEXT:    pmovzxbd {{.*#+}} xmm2 = xmm5[0],zero,zero,zero,xmm5[1],zero,zero,zero,xmm5[2],zero,zero,zero,xmm5[3],zero,zero,zero571; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm6 = xmm5[0],zero,xmm5[1],zero,xmm5[2],zero,xmm5[3],zero,xmm5[4],zero,xmm5[5],zero,xmm5[6],zero,xmm5[7],zero572; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm5 = xmm5[8],xmm7[8],xmm5[9],xmm7[9],xmm5[10],xmm7[10],xmm5[11],xmm7[11],xmm5[12],xmm7[12],xmm5[13],xmm7[13],xmm5[14],xmm7[14],xmm5[15],xmm7[15]573; GFNISSE-NEXT:    pmovzxwd {{.*#+}} xmm7 = xmm5[0],zero,xmm5[1],zero,xmm5[2],zero,xmm5[3],zero574; GFNISSE-NEXT:    punpckhwd {{.*#+}} xmm5 = xmm5[4,4,5,5,6,6,7,7]575; GFNISSE-NEXT:    pslld $23, %xmm5576; GFNISSE-NEXT:    paddd %xmm4, %xmm5577; GFNISSE-NEXT:    cvttps2dq %xmm5, %xmm5578; GFNISSE-NEXT:    pslld $23, %xmm7579; GFNISSE-NEXT:    paddd %xmm4, %xmm7580; GFNISSE-NEXT:    cvttps2dq %xmm7, %xmm7581; GFNISSE-NEXT:    packusdw %xmm5, %xmm7582; GFNISSE-NEXT:    movdqa %xmm3, %xmm5583; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm5 = xmm5[8],xmm1[8],xmm5[9],xmm1[9],xmm5[10],xmm1[10],xmm5[11],xmm1[11],xmm5[12],xmm1[12],xmm5[13],xmm1[13],xmm5[14],xmm1[14],xmm5[15],xmm1[15]584; GFNISSE-NEXT:    pmullw %xmm7, %xmm5585; GFNISSE-NEXT:    psrlw $8, %xmm5586; GFNISSE-NEXT:    pslld $23, %xmm2587; GFNISSE-NEXT:    paddd %xmm4, %xmm2588; GFNISSE-NEXT:    cvttps2dq %xmm2, %xmm2589; GFNISSE-NEXT:    punpckhwd {{.*#+}} xmm6 = xmm6[4,4,5,5,6,6,7,7]590; GFNISSE-NEXT:    pslld $23, %xmm6591; GFNISSE-NEXT:    paddd %xmm4, %xmm6592; GFNISSE-NEXT:    cvttps2dq %xmm6, %xmm4593; GFNISSE-NEXT:    packusdw %xmm4, %xmm2594; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3],xmm3[4],xmm1[4],xmm3[5],xmm1[5],xmm3[6],xmm1[6],xmm3[7],xmm1[7]595; GFNISSE-NEXT:    pmullw %xmm3, %xmm2596; GFNISSE-NEXT:    psrlw $8, %xmm2597; GFNISSE-NEXT:    packuswb %xmm5, %xmm2598; GFNISSE-NEXT:    movdqa %xmm2, %xmm1599; GFNISSE-NEXT:    retq600;601; GFNIAVX1-LABEL: var_fshl_v32i8:602; GFNIAVX1:       # %bb.0:603; GFNIAVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2604; GFNIAVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4605; GFNIAVX1-NEXT:    vpxor %xmm5, %xmm5, %xmm5606; GFNIAVX1-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]607; GFNIAVX1-NEXT:    vpunpckhwd {{.*#+}} xmm3 = xmm6[4,4,5,5,6,6,7,7]608; GFNIAVX1-NEXT:    vpslld $23, %xmm3, %xmm7609; GFNIAVX1-NEXT:    vbroadcastss {{.*#+}} xmm3 = [1065353216,1065353216,1065353216,1065353216]610; GFNIAVX1-NEXT:    vpaddd %xmm3, %xmm7, %xmm7611; GFNIAVX1-NEXT:    vcvttps2dq %xmm7, %xmm7612; GFNIAVX1-NEXT:    vpmovzxwd {{.*#+}} xmm6 = xmm6[0],zero,xmm6[1],zero,xmm6[2],zero,xmm6[3],zero613; GFNIAVX1-NEXT:    vpslld $23, %xmm6, %xmm6614; GFNIAVX1-NEXT:    vpaddd %xmm3, %xmm6, %xmm6615; GFNIAVX1-NEXT:    vcvttps2dq %xmm6, %xmm6616; GFNIAVX1-NEXT:    vpackusdw %xmm7, %xmm6, %xmm6617; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7618; GFNIAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm8619; GFNIAVX1-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]620; GFNIAVX1-NEXT:    vpmullw %xmm6, %xmm9, %xmm6621; GFNIAVX1-NEXT:    vpsrlw $8, %xmm6, %xmm6622; GFNIAVX1-NEXT:    vpmovzxbd {{.*#+}} xmm9 = xmm4[0],zero,zero,zero,xmm4[1],zero,zero,zero,xmm4[2],zero,zero,zero,xmm4[3],zero,zero,zero623; GFNIAVX1-NEXT:    vpslld $23, %xmm9, %xmm9624; GFNIAVX1-NEXT:    vpaddd %xmm3, %xmm9, %xmm9625; GFNIAVX1-NEXT:    vcvttps2dq %xmm9, %xmm9626; GFNIAVX1-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],zero627; GFNIAVX1-NEXT:    vpunpckhwd {{.*#+}} xmm4 = xmm4[4,4,5,5,6,6,7,7]628; GFNIAVX1-NEXT:    vpslld $23, %xmm4, %xmm4629; GFNIAVX1-NEXT:    vpaddd %xmm3, %xmm4, %xmm4630; GFNIAVX1-NEXT:    vcvttps2dq %xmm4, %xmm4631; GFNIAVX1-NEXT:    vpackusdw %xmm4, %xmm9, %xmm4632; GFNIAVX1-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]633; GFNIAVX1-NEXT:    vpmullw %xmm4, %xmm7, %xmm4634; GFNIAVX1-NEXT:    vpsrlw $8, %xmm4, %xmm4635; GFNIAVX1-NEXT:    vpackuswb %xmm6, %xmm4, %xmm4636; GFNIAVX1-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]637; GFNIAVX1-NEXT:    vpunpckhwd {{.*#+}} xmm6 = xmm5[4,4,5,5,6,6,7,7]638; GFNIAVX1-NEXT:    vpslld $23, %xmm6, %xmm6639; GFNIAVX1-NEXT:    vpaddd %xmm3, %xmm6, %xmm6640; GFNIAVX1-NEXT:    vcvttps2dq %xmm6, %xmm6641; GFNIAVX1-NEXT:    vpmovzxwd {{.*#+}} xmm5 = xmm5[0],zero,xmm5[1],zero,xmm5[2],zero,xmm5[3],zero642; GFNIAVX1-NEXT:    vpslld $23, %xmm5, %xmm5643; GFNIAVX1-NEXT:    vpaddd %xmm3, %xmm5, %xmm5644; GFNIAVX1-NEXT:    vcvttps2dq %xmm5, %xmm5645; GFNIAVX1-NEXT:    vpackusdw %xmm6, %xmm5, %xmm5646; GFNIAVX1-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]647; GFNIAVX1-NEXT:    vpmullw %xmm5, %xmm6, %xmm5648; GFNIAVX1-NEXT:    vpsrlw $8, %xmm5, %xmm5649; GFNIAVX1-NEXT:    vpmovzxbd {{.*#+}} xmm6 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero650; GFNIAVX1-NEXT:    vpslld $23, %xmm6, %xmm6651; GFNIAVX1-NEXT:    vpaddd %xmm3, %xmm6, %xmm6652; GFNIAVX1-NEXT:    vcvttps2dq %xmm6, %xmm6653; GFNIAVX1-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],zero654; GFNIAVX1-NEXT:    vpunpckhwd {{.*#+}} xmm2 = xmm2[4,4,5,5,6,6,7,7]655; GFNIAVX1-NEXT:    vpslld $23, %xmm2, %xmm2656; GFNIAVX1-NEXT:    vpaddd %xmm3, %xmm2, %xmm2657; GFNIAVX1-NEXT:    vcvttps2dq %xmm2, %xmm2658; GFNIAVX1-NEXT:    vpackusdw %xmm2, %xmm6, %xmm2659; GFNIAVX1-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]660; GFNIAVX1-NEXT:    vpmullw %xmm2, %xmm0, %xmm0661; GFNIAVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0662; GFNIAVX1-NEXT:    vpackuswb %xmm5, %xmm0, %xmm0663; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0664; GFNIAVX1-NEXT:    retq665;666; GFNIAVX2-LABEL: var_fshl_v32i8:667; GFNIAVX2:       # %bb.0:668; GFNIAVX2-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]669; GFNIAVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4670; GFNIAVX2-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]671; GFNIAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2672; GFNIAVX2-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]673; GFNIAVX2-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]674; GFNIAVX2-NEXT:    vpsllvd %ymm7, %ymm5, %ymm5675; GFNIAVX2-NEXT:    vpsrld $16, %ymm5, %ymm5676; GFNIAVX2-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]677; GFNIAVX2-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]678; GFNIAVX2-NEXT:    vpsllvd %ymm6, %ymm3, %ymm3679; GFNIAVX2-NEXT:    vpsrld $16, %ymm3, %ymm3680; GFNIAVX2-NEXT:    vpackusdw %ymm5, %ymm3, %ymm3681; GFNIAVX2-NEXT:    vpsrlw $8, %ymm3, %ymm3682; GFNIAVX2-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]683; GFNIAVX2-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]684; GFNIAVX2-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]685; GFNIAVX2-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]686; GFNIAVX2-NEXT:    vpsllvd %ymm5, %ymm1, %ymm1687; GFNIAVX2-NEXT:    vpsrld $16, %ymm1, %ymm1688; GFNIAVX2-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]689; GFNIAVX2-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]690; GFNIAVX2-NEXT:    vpsllvd %ymm2, %ymm0, %ymm0691; GFNIAVX2-NEXT:    vpsrld $16, %ymm0, %ymm0692; GFNIAVX2-NEXT:    vpackusdw %ymm1, %ymm0, %ymm0693; GFNIAVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0694; GFNIAVX2-NEXT:    vpackuswb %ymm3, %ymm0, %ymm0695; GFNIAVX2-NEXT:    retq696;697; GFNIAVX512VL-LABEL: var_fshl_v32i8:698; GFNIAVX512VL:       # %bb.0:699; GFNIAVX512VL-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]700; GFNIAVX512VL-NEXT:    vpandn %ymm3, %ymm2, %ymm4701; GFNIAVX512VL-NEXT:    vpsllw $5, %ymm4, %ymm4702; GFNIAVX512VL-NEXT:    vpbroadcastq {{.*#+}} ymm5 = [0,128,64,32,16,8,4,2,0,128,64,32,16,8,4,2,0,128,64,32,16,8,4,2,0,128,64,32,16,8,4,2]703; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm5, %ymm1, %ymm1704; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm1, %ymm6705; GFNIAVX512VL-NEXT:    vpblendvb %ymm4, %ymm6, %ymm1, %ymm1706; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm1, %ymm6707; GFNIAVX512VL-NEXT:    vpaddb %ymm4, %ymm4, %ymm4708; GFNIAVX512VL-NEXT:    vpblendvb %ymm4, %ymm6, %ymm1, %ymm1709; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm5, %ymm1, %ymm5710; GFNIAVX512VL-NEXT:    vpaddb %ymm4, %ymm4, %ymm4711; GFNIAVX512VL-NEXT:    vpblendvb %ymm4, %ymm5, %ymm1, %ymm1712; GFNIAVX512VL-NEXT:    vpand %ymm3, %ymm2, %ymm2713; GFNIAVX512VL-NEXT:    vpsllw $5, %ymm2, %ymm2714; GFNIAVX512VL-NEXT:    vpaddb %ymm2, %ymm2, %ymm3715; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm4716; GFNIAVX512VL-NEXT:    vpblendvb %ymm2, %ymm4, %ymm0, %ymm0717; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm2718; GFNIAVX512VL-NEXT:    vpblendvb %ymm3, %ymm2, %ymm0, %ymm0719; GFNIAVX512VL-NEXT:    vpaddb %ymm0, %ymm0, %ymm2720; GFNIAVX512VL-NEXT:    vpaddb %ymm3, %ymm3, %ymm3721; GFNIAVX512VL-NEXT:    vpblendvb %ymm3, %ymm2, %ymm0, %ymm0722; GFNIAVX512VL-NEXT:    vpor %ymm1, %ymm0, %ymm0723; GFNIAVX512VL-NEXT:    retq724;725; GFNIAVX512BW-LABEL: var_fshl_v32i8:726; GFNIAVX512BW:       # %bb.0:727; GFNIAVX512BW-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],zero728; GFNIAVX512BW-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],zero729; GFNIAVX512BW-NEXT:    vpsllw $8, %zmm0, %zmm0730; GFNIAVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm0731; GFNIAVX512BW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm2, %ymm1732; GFNIAVX512BW-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],zero733; GFNIAVX512BW-NEXT:    vpsllvw %zmm1, %zmm0, %zmm0734; GFNIAVX512BW-NEXT:    vpsrlw $8, %zmm0, %zmm0735; GFNIAVX512BW-NEXT:    vpmovwb %zmm0, %ymm0736; GFNIAVX512BW-NEXT:    retq737  %res = call <32 x i8> @llvm.fshl.v32i8(<32 x i8> %a, <32 x i8> %b, <32 x i8> %amt)738  ret <32 x i8> %res739}740 741define <32 x i8> @var_fshr_v32i8(<32 x i8> %a, <32 x i8> %b, <32 x i8> %amt) nounwind {742; GFNISSE-LABEL: var_fshr_v32i8:743; GFNISSE:       # %bb.0:744; GFNISSE-NEXT:    movdqa %xmm4, %xmm6745; GFNISSE-NEXT:    movdqa %xmm0, %xmm4746; GFNISSE-NEXT:    movdqa {{.*#+}} xmm8 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]747; GFNISSE-NEXT:    movdqa %xmm2, %xmm9748; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm8, %xmm9749; GFNISSE-NEXT:    movdqa {{.*#+}} xmm7 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]750; GFNISSE-NEXT:    movdqa %xmm6, %xmm0751; GFNISSE-NEXT:    pand %xmm7, %xmm0752; GFNISSE-NEXT:    psllw $5, %xmm0753; GFNISSE-NEXT:    pblendvb %xmm0, %xmm9, %xmm2754; GFNISSE-NEXT:    movdqa {{.*#+}} xmm9 = [0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4]755; GFNISSE-NEXT:    movdqa %xmm2, %xmm10756; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm9, %xmm10757; GFNISSE-NEXT:    paddb %xmm0, %xmm0758; GFNISSE-NEXT:    pblendvb %xmm0, %xmm10, %xmm2759; GFNISSE-NEXT:    movdqa {{.*#+}} xmm10 = [0,128,64,32,16,8,4,2,0,128,64,32,16,8,4,2]760; GFNISSE-NEXT:    movdqa %xmm2, %xmm11761; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm10, %xmm11762; GFNISSE-NEXT:    paddb %xmm0, %xmm0763; GFNISSE-NEXT:    pblendvb %xmm0, %xmm11, %xmm2764; GFNISSE-NEXT:    paddb %xmm4, %xmm4765; GFNISSE-NEXT:    pmovsxdq {{.*#+}} xmm11 = [16909320,16909320]766; GFNISSE-NEXT:    movdqa %xmm4, %xmm12767; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm11, %xmm12768; GFNISSE-NEXT:    pandn %xmm7, %xmm6769; GFNISSE-NEXT:    psllw $5, %xmm6770; GFNISSE-NEXT:    movdqa %xmm6, %xmm0771; GFNISSE-NEXT:    pblendvb %xmm0, %xmm12, %xmm4772; GFNISSE-NEXT:    movdqa {{.*#+}} xmm12 = [32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0]773; GFNISSE-NEXT:    movdqa %xmm4, %xmm13774; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm12, %xmm13775; GFNISSE-NEXT:    paddb %xmm6, %xmm6776; GFNISSE-NEXT:    movdqa %xmm6, %xmm0777; GFNISSE-NEXT:    pblendvb %xmm0, %xmm13, %xmm4778; GFNISSE-NEXT:    movdqa %xmm4, %xmm13779; GFNISSE-NEXT:    paddb %xmm4, %xmm13780; GFNISSE-NEXT:    paddb %xmm6, %xmm6781; GFNISSE-NEXT:    movdqa %xmm6, %xmm0782; GFNISSE-NEXT:    pblendvb %xmm0, %xmm13, %xmm4783; GFNISSE-NEXT:    por %xmm2, %xmm4784; GFNISSE-NEXT:    movdqa %xmm3, %xmm2785; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm8, %xmm2786; GFNISSE-NEXT:    movdqa %xmm5, %xmm0787; GFNISSE-NEXT:    pand %xmm7, %xmm0788; GFNISSE-NEXT:    psllw $5, %xmm0789; GFNISSE-NEXT:    pblendvb %xmm0, %xmm2, %xmm3790; GFNISSE-NEXT:    movdqa %xmm3, %xmm2791; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm9, %xmm2792; GFNISSE-NEXT:    paddb %xmm0, %xmm0793; GFNISSE-NEXT:    pblendvb %xmm0, %xmm2, %xmm3794; GFNISSE-NEXT:    movdqa %xmm3, %xmm2795; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm10, %xmm2796; GFNISSE-NEXT:    paddb %xmm0, %xmm0797; GFNISSE-NEXT:    pblendvb %xmm0, %xmm2, %xmm3798; GFNISSE-NEXT:    paddb %xmm1, %xmm1799; GFNISSE-NEXT:    movdqa %xmm1, %xmm2800; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm11, %xmm2801; GFNISSE-NEXT:    pandn %xmm7, %xmm5802; GFNISSE-NEXT:    psllw $5, %xmm5803; GFNISSE-NEXT:    movdqa %xmm5, %xmm0804; GFNISSE-NEXT:    pblendvb %xmm0, %xmm2, %xmm1805; GFNISSE-NEXT:    movdqa %xmm1, %xmm2806; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm12, %xmm2807; GFNISSE-NEXT:    paddb %xmm5, %xmm5808; GFNISSE-NEXT:    movdqa %xmm5, %xmm0809; GFNISSE-NEXT:    pblendvb %xmm0, %xmm2, %xmm1810; GFNISSE-NEXT:    movdqa %xmm1, %xmm2811; GFNISSE-NEXT:    paddb %xmm1, %xmm2812; GFNISSE-NEXT:    paddb %xmm5, %xmm5813; GFNISSE-NEXT:    movdqa %xmm5, %xmm0814; GFNISSE-NEXT:    pblendvb %xmm0, %xmm2, %xmm1815; GFNISSE-NEXT:    por %xmm3, %xmm1816; GFNISSE-NEXT:    movdqa %xmm4, %xmm0817; GFNISSE-NEXT:    retq818;819; GFNIAVX1-LABEL: var_fshr_v32i8:820; GFNIAVX1:       # %bb.0:821; GFNIAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4822; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm5 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]823; GFNIAVX1-NEXT:    # xmm5 = mem[0,0]824; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm5, %xmm4, %xmm6825; GFNIAVX1-NEXT:    vbroadcastss {{.*#+}} ymm3 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]826; GFNIAVX1-NEXT:    vandps %ymm3, %ymm2, %ymm2827; GFNIAVX1-NEXT:    vextractf128 $1, %ymm2, %xmm7828; GFNIAVX1-NEXT:    vpsllw $5, %xmm7, %xmm8829; GFNIAVX1-NEXT:    vpblendvb %xmm8, %xmm6, %xmm4, %xmm4830; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm6 = [0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4]831; GFNIAVX1-NEXT:    # xmm6 = mem[0,0]832; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm6, %xmm4, %xmm9833; GFNIAVX1-NEXT:    vpaddb %xmm8, %xmm8, %xmm8834; GFNIAVX1-NEXT:    vpblendvb %xmm8, %xmm9, %xmm4, %xmm4835; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm9 = [0,128,64,32,16,8,4,2,0,128,64,32,16,8,4,2]836; GFNIAVX1-NEXT:    # xmm9 = mem[0,0]837; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm9, %xmm4, %xmm10838; GFNIAVX1-NEXT:    vpaddb %xmm8, %xmm8, %xmm8839; GFNIAVX1-NEXT:    vpblendvb %xmm8, %xmm10, %xmm4, %xmm4840; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm8841; GFNIAVX1-NEXT:    vpaddb %xmm8, %xmm8, %xmm8842; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm10 = [8,4,2,1,0,0,0,0,8,4,2,1,0,0,0,0]843; GFNIAVX1-NEXT:    # xmm10 = mem[0,0]844; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm10, %xmm8, %xmm11845; GFNIAVX1-NEXT:    vpxor %xmm3, %xmm7, %xmm7846; GFNIAVX1-NEXT:    vpsllw $5, %xmm7, %xmm7847; GFNIAVX1-NEXT:    vpblendvb %xmm7, %xmm11, %xmm8, %xmm8848; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm11 = [32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0]849; GFNIAVX1-NEXT:    # xmm11 = mem[0,0]850; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm11, %xmm8, %xmm12851; GFNIAVX1-NEXT:    vpaddb %xmm7, %xmm7, %xmm7852; GFNIAVX1-NEXT:    vpblendvb %xmm7, %xmm12, %xmm8, %xmm8853; GFNIAVX1-NEXT:    vpaddb %xmm8, %xmm8, %xmm12854; GFNIAVX1-NEXT:    vpaddb %xmm7, %xmm7, %xmm7855; GFNIAVX1-NEXT:    vpblendvb %xmm7, %xmm12, %xmm8, %xmm7856; GFNIAVX1-NEXT:    vpor %xmm4, %xmm7, %xmm4857; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm5, %xmm1, %xmm5858; GFNIAVX1-NEXT:    vpsllw $5, %xmm2, %xmm7859; GFNIAVX1-NEXT:    vpblendvb %xmm7, %xmm5, %xmm1, %xmm1860; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm6, %xmm1, %xmm5861; GFNIAVX1-NEXT:    vpaddb %xmm7, %xmm7, %xmm6862; GFNIAVX1-NEXT:    vpblendvb %xmm6, %xmm5, %xmm1, %xmm1863; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm9, %xmm1, %xmm5864; GFNIAVX1-NEXT:    vpaddb %xmm6, %xmm6, %xmm6865; GFNIAVX1-NEXT:    vpblendvb %xmm6, %xmm5, %xmm1, %xmm1866; GFNIAVX1-NEXT:    vpaddb %xmm0, %xmm0, %xmm0867; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm10, %xmm0, %xmm5868; GFNIAVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2869; GFNIAVX1-NEXT:    vpsllw $5, %xmm2, %xmm2870; GFNIAVX1-NEXT:    vpblendvb %xmm2, %xmm5, %xmm0, %xmm0871; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm11, %xmm0, %xmm3872; GFNIAVX1-NEXT:    vpaddb %xmm2, %xmm2, %xmm2873; GFNIAVX1-NEXT:    vpblendvb %xmm2, %xmm3, %xmm0, %xmm0874; GFNIAVX1-NEXT:    vpaddb %xmm0, %xmm0, %xmm3875; GFNIAVX1-NEXT:    vpaddb %xmm2, %xmm2, %xmm2876; GFNIAVX1-NEXT:    vpblendvb %xmm2, %xmm3, %xmm0, %xmm0877; GFNIAVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0878; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0879; GFNIAVX1-NEXT:    retq880;881; GFNIAVX2-LABEL: var_fshr_v32i8:882; GFNIAVX2:       # %bb.0:883; GFNIAVX2-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]884; GFNIAVX2-NEXT:    vpand %ymm3, %ymm2, %ymm4885; GFNIAVX2-NEXT:    vpsllw $5, %ymm4, %ymm4886; GFNIAVX2-NEXT:    vpaddb %ymm4, %ymm4, %ymm5887; GFNIAVX2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm6888; GFNIAVX2-NEXT:    vpblendvb %ymm4, %ymm6, %ymm1, %ymm1889; GFNIAVX2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm4890; GFNIAVX2-NEXT:    vpblendvb %ymm5, %ymm4, %ymm1, %ymm1891; GFNIAVX2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm4892; GFNIAVX2-NEXT:    vpaddb %ymm5, %ymm5, %ymm5893; GFNIAVX2-NEXT:    vpblendvb %ymm5, %ymm4, %ymm1, %ymm1894; GFNIAVX2-NEXT:    vpandn %ymm3, %ymm2, %ymm2895; GFNIAVX2-NEXT:    vpsllw $5, %ymm2, %ymm2896; GFNIAVX2-NEXT:    vpaddb %ymm2, %ymm2, %ymm3897; GFNIAVX2-NEXT:    vpaddb %ymm0, %ymm0, %ymm0898; GFNIAVX2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm4899; GFNIAVX2-NEXT:    vpblendvb %ymm2, %ymm4, %ymm0, %ymm0900; GFNIAVX2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm2901; GFNIAVX2-NEXT:    vpblendvb %ymm3, %ymm2, %ymm0, %ymm0902; GFNIAVX2-NEXT:    vpaddb %ymm0, %ymm0, %ymm2903; GFNIAVX2-NEXT:    vpaddb %ymm3, %ymm3, %ymm3904; GFNIAVX2-NEXT:    vpblendvb %ymm3, %ymm2, %ymm0, %ymm0905; GFNIAVX2-NEXT:    vpor %ymm1, %ymm0, %ymm0906; GFNIAVX2-NEXT:    retq907;908; GFNIAVX512VL-LABEL: var_fshr_v32i8:909; GFNIAVX512VL:       # %bb.0:910; GFNIAVX512VL-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]911; GFNIAVX512VL-NEXT:    vpand %ymm3, %ymm2, %ymm4912; GFNIAVX512VL-NEXT:    vpsllw $5, %ymm4, %ymm4913; GFNIAVX512VL-NEXT:    vpaddb %ymm4, %ymm4, %ymm5914; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm1, %ymm6915; GFNIAVX512VL-NEXT:    vpblendvb %ymm4, %ymm6, %ymm1, %ymm1916; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm1, %ymm4917; GFNIAVX512VL-NEXT:    vpblendvb %ymm5, %ymm4, %ymm1, %ymm1918; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm1, %ymm4919; GFNIAVX512VL-NEXT:    vpaddb %ymm5, %ymm5, %ymm5920; GFNIAVX512VL-NEXT:    vpblendvb %ymm5, %ymm4, %ymm1, %ymm1921; GFNIAVX512VL-NEXT:    vpandn %ymm3, %ymm2, %ymm2922; GFNIAVX512VL-NEXT:    vpsllw $5, %ymm2, %ymm2923; GFNIAVX512VL-NEXT:    vpaddb %ymm2, %ymm2, %ymm3924; GFNIAVX512VL-NEXT:    vpaddb %ymm0, %ymm0, %ymm0925; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm4926; GFNIAVX512VL-NEXT:    vpblendvb %ymm2, %ymm4, %ymm0, %ymm0927; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm2928; GFNIAVX512VL-NEXT:    vpblendvb %ymm3, %ymm2, %ymm0, %ymm0929; GFNIAVX512VL-NEXT:    vpaddb %ymm0, %ymm0, %ymm2930; GFNIAVX512VL-NEXT:    vpaddb %ymm3, %ymm3, %ymm3931; GFNIAVX512VL-NEXT:    vpblendvb %ymm3, %ymm2, %ymm0, %ymm0932; GFNIAVX512VL-NEXT:    vpor %ymm1, %ymm0, %ymm0933; GFNIAVX512VL-NEXT:    retq934;935; GFNIAVX512BW-LABEL: var_fshr_v32i8:936; GFNIAVX512BW:       # %bb.0:937; GFNIAVX512BW-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],zero938; GFNIAVX512BW-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],zero939; GFNIAVX512BW-NEXT:    vpsllw $8, %zmm0, %zmm0940; GFNIAVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm0941; GFNIAVX512BW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm2, %ymm1942; GFNIAVX512BW-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],zero943; GFNIAVX512BW-NEXT:    vpsrlvw %zmm1, %zmm0, %zmm0944; GFNIAVX512BW-NEXT:    vpmovwb %zmm0, %ymm0945; GFNIAVX512BW-NEXT:    retq946  %res = call <32 x i8> @llvm.fshr.v32i8(<32 x i8> %a, <32 x i8> %b, <32 x i8> %amt)947  ret <32 x i8> %res948}949 950define <32 x i8> @splatvar_fshl_v32i8(<32 x i8> %a, <32 x i8> %b, <32 x i8> %amt) nounwind {951; GFNISSE-LABEL: splatvar_fshl_v32i8:952; GFNISSE:       # %bb.0:953; GFNISSE-NEXT:    movdqa %xmm2, %xmm5954; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm5 = xmm5[8],xmm0[8],xmm5[9],xmm0[9],xmm5[10],xmm0[10],xmm5[11],xmm0[11],xmm5[12],xmm0[12],xmm5[13],xmm0[13],xmm5[14],xmm0[14],xmm5[15],xmm0[15]955; GFNISSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4956; GFNISSE-NEXT:    psllw %xmm4, %xmm5957; GFNISSE-NEXT:    psrlw $8, %xmm5958; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]959; GFNISSE-NEXT:    psllw %xmm4, %xmm2960; GFNISSE-NEXT:    psrlw $8, %xmm2961; GFNISSE-NEXT:    packuswb %xmm5, %xmm2962; GFNISSE-NEXT:    movdqa %xmm3, %xmm0963; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]964; GFNISSE-NEXT:    psllw %xmm4, %xmm0965; GFNISSE-NEXT:    psrlw $8, %xmm0966; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3],xmm3[4],xmm1[4],xmm3[5],xmm1[5],xmm3[6],xmm1[6],xmm3[7],xmm1[7]967; GFNISSE-NEXT:    psllw %xmm4, %xmm3968; GFNISSE-NEXT:    psrlw $8, %xmm3969; GFNISSE-NEXT:    packuswb %xmm0, %xmm3970; GFNISSE-NEXT:    movdqa %xmm2, %xmm0971; GFNISSE-NEXT:    movdqa %xmm3, %xmm1972; GFNISSE-NEXT:    retq973;974; GFNIAVX1-LABEL: splatvar_fshl_v32i8:975; GFNIAVX1:       # %bb.0:976; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3977; GFNIAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4978; GFNIAVX1-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]979; GFNIAVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2980; GFNIAVX1-NEXT:    vpsllw %xmm2, %xmm5, %xmm5981; GFNIAVX1-NEXT:    vpsrlw $8, %xmm5, %xmm5982; GFNIAVX1-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]983; GFNIAVX1-NEXT:    vpsllw %xmm2, %xmm3, %xmm3984; GFNIAVX1-NEXT:    vpsrlw $8, %xmm3, %xmm3985; GFNIAVX1-NEXT:    vpackuswb %xmm5, %xmm3, %xmm3986; GFNIAVX1-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]987; GFNIAVX1-NEXT:    vpsllw %xmm2, %xmm4, %xmm4988; GFNIAVX1-NEXT:    vpsrlw $8, %xmm4, %xmm4989; GFNIAVX1-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]990; GFNIAVX1-NEXT:    vpsllw %xmm2, %xmm0, %xmm0991; GFNIAVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0992; GFNIAVX1-NEXT:    vpackuswb %xmm4, %xmm0, %xmm0993; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0994; GFNIAVX1-NEXT:    retq995;996; GFNIAVX2-LABEL: splatvar_fshl_v32i8:997; GFNIAVX2:       # %bb.0:998; GFNIAVX2-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]999; GFNIAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21000; GFNIAVX2-NEXT:    vpsllw %xmm2, %ymm3, %ymm31001; GFNIAVX2-NEXT:    vpsrlw $8, %ymm3, %ymm31002; GFNIAVX2-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]1003; GFNIAVX2-NEXT:    vpsllw %xmm2, %ymm0, %ymm01004; GFNIAVX2-NEXT:    vpsrlw $8, %ymm0, %ymm01005; GFNIAVX2-NEXT:    vpackuswb %ymm3, %ymm0, %ymm01006; GFNIAVX2-NEXT:    retq1007;1008; GFNIAVX512-LABEL: splatvar_fshl_v32i8:1009; GFNIAVX512:       # %bb.0:1010; GFNIAVX512-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]1011; GFNIAVX512-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21012; GFNIAVX512-NEXT:    vpsllw %xmm2, %ymm3, %ymm31013; GFNIAVX512-NEXT:    vpsrlw $8, %ymm3, %ymm31014; GFNIAVX512-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]1015; GFNIAVX512-NEXT:    vpsllw %xmm2, %ymm0, %ymm01016; GFNIAVX512-NEXT:    vpsrlw $8, %ymm0, %ymm01017; GFNIAVX512-NEXT:    vpackuswb %ymm3, %ymm0, %ymm01018; GFNIAVX512-NEXT:    retq1019  %splat = shufflevector <32 x i8> %amt, <32 x i8> undef, <32 x i32> zeroinitializer1020  %res = call <32 x i8> @llvm.fshl.v32i8(<32 x i8> %a, <32 x i8> %b, <32 x i8> %splat)1021  ret <32 x i8> %res1022}1023 1024define <32 x i8> @splatvar_fshr_v32i8(<32 x i8> %a, <32 x i8> %b, <32 x i8> %amt) nounwind {1025; GFNISSE-LABEL: splatvar_fshr_v32i8:1026; GFNISSE:       # %bb.0:1027; GFNISSE-NEXT:    movdqa %xmm2, %xmm61028; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm6 = xmm6[8],xmm0[8],xmm6[9],xmm0[9],xmm6[10],xmm0[10],xmm6[11],xmm0[11],xmm6[12],xmm0[12],xmm6[13],xmm0[13],xmm6[14],xmm0[14],xmm6[15],xmm0[15]1029; GFNISSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm41030; GFNISSE-NEXT:    psrlw %xmm4, %xmm61031; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm5 = [255,255,255,255,255,255,255,255]1032; GFNISSE-NEXT:    pand %xmm5, %xmm61033; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]1034; GFNISSE-NEXT:    psrlw %xmm4, %xmm21035; GFNISSE-NEXT:    pand %xmm5, %xmm21036; GFNISSE-NEXT:    packuswb %xmm6, %xmm21037; GFNISSE-NEXT:    movdqa %xmm3, %xmm01038; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]1039; GFNISSE-NEXT:    psrlw %xmm4, %xmm01040; GFNISSE-NEXT:    pand %xmm5, %xmm01041; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3],xmm3[4],xmm1[4],xmm3[5],xmm1[5],xmm3[6],xmm1[6],xmm3[7],xmm1[7]1042; GFNISSE-NEXT:    psrlw %xmm4, %xmm31043; GFNISSE-NEXT:    pand %xmm3, %xmm51044; GFNISSE-NEXT:    packuswb %xmm0, %xmm51045; GFNISSE-NEXT:    movdqa %xmm2, %xmm01046; GFNISSE-NEXT:    movdqa %xmm5, %xmm11047; GFNISSE-NEXT:    retq1048;1049; GFNIAVX1-LABEL: splatvar_fshr_v32i8:1050; GFNIAVX1:       # %bb.0:1051; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31052; GFNIAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm41053; GFNIAVX1-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]1054; GFNIAVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21055; GFNIAVX1-NEXT:    vpsrlw %xmm2, %xmm5, %xmm51056; GFNIAVX1-NEXT:    vbroadcastss {{.*#+}} xmm6 = [255,255,255,255,255,255,255,255]1057; GFNIAVX1-NEXT:    vpand %xmm6, %xmm5, %xmm51058; GFNIAVX1-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]1059; GFNIAVX1-NEXT:    vpsrlw %xmm2, %xmm3, %xmm31060; GFNIAVX1-NEXT:    vpand %xmm6, %xmm3, %xmm31061; GFNIAVX1-NEXT:    vpackuswb %xmm5, %xmm3, %xmm31062; GFNIAVX1-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]1063; GFNIAVX1-NEXT:    vpsrlw %xmm2, %xmm4, %xmm41064; GFNIAVX1-NEXT:    vpand %xmm6, %xmm4, %xmm41065; GFNIAVX1-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]1066; GFNIAVX1-NEXT:    vpsrlw %xmm2, %xmm0, %xmm01067; GFNIAVX1-NEXT:    vpand %xmm6, %xmm0, %xmm01068; GFNIAVX1-NEXT:    vpackuswb %xmm4, %xmm0, %xmm01069; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm01070; GFNIAVX1-NEXT:    retq1071;1072; GFNIAVX2-LABEL: splatvar_fshr_v32i8:1073; GFNIAVX2:       # %bb.0:1074; GFNIAVX2-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]1075; GFNIAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21076; GFNIAVX2-NEXT:    vpsrlw %xmm2, %ymm3, %ymm31077; GFNIAVX2-NEXT:    vpbroadcastw {{.*#+}} ymm4 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]1078; GFNIAVX2-NEXT:    vpand %ymm4, %ymm3, %ymm31079; GFNIAVX2-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]1080; GFNIAVX2-NEXT:    vpsrlw %xmm2, %ymm0, %ymm01081; GFNIAVX2-NEXT:    vpand %ymm4, %ymm0, %ymm01082; GFNIAVX2-NEXT:    vpackuswb %ymm3, %ymm0, %ymm01083; GFNIAVX2-NEXT:    retq1084;1085; GFNIAVX512VL-LABEL: splatvar_fshr_v32i8:1086; GFNIAVX512VL:       # %bb.0:1087; GFNIAVX512VL-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]1088; GFNIAVX512VL-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21089; GFNIAVX512VL-NEXT:    vpsrlw %xmm2, %ymm3, %ymm31090; GFNIAVX512VL-NEXT:    vpbroadcastd {{.*#+}} ymm4 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]1091; GFNIAVX512VL-NEXT:    vpand %ymm4, %ymm3, %ymm31092; GFNIAVX512VL-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]1093; GFNIAVX512VL-NEXT:    vpsrlw %xmm2, %ymm0, %ymm01094; GFNIAVX512VL-NEXT:    vpand %ymm4, %ymm0, %ymm01095; GFNIAVX512VL-NEXT:    vpackuswb %ymm3, %ymm0, %ymm01096; GFNIAVX512VL-NEXT:    retq1097;1098; GFNIAVX512BW-LABEL: splatvar_fshr_v32i8:1099; GFNIAVX512BW:       # %bb.0:1100; GFNIAVX512BW-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]1101; GFNIAVX512BW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21102; GFNIAVX512BW-NEXT:    vpsrlw %xmm2, %ymm3, %ymm31103; GFNIAVX512BW-NEXT:    vpbroadcastw {{.*#+}} ymm4 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]1104; GFNIAVX512BW-NEXT:    vpand %ymm4, %ymm3, %ymm31105; GFNIAVX512BW-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]1106; GFNIAVX512BW-NEXT:    vpsrlw %xmm2, %ymm0, %ymm01107; GFNIAVX512BW-NEXT:    vpand %ymm4, %ymm0, %ymm01108; GFNIAVX512BW-NEXT:    vpackuswb %ymm3, %ymm0, %ymm01109; GFNIAVX512BW-NEXT:    retq1110  %splat = shufflevector <32 x i8> %amt, <32 x i8> undef, <32 x i32> zeroinitializer1111  %res = call <32 x i8> @llvm.fshr.v32i8(<32 x i8> %a, <32 x i8> %b, <32 x i8> %splat)1112  ret <32 x i8> %res1113}1114 1115define <32 x i8> @constant_fshl_v32i8(<32 x i8> %a, <32 x i8> %b) nounwind {1116; GFNISSE-LABEL: constant_fshl_v32i8:1117; GFNISSE:       # %bb.0:1118; GFNISSE-NEXT:    movdqa %xmm2, %xmm51119; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm5 = xmm5[8],xmm0[8],xmm5[9],xmm0[9],xmm5[10],xmm0[10],xmm5[11],xmm0[11],xmm5[12],xmm0[12],xmm5[13],xmm0[13],xmm5[14],xmm0[14],xmm5[15],xmm0[15]1120; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm6 = [1,128,64,32,16,8,4,2]1121; GFNISSE-NEXT:    pmullw %xmm6, %xmm51122; GFNISSE-NEXT:    psrlw $8, %xmm51123; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]1124; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm4 = [1,2,4,8,16,32,64,128]1125; GFNISSE-NEXT:    pmullw %xmm4, %xmm21126; GFNISSE-NEXT:    psrlw $8, %xmm21127; GFNISSE-NEXT:    packuswb %xmm5, %xmm21128; GFNISSE-NEXT:    movdqa %xmm3, %xmm01129; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]1130; GFNISSE-NEXT:    pmullw %xmm6, %xmm01131; GFNISSE-NEXT:    psrlw $8, %xmm01132; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3],xmm3[4],xmm1[4],xmm3[5],xmm1[5],xmm3[6],xmm1[6],xmm3[7],xmm1[7]1133; GFNISSE-NEXT:    pmullw %xmm3, %xmm41134; GFNISSE-NEXT:    psrlw $8, %xmm41135; GFNISSE-NEXT:    packuswb %xmm0, %xmm41136; GFNISSE-NEXT:    movdqa %xmm2, %xmm01137; GFNISSE-NEXT:    movdqa %xmm4, %xmm11138; GFNISSE-NEXT:    retq1139;1140; GFNIAVX1-LABEL: constant_fshl_v32i8:1141; GFNIAVX1:       # %bb.0:1142; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm21143; GFNIAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm31144; GFNIAVX1-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]1145; GFNIAVX1-NEXT:    vpmovzxbw {{.*#+}} xmm5 = [1,128,64,32,16,8,4,2]1146; GFNIAVX1-NEXT:    vpmullw %xmm5, %xmm4, %xmm41147; GFNIAVX1-NEXT:    vpsrlw $8, %xmm4, %xmm41148; GFNIAVX1-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]1149; GFNIAVX1-NEXT:    vpmovzxbw {{.*#+}} xmm3 = [1,2,4,8,16,32,64,128]1150; GFNIAVX1-NEXT:    vpmullw %xmm3, %xmm2, %xmm21151; GFNIAVX1-NEXT:    vpsrlw $8, %xmm2, %xmm21152; GFNIAVX1-NEXT:    vpackuswb %xmm4, %xmm2, %xmm21153; GFNIAVX1-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]1154; GFNIAVX1-NEXT:    vpmullw %xmm5, %xmm4, %xmm41155; GFNIAVX1-NEXT:    vpsrlw $8, %xmm4, %xmm41156; GFNIAVX1-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]1157; GFNIAVX1-NEXT:    vpmullw %xmm3, %xmm0, %xmm01158; GFNIAVX1-NEXT:    vpsrlw $8, %xmm0, %xmm01159; GFNIAVX1-NEXT:    vpackuswb %xmm4, %xmm0, %xmm01160; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01161; GFNIAVX1-NEXT:    retq1162;1163; GFNIAVX2-LABEL: constant_fshl_v32i8:1164; GFNIAVX2:       # %bb.0:1165; GFNIAVX2-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]1166; GFNIAVX2-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]1167; GFNIAVX2-NEXT:    vpsrlw $8, %ymm2, %ymm21168; GFNIAVX2-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]1169; GFNIAVX2-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]1170; GFNIAVX2-NEXT:    vpsrlw $8, %ymm0, %ymm01171; GFNIAVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm01172; GFNIAVX2-NEXT:    retq1173;1174; GFNIAVX512VL-LABEL: constant_fshl_v32i8:1175; GFNIAVX512VL:       # %bb.0:1176; GFNIAVX512VL-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]1177; GFNIAVX512VL-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]1178; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm2, %ymm21179; GFNIAVX512VL-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]1180; GFNIAVX512VL-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]1181; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm0, %ymm01182; GFNIAVX512VL-NEXT:    vpackuswb %ymm2, %ymm0, %ymm01183; GFNIAVX512VL-NEXT:    retq1184;1185; GFNIAVX512BW-LABEL: constant_fshl_v32i8:1186; GFNIAVX512BW:       # %bb.0:1187; GFNIAVX512BW-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],zero1188; GFNIAVX512BW-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],zero1189; GFNIAVX512BW-NEXT:    vpsllw $8, %zmm0, %zmm01190; GFNIAVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm01191; GFNIAVX512BW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm01192; GFNIAVX512BW-NEXT:    vpsrlw $8, %zmm0, %zmm01193; GFNIAVX512BW-NEXT:    vpmovwb %zmm0, %ymm01194; GFNIAVX512BW-NEXT:    retq1195  %res = call <32 x i8> @llvm.fshl.v32i8(<32 x i8> %a, <32 x i8> %b, <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>)1196  ret <32 x i8> %res1197}1198 1199define <32 x i8> @constant_fshr_v32i8(<32 x i8> %a, <32 x i8> %b) nounwind {1200; GFNISSE-LABEL: constant_fshr_v32i8:1201; GFNISSE:       # %bb.0:1202; GFNISSE-NEXT:    movdqa %xmm2, %xmm51203; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm5 = xmm5[8],xmm0[8],xmm5[9],xmm0[9],xmm5[10],xmm0[10],xmm5[11],xmm0[11],xmm5[12],xmm0[12],xmm5[13],xmm0[13],xmm5[14],xmm0[14],xmm5[15],xmm0[15]1204; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm6 = [1,128,64,32,16,8,4,2]1205; GFNISSE-NEXT:    pmullw %xmm6, %xmm51206; GFNISSE-NEXT:    psrlw $8, %xmm51207; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]1208; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm4 = [1,2,4,8,16,32,64,128]1209; GFNISSE-NEXT:    pmullw %xmm4, %xmm21210; GFNISSE-NEXT:    psrlw $8, %xmm21211; GFNISSE-NEXT:    packuswb %xmm5, %xmm21212; GFNISSE-NEXT:    movdqa %xmm3, %xmm01213; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]1214; GFNISSE-NEXT:    pmullw %xmm6, %xmm01215; GFNISSE-NEXT:    psrlw $8, %xmm01216; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3],xmm3[4],xmm1[4],xmm3[5],xmm1[5],xmm3[6],xmm1[6],xmm3[7],xmm1[7]1217; GFNISSE-NEXT:    pmullw %xmm3, %xmm41218; GFNISSE-NEXT:    psrlw $8, %xmm41219; GFNISSE-NEXT:    packuswb %xmm0, %xmm41220; GFNISSE-NEXT:    movdqa %xmm2, %xmm01221; GFNISSE-NEXT:    movdqa %xmm4, %xmm11222; GFNISSE-NEXT:    retq1223;1224; GFNIAVX1-LABEL: constant_fshr_v32i8:1225; GFNIAVX1:       # %bb.0:1226; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm21227; GFNIAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm31228; GFNIAVX1-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]1229; GFNIAVX1-NEXT:    vpmovzxbw {{.*#+}} xmm5 = [1,128,64,32,16,8,4,2]1230; GFNIAVX1-NEXT:    vpmullw %xmm5, %xmm4, %xmm41231; GFNIAVX1-NEXT:    vpsrlw $8, %xmm4, %xmm41232; GFNIAVX1-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]1233; GFNIAVX1-NEXT:    vpmovzxbw {{.*#+}} xmm3 = [1,2,4,8,16,32,64,128]1234; GFNIAVX1-NEXT:    vpmullw %xmm3, %xmm2, %xmm21235; GFNIAVX1-NEXT:    vpsrlw $8, %xmm2, %xmm21236; GFNIAVX1-NEXT:    vpackuswb %xmm4, %xmm2, %xmm21237; GFNIAVX1-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]1238; GFNIAVX1-NEXT:    vpmullw %xmm5, %xmm4, %xmm41239; GFNIAVX1-NEXT:    vpsrlw $8, %xmm4, %xmm41240; GFNIAVX1-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]1241; GFNIAVX1-NEXT:    vpmullw %xmm3, %xmm0, %xmm01242; GFNIAVX1-NEXT:    vpsrlw $8, %xmm0, %xmm01243; GFNIAVX1-NEXT:    vpackuswb %xmm4, %xmm0, %xmm01244; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01245; GFNIAVX1-NEXT:    retq1246;1247; GFNIAVX2-LABEL: constant_fshr_v32i8:1248; GFNIAVX2:       # %bb.0:1249; GFNIAVX2-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]1250; GFNIAVX2-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]1251; GFNIAVX2-NEXT:    vpsrlw $8, %ymm2, %ymm21252; GFNIAVX2-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]1253; GFNIAVX2-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]1254; GFNIAVX2-NEXT:    vpsrlw $8, %ymm0, %ymm01255; GFNIAVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm01256; GFNIAVX2-NEXT:    retq1257;1258; GFNIAVX512VL-LABEL: constant_fshr_v32i8:1259; GFNIAVX512VL:       # %bb.0:1260; GFNIAVX512VL-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]1261; GFNIAVX512VL-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]1262; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm2, %ymm21263; GFNIAVX512VL-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]1264; GFNIAVX512VL-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]1265; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm0, %ymm01266; GFNIAVX512VL-NEXT:    vpackuswb %ymm2, %ymm0, %ymm01267; GFNIAVX512VL-NEXT:    retq1268;1269; GFNIAVX512BW-LABEL: constant_fshr_v32i8:1270; GFNIAVX512BW:       # %bb.0:1271; GFNIAVX512BW-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],zero1272; GFNIAVX512BW-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],zero1273; GFNIAVX512BW-NEXT:    vpsllw $8, %zmm0, %zmm01274; GFNIAVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm01275; GFNIAVX512BW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm01276; GFNIAVX512BW-NEXT:    vpsrlw $8, %zmm0, %zmm01277; GFNIAVX512BW-NEXT:    vpmovwb %zmm0, %ymm01278; GFNIAVX512BW-NEXT:    retq1279  %res = call <32 x i8> @llvm.fshl.v32i8(<32 x i8> %a, <32 x i8> %b, <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>)1280  ret <32 x i8> %res1281}1282 1283define <32 x i8> @splatconstant_fshl_v32i8(<32 x i8> %a, <32 x i8> %b) nounwind {1284; GFNISSE-LABEL: splatconstant_fshl_v32i8:1285; GFNISSE:       # %bb.0:1286; GFNISSE-NEXT:    movdqa {{.*#+}} xmm4 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]1287; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm4, %xmm21288; GFNISSE-NEXT:    pmovsxdq {{.*#+}} xmm5 = [16909320,16909320]1289; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm5, %xmm01290; GFNISSE-NEXT:    por %xmm2, %xmm01291; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm4, %xmm31292; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm5, %xmm11293; GFNISSE-NEXT:    por %xmm3, %xmm11294; GFNISSE-NEXT:    retq1295;1296; GFNIAVX1-LABEL: splatconstant_fshl_v32i8:1297; GFNIAVX1:       # %bb.0:1298; GFNIAVX1-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11299; GFNIAVX1-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01300; GFNIAVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01301; GFNIAVX1-NEXT:    retq1302;1303; GFNIAVX2-LABEL: splatconstant_fshl_v32i8:1304; GFNIAVX2:       # %bb.0:1305; GFNIAVX2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11306; GFNIAVX2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01307; GFNIAVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01308; GFNIAVX2-NEXT:    retq1309;1310; GFNIAVX512-LABEL: splatconstant_fshl_v32i8:1311; GFNIAVX512:       # %bb.0:1312; GFNIAVX512-NEXT:    vpsllw $4, %ymm0, %ymm21313; GFNIAVX512-NEXT:    vpsrlw $4, %ymm1, %ymm01314; GFNIAVX512-NEXT:    vpternlogd {{.*#+}} ymm0 = ymm0 ^ (m32bcst & (ymm0 ^ ymm2))1315; GFNIAVX512-NEXT:    retq1316  %res = call <32 x i8> @llvm.fshl.v32i8(<32 x i8> %a, <32 x i8> %b, <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>)1317  ret <32 x i8> %res1318}1319declare <32 x i8> @llvm.fshl.v32i8(<32 x i8>, <32 x i8>, <32 x i8>)1320 1321define <32 x i8> @splatconstant_fshr_v32i8(<32 x i8> %a, <32 x i8> %b) nounwind {1322; GFNISSE-LABEL: splatconstant_fshr_v32i8:1323; GFNISSE:       # %bb.0:1324; GFNISSE-NEXT:    movdqa {{.*#+}} xmm4 = [0,0,0,0,0,0,128,64,0,0,0,0,0,0,128,64]1325; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm4, %xmm21326; GFNISSE-NEXT:    movdqa {{.*#+}} xmm5 = [32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0]1327; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm5, %xmm01328; GFNISSE-NEXT:    por %xmm2, %xmm01329; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm4, %xmm31330; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm5, %xmm11331; GFNISSE-NEXT:    por %xmm3, %xmm11332; GFNISSE-NEXT:    retq1333;1334; GFNIAVX1-LABEL: splatconstant_fshr_v32i8:1335; GFNIAVX1:       # %bb.0:1336; GFNIAVX1-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11337; GFNIAVX1-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01338; GFNIAVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01339; GFNIAVX1-NEXT:    retq1340;1341; GFNIAVX2-LABEL: splatconstant_fshr_v32i8:1342; GFNIAVX2:       # %bb.0:1343; GFNIAVX2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11344; GFNIAVX2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01345; GFNIAVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01346; GFNIAVX2-NEXT:    retq1347;1348; GFNIAVX512-LABEL: splatconstant_fshr_v32i8:1349; GFNIAVX512:       # %bb.0:1350; GFNIAVX512-NEXT:    vpsllw $2, %ymm0, %ymm21351; GFNIAVX512-NEXT:    vpsrlw $6, %ymm1, %ymm01352; GFNIAVX512-NEXT:    vpternlogd {{.*#+}} ymm0 = ymm0 ^ (m32bcst & (ymm0 ^ ymm2))1353; GFNIAVX512-NEXT:    retq1354  %res = call <32 x i8> @llvm.fshr.v32i8(<32 x i8> %a, <32 x i8> %b, <32 x i8> <i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6>)1355  ret <32 x i8> %res1356}1357declare <32 x i8> @llvm.fshr.v32i8(<32 x i8>, <32 x i8>, <32 x i8>)1358 1359;1360; 512 Bit Vector Funnel Shifts1361;1362 1363define <64 x i8> @var_fshl_v64i8(<64 x i8> %a, <64 x i8> %b, <64 x i8> %amt) nounwind {1364; GFNISSE-LABEL: var_fshl_v64i8:1365; GFNISSE:       # %bb.0:1366; GFNISSE-NEXT:    movdqa %xmm1, %xmm81367; GFNISSE-NEXT:    movdqa %xmm0, %xmm11368; GFNISSE-NEXT:    movdqa {{.*#+}} xmm9 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]1369; GFNISSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm01370; GFNISSE-NEXT:    pand %xmm9, %xmm01371; GFNISSE-NEXT:    pxor %xmm10, %xmm101372; GFNISSE-NEXT:    pmovzxbd {{.*#+}} xmm12 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero1373; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm13 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero1374; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm10[8],xmm0[9],xmm10[9],xmm0[10],xmm10[10],xmm0[11],xmm10[11],xmm0[12],xmm10[12],xmm0[13],xmm10[13],xmm0[14],xmm10[14],xmm0[15],xmm10[15]1375; GFNISSE-NEXT:    pmovzxwd {{.*#+}} xmm14 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero1376; GFNISSE-NEXT:    punpckhwd {{.*#+}} xmm0 = xmm0[4,4,5,5,6,6,7,7]1377; GFNISSE-NEXT:    pslld $23, %xmm01378; GFNISSE-NEXT:    movdqa {{.*#+}} xmm11 = [1065353216,1065353216,1065353216,1065353216]1379; GFNISSE-NEXT:    paddd %xmm11, %xmm01380; GFNISSE-NEXT:    cvttps2dq %xmm0, %xmm01381; GFNISSE-NEXT:    pslld $23, %xmm141382; GFNISSE-NEXT:    paddd %xmm11, %xmm141383; GFNISSE-NEXT:    cvttps2dq %xmm14, %xmm141384; GFNISSE-NEXT:    packusdw %xmm0, %xmm141385; GFNISSE-NEXT:    movdqa %xmm4, %xmm151386; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm15 = xmm15[8],xmm1[8],xmm15[9],xmm1[9],xmm15[10],xmm1[10],xmm15[11],xmm1[11],xmm15[12],xmm1[12],xmm15[13],xmm1[13],xmm15[14],xmm1[14],xmm15[15],xmm1[15]1387; GFNISSE-NEXT:    pmullw %xmm14, %xmm151388; GFNISSE-NEXT:    psrlw $8, %xmm151389; GFNISSE-NEXT:    pslld $23, %xmm121390; GFNISSE-NEXT:    paddd %xmm11, %xmm121391; GFNISSE-NEXT:    cvttps2dq %xmm12, %xmm01392; GFNISSE-NEXT:    punpckhwd {{.*#+}} xmm13 = xmm13[4,4,5,5,6,6,7,7]1393; GFNISSE-NEXT:    pslld $23, %xmm131394; GFNISSE-NEXT:    paddd %xmm11, %xmm131395; GFNISSE-NEXT:    cvttps2dq %xmm13, %xmm121396; GFNISSE-NEXT:    packusdw %xmm12, %xmm01397; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm1[0],xmm4[1],xmm1[1],xmm4[2],xmm1[2],xmm4[3],xmm1[3],xmm4[4],xmm1[4],xmm4[5],xmm1[5],xmm4[6],xmm1[6],xmm4[7],xmm1[7]1398; GFNISSE-NEXT:    pmullw %xmm4, %xmm01399; GFNISSE-NEXT:    psrlw $8, %xmm01400; GFNISSE-NEXT:    packuswb %xmm15, %xmm01401; GFNISSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm11402; GFNISSE-NEXT:    pand %xmm9, %xmm11403; GFNISSE-NEXT:    pmovzxbd {{.*#+}} xmm4 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero1404; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm12 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero1405; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm10[8],xmm1[9],xmm10[9],xmm1[10],xmm10[10],xmm1[11],xmm10[11],xmm1[12],xmm10[12],xmm1[13],xmm10[13],xmm1[14],xmm10[14],xmm1[15],xmm10[15]1406; GFNISSE-NEXT:    pmovzxwd {{.*#+}} xmm13 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero1407; GFNISSE-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4,4,5,5,6,6,7,7]1408; GFNISSE-NEXT:    pslld $23, %xmm11409; GFNISSE-NEXT:    paddd %xmm11, %xmm11410; GFNISSE-NEXT:    cvttps2dq %xmm1, %xmm11411; GFNISSE-NEXT:    pslld $23, %xmm131412; GFNISSE-NEXT:    paddd %xmm11, %xmm131413; GFNISSE-NEXT:    cvttps2dq %xmm13, %xmm131414; GFNISSE-NEXT:    packusdw %xmm1, %xmm131415; GFNISSE-NEXT:    movdqa %xmm5, %xmm141416; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm14 = xmm14[8],xmm8[8],xmm14[9],xmm8[9],xmm14[10],xmm8[10],xmm14[11],xmm8[11],xmm14[12],xmm8[12],xmm14[13],xmm8[13],xmm14[14],xmm8[14],xmm14[15],xmm8[15]1417; GFNISSE-NEXT:    pmullw %xmm13, %xmm141418; GFNISSE-NEXT:    psrlw $8, %xmm141419; GFNISSE-NEXT:    pslld $23, %xmm41420; GFNISSE-NEXT:    paddd %xmm11, %xmm41421; GFNISSE-NEXT:    cvttps2dq %xmm4, %xmm11422; GFNISSE-NEXT:    punpckhwd {{.*#+}} xmm12 = xmm12[4,4,5,5,6,6,7,7]1423; GFNISSE-NEXT:    pslld $23, %xmm121424; GFNISSE-NEXT:    paddd %xmm11, %xmm121425; GFNISSE-NEXT:    cvttps2dq %xmm12, %xmm41426; GFNISSE-NEXT:    packusdw %xmm4, %xmm11427; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm5 = xmm5[0],xmm8[0],xmm5[1],xmm8[1],xmm5[2],xmm8[2],xmm5[3],xmm8[3],xmm5[4],xmm8[4],xmm5[5],xmm8[5],xmm5[6],xmm8[6],xmm5[7],xmm8[7]1428; GFNISSE-NEXT:    pmullw %xmm5, %xmm11429; GFNISSE-NEXT:    psrlw $8, %xmm11430; GFNISSE-NEXT:    packuswb %xmm14, %xmm11431; GFNISSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm41432; GFNISSE-NEXT:    pand %xmm9, %xmm41433; GFNISSE-NEXT:    pmovzxbd {{.*#+}} xmm5 = xmm4[0],zero,zero,zero,xmm4[1],zero,zero,zero,xmm4[2],zero,zero,zero,xmm4[3],zero,zero,zero1434; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm8 = xmm4[0],zero,xmm4[1],zero,xmm4[2],zero,xmm4[3],zero,xmm4[4],zero,xmm4[5],zero,xmm4[6],zero,xmm4[7],zero1435; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm10[8],xmm4[9],xmm10[9],xmm4[10],xmm10[10],xmm4[11],xmm10[11],xmm4[12],xmm10[12],xmm4[13],xmm10[13],xmm4[14],xmm10[14],xmm4[15],xmm10[15]1436; GFNISSE-NEXT:    pmovzxwd {{.*#+}} xmm12 = xmm4[0],zero,xmm4[1],zero,xmm4[2],zero,xmm4[3],zero1437; GFNISSE-NEXT:    punpckhwd {{.*#+}} xmm4 = xmm4[4,4,5,5,6,6,7,7]1438; GFNISSE-NEXT:    pslld $23, %xmm41439; GFNISSE-NEXT:    paddd %xmm11, %xmm41440; GFNISSE-NEXT:    cvttps2dq %xmm4, %xmm41441; GFNISSE-NEXT:    pslld $23, %xmm121442; GFNISSE-NEXT:    paddd %xmm11, %xmm121443; GFNISSE-NEXT:    cvttps2dq %xmm12, %xmm121444; GFNISSE-NEXT:    packusdw %xmm4, %xmm121445; GFNISSE-NEXT:    movdqa %xmm6, %xmm131446; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm13 = xmm13[8],xmm2[8],xmm13[9],xmm2[9],xmm13[10],xmm2[10],xmm13[11],xmm2[11],xmm13[12],xmm2[12],xmm13[13],xmm2[13],xmm13[14],xmm2[14],xmm13[15],xmm2[15]1447; GFNISSE-NEXT:    pmullw %xmm12, %xmm131448; GFNISSE-NEXT:    psrlw $8, %xmm131449; GFNISSE-NEXT:    pslld $23, %xmm51450; GFNISSE-NEXT:    paddd %xmm11, %xmm51451; GFNISSE-NEXT:    cvttps2dq %xmm5, %xmm41452; GFNISSE-NEXT:    punpckhwd {{.*#+}} xmm8 = xmm8[4,4,5,5,6,6,7,7]1453; GFNISSE-NEXT:    pslld $23, %xmm81454; GFNISSE-NEXT:    paddd %xmm11, %xmm81455; GFNISSE-NEXT:    cvttps2dq %xmm8, %xmm51456; GFNISSE-NEXT:    packusdw %xmm5, %xmm41457; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm2[0],xmm6[1],xmm2[1],xmm6[2],xmm2[2],xmm6[3],xmm2[3],xmm6[4],xmm2[4],xmm6[5],xmm2[5],xmm6[6],xmm2[6],xmm6[7],xmm2[7]1458; GFNISSE-NEXT:    pmullw %xmm6, %xmm41459; GFNISSE-NEXT:    psrlw $8, %xmm41460; GFNISSE-NEXT:    packuswb %xmm13, %xmm41461; GFNISSE-NEXT:    pand {{[0-9]+}}(%rsp), %xmm91462; GFNISSE-NEXT:    pmovzxbd {{.*#+}} xmm2 = xmm9[0],zero,zero,zero,xmm9[1],zero,zero,zero,xmm9[2],zero,zero,zero,xmm9[3],zero,zero,zero1463; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm6 = xmm9[0],zero,xmm9[1],zero,xmm9[2],zero,xmm9[3],zero,xmm9[4],zero,xmm9[5],zero,xmm9[6],zero,xmm9[7],zero1464; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm9 = xmm9[8],xmm10[8],xmm9[9],xmm10[9],xmm9[10],xmm10[10],xmm9[11],xmm10[11],xmm9[12],xmm10[12],xmm9[13],xmm10[13],xmm9[14],xmm10[14],xmm9[15],xmm10[15]1465; GFNISSE-NEXT:    pmovzxwd {{.*#+}} xmm5 = xmm9[0],zero,xmm9[1],zero,xmm9[2],zero,xmm9[3],zero1466; GFNISSE-NEXT:    punpckhwd {{.*#+}} xmm9 = xmm9[4,4,5,5,6,6,7,7]1467; GFNISSE-NEXT:    pslld $23, %xmm91468; GFNISSE-NEXT:    paddd %xmm11, %xmm91469; GFNISSE-NEXT:    cvttps2dq %xmm9, %xmm81470; GFNISSE-NEXT:    pslld $23, %xmm51471; GFNISSE-NEXT:    paddd %xmm11, %xmm51472; GFNISSE-NEXT:    cvttps2dq %xmm5, %xmm51473; GFNISSE-NEXT:    packusdw %xmm8, %xmm51474; GFNISSE-NEXT:    movdqa %xmm7, %xmm81475; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm8 = xmm8[8],xmm3[8],xmm8[9],xmm3[9],xmm8[10],xmm3[10],xmm8[11],xmm3[11],xmm8[12],xmm3[12],xmm8[13],xmm3[13],xmm8[14],xmm3[14],xmm8[15],xmm3[15]1476; GFNISSE-NEXT:    pmullw %xmm5, %xmm81477; GFNISSE-NEXT:    psrlw $8, %xmm81478; GFNISSE-NEXT:    pslld $23, %xmm21479; GFNISSE-NEXT:    paddd %xmm11, %xmm21480; GFNISSE-NEXT:    cvttps2dq %xmm2, %xmm51481; GFNISSE-NEXT:    punpckhwd {{.*#+}} xmm6 = xmm6[4,4,5,5,6,6,7,7]1482; GFNISSE-NEXT:    pslld $23, %xmm61483; GFNISSE-NEXT:    paddd %xmm11, %xmm61484; GFNISSE-NEXT:    cvttps2dq %xmm6, %xmm21485; GFNISSE-NEXT:    packusdw %xmm2, %xmm51486; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm7 = xmm7[0],xmm3[0],xmm7[1],xmm3[1],xmm7[2],xmm3[2],xmm7[3],xmm3[3],xmm7[4],xmm3[4],xmm7[5],xmm3[5],xmm7[6],xmm3[6],xmm7[7],xmm3[7]1487; GFNISSE-NEXT:    pmullw %xmm7, %xmm51488; GFNISSE-NEXT:    psrlw $8, %xmm51489; GFNISSE-NEXT:    packuswb %xmm8, %xmm51490; GFNISSE-NEXT:    movdqa %xmm4, %xmm21491; GFNISSE-NEXT:    movdqa %xmm5, %xmm31492; GFNISSE-NEXT:    retq1493;1494; GFNIAVX1-LABEL: var_fshl_v64i8:1495; GFNIAVX1:       # %bb.0:1496; GFNIAVX1-NEXT:    vbroadcastss {{.*#+}} ymm7 = [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]1497; GFNIAVX1-NEXT:    vandps %ymm7, %ymm4, %ymm81498; GFNIAVX1-NEXT:    vextractf128 $1, %ymm8, %xmm91499; GFNIAVX1-NEXT:    vpxor %xmm6, %xmm6, %xmm61500; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm10 = xmm9[8],xmm6[8],xmm9[9],xmm6[9],xmm9[10],xmm6[10],xmm9[11],xmm6[11],xmm9[12],xmm6[12],xmm9[13],xmm6[13],xmm9[14],xmm6[14],xmm9[15],xmm6[15]1501; GFNIAVX1-NEXT:    vpunpckhwd {{.*#+}} xmm4 = xmm10[4,4,5,5,6,6,7,7]1502; GFNIAVX1-NEXT:    vpslld $23, %xmm4, %xmm111503; GFNIAVX1-NEXT:    vbroadcastss {{.*#+}} xmm4 = [1065353216,1065353216,1065353216,1065353216]1504; GFNIAVX1-NEXT:    vpaddd %xmm4, %xmm11, %xmm111505; GFNIAVX1-NEXT:    vcvttps2dq %xmm11, %xmm111506; GFNIAVX1-NEXT:    vpmovzxwd {{.*#+}} xmm10 = xmm10[0],zero,xmm10[1],zero,xmm10[2],zero,xmm10[3],zero1507; GFNIAVX1-NEXT:    vpslld $23, %xmm10, %xmm101508; GFNIAVX1-NEXT:    vpaddd %xmm4, %xmm10, %xmm101509; GFNIAVX1-NEXT:    vcvttps2dq %xmm10, %xmm101510; GFNIAVX1-NEXT:    vpackusdw %xmm11, %xmm10, %xmm101511; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm111512; GFNIAVX1-NEXT:    vextractf128 $1, %ymm2, %xmm121513; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm13 = xmm12[8],xmm11[8],xmm12[9],xmm11[9],xmm12[10],xmm11[10],xmm12[11],xmm11[11],xmm12[12],xmm11[12],xmm12[13],xmm11[13],xmm12[14],xmm11[14],xmm12[15],xmm11[15]1514; GFNIAVX1-NEXT:    vpmullw %xmm10, %xmm13, %xmm101515; GFNIAVX1-NEXT:    vpsrlw $8, %xmm10, %xmm101516; GFNIAVX1-NEXT:    vpmovzxbd {{.*#+}} xmm13 = xmm9[0],zero,zero,zero,xmm9[1],zero,zero,zero,xmm9[2],zero,zero,zero,xmm9[3],zero,zero,zero1517; GFNIAVX1-NEXT:    vpslld $23, %xmm13, %xmm131518; GFNIAVX1-NEXT:    vpaddd %xmm4, %xmm13, %xmm131519; GFNIAVX1-NEXT:    vcvttps2dq %xmm13, %xmm131520; GFNIAVX1-NEXT:    vpmovzxbw {{.*#+}} xmm9 = xmm9[0],zero,xmm9[1],zero,xmm9[2],zero,xmm9[3],zero,xmm9[4],zero,xmm9[5],zero,xmm9[6],zero,xmm9[7],zero1521; GFNIAVX1-NEXT:    vpunpckhwd {{.*#+}} xmm9 = xmm9[4,4,5,5,6,6,7,7]1522; GFNIAVX1-NEXT:    vpslld $23, %xmm9, %xmm91523; GFNIAVX1-NEXT:    vpaddd %xmm4, %xmm9, %xmm91524; GFNIAVX1-NEXT:    vcvttps2dq %xmm9, %xmm91525; GFNIAVX1-NEXT:    vpackusdw %xmm9, %xmm13, %xmm91526; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm11 = xmm12[0],xmm11[0],xmm12[1],xmm11[1],xmm12[2],xmm11[2],xmm12[3],xmm11[3],xmm12[4],xmm11[4],xmm12[5],xmm11[5],xmm12[6],xmm11[6],xmm12[7],xmm11[7]1527; GFNIAVX1-NEXT:    vpmullw %xmm9, %xmm11, %xmm91528; GFNIAVX1-NEXT:    vpsrlw $8, %xmm9, %xmm91529; GFNIAVX1-NEXT:    vpackuswb %xmm10, %xmm9, %xmm91530; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm10 = xmm8[8],xmm6[8],xmm8[9],xmm6[9],xmm8[10],xmm6[10],xmm8[11],xmm6[11],xmm8[12],xmm6[12],xmm8[13],xmm6[13],xmm8[14],xmm6[14],xmm8[15],xmm6[15]1531; GFNIAVX1-NEXT:    vpunpckhwd {{.*#+}} xmm11 = xmm10[4,4,5,5,6,6,7,7]1532; GFNIAVX1-NEXT:    vpslld $23, %xmm11, %xmm111533; GFNIAVX1-NEXT:    vpaddd %xmm4, %xmm11, %xmm111534; GFNIAVX1-NEXT:    vcvttps2dq %xmm11, %xmm111535; GFNIAVX1-NEXT:    vpmovzxwd {{.*#+}} xmm10 = xmm10[0],zero,xmm10[1],zero,xmm10[2],zero,xmm10[3],zero1536; GFNIAVX1-NEXT:    vpslld $23, %xmm10, %xmm101537; GFNIAVX1-NEXT:    vpaddd %xmm4, %xmm10, %xmm101538; GFNIAVX1-NEXT:    vcvttps2dq %xmm10, %xmm101539; GFNIAVX1-NEXT:    vpackusdw %xmm11, %xmm10, %xmm101540; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm11 = xmm2[8],xmm0[8],xmm2[9],xmm0[9],xmm2[10],xmm0[10],xmm2[11],xmm0[11],xmm2[12],xmm0[12],xmm2[13],xmm0[13],xmm2[14],xmm0[14],xmm2[15],xmm0[15]1541; GFNIAVX1-NEXT:    vpmullw %xmm10, %xmm11, %xmm101542; GFNIAVX1-NEXT:    vpsrlw $8, %xmm10, %xmm101543; GFNIAVX1-NEXT:    vpmovzxbd {{.*#+}} xmm11 = xmm8[0],zero,zero,zero,xmm8[1],zero,zero,zero,xmm8[2],zero,zero,zero,xmm8[3],zero,zero,zero1544; GFNIAVX1-NEXT:    vpslld $23, %xmm11, %xmm111545; GFNIAVX1-NEXT:    vpaddd %xmm4, %xmm11, %xmm111546; GFNIAVX1-NEXT:    vcvttps2dq %xmm11, %xmm111547; GFNIAVX1-NEXT:    vpmovzxbw {{.*#+}} xmm8 = xmm8[0],zero,xmm8[1],zero,xmm8[2],zero,xmm8[3],zero,xmm8[4],zero,xmm8[5],zero,xmm8[6],zero,xmm8[7],zero1548; GFNIAVX1-NEXT:    vpunpckhwd {{.*#+}} xmm8 = xmm8[4,4,5,5,6,6,7,7]1549; GFNIAVX1-NEXT:    vpslld $23, %xmm8, %xmm81550; GFNIAVX1-NEXT:    vpaddd %xmm4, %xmm8, %xmm81551; GFNIAVX1-NEXT:    vcvttps2dq %xmm8, %xmm81552; GFNIAVX1-NEXT:    vpackusdw %xmm8, %xmm11, %xmm81553; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]1554; GFNIAVX1-NEXT:    vpmullw %xmm0, %xmm8, %xmm01555; GFNIAVX1-NEXT:    vpsrlw $8, %xmm0, %xmm01556; GFNIAVX1-NEXT:    vpackuswb %xmm10, %xmm0, %xmm01557; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm9, %ymm0, %ymm01558; GFNIAVX1-NEXT:    vandps %ymm7, %ymm5, %ymm21559; GFNIAVX1-NEXT:    vextractf128 $1, %ymm2, %xmm51560; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm7 = xmm5[8],xmm6[8],xmm5[9],xmm6[9],xmm5[10],xmm6[10],xmm5[11],xmm6[11],xmm5[12],xmm6[12],xmm5[13],xmm6[13],xmm5[14],xmm6[14],xmm5[15],xmm6[15]1561; GFNIAVX1-NEXT:    vpunpckhwd {{.*#+}} xmm8 = xmm7[4,4,5,5,6,6,7,7]1562; GFNIAVX1-NEXT:    vpslld $23, %xmm8, %xmm81563; GFNIAVX1-NEXT:    vpaddd %xmm4, %xmm8, %xmm81564; GFNIAVX1-NEXT:    vcvttps2dq %xmm8, %xmm81565; GFNIAVX1-NEXT:    vpmovzxwd {{.*#+}} xmm7 = xmm7[0],zero,xmm7[1],zero,xmm7[2],zero,xmm7[3],zero1566; GFNIAVX1-NEXT:    vpslld $23, %xmm7, %xmm71567; GFNIAVX1-NEXT:    vpaddd %xmm4, %xmm7, %xmm71568; GFNIAVX1-NEXT:    vcvttps2dq %xmm7, %xmm71569; GFNIAVX1-NEXT:    vpackusdw %xmm8, %xmm7, %xmm71570; GFNIAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm81571; GFNIAVX1-NEXT:    vextractf128 $1, %ymm3, %xmm91572; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm10 = xmm9[8],xmm8[8],xmm9[9],xmm8[9],xmm9[10],xmm8[10],xmm9[11],xmm8[11],xmm9[12],xmm8[12],xmm9[13],xmm8[13],xmm9[14],xmm8[14],xmm9[15],xmm8[15]1573; GFNIAVX1-NEXT:    vpmullw %xmm7, %xmm10, %xmm71574; GFNIAVX1-NEXT:    vpsrlw $8, %xmm7, %xmm71575; GFNIAVX1-NEXT:    vpmovzxbd {{.*#+}} xmm10 = xmm5[0],zero,zero,zero,xmm5[1],zero,zero,zero,xmm5[2],zero,zero,zero,xmm5[3],zero,zero,zero1576; GFNIAVX1-NEXT:    vpslld $23, %xmm10, %xmm101577; GFNIAVX1-NEXT:    vpaddd %xmm4, %xmm10, %xmm101578; GFNIAVX1-NEXT:    vcvttps2dq %xmm10, %xmm101579; GFNIAVX1-NEXT:    vpmovzxbw {{.*#+}} xmm5 = xmm5[0],zero,xmm5[1],zero,xmm5[2],zero,xmm5[3],zero,xmm5[4],zero,xmm5[5],zero,xmm5[6],zero,xmm5[7],zero1580; GFNIAVX1-NEXT:    vpunpckhwd {{.*#+}} xmm5 = xmm5[4,4,5,5,6,6,7,7]1581; GFNIAVX1-NEXT:    vpslld $23, %xmm5, %xmm51582; GFNIAVX1-NEXT:    vpaddd %xmm4, %xmm5, %xmm51583; GFNIAVX1-NEXT:    vcvttps2dq %xmm5, %xmm51584; GFNIAVX1-NEXT:    vpackusdw %xmm5, %xmm10, %xmm51585; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm8 = xmm9[0],xmm8[0],xmm9[1],xmm8[1],xmm9[2],xmm8[2],xmm9[3],xmm8[3],xmm9[4],xmm8[4],xmm9[5],xmm8[5],xmm9[6],xmm8[6],xmm9[7],xmm8[7]1586; GFNIAVX1-NEXT:    vpmullw %xmm5, %xmm8, %xmm51587; GFNIAVX1-NEXT:    vpsrlw $8, %xmm5, %xmm51588; GFNIAVX1-NEXT:    vpackuswb %xmm7, %xmm5, %xmm51589; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm6 = xmm2[8],xmm6[8],xmm2[9],xmm6[9],xmm2[10],xmm6[10],xmm2[11],xmm6[11],xmm2[12],xmm6[12],xmm2[13],xmm6[13],xmm2[14],xmm6[14],xmm2[15],xmm6[15]1590; GFNIAVX1-NEXT:    vpunpckhwd {{.*#+}} xmm7 = xmm6[4,4,5,5,6,6,7,7]1591; GFNIAVX1-NEXT:    vpslld $23, %xmm7, %xmm71592; GFNIAVX1-NEXT:    vpaddd %xmm4, %xmm7, %xmm71593; GFNIAVX1-NEXT:    vcvttps2dq %xmm7, %xmm71594; GFNIAVX1-NEXT:    vpmovzxwd {{.*#+}} xmm6 = xmm6[0],zero,xmm6[1],zero,xmm6[2],zero,xmm6[3],zero1595; GFNIAVX1-NEXT:    vpslld $23, %xmm6, %xmm61596; GFNIAVX1-NEXT:    vpaddd %xmm4, %xmm6, %xmm61597; GFNIAVX1-NEXT:    vcvttps2dq %xmm6, %xmm61598; GFNIAVX1-NEXT:    vpackusdw %xmm7, %xmm6, %xmm61599; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm7 = xmm3[8],xmm1[8],xmm3[9],xmm1[9],xmm3[10],xmm1[10],xmm3[11],xmm1[11],xmm3[12],xmm1[12],xmm3[13],xmm1[13],xmm3[14],xmm1[14],xmm3[15],xmm1[15]1600; GFNIAVX1-NEXT:    vpmullw %xmm6, %xmm7, %xmm61601; GFNIAVX1-NEXT:    vpsrlw $8, %xmm6, %xmm61602; GFNIAVX1-NEXT:    vpmovzxbd {{.*#+}} xmm7 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero1603; GFNIAVX1-NEXT:    vpslld $23, %xmm7, %xmm71604; GFNIAVX1-NEXT:    vpaddd %xmm4, %xmm7, %xmm71605; GFNIAVX1-NEXT:    vcvttps2dq %xmm7, %xmm71606; GFNIAVX1-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],zero1607; GFNIAVX1-NEXT:    vpunpckhwd {{.*#+}} xmm2 = xmm2[4,4,5,5,6,6,7,7]1608; GFNIAVX1-NEXT:    vpslld $23, %xmm2, %xmm21609; GFNIAVX1-NEXT:    vpaddd %xmm4, %xmm2, %xmm21610; GFNIAVX1-NEXT:    vcvttps2dq %xmm2, %xmm21611; GFNIAVX1-NEXT:    vpackusdw %xmm2, %xmm7, %xmm21612; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3],xmm3[4],xmm1[4],xmm3[5],xmm1[5],xmm3[6],xmm1[6],xmm3[7],xmm1[7]1613; GFNIAVX1-NEXT:    vpmullw %xmm2, %xmm1, %xmm11614; GFNIAVX1-NEXT:    vpsrlw $8, %xmm1, %xmm11615; GFNIAVX1-NEXT:    vpackuswb %xmm6, %xmm1, %xmm11616; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm1, %ymm11617; GFNIAVX1-NEXT:    retq1618;1619; GFNIAVX2-LABEL: var_fshl_v64i8:1620; GFNIAVX2:       # %bb.0:1621; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} ymm7 = ymm2[8],ymm0[8],ymm2[9],ymm0[9],ymm2[10],ymm0[10],ymm2[11],ymm0[11],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15],ymm2[24],ymm0[24],ymm2[25],ymm0[25],ymm2[26],ymm0[26],ymm2[27],ymm0[27],ymm2[28],ymm0[28],ymm2[29],ymm0[29],ymm2[30],ymm0[30],ymm2[31],ymm0[31]1622; GFNIAVX2-NEXT:    vpxor %xmm6, %xmm6, %xmm61623; GFNIAVX2-NEXT:    vpunpckhwd {{.*#+}} ymm8 = ymm6[4],ymm7[4],ymm6[5],ymm7[5],ymm6[6],ymm7[6],ymm6[7],ymm7[7],ymm6[12],ymm7[12],ymm6[13],ymm7[13],ymm6[14],ymm7[14],ymm6[15],ymm7[15]1624; GFNIAVX2-NEXT:    vpbroadcastb {{.*#+}} ymm9 = [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]1625; GFNIAVX2-NEXT:    vpand %ymm4, %ymm9, %ymm41626; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} ymm10 = ymm4[8],ymm6[8],ymm4[9],ymm6[9],ymm4[10],ymm6[10],ymm4[11],ymm6[11],ymm4[12],ymm6[12],ymm4[13],ymm6[13],ymm4[14],ymm6[14],ymm4[15],ymm6[15],ymm4[24],ymm6[24],ymm4[25],ymm6[25],ymm4[26],ymm6[26],ymm4[27],ymm6[27],ymm4[28],ymm6[28],ymm4[29],ymm6[29],ymm4[30],ymm6[30],ymm4[31],ymm6[31]1627; GFNIAVX2-NEXT:    vpunpckhwd {{.*#+}} ymm11 = ymm10[4],ymm6[4],ymm10[5],ymm6[5],ymm10[6],ymm6[6],ymm10[7],ymm6[7],ymm10[12],ymm6[12],ymm10[13],ymm6[13],ymm10[14],ymm6[14],ymm10[15],ymm6[15]1628; GFNIAVX2-NEXT:    vpsllvd %ymm11, %ymm8, %ymm81629; GFNIAVX2-NEXT:    vpsrld $16, %ymm8, %ymm81630; GFNIAVX2-NEXT:    vpunpcklwd {{.*#+}} ymm7 = ymm6[0],ymm7[0],ymm6[1],ymm7[1],ymm6[2],ymm7[2],ymm6[3],ymm7[3],ymm6[8],ymm7[8],ymm6[9],ymm7[9],ymm6[10],ymm7[10],ymm6[11],ymm7[11]1631; GFNIAVX2-NEXT:    vpunpcklwd {{.*#+}} ymm10 = ymm10[0],ymm6[0],ymm10[1],ymm6[1],ymm10[2],ymm6[2],ymm10[3],ymm6[3],ymm10[8],ymm6[8],ymm10[9],ymm6[9],ymm10[10],ymm6[10],ymm10[11],ymm6[11]1632; GFNIAVX2-NEXT:    vpsllvd %ymm10, %ymm7, %ymm71633; GFNIAVX2-NEXT:    vpsrld $16, %ymm7, %ymm71634; GFNIAVX2-NEXT:    vpackusdw %ymm8, %ymm7, %ymm71635; GFNIAVX2-NEXT:    vpsrlw $8, %ymm7, %ymm71636; GFNIAVX2-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm2[0],ymm0[0],ymm2[1],ymm0[1],ymm2[2],ymm0[2],ymm2[3],ymm0[3],ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[16],ymm0[16],ymm2[17],ymm0[17],ymm2[18],ymm0[18],ymm2[19],ymm0[19],ymm2[20],ymm0[20],ymm2[21],ymm0[21],ymm2[22],ymm0[22],ymm2[23],ymm0[23]1637; GFNIAVX2-NEXT:    vpunpckhwd {{.*#+}} ymm2 = ymm6[4],ymm0[4],ymm6[5],ymm0[5],ymm6[6],ymm0[6],ymm6[7],ymm0[7],ymm6[12],ymm0[12],ymm6[13],ymm0[13],ymm6[14],ymm0[14],ymm6[15],ymm0[15]1638; GFNIAVX2-NEXT:    vpunpcklbw {{.*#+}} ymm4 = ymm4[0],ymm6[0],ymm4[1],ymm6[1],ymm4[2],ymm6[2],ymm4[3],ymm6[3],ymm4[4],ymm6[4],ymm4[5],ymm6[5],ymm4[6],ymm6[6],ymm4[7],ymm6[7],ymm4[16],ymm6[16],ymm4[17],ymm6[17],ymm4[18],ymm6[18],ymm4[19],ymm6[19],ymm4[20],ymm6[20],ymm4[21],ymm6[21],ymm4[22],ymm6[22],ymm4[23],ymm6[23]1639; GFNIAVX2-NEXT:    vpunpckhwd {{.*#+}} ymm8 = ymm4[4],ymm6[4],ymm4[5],ymm6[5],ymm4[6],ymm6[6],ymm4[7],ymm6[7],ymm4[12],ymm6[12],ymm4[13],ymm6[13],ymm4[14],ymm6[14],ymm4[15],ymm6[15]1640; GFNIAVX2-NEXT:    vpsllvd %ymm8, %ymm2, %ymm21641; GFNIAVX2-NEXT:    vpsrld $16, %ymm2, %ymm21642; GFNIAVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm6[0],ymm0[0],ymm6[1],ymm0[1],ymm6[2],ymm0[2],ymm6[3],ymm0[3],ymm6[8],ymm0[8],ymm6[9],ymm0[9],ymm6[10],ymm0[10],ymm6[11],ymm0[11]1643; GFNIAVX2-NEXT:    vpunpcklwd {{.*#+}} ymm4 = ymm4[0],ymm6[0],ymm4[1],ymm6[1],ymm4[2],ymm6[2],ymm4[3],ymm6[3],ymm4[8],ymm6[8],ymm4[9],ymm6[9],ymm4[10],ymm6[10],ymm4[11],ymm6[11]1644; GFNIAVX2-NEXT:    vpsllvd %ymm4, %ymm0, %ymm01645; GFNIAVX2-NEXT:    vpsrld $16, %ymm0, %ymm01646; GFNIAVX2-NEXT:    vpackusdw %ymm2, %ymm0, %ymm01647; GFNIAVX2-NEXT:    vpsrlw $8, %ymm0, %ymm01648; GFNIAVX2-NEXT:    vpackuswb %ymm7, %ymm0, %ymm01649; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm3[8],ymm1[8],ymm3[9],ymm1[9],ymm3[10],ymm1[10],ymm3[11],ymm1[11],ymm3[12],ymm1[12],ymm3[13],ymm1[13],ymm3[14],ymm1[14],ymm3[15],ymm1[15],ymm3[24],ymm1[24],ymm3[25],ymm1[25],ymm3[26],ymm1[26],ymm3[27],ymm1[27],ymm3[28],ymm1[28],ymm3[29],ymm1[29],ymm3[30],ymm1[30],ymm3[31],ymm1[31]1650; GFNIAVX2-NEXT:    vpunpckhwd {{.*#+}} ymm4 = ymm6[4],ymm2[4],ymm6[5],ymm2[5],ymm6[6],ymm2[6],ymm6[7],ymm2[7],ymm6[12],ymm2[12],ymm6[13],ymm2[13],ymm6[14],ymm2[14],ymm6[15],ymm2[15]1651; GFNIAVX2-NEXT:    vpand %ymm5, %ymm9, %ymm51652; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} ymm7 = ymm5[8],ymm6[8],ymm5[9],ymm6[9],ymm5[10],ymm6[10],ymm5[11],ymm6[11],ymm5[12],ymm6[12],ymm5[13],ymm6[13],ymm5[14],ymm6[14],ymm5[15],ymm6[15],ymm5[24],ymm6[24],ymm5[25],ymm6[25],ymm5[26],ymm6[26],ymm5[27],ymm6[27],ymm5[28],ymm6[28],ymm5[29],ymm6[29],ymm5[30],ymm6[30],ymm5[31],ymm6[31]1653; GFNIAVX2-NEXT:    vpunpckhwd {{.*#+}} ymm8 = ymm7[4],ymm6[4],ymm7[5],ymm6[5],ymm7[6],ymm6[6],ymm7[7],ymm6[7],ymm7[12],ymm6[12],ymm7[13],ymm6[13],ymm7[14],ymm6[14],ymm7[15],ymm6[15]1654; GFNIAVX2-NEXT:    vpsllvd %ymm8, %ymm4, %ymm41655; GFNIAVX2-NEXT:    vpsrld $16, %ymm4, %ymm41656; GFNIAVX2-NEXT:    vpunpcklwd {{.*#+}} ymm2 = ymm6[0],ymm2[0],ymm6[1],ymm2[1],ymm6[2],ymm2[2],ymm6[3],ymm2[3],ymm6[8],ymm2[8],ymm6[9],ymm2[9],ymm6[10],ymm2[10],ymm6[11],ymm2[11]1657; GFNIAVX2-NEXT:    vpunpcklwd {{.*#+}} ymm7 = ymm7[0],ymm6[0],ymm7[1],ymm6[1],ymm7[2],ymm6[2],ymm7[3],ymm6[3],ymm7[8],ymm6[8],ymm7[9],ymm6[9],ymm7[10],ymm6[10],ymm7[11],ymm6[11]1658; GFNIAVX2-NEXT:    vpsllvd %ymm7, %ymm2, %ymm21659; GFNIAVX2-NEXT:    vpsrld $16, %ymm2, %ymm21660; GFNIAVX2-NEXT:    vpackusdw %ymm4, %ymm2, %ymm21661; GFNIAVX2-NEXT:    vpsrlw $8, %ymm2, %ymm21662; GFNIAVX2-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm3[0],ymm1[0],ymm3[1],ymm1[1],ymm3[2],ymm1[2],ymm3[3],ymm1[3],ymm3[4],ymm1[4],ymm3[5],ymm1[5],ymm3[6],ymm1[6],ymm3[7],ymm1[7],ymm3[16],ymm1[16],ymm3[17],ymm1[17],ymm3[18],ymm1[18],ymm3[19],ymm1[19],ymm3[20],ymm1[20],ymm3[21],ymm1[21],ymm3[22],ymm1[22],ymm3[23],ymm1[23]1663; GFNIAVX2-NEXT:    vpunpckhwd {{.*#+}} ymm3 = ymm6[4],ymm1[4],ymm6[5],ymm1[5],ymm6[6],ymm1[6],ymm6[7],ymm1[7],ymm6[12],ymm1[12],ymm6[13],ymm1[13],ymm6[14],ymm1[14],ymm6[15],ymm1[15]1664; GFNIAVX2-NEXT:    vpunpcklbw {{.*#+}} ymm4 = ymm5[0],ymm6[0],ymm5[1],ymm6[1],ymm5[2],ymm6[2],ymm5[3],ymm6[3],ymm5[4],ymm6[4],ymm5[5],ymm6[5],ymm5[6],ymm6[6],ymm5[7],ymm6[7],ymm5[16],ymm6[16],ymm5[17],ymm6[17],ymm5[18],ymm6[18],ymm5[19],ymm6[19],ymm5[20],ymm6[20],ymm5[21],ymm6[21],ymm5[22],ymm6[22],ymm5[23],ymm6[23]1665; GFNIAVX2-NEXT:    vpunpckhwd {{.*#+}} ymm5 = ymm4[4],ymm6[4],ymm4[5],ymm6[5],ymm4[6],ymm6[6],ymm4[7],ymm6[7],ymm4[12],ymm6[12],ymm4[13],ymm6[13],ymm4[14],ymm6[14],ymm4[15],ymm6[15]1666; GFNIAVX2-NEXT:    vpsllvd %ymm5, %ymm3, %ymm31667; GFNIAVX2-NEXT:    vpsrld $16, %ymm3, %ymm31668; GFNIAVX2-NEXT:    vpunpcklwd {{.*#+}} ymm1 = ymm6[0],ymm1[0],ymm6[1],ymm1[1],ymm6[2],ymm1[2],ymm6[3],ymm1[3],ymm6[8],ymm1[8],ymm6[9],ymm1[9],ymm6[10],ymm1[10],ymm6[11],ymm1[11]1669; GFNIAVX2-NEXT:    vpunpcklwd {{.*#+}} ymm4 = ymm4[0],ymm6[0],ymm4[1],ymm6[1],ymm4[2],ymm6[2],ymm4[3],ymm6[3],ymm4[8],ymm6[8],ymm4[9],ymm6[9],ymm4[10],ymm6[10],ymm4[11],ymm6[11]1670; GFNIAVX2-NEXT:    vpsllvd %ymm4, %ymm1, %ymm11671; GFNIAVX2-NEXT:    vpsrld $16, %ymm1, %ymm11672; GFNIAVX2-NEXT:    vpackusdw %ymm3, %ymm1, %ymm11673; GFNIAVX2-NEXT:    vpsrlw $8, %ymm1, %ymm11674; GFNIAVX2-NEXT:    vpackuswb %ymm2, %ymm1, %ymm11675; GFNIAVX2-NEXT:    retq1676;1677; GFNIAVX512VL-LABEL: var_fshl_v64i8:1678; GFNIAVX512VL:       # %bb.0:1679; GFNIAVX512VL-NEXT:    vextracti64x4 $1, %zmm1, %ymm31680; GFNIAVX512VL-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [0,128,64,32,16,8,4,2,0,128,64,32,16,8,4,2,0,128,64,32,16,8,4,2,0,128,64,32,16,8,4,2]1681; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm4, %ymm3, %ymm31682; GFNIAVX512VL-NEXT:    vpbroadcastq {{.*#+}} ymm5 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]1683; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm5, %ymm3, %ymm61684; GFNIAVX512VL-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]1685; GFNIAVX512VL-NEXT:    vpandq %zmm7, %zmm2, %zmm21686; GFNIAVX512VL-NEXT:    vextracti64x4 $1, %zmm2, %ymm81687; GFNIAVX512VL-NEXT:    vpxor %ymm7, %ymm8, %ymm91688; GFNIAVX512VL-NEXT:    vpsllw $5, %ymm9, %ymm91689; GFNIAVX512VL-NEXT:    vpblendvb %ymm9, %ymm6, %ymm3, %ymm31690; GFNIAVX512VL-NEXT:    vpbroadcastq {{.*#+}} ymm6 = [0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4]1691; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm6, %ymm3, %ymm101692; GFNIAVX512VL-NEXT:    vpaddb %ymm9, %ymm9, %ymm91693; GFNIAVX512VL-NEXT:    vpblendvb %ymm9, %ymm10, %ymm3, %ymm31694; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm4, %ymm3, %ymm101695; GFNIAVX512VL-NEXT:    vpaddb %ymm9, %ymm9, %ymm91696; GFNIAVX512VL-NEXT:    vpblendvb %ymm9, %ymm10, %ymm3, %ymm31697; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm4, %ymm1, %ymm11698; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm5, %ymm1, %ymm51699; GFNIAVX512VL-NEXT:    vpxor %ymm7, %ymm2, %ymm71700; GFNIAVX512VL-NEXT:    vpsllw $5, %ymm7, %ymm71701; GFNIAVX512VL-NEXT:    vpblendvb %ymm7, %ymm5, %ymm1, %ymm11702; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm6, %ymm1, %ymm51703; GFNIAVX512VL-NEXT:    vpaddb %ymm7, %ymm7, %ymm61704; GFNIAVX512VL-NEXT:    vpblendvb %ymm6, %ymm5, %ymm1, %ymm11705; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm4, %ymm1, %ymm41706; GFNIAVX512VL-NEXT:    vpaddb %ymm6, %ymm6, %ymm51707; GFNIAVX512VL-NEXT:    vpblendvb %ymm5, %ymm4, %ymm1, %ymm11708; GFNIAVX512VL-NEXT:    vinserti64x4 $1, %ymm3, %zmm1, %zmm11709; GFNIAVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm31710; GFNIAVX512VL-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [8,4,2,1,0,0,0,0,8,4,2,1,0,0,0,0,8,4,2,1,0,0,0,0,8,4,2,1,0,0,0,0]1711; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm4, %ymm3, %ymm51712; GFNIAVX512VL-NEXT:    vpsllw $5, %ymm8, %ymm61713; GFNIAVX512VL-NEXT:    vpblendvb %ymm6, %ymm5, %ymm3, %ymm31714; GFNIAVX512VL-NEXT:    vpbroadcastq {{.*#+}} ymm5 = [32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0]1715; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm5, %ymm3, %ymm71716; GFNIAVX512VL-NEXT:    vpaddb %ymm6, %ymm6, %ymm61717; GFNIAVX512VL-NEXT:    vpblendvb %ymm6, %ymm7, %ymm3, %ymm31718; GFNIAVX512VL-NEXT:    vpaddb %ymm3, %ymm3, %ymm71719; GFNIAVX512VL-NEXT:    vpaddb %ymm6, %ymm6, %ymm61720; GFNIAVX512VL-NEXT:    vpblendvb %ymm6, %ymm7, %ymm3, %ymm31721; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm4, %ymm0, %ymm41722; GFNIAVX512VL-NEXT:    vpsllw $5, %ymm2, %ymm21723; GFNIAVX512VL-NEXT:    vpblendvb %ymm2, %ymm4, %ymm0, %ymm01724; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm5, %ymm0, %ymm41725; GFNIAVX512VL-NEXT:    vpaddb %ymm2, %ymm2, %ymm21726; GFNIAVX512VL-NEXT:    vpblendvb %ymm2, %ymm4, %ymm0, %ymm01727; GFNIAVX512VL-NEXT:    vpaddb %ymm0, %ymm0, %ymm41728; GFNIAVX512VL-NEXT:    vpaddb %ymm2, %ymm2, %ymm21729; GFNIAVX512VL-NEXT:    vpblendvb %ymm2, %ymm4, %ymm0, %ymm01730; GFNIAVX512VL-NEXT:    vinserti64x4 $1, %ymm3, %zmm0, %zmm01731; GFNIAVX512VL-NEXT:    vporq %zmm1, %zmm0, %zmm01732; GFNIAVX512VL-NEXT:    retq1733;1734; GFNIAVX512BW-LABEL: var_fshl_v64i8:1735; GFNIAVX512BW:       # %bb.0:1736; GFNIAVX512BW-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]1737; GFNIAVX512BW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm2, %zmm21738; GFNIAVX512BW-NEXT:    vpxor %xmm4, %xmm4, %xmm41739; GFNIAVX512BW-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]1740; GFNIAVX512BW-NEXT:    vpsllvw %zmm5, %zmm3, %zmm31741; GFNIAVX512BW-NEXT:    vpsrlw $8, %zmm3, %zmm31742; GFNIAVX512BW-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]1743; GFNIAVX512BW-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]1744; GFNIAVX512BW-NEXT:    vpsllvw %zmm1, %zmm0, %zmm01745; GFNIAVX512BW-NEXT:    vpsrlw $8, %zmm0, %zmm01746; GFNIAVX512BW-NEXT:    vpackuswb %zmm3, %zmm0, %zmm01747; GFNIAVX512BW-NEXT:    retq1748  %res = call <64 x i8> @llvm.fshl.v64i8(<64 x i8> %a, <64 x i8> %b, <64 x i8> %amt)1749  ret <64 x i8> %res1750}1751 1752define <64 x i8> @var_fshr_v64i8(<64 x i8> %a, <64 x i8> %b, <64 x i8> %amt) nounwind {1753; GFNISSE-LABEL: var_fshr_v64i8:1754; GFNISSE:       # %bb.0:1755; GFNISSE-NEXT:    movdqa %xmm7, %xmm101756; GFNISSE-NEXT:    movdqa %xmm6, %xmm71757; GFNISSE-NEXT:    movdqa %xmm5, %xmm61758; GFNISSE-NEXT:    movdqa %xmm4, %xmm51759; GFNISSE-NEXT:    movdqa %xmm3, %xmm41760; GFNISSE-NEXT:    movdqa %xmm2, %xmm31761; GFNISSE-NEXT:    movdqa %xmm1, %xmm21762; GFNISSE-NEXT:    movdqa %xmm0, %xmm11763; GFNISSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm91764; GFNISSE-NEXT:    movdqa %xmm5, %xmm121765; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm121766; GFNISSE-NEXT:    movdqa {{.*#+}} xmm11 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]1767; GFNISSE-NEXT:    movdqa %xmm9, %xmm01768; GFNISSE-NEXT:    pand %xmm11, %xmm01769; GFNISSE-NEXT:    psllw $5, %xmm01770; GFNISSE-NEXT:    pblendvb %xmm0, %xmm12, %xmm51771; GFNISSE-NEXT:    movdqa %xmm5, %xmm131772; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm131773; GFNISSE-NEXT:    paddb %xmm0, %xmm01774; GFNISSE-NEXT:    pblendvb %xmm0, %xmm13, %xmm51775; GFNISSE-NEXT:    movdqa %xmm5, %xmm141776; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm141777; GFNISSE-NEXT:    paddb %xmm0, %xmm01778; GFNISSE-NEXT:    pblendvb %xmm0, %xmm14, %xmm51779; GFNISSE-NEXT:    paddb %xmm1, %xmm11780; GFNISSE-NEXT:    movdqa %xmm1, %xmm151781; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm151782; GFNISSE-NEXT:    movdqa %xmm11, %xmm121783; GFNISSE-NEXT:    pandn %xmm11, %xmm91784; GFNISSE-NEXT:    psllw $5, %xmm91785; GFNISSE-NEXT:    movdqa %xmm9, %xmm01786; GFNISSE-NEXT:    pblendvb %xmm0, %xmm15, %xmm11787; GFNISSE-NEXT:    movdqa %xmm1, %xmm81788; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm81789; GFNISSE-NEXT:    paddb %xmm9, %xmm91790; GFNISSE-NEXT:    movdqa %xmm9, %xmm01791; GFNISSE-NEXT:    pblendvb %xmm0, %xmm8, %xmm11792; GFNISSE-NEXT:    movdqa %xmm1, %xmm81793; GFNISSE-NEXT:    paddb %xmm1, %xmm81794; GFNISSE-NEXT:    paddb %xmm9, %xmm91795; GFNISSE-NEXT:    movdqa %xmm9, %xmm01796; GFNISSE-NEXT:    pblendvb %xmm0, %xmm8, %xmm11797; GFNISSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm91798; GFNISSE-NEXT:    movdqa %xmm6, %xmm81799; GFNISSE-NEXT:    movdqa {{.*#+}} xmm11 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]1800; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm11, %xmm81801; GFNISSE-NEXT:    movdqa %xmm9, %xmm01802; GFNISSE-NEXT:    pand %xmm12, %xmm01803; GFNISSE-NEXT:    psllw $5, %xmm01804; GFNISSE-NEXT:    pblendvb %xmm0, %xmm8, %xmm61805; GFNISSE-NEXT:    movdqa %xmm6, %xmm81806; GFNISSE-NEXT:    movdqa {{.*#+}} xmm13 = [0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4]1807; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm13, %xmm81808; GFNISSE-NEXT:    paddb %xmm0, %xmm01809; GFNISSE-NEXT:    pblendvb %xmm0, %xmm8, %xmm61810; GFNISSE-NEXT:    movdqa %xmm6, %xmm81811; GFNISSE-NEXT:    movdqa {{.*#+}} xmm14 = [0,128,64,32,16,8,4,2,0,128,64,32,16,8,4,2]1812; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm14, %xmm81813; GFNISSE-NEXT:    paddb %xmm0, %xmm01814; GFNISSE-NEXT:    pblendvb %xmm0, %xmm8, %xmm61815; GFNISSE-NEXT:    paddb %xmm2, %xmm21816; GFNISSE-NEXT:    movdqa %xmm2, %xmm81817; GFNISSE-NEXT:    pmovsxdq {{.*#+}} xmm15 = [16909320,16909320]1818; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm15, %xmm81819; GFNISSE-NEXT:    pandn %xmm12, %xmm91820; GFNISSE-NEXT:    psllw $5, %xmm91821; GFNISSE-NEXT:    movdqa %xmm9, %xmm01822; GFNISSE-NEXT:    pblendvb %xmm0, %xmm8, %xmm21823; GFNISSE-NEXT:    movdqa %xmm2, %xmm81824; GFNISSE-NEXT:    movdqa {{.*#+}} xmm0 = [32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0]1825; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm0, %xmm81826; GFNISSE-NEXT:    paddb %xmm9, %xmm91827; GFNISSE-NEXT:    movdqa %xmm9, %xmm01828; GFNISSE-NEXT:    pblendvb %xmm0, %xmm8, %xmm21829; GFNISSE-NEXT:    movdqa %xmm2, %xmm81830; GFNISSE-NEXT:    paddb %xmm2, %xmm81831; GFNISSE-NEXT:    paddb %xmm9, %xmm91832; GFNISSE-NEXT:    movdqa %xmm9, %xmm01833; GFNISSE-NEXT:    pblendvb %xmm0, %xmm8, %xmm21834; GFNISSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm91835; GFNISSE-NEXT:    movdqa %xmm7, %xmm81836; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm11, %xmm81837; GFNISSE-NEXT:    movdqa %xmm9, %xmm01838; GFNISSE-NEXT:    pand %xmm12, %xmm01839; GFNISSE-NEXT:    psllw $5, %xmm01840; GFNISSE-NEXT:    pblendvb %xmm0, %xmm8, %xmm71841; GFNISSE-NEXT:    movdqa %xmm7, %xmm81842; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm13, %xmm81843; GFNISSE-NEXT:    paddb %xmm0, %xmm01844; GFNISSE-NEXT:    pblendvb %xmm0, %xmm8, %xmm71845; GFNISSE-NEXT:    movdqa %xmm7, %xmm81846; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm14, %xmm81847; GFNISSE-NEXT:    paddb %xmm0, %xmm01848; GFNISSE-NEXT:    pblendvb %xmm0, %xmm8, %xmm71849; GFNISSE-NEXT:    paddb %xmm3, %xmm31850; GFNISSE-NEXT:    movdqa %xmm3, %xmm81851; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm15, %xmm81852; GFNISSE-NEXT:    pandn %xmm12, %xmm91853; GFNISSE-NEXT:    psllw $5, %xmm91854; GFNISSE-NEXT:    movdqa %xmm9, %xmm01855; GFNISSE-NEXT:    pblendvb %xmm0, %xmm8, %xmm31856; GFNISSE-NEXT:    movdqa %xmm3, %xmm81857; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm81858; GFNISSE-NEXT:    paddb %xmm9, %xmm91859; GFNISSE-NEXT:    movdqa %xmm9, %xmm01860; GFNISSE-NEXT:    pblendvb %xmm0, %xmm8, %xmm31861; GFNISSE-NEXT:    movdqa %xmm3, %xmm81862; GFNISSE-NEXT:    paddb %xmm3, %xmm81863; GFNISSE-NEXT:    paddb %xmm9, %xmm91864; GFNISSE-NEXT:    movdqa %xmm9, %xmm01865; GFNISSE-NEXT:    pblendvb %xmm0, %xmm8, %xmm31866; GFNISSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm91867; GFNISSE-NEXT:    movdqa %xmm10, %xmm81868; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm11, %xmm81869; GFNISSE-NEXT:    movdqa %xmm9, %xmm01870; GFNISSE-NEXT:    pand %xmm12, %xmm01871; GFNISSE-NEXT:    psllw $5, %xmm01872; GFNISSE-NEXT:    pblendvb %xmm0, %xmm8, %xmm101873; GFNISSE-NEXT:    movdqa %xmm10, %xmm81874; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm13, %xmm81875; GFNISSE-NEXT:    paddb %xmm0, %xmm01876; GFNISSE-NEXT:    pblendvb %xmm0, %xmm8, %xmm101877; GFNISSE-NEXT:    movdqa %xmm10, %xmm81878; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm14, %xmm81879; GFNISSE-NEXT:    paddb %xmm0, %xmm01880; GFNISSE-NEXT:    pblendvb %xmm0, %xmm8, %xmm101881; GFNISSE-NEXT:    paddb %xmm4, %xmm41882; GFNISSE-NEXT:    movdqa %xmm4, %xmm81883; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm15, %xmm81884; GFNISSE-NEXT:    pandn %xmm12, %xmm91885; GFNISSE-NEXT:    psllw $5, %xmm91886; GFNISSE-NEXT:    movdqa %xmm9, %xmm01887; GFNISSE-NEXT:    pblendvb %xmm0, %xmm8, %xmm41888; GFNISSE-NEXT:    movdqa %xmm4, %xmm81889; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm81890; GFNISSE-NEXT:    paddb %xmm9, %xmm91891; GFNISSE-NEXT:    movdqa %xmm9, %xmm01892; GFNISSE-NEXT:    pblendvb %xmm0, %xmm8, %xmm41893; GFNISSE-NEXT:    movdqa %xmm4, %xmm81894; GFNISSE-NEXT:    paddb %xmm4, %xmm81895; GFNISSE-NEXT:    paddb %xmm9, %xmm91896; GFNISSE-NEXT:    movdqa %xmm9, %xmm01897; GFNISSE-NEXT:    pblendvb %xmm0, %xmm8, %xmm41898; GFNISSE-NEXT:    por %xmm5, %xmm11899; GFNISSE-NEXT:    por %xmm6, %xmm21900; GFNISSE-NEXT:    por %xmm7, %xmm31901; GFNISSE-NEXT:    por %xmm10, %xmm41902; GFNISSE-NEXT:    movdqa %xmm1, %xmm01903; GFNISSE-NEXT:    movdqa %xmm2, %xmm11904; GFNISSE-NEXT:    movdqa %xmm3, %xmm21905; GFNISSE-NEXT:    movdqa %xmm4, %xmm31906; GFNISSE-NEXT:    retq1907;1908; GFNIAVX1-LABEL: var_fshr_v64i8:1909; GFNIAVX1:       # %bb.0:1910; GFNIAVX1-NEXT:    vextractf128 $1, %ymm2, %xmm81911; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm7 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]1912; GFNIAVX1-NEXT:    # xmm7 = mem[0,0]1913; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm7, %xmm8, %xmm91914; GFNIAVX1-NEXT:    vbroadcastss {{.*#+}} ymm6 = [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]1915; GFNIAVX1-NEXT:    vandps %ymm6, %ymm4, %ymm111916; GFNIAVX1-NEXT:    vextractf128 $1, %ymm11, %xmm101917; GFNIAVX1-NEXT:    vpsllw $5, %xmm10, %xmm121918; GFNIAVX1-NEXT:    vpblendvb %xmm12, %xmm9, %xmm8, %xmm81919; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm4 = [0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4]1920; GFNIAVX1-NEXT:    # xmm4 = mem[0,0]1921; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm4, %xmm8, %xmm91922; GFNIAVX1-NEXT:    vpaddb %xmm12, %xmm12, %xmm121923; GFNIAVX1-NEXT:    vpblendvb %xmm12, %xmm9, %xmm8, %xmm91924; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm8 = [0,128,64,32,16,8,4,2,0,128,64,32,16,8,4,2]1925; GFNIAVX1-NEXT:    # xmm8 = mem[0,0]1926; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm8, %xmm9, %xmm131927; GFNIAVX1-NEXT:    vpaddb %xmm12, %xmm12, %xmm121928; GFNIAVX1-NEXT:    vpblendvb %xmm12, %xmm13, %xmm9, %xmm121929; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm91930; GFNIAVX1-NEXT:    vpaddb %xmm9, %xmm9, %xmm131931; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm9 = [8,4,2,1,0,0,0,0,8,4,2,1,0,0,0,0]1932; GFNIAVX1-NEXT:    # xmm9 = mem[0,0]1933; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm9, %xmm13, %xmm141934; GFNIAVX1-NEXT:    vpxor %xmm6, %xmm10, %xmm101935; GFNIAVX1-NEXT:    vpsllw $5, %xmm10, %xmm151936; GFNIAVX1-NEXT:    vpblendvb %xmm15, %xmm14, %xmm13, %xmm131937; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm10 = [32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0]1938; GFNIAVX1-NEXT:    # xmm10 = mem[0,0]1939; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm10, %xmm13, %xmm141940; GFNIAVX1-NEXT:    vpaddb %xmm15, %xmm15, %xmm151941; GFNIAVX1-NEXT:    vpblendvb %xmm15, %xmm14, %xmm13, %xmm131942; GFNIAVX1-NEXT:    vpaddb %xmm13, %xmm13, %xmm141943; GFNIAVX1-NEXT:    vpaddb %xmm15, %xmm15, %xmm151944; GFNIAVX1-NEXT:    vpblendvb %xmm15, %xmm14, %xmm13, %xmm131945; GFNIAVX1-NEXT:    vpor %xmm12, %xmm13, %xmm121946; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm7, %xmm2, %xmm131947; GFNIAVX1-NEXT:    vpsllw $5, %xmm11, %xmm141948; GFNIAVX1-NEXT:    vpblendvb %xmm14, %xmm13, %xmm2, %xmm21949; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm4, %xmm2, %xmm131950; GFNIAVX1-NEXT:    vpaddb %xmm14, %xmm14, %xmm141951; GFNIAVX1-NEXT:    vpblendvb %xmm14, %xmm13, %xmm2, %xmm21952; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm8, %xmm2, %xmm131953; GFNIAVX1-NEXT:    vpaddb %xmm14, %xmm14, %xmm141954; GFNIAVX1-NEXT:    vpblendvb %xmm14, %xmm13, %xmm2, %xmm21955; GFNIAVX1-NEXT:    vpaddb %xmm0, %xmm0, %xmm01956; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm9, %xmm0, %xmm131957; GFNIAVX1-NEXT:    vpxor %xmm6, %xmm11, %xmm111958; GFNIAVX1-NEXT:    vpsllw $5, %xmm11, %xmm111959; GFNIAVX1-NEXT:    vpblendvb %xmm11, %xmm13, %xmm0, %xmm01960; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm10, %xmm0, %xmm131961; GFNIAVX1-NEXT:    vpaddb %xmm11, %xmm11, %xmm111962; GFNIAVX1-NEXT:    vpblendvb %xmm11, %xmm13, %xmm0, %xmm01963; GFNIAVX1-NEXT:    vpaddb %xmm0, %xmm0, %xmm131964; GFNIAVX1-NEXT:    vpaddb %xmm11, %xmm11, %xmm111965; GFNIAVX1-NEXT:    vpblendvb %xmm11, %xmm13, %xmm0, %xmm01966; GFNIAVX1-NEXT:    vpor %xmm2, %xmm0, %xmm01967; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm12, %ymm0, %ymm01968; GFNIAVX1-NEXT:    vextractf128 $1, %ymm3, %xmm111969; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm7, %xmm11, %xmm121970; GFNIAVX1-NEXT:    vandps %ymm6, %ymm5, %ymm21971; GFNIAVX1-NEXT:    vextractf128 $1, %ymm2, %xmm51972; GFNIAVX1-NEXT:    vpsllw $5, %xmm5, %xmm131973; GFNIAVX1-NEXT:    vpblendvb %xmm13, %xmm12, %xmm11, %xmm111974; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm4, %xmm11, %xmm121975; GFNIAVX1-NEXT:    vpaddb %xmm13, %xmm13, %xmm131976; GFNIAVX1-NEXT:    vpblendvb %xmm13, %xmm12, %xmm11, %xmm111977; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm8, %xmm11, %xmm121978; GFNIAVX1-NEXT:    vpaddb %xmm13, %xmm13, %xmm131979; GFNIAVX1-NEXT:    vpblendvb %xmm13, %xmm12, %xmm11, %xmm111980; GFNIAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm121981; GFNIAVX1-NEXT:    vpaddb %xmm12, %xmm12, %xmm121982; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm9, %xmm12, %xmm131983; GFNIAVX1-NEXT:    vpxor %xmm6, %xmm5, %xmm51984; GFNIAVX1-NEXT:    vpsllw $5, %xmm5, %xmm51985; GFNIAVX1-NEXT:    vpblendvb %xmm5, %xmm13, %xmm12, %xmm121986; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm10, %xmm12, %xmm131987; GFNIAVX1-NEXT:    vpaddb %xmm5, %xmm5, %xmm51988; GFNIAVX1-NEXT:    vpblendvb %xmm5, %xmm13, %xmm12, %xmm121989; GFNIAVX1-NEXT:    vpaddb %xmm12, %xmm12, %xmm131990; GFNIAVX1-NEXT:    vpaddb %xmm5, %xmm5, %xmm51991; GFNIAVX1-NEXT:    vpblendvb %xmm5, %xmm13, %xmm12, %xmm51992; GFNIAVX1-NEXT:    vpor %xmm5, %xmm11, %xmm51993; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm7, %xmm3, %xmm71994; GFNIAVX1-NEXT:    vpsllw $5, %xmm2, %xmm111995; GFNIAVX1-NEXT:    vpblendvb %xmm11, %xmm7, %xmm3, %xmm31996; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm4, %xmm3, %xmm41997; GFNIAVX1-NEXT:    vpaddb %xmm11, %xmm11, %xmm71998; GFNIAVX1-NEXT:    vpblendvb %xmm7, %xmm4, %xmm3, %xmm31999; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm8, %xmm3, %xmm42000; GFNIAVX1-NEXT:    vpaddb %xmm7, %xmm7, %xmm72001; GFNIAVX1-NEXT:    vpblendvb %xmm7, %xmm4, %xmm3, %xmm32002; GFNIAVX1-NEXT:    vpaddb %xmm1, %xmm1, %xmm12003; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm9, %xmm1, %xmm42004; GFNIAVX1-NEXT:    vpxor %xmm6, %xmm2, %xmm22005; GFNIAVX1-NEXT:    vpsllw $5, %xmm2, %xmm22006; GFNIAVX1-NEXT:    vpblendvb %xmm2, %xmm4, %xmm1, %xmm12007; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm10, %xmm1, %xmm42008; GFNIAVX1-NEXT:    vpaddb %xmm2, %xmm2, %xmm22009; GFNIAVX1-NEXT:    vpblendvb %xmm2, %xmm4, %xmm1, %xmm12010; GFNIAVX1-NEXT:    vpaddb %xmm1, %xmm1, %xmm42011; GFNIAVX1-NEXT:    vpaddb %xmm2, %xmm2, %xmm22012; GFNIAVX1-NEXT:    vpblendvb %xmm2, %xmm4, %xmm1, %xmm12013; GFNIAVX1-NEXT:    vpor %xmm3, %xmm1, %xmm12014; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm1, %ymm12015; GFNIAVX1-NEXT:    retq2016;2017; GFNIAVX2-LABEL: var_fshr_v64i8:2018; GFNIAVX2:       # %bb.0:2019; GFNIAVX2-NEXT:    vpbroadcastq {{.*#+}} ymm7 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]2020; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm7, %ymm2, %ymm82021; GFNIAVX2-NEXT:    vpbroadcastb {{.*#+}} ymm6 = [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]2022; GFNIAVX2-NEXT:    vpand %ymm6, %ymm4, %ymm92023; GFNIAVX2-NEXT:    vpsllw $5, %ymm9, %ymm92024; GFNIAVX2-NEXT:    vpblendvb %ymm9, %ymm8, %ymm2, %ymm22025; GFNIAVX2-NEXT:    vpbroadcastq {{.*#+}} ymm8 = [0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4]2026; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm8, %ymm2, %ymm102027; GFNIAVX2-NEXT:    vpaddb %ymm9, %ymm9, %ymm92028; GFNIAVX2-NEXT:    vpblendvb %ymm9, %ymm10, %ymm2, %ymm22029; GFNIAVX2-NEXT:    vpbroadcastq {{.*#+}} ymm10 = [0,128,64,32,16,8,4,2,0,128,64,32,16,8,4,2,0,128,64,32,16,8,4,2,0,128,64,32,16,8,4,2]2030; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm10, %ymm2, %ymm112031; GFNIAVX2-NEXT:    vpaddb %ymm9, %ymm9, %ymm92032; GFNIAVX2-NEXT:    vpblendvb %ymm9, %ymm11, %ymm2, %ymm22033; GFNIAVX2-NEXT:    vpaddb %ymm0, %ymm0, %ymm02034; GFNIAVX2-NEXT:    vpbroadcastq {{.*#+}} ymm9 = [8,4,2,1,0,0,0,0,8,4,2,1,0,0,0,0,8,4,2,1,0,0,0,0,8,4,2,1,0,0,0,0]2035; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm9, %ymm0, %ymm112036; GFNIAVX2-NEXT:    vpandn %ymm6, %ymm4, %ymm42037; GFNIAVX2-NEXT:    vpsllw $5, %ymm4, %ymm42038; GFNIAVX2-NEXT:    vpblendvb %ymm4, %ymm11, %ymm0, %ymm02039; GFNIAVX2-NEXT:    vpbroadcastq {{.*#+}} ymm11 = [32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0]2040; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm11, %ymm0, %ymm122041; GFNIAVX2-NEXT:    vpaddb %ymm4, %ymm4, %ymm42042; GFNIAVX2-NEXT:    vpblendvb %ymm4, %ymm12, %ymm0, %ymm02043; GFNIAVX2-NEXT:    vpaddb %ymm0, %ymm0, %ymm122044; GFNIAVX2-NEXT:    vpaddb %ymm4, %ymm4, %ymm42045; GFNIAVX2-NEXT:    vpblendvb %ymm4, %ymm12, %ymm0, %ymm02046; GFNIAVX2-NEXT:    vpor %ymm2, %ymm0, %ymm02047; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm7, %ymm3, %ymm22048; GFNIAVX2-NEXT:    vpand %ymm6, %ymm5, %ymm42049; GFNIAVX2-NEXT:    vpsllw $5, %ymm4, %ymm42050; GFNIAVX2-NEXT:    vpblendvb %ymm4, %ymm2, %ymm3, %ymm22051; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm8, %ymm2, %ymm32052; GFNIAVX2-NEXT:    vpaddb %ymm4, %ymm4, %ymm42053; GFNIAVX2-NEXT:    vpblendvb %ymm4, %ymm3, %ymm2, %ymm22054; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm10, %ymm2, %ymm32055; GFNIAVX2-NEXT:    vpaddb %ymm4, %ymm4, %ymm42056; GFNIAVX2-NEXT:    vpblendvb %ymm4, %ymm3, %ymm2, %ymm22057; GFNIAVX2-NEXT:    vpaddb %ymm1, %ymm1, %ymm12058; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm9, %ymm1, %ymm32059; GFNIAVX2-NEXT:    vpandn %ymm6, %ymm5, %ymm42060; GFNIAVX2-NEXT:    vpsllw $5, %ymm4, %ymm42061; GFNIAVX2-NEXT:    vpblendvb %ymm4, %ymm3, %ymm1, %ymm12062; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm11, %ymm1, %ymm32063; GFNIAVX2-NEXT:    vpaddb %ymm4, %ymm4, %ymm42064; GFNIAVX2-NEXT:    vpblendvb %ymm4, %ymm3, %ymm1, %ymm12065; GFNIAVX2-NEXT:    vpaddb %ymm1, %ymm1, %ymm32066; GFNIAVX2-NEXT:    vpaddb %ymm4, %ymm4, %ymm42067; GFNIAVX2-NEXT:    vpblendvb %ymm4, %ymm3, %ymm1, %ymm12068; GFNIAVX2-NEXT:    vpor %ymm2, %ymm1, %ymm12069; GFNIAVX2-NEXT:    retq2070;2071; GFNIAVX512VL-LABEL: var_fshr_v64i8:2072; GFNIAVX512VL:       # %bb.0:2073; GFNIAVX512VL-NEXT:    vextracti64x4 $1, %zmm1, %ymm32074; GFNIAVX512VL-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]2075; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm4, %ymm3, %ymm52076; GFNIAVX512VL-NEXT:    vpbroadcastd {{.*#+}} zmm6 = [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]2077; GFNIAVX512VL-NEXT:    vpandq %zmm6, %zmm2, %zmm22078; GFNIAVX512VL-NEXT:    vextracti64x4 $1, %zmm2, %ymm72079; GFNIAVX512VL-NEXT:    vpsllw $5, %ymm7, %ymm82080; GFNIAVX512VL-NEXT:    vpblendvb %ymm8, %ymm5, %ymm3, %ymm32081; GFNIAVX512VL-NEXT:    vpbroadcastq {{.*#+}} ymm5 = [0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4]2082; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm5, %ymm3, %ymm92083; GFNIAVX512VL-NEXT:    vpaddb %ymm8, %ymm8, %ymm82084; GFNIAVX512VL-NEXT:    vpblendvb %ymm8, %ymm9, %ymm3, %ymm32085; GFNIAVX512VL-NEXT:    vpbroadcastq {{.*#+}} ymm9 = [0,128,64,32,16,8,4,2,0,128,64,32,16,8,4,2,0,128,64,32,16,8,4,2,0,128,64,32,16,8,4,2]2086; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm9, %ymm3, %ymm102087; GFNIAVX512VL-NEXT:    vpaddb %ymm8, %ymm8, %ymm82088; GFNIAVX512VL-NEXT:    vpblendvb %ymm8, %ymm10, %ymm3, %ymm32089; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm4, %ymm1, %ymm42090; GFNIAVX512VL-NEXT:    vpsllw $5, %ymm2, %ymm82091; GFNIAVX512VL-NEXT:    vpblendvb %ymm8, %ymm4, %ymm1, %ymm12092; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm5, %ymm1, %ymm42093; GFNIAVX512VL-NEXT:    vpaddb %ymm8, %ymm8, %ymm52094; GFNIAVX512VL-NEXT:    vpblendvb %ymm5, %ymm4, %ymm1, %ymm12095; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm9, %ymm1, %ymm42096; GFNIAVX512VL-NEXT:    vpaddb %ymm5, %ymm5, %ymm52097; GFNIAVX512VL-NEXT:    vpblendvb %ymm5, %ymm4, %ymm1, %ymm12098; GFNIAVX512VL-NEXT:    vinserti64x4 $1, %ymm3, %zmm1, %zmm12099; GFNIAVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm32100; GFNIAVX512VL-NEXT:    vpaddb %ymm3, %ymm3, %ymm32101; GFNIAVX512VL-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [8,4,2,1,0,0,0,0,8,4,2,1,0,0,0,0,8,4,2,1,0,0,0,0,8,4,2,1,0,0,0,0]2102; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm4, %ymm3, %ymm52103; GFNIAVX512VL-NEXT:    vpxor %ymm6, %ymm7, %ymm72104; GFNIAVX512VL-NEXT:    vpsllw $5, %ymm7, %ymm72105; GFNIAVX512VL-NEXT:    vpblendvb %ymm7, %ymm5, %ymm3, %ymm32106; GFNIAVX512VL-NEXT:    vpbroadcastq {{.*#+}} ymm5 = [32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0]2107; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm5, %ymm3, %ymm82108; GFNIAVX512VL-NEXT:    vpaddb %ymm7, %ymm7, %ymm72109; GFNIAVX512VL-NEXT:    vpblendvb %ymm7, %ymm8, %ymm3, %ymm32110; GFNIAVX512VL-NEXT:    vpaddb %ymm3, %ymm3, %ymm82111; GFNIAVX512VL-NEXT:    vpaddb %ymm7, %ymm7, %ymm72112; GFNIAVX512VL-NEXT:    vpblendvb %ymm7, %ymm8, %ymm3, %ymm32113; GFNIAVX512VL-NEXT:    vpaddb %ymm0, %ymm0, %ymm02114; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm4, %ymm0, %ymm42115; GFNIAVX512VL-NEXT:    vpxor %ymm6, %ymm2, %ymm22116; GFNIAVX512VL-NEXT:    vpsllw $5, %ymm2, %ymm22117; GFNIAVX512VL-NEXT:    vpblendvb %ymm2, %ymm4, %ymm0, %ymm02118; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm5, %ymm0, %ymm42119; GFNIAVX512VL-NEXT:    vpaddb %ymm2, %ymm2, %ymm22120; GFNIAVX512VL-NEXT:    vpblendvb %ymm2, %ymm4, %ymm0, %ymm02121; GFNIAVX512VL-NEXT:    vpaddb %ymm0, %ymm0, %ymm42122; GFNIAVX512VL-NEXT:    vpaddb %ymm2, %ymm2, %ymm22123; GFNIAVX512VL-NEXT:    vpblendvb %ymm2, %ymm4, %ymm0, %ymm02124; GFNIAVX512VL-NEXT:    vinserti64x4 $1, %ymm3, %zmm0, %zmm02125; GFNIAVX512VL-NEXT:    vporq %zmm1, %zmm0, %zmm02126; GFNIAVX512VL-NEXT:    retq2127;2128; GFNIAVX512BW-LABEL: var_fshr_v64i8:2129; GFNIAVX512BW:       # %bb.0:2130; GFNIAVX512BW-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]2131; GFNIAVX512BW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm2, %zmm22132; GFNIAVX512BW-NEXT:    vpxor %xmm4, %xmm4, %xmm42133; GFNIAVX512BW-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]2134; GFNIAVX512BW-NEXT:    vpsrlvw %zmm5, %zmm3, %zmm32135; GFNIAVX512BW-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]2136; GFNIAVX512BW-NEXT:    vpandq %zmm5, %zmm3, %zmm32137; GFNIAVX512BW-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]2138; GFNIAVX512BW-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]2139; GFNIAVX512BW-NEXT:    vpsrlvw %zmm1, %zmm0, %zmm02140; GFNIAVX512BW-NEXT:    vpandq %zmm5, %zmm0, %zmm02141; GFNIAVX512BW-NEXT:    vpackuswb %zmm3, %zmm0, %zmm02142; GFNIAVX512BW-NEXT:    retq2143  %res = call <64 x i8> @llvm.fshr.v64i8(<64 x i8> %a, <64 x i8> %b, <64 x i8> %amt)2144  ret <64 x i8> %res2145}2146 2147define <64 x i8> @splatvar_fshl_v64i8(<64 x i8> %a, <64 x i8> %b, <64 x i8> %amt) nounwind {2148; GFNISSE-LABEL: splatvar_fshl_v64i8:2149; GFNISSE:       # %bb.0:2150; GFNISSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm82151; GFNISSE-NEXT:    movdqa %xmm4, %xmm92152; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm9 = xmm9[8],xmm0[8],xmm9[9],xmm0[9],xmm9[10],xmm0[10],xmm9[11],xmm0[11],xmm9[12],xmm0[12],xmm9[13],xmm0[13],xmm9[14],xmm0[14],xmm9[15],xmm0[15]2153; GFNISSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm82154; GFNISSE-NEXT:    psllw %xmm8, %xmm92155; GFNISSE-NEXT:    psrlw $8, %xmm92156; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm0[0],xmm4[1],xmm0[1],xmm4[2],xmm0[2],xmm4[3],xmm0[3],xmm4[4],xmm0[4],xmm4[5],xmm0[5],xmm4[6],xmm0[6],xmm4[7],xmm0[7]2157; GFNISSE-NEXT:    psllw %xmm8, %xmm42158; GFNISSE-NEXT:    psrlw $8, %xmm42159; GFNISSE-NEXT:    packuswb %xmm9, %xmm42160; GFNISSE-NEXT:    movdqa %xmm5, %xmm02161; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]2162; GFNISSE-NEXT:    psllw %xmm8, %xmm02163; GFNISSE-NEXT:    psrlw $8, %xmm02164; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm5 = xmm5[0],xmm1[0],xmm5[1],xmm1[1],xmm5[2],xmm1[2],xmm5[3],xmm1[3],xmm5[4],xmm1[4],xmm5[5],xmm1[5],xmm5[6],xmm1[6],xmm5[7],xmm1[7]2165; GFNISSE-NEXT:    psllw %xmm8, %xmm52166; GFNISSE-NEXT:    psrlw $8, %xmm52167; GFNISSE-NEXT:    packuswb %xmm0, %xmm52168; GFNISSE-NEXT:    movdqa %xmm6, %xmm02169; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]2170; GFNISSE-NEXT:    psllw %xmm8, %xmm02171; GFNISSE-NEXT:    psrlw $8, %xmm02172; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm2[0],xmm6[1],xmm2[1],xmm6[2],xmm2[2],xmm6[3],xmm2[3],xmm6[4],xmm2[4],xmm6[5],xmm2[5],xmm6[6],xmm2[6],xmm6[7],xmm2[7]2173; GFNISSE-NEXT:    psllw %xmm8, %xmm62174; GFNISSE-NEXT:    psrlw $8, %xmm62175; GFNISSE-NEXT:    packuswb %xmm0, %xmm62176; GFNISSE-NEXT:    movdqa %xmm7, %xmm02177; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm3[8],xmm0[9],xmm3[9],xmm0[10],xmm3[10],xmm0[11],xmm3[11],xmm0[12],xmm3[12],xmm0[13],xmm3[13],xmm0[14],xmm3[14],xmm0[15],xmm3[15]2178; GFNISSE-NEXT:    psllw %xmm8, %xmm02179; GFNISSE-NEXT:    psrlw $8, %xmm02180; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm7 = xmm7[0],xmm3[0],xmm7[1],xmm3[1],xmm7[2],xmm3[2],xmm7[3],xmm3[3],xmm7[4],xmm3[4],xmm7[5],xmm3[5],xmm7[6],xmm3[6],xmm7[7],xmm3[7]2181; GFNISSE-NEXT:    psllw %xmm8, %xmm72182; GFNISSE-NEXT:    psrlw $8, %xmm72183; GFNISSE-NEXT:    packuswb %xmm0, %xmm72184; GFNISSE-NEXT:    movdqa %xmm4, %xmm02185; GFNISSE-NEXT:    movdqa %xmm5, %xmm12186; GFNISSE-NEXT:    movdqa %xmm6, %xmm22187; GFNISSE-NEXT:    movdqa %xmm7, %xmm32188; GFNISSE-NEXT:    retq2189;2190; GFNIAVX1-LABEL: splatvar_fshl_v64i8:2191; GFNIAVX1:       # %bb.0:2192; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm52193; GFNIAVX1-NEXT:    vextractf128 $1, %ymm2, %xmm62194; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm7 = xmm6[8],xmm5[8],xmm6[9],xmm5[9],xmm6[10],xmm5[10],xmm6[11],xmm5[11],xmm6[12],xmm5[12],xmm6[13],xmm5[13],xmm6[14],xmm5[14],xmm6[15],xmm5[15]2195; GFNIAVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4, %xmm42196; GFNIAVX1-NEXT:    vpsllw %xmm4, %xmm7, %xmm72197; GFNIAVX1-NEXT:    vpsrlw $8, %xmm7, %xmm72198; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm5 = xmm6[0],xmm5[0],xmm6[1],xmm5[1],xmm6[2],xmm5[2],xmm6[3],xmm5[3],xmm6[4],xmm5[4],xmm6[5],xmm5[5],xmm6[6],xmm5[6],xmm6[7],xmm5[7]2199; GFNIAVX1-NEXT:    vpsllw %xmm4, %xmm5, %xmm52200; GFNIAVX1-NEXT:    vpsrlw $8, %xmm5, %xmm52201; GFNIAVX1-NEXT:    vpackuswb %xmm7, %xmm5, %xmm52202; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm6 = xmm2[8],xmm0[8],xmm2[9],xmm0[9],xmm2[10],xmm0[10],xmm2[11],xmm0[11],xmm2[12],xmm0[12],xmm2[13],xmm0[13],xmm2[14],xmm0[14],xmm2[15],xmm0[15]2203; GFNIAVX1-NEXT:    vpsllw %xmm4, %xmm6, %xmm62204; GFNIAVX1-NEXT:    vpsrlw $8, %xmm6, %xmm62205; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]2206; GFNIAVX1-NEXT:    vpsllw %xmm4, %xmm0, %xmm02207; GFNIAVX1-NEXT:    vpsrlw $8, %xmm0, %xmm02208; GFNIAVX1-NEXT:    vpackuswb %xmm6, %xmm0, %xmm02209; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm0, %ymm02210; GFNIAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm22211; GFNIAVX1-NEXT:    vextractf128 $1, %ymm3, %xmm52212; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm6 = xmm5[8],xmm2[8],xmm5[9],xmm2[9],xmm5[10],xmm2[10],xmm5[11],xmm2[11],xmm5[12],xmm2[12],xmm5[13],xmm2[13],xmm5[14],xmm2[14],xmm5[15],xmm2[15]2213; GFNIAVX1-NEXT:    vpsllw %xmm4, %xmm6, %xmm62214; GFNIAVX1-NEXT:    vpsrlw $8, %xmm6, %xmm62215; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm2 = xmm5[0],xmm2[0],xmm5[1],xmm2[1],xmm5[2],xmm2[2],xmm5[3],xmm2[3],xmm5[4],xmm2[4],xmm5[5],xmm2[5],xmm5[6],xmm2[6],xmm5[7],xmm2[7]2216; GFNIAVX1-NEXT:    vpsllw %xmm4, %xmm2, %xmm22217; GFNIAVX1-NEXT:    vpsrlw $8, %xmm2, %xmm22218; GFNIAVX1-NEXT:    vpackuswb %xmm6, %xmm2, %xmm22219; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm5 = xmm3[8],xmm1[8],xmm3[9],xmm1[9],xmm3[10],xmm1[10],xmm3[11],xmm1[11],xmm3[12],xmm1[12],xmm3[13],xmm1[13],xmm3[14],xmm1[14],xmm3[15],xmm1[15]2220; GFNIAVX1-NEXT:    vpsllw %xmm4, %xmm5, %xmm52221; GFNIAVX1-NEXT:    vpsrlw $8, %xmm5, %xmm52222; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3],xmm3[4],xmm1[4],xmm3[5],xmm1[5],xmm3[6],xmm1[6],xmm3[7],xmm1[7]2223; GFNIAVX1-NEXT:    vpsllw %xmm4, %xmm1, %xmm12224; GFNIAVX1-NEXT:    vpsrlw $8, %xmm1, %xmm12225; GFNIAVX1-NEXT:    vpackuswb %xmm5, %xmm1, %xmm12226; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm12227; GFNIAVX1-NEXT:    retq2228;2229; GFNIAVX2-LABEL: splatvar_fshl_v64i8:2230; GFNIAVX2:       # %bb.0:2231; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} ymm5 = ymm2[8],ymm0[8],ymm2[9],ymm0[9],ymm2[10],ymm0[10],ymm2[11],ymm0[11],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15],ymm2[24],ymm0[24],ymm2[25],ymm0[25],ymm2[26],ymm0[26],ymm2[27],ymm0[27],ymm2[28],ymm0[28],ymm2[29],ymm0[29],ymm2[30],ymm0[30],ymm2[31],ymm0[31]2232; GFNIAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4, %xmm42233; GFNIAVX2-NEXT:    vpsllw %xmm4, %ymm5, %ymm52234; GFNIAVX2-NEXT:    vpsrlw $8, %ymm5, %ymm52235; GFNIAVX2-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm2[0],ymm0[0],ymm2[1],ymm0[1],ymm2[2],ymm0[2],ymm2[3],ymm0[3],ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[16],ymm0[16],ymm2[17],ymm0[17],ymm2[18],ymm0[18],ymm2[19],ymm0[19],ymm2[20],ymm0[20],ymm2[21],ymm0[21],ymm2[22],ymm0[22],ymm2[23],ymm0[23]2236; GFNIAVX2-NEXT:    vpsllw %xmm4, %ymm0, %ymm02237; GFNIAVX2-NEXT:    vpsrlw $8, %ymm0, %ymm02238; GFNIAVX2-NEXT:    vpackuswb %ymm5, %ymm0, %ymm02239; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm3[8],ymm1[8],ymm3[9],ymm1[9],ymm3[10],ymm1[10],ymm3[11],ymm1[11],ymm3[12],ymm1[12],ymm3[13],ymm1[13],ymm3[14],ymm1[14],ymm3[15],ymm1[15],ymm3[24],ymm1[24],ymm3[25],ymm1[25],ymm3[26],ymm1[26],ymm3[27],ymm1[27],ymm3[28],ymm1[28],ymm3[29],ymm1[29],ymm3[30],ymm1[30],ymm3[31],ymm1[31]2240; GFNIAVX2-NEXT:    vpsllw %xmm4, %ymm2, %ymm22241; GFNIAVX2-NEXT:    vpsrlw $8, %ymm2, %ymm22242; GFNIAVX2-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm3[0],ymm1[0],ymm3[1],ymm1[1],ymm3[2],ymm1[2],ymm3[3],ymm1[3],ymm3[4],ymm1[4],ymm3[5],ymm1[5],ymm3[6],ymm1[6],ymm3[7],ymm1[7],ymm3[16],ymm1[16],ymm3[17],ymm1[17],ymm3[18],ymm1[18],ymm3[19],ymm1[19],ymm3[20],ymm1[20],ymm3[21],ymm1[21],ymm3[22],ymm1[22],ymm3[23],ymm1[23]2243; GFNIAVX2-NEXT:    vpsllw %xmm4, %ymm1, %ymm12244; GFNIAVX2-NEXT:    vpsrlw $8, %ymm1, %ymm12245; GFNIAVX2-NEXT:    vpackuswb %ymm2, %ymm1, %ymm12246; GFNIAVX2-NEXT:    retq2247;2248; GFNIAVX512VL-LABEL: splatvar_fshl_v64i8:2249; GFNIAVX512VL:       # %bb.0:2250; GFNIAVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm32251; GFNIAVX512VL-NEXT:    vextracti64x4 $1, %zmm1, %ymm42252; GFNIAVX512VL-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]2253; GFNIAVX512VL-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22254; GFNIAVX512VL-NEXT:    vpsllw %xmm2, %ymm5, %ymm52255; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm5, %ymm52256; GFNIAVX512VL-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]2257; GFNIAVX512VL-NEXT:    vpsllw %xmm2, %ymm3, %ymm32258; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm3, %ymm32259; GFNIAVX512VL-NEXT:    vpackuswb %ymm5, %ymm3, %ymm32260; GFNIAVX512VL-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]2261; GFNIAVX512VL-NEXT:    vpsllw %xmm2, %ymm4, %ymm42262; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm4, %ymm42263; GFNIAVX512VL-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]2264; GFNIAVX512VL-NEXT:    vpsllw %xmm2, %ymm0, %ymm02265; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm0, %ymm02266; GFNIAVX512VL-NEXT:    vpackuswb %ymm4, %ymm0, %ymm02267; GFNIAVX512VL-NEXT:    vinserti64x4 $1, %ymm3, %zmm0, %zmm02268; GFNIAVX512VL-NEXT:    retq2269;2270; GFNIAVX512BW-LABEL: splatvar_fshl_v64i8:2271; GFNIAVX512BW:       # %bb.0:2272; GFNIAVX512BW-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]2273; GFNIAVX512BW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22274; GFNIAVX512BW-NEXT:    vpsllw %xmm2, %zmm3, %zmm32275; GFNIAVX512BW-NEXT:    vpsrlw $8, %zmm3, %zmm32276; GFNIAVX512BW-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]2277; GFNIAVX512BW-NEXT:    vpsllw %xmm2, %zmm0, %zmm02278; GFNIAVX512BW-NEXT:    vpsrlw $8, %zmm0, %zmm02279; GFNIAVX512BW-NEXT:    vpackuswb %zmm3, %zmm0, %zmm02280; GFNIAVX512BW-NEXT:    retq2281  %splat = shufflevector <64 x i8> %amt, <64 x i8> undef, <64 x i32> zeroinitializer2282  %res = call <64 x i8> @llvm.fshl.v64i8(<64 x i8> %a, <64 x i8> %b, <64 x i8> %splat)2283  ret <64 x i8> %res2284}2285 2286define <64 x i8> @splatvar_fshr_v64i8(<64 x i8> %a, <64 x i8> %b, <64 x i8> %amt) nounwind {2287; GFNISSE-LABEL: splatvar_fshr_v64i8:2288; GFNISSE:       # %bb.0:2289; GFNISSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm92290; GFNISSE-NEXT:    movdqa %xmm4, %xmm102291; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm10 = xmm10[8],xmm0[8],xmm10[9],xmm0[9],xmm10[10],xmm0[10],xmm10[11],xmm0[11],xmm10[12],xmm0[12],xmm10[13],xmm0[13],xmm10[14],xmm0[14],xmm10[15],xmm0[15]2292; GFNISSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm92293; GFNISSE-NEXT:    psrlw %xmm9, %xmm102294; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm8 = [255,255,255,255,255,255,255,255]2295; GFNISSE-NEXT:    pand %xmm8, %xmm102296; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm0[0],xmm4[1],xmm0[1],xmm4[2],xmm0[2],xmm4[3],xmm0[3],xmm4[4],xmm0[4],xmm4[5],xmm0[5],xmm4[6],xmm0[6],xmm4[7],xmm0[7]2297; GFNISSE-NEXT:    psrlw %xmm9, %xmm42298; GFNISSE-NEXT:    pand %xmm8, %xmm42299; GFNISSE-NEXT:    packuswb %xmm10, %xmm42300; GFNISSE-NEXT:    movdqa %xmm5, %xmm02301; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]2302; GFNISSE-NEXT:    psrlw %xmm9, %xmm02303; GFNISSE-NEXT:    pand %xmm8, %xmm02304; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm5 = xmm5[0],xmm1[0],xmm5[1],xmm1[1],xmm5[2],xmm1[2],xmm5[3],xmm1[3],xmm5[4],xmm1[4],xmm5[5],xmm1[5],xmm5[6],xmm1[6],xmm5[7],xmm1[7]2305; GFNISSE-NEXT:    psrlw %xmm9, %xmm52306; GFNISSE-NEXT:    pand %xmm8, %xmm52307; GFNISSE-NEXT:    packuswb %xmm0, %xmm52308; GFNISSE-NEXT:    movdqa %xmm6, %xmm02309; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]2310; GFNISSE-NEXT:    psrlw %xmm9, %xmm02311; GFNISSE-NEXT:    pand %xmm8, %xmm02312; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm2[0],xmm6[1],xmm2[1],xmm6[2],xmm2[2],xmm6[3],xmm2[3],xmm6[4],xmm2[4],xmm6[5],xmm2[5],xmm6[6],xmm2[6],xmm6[7],xmm2[7]2313; GFNISSE-NEXT:    psrlw %xmm9, %xmm62314; GFNISSE-NEXT:    pand %xmm8, %xmm62315; GFNISSE-NEXT:    packuswb %xmm0, %xmm62316; GFNISSE-NEXT:    movdqa %xmm7, %xmm02317; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm3[8],xmm0[9],xmm3[9],xmm0[10],xmm3[10],xmm0[11],xmm3[11],xmm0[12],xmm3[12],xmm0[13],xmm3[13],xmm0[14],xmm3[14],xmm0[15],xmm3[15]2318; GFNISSE-NEXT:    psrlw %xmm9, %xmm02319; GFNISSE-NEXT:    pand %xmm8, %xmm02320; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm7 = xmm7[0],xmm3[0],xmm7[1],xmm3[1],xmm7[2],xmm3[2],xmm7[3],xmm3[3],xmm7[4],xmm3[4],xmm7[5],xmm3[5],xmm7[6],xmm3[6],xmm7[7],xmm3[7]2321; GFNISSE-NEXT:    psrlw %xmm9, %xmm72322; GFNISSE-NEXT:    pand %xmm7, %xmm82323; GFNISSE-NEXT:    packuswb %xmm0, %xmm82324; GFNISSE-NEXT:    movdqa %xmm4, %xmm02325; GFNISSE-NEXT:    movdqa %xmm5, %xmm12326; GFNISSE-NEXT:    movdqa %xmm6, %xmm22327; GFNISSE-NEXT:    movdqa %xmm8, %xmm32328; GFNISSE-NEXT:    retq2329;2330; GFNIAVX1-LABEL: splatvar_fshr_v64i8:2331; GFNIAVX1:       # %bb.0:2332; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm62333; GFNIAVX1-NEXT:    vextractf128 $1, %ymm2, %xmm72334; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm5 = xmm7[8],xmm6[8],xmm7[9],xmm6[9],xmm7[10],xmm6[10],xmm7[11],xmm6[11],xmm7[12],xmm6[12],xmm7[13],xmm6[13],xmm7[14],xmm6[14],xmm7[15],xmm6[15]2335; GFNIAVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4, %xmm42336; GFNIAVX1-NEXT:    vpsrlw %xmm4, %xmm5, %xmm82337; GFNIAVX1-NEXT:    vbroadcastss {{.*#+}} xmm5 = [255,255,255,255,255,255,255,255]2338; GFNIAVX1-NEXT:    vpand %xmm5, %xmm8, %xmm82339; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm6 = xmm7[0],xmm6[0],xmm7[1],xmm6[1],xmm7[2],xmm6[2],xmm7[3],xmm6[3],xmm7[4],xmm6[4],xmm7[5],xmm6[5],xmm7[6],xmm6[6],xmm7[7],xmm6[7]2340; GFNIAVX1-NEXT:    vpsrlw %xmm4, %xmm6, %xmm62341; GFNIAVX1-NEXT:    vpand %xmm5, %xmm6, %xmm62342; GFNIAVX1-NEXT:    vpackuswb %xmm8, %xmm6, %xmm62343; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm7 = xmm2[8],xmm0[8],xmm2[9],xmm0[9],xmm2[10],xmm0[10],xmm2[11],xmm0[11],xmm2[12],xmm0[12],xmm2[13],xmm0[13],xmm2[14],xmm0[14],xmm2[15],xmm0[15]2344; GFNIAVX1-NEXT:    vpsrlw %xmm4, %xmm7, %xmm72345; GFNIAVX1-NEXT:    vpand %xmm5, %xmm7, %xmm72346; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]2347; GFNIAVX1-NEXT:    vpsrlw %xmm4, %xmm0, %xmm02348; GFNIAVX1-NEXT:    vpand %xmm5, %xmm0, %xmm02349; GFNIAVX1-NEXT:    vpackuswb %xmm7, %xmm0, %xmm02350; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm0, %ymm02351; GFNIAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm22352; GFNIAVX1-NEXT:    vextractf128 $1, %ymm3, %xmm62353; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm7 = xmm6[8],xmm2[8],xmm6[9],xmm2[9],xmm6[10],xmm2[10],xmm6[11],xmm2[11],xmm6[12],xmm2[12],xmm6[13],xmm2[13],xmm6[14],xmm2[14],xmm6[15],xmm2[15]2354; GFNIAVX1-NEXT:    vpsrlw %xmm4, %xmm7, %xmm72355; GFNIAVX1-NEXT:    vpand %xmm5, %xmm7, %xmm72356; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm2 = xmm6[0],xmm2[0],xmm6[1],xmm2[1],xmm6[2],xmm2[2],xmm6[3],xmm2[3],xmm6[4],xmm2[4],xmm6[5],xmm2[5],xmm6[6],xmm2[6],xmm6[7],xmm2[7]2357; GFNIAVX1-NEXT:    vpsrlw %xmm4, %xmm2, %xmm22358; GFNIAVX1-NEXT:    vpand %xmm5, %xmm2, %xmm22359; GFNIAVX1-NEXT:    vpackuswb %xmm7, %xmm2, %xmm22360; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm6 = xmm3[8],xmm1[8],xmm3[9],xmm1[9],xmm3[10],xmm1[10],xmm3[11],xmm1[11],xmm3[12],xmm1[12],xmm3[13],xmm1[13],xmm3[14],xmm1[14],xmm3[15],xmm1[15]2361; GFNIAVX1-NEXT:    vpsrlw %xmm4, %xmm6, %xmm62362; GFNIAVX1-NEXT:    vpand %xmm5, %xmm6, %xmm62363; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3],xmm3[4],xmm1[4],xmm3[5],xmm1[5],xmm3[6],xmm1[6],xmm3[7],xmm1[7]2364; GFNIAVX1-NEXT:    vpsrlw %xmm4, %xmm1, %xmm12365; GFNIAVX1-NEXT:    vpand %xmm5, %xmm1, %xmm12366; GFNIAVX1-NEXT:    vpackuswb %xmm6, %xmm1, %xmm12367; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm12368; GFNIAVX1-NEXT:    retq2369;2370; GFNIAVX2-LABEL: splatvar_fshr_v64i8:2371; GFNIAVX2:       # %bb.0:2372; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} ymm5 = ymm2[8],ymm0[8],ymm2[9],ymm0[9],ymm2[10],ymm0[10],ymm2[11],ymm0[11],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15],ymm2[24],ymm0[24],ymm2[25],ymm0[25],ymm2[26],ymm0[26],ymm2[27],ymm0[27],ymm2[28],ymm0[28],ymm2[29],ymm0[29],ymm2[30],ymm0[30],ymm2[31],ymm0[31]2373; GFNIAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4, %xmm42374; GFNIAVX2-NEXT:    vpsrlw %xmm4, %ymm5, %ymm52375; GFNIAVX2-NEXT:    vpbroadcastw {{.*#+}} ymm6 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]2376; GFNIAVX2-NEXT:    vpand %ymm6, %ymm5, %ymm52377; GFNIAVX2-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm2[0],ymm0[0],ymm2[1],ymm0[1],ymm2[2],ymm0[2],ymm2[3],ymm0[3],ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[16],ymm0[16],ymm2[17],ymm0[17],ymm2[18],ymm0[18],ymm2[19],ymm0[19],ymm2[20],ymm0[20],ymm2[21],ymm0[21],ymm2[22],ymm0[22],ymm2[23],ymm0[23]2378; GFNIAVX2-NEXT:    vpsrlw %xmm4, %ymm0, %ymm02379; GFNIAVX2-NEXT:    vpand %ymm6, %ymm0, %ymm02380; GFNIAVX2-NEXT:    vpackuswb %ymm5, %ymm0, %ymm02381; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm3[8],ymm1[8],ymm3[9],ymm1[9],ymm3[10],ymm1[10],ymm3[11],ymm1[11],ymm3[12],ymm1[12],ymm3[13],ymm1[13],ymm3[14],ymm1[14],ymm3[15],ymm1[15],ymm3[24],ymm1[24],ymm3[25],ymm1[25],ymm3[26],ymm1[26],ymm3[27],ymm1[27],ymm3[28],ymm1[28],ymm3[29],ymm1[29],ymm3[30],ymm1[30],ymm3[31],ymm1[31]2382; GFNIAVX2-NEXT:    vpsrlw %xmm4, %ymm2, %ymm22383; GFNIAVX2-NEXT:    vpand %ymm6, %ymm2, %ymm22384; GFNIAVX2-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm3[0],ymm1[0],ymm3[1],ymm1[1],ymm3[2],ymm1[2],ymm3[3],ymm1[3],ymm3[4],ymm1[4],ymm3[5],ymm1[5],ymm3[6],ymm1[6],ymm3[7],ymm1[7],ymm3[16],ymm1[16],ymm3[17],ymm1[17],ymm3[18],ymm1[18],ymm3[19],ymm1[19],ymm3[20],ymm1[20],ymm3[21],ymm1[21],ymm3[22],ymm1[22],ymm3[23],ymm1[23]2385; GFNIAVX2-NEXT:    vpsrlw %xmm4, %ymm1, %ymm12386; GFNIAVX2-NEXT:    vpand %ymm6, %ymm1, %ymm12387; GFNIAVX2-NEXT:    vpackuswb %ymm2, %ymm1, %ymm12388; GFNIAVX2-NEXT:    retq2389;2390; GFNIAVX512VL-LABEL: splatvar_fshr_v64i8:2391; GFNIAVX512VL:       # %bb.0:2392; GFNIAVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm32393; GFNIAVX512VL-NEXT:    vextracti64x4 $1, %zmm1, %ymm42394; GFNIAVX512VL-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]2395; GFNIAVX512VL-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22396; GFNIAVX512VL-NEXT:    vpsrlw %xmm2, %ymm5, %ymm52397; GFNIAVX512VL-NEXT:    vpbroadcastd {{.*#+}} ymm6 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]2398; GFNIAVX512VL-NEXT:    vpand %ymm6, %ymm5, %ymm52399; GFNIAVX512VL-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]2400; GFNIAVX512VL-NEXT:    vpsrlw %xmm2, %ymm3, %ymm32401; GFNIAVX512VL-NEXT:    vpand %ymm6, %ymm3, %ymm32402; GFNIAVX512VL-NEXT:    vpackuswb %ymm5, %ymm3, %ymm32403; GFNIAVX512VL-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]2404; GFNIAVX512VL-NEXT:    vpsrlw %xmm2, %ymm4, %ymm42405; GFNIAVX512VL-NEXT:    vpand %ymm6, %ymm4, %ymm42406; GFNIAVX512VL-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]2407; GFNIAVX512VL-NEXT:    vpsrlw %xmm2, %ymm0, %ymm02408; GFNIAVX512VL-NEXT:    vpand %ymm6, %ymm0, %ymm02409; GFNIAVX512VL-NEXT:    vpackuswb %ymm4, %ymm0, %ymm02410; GFNIAVX512VL-NEXT:    vinserti64x4 $1, %ymm3, %zmm0, %zmm02411; GFNIAVX512VL-NEXT:    retq2412;2413; GFNIAVX512BW-LABEL: splatvar_fshr_v64i8:2414; GFNIAVX512BW:       # %bb.0:2415; GFNIAVX512BW-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]2416; GFNIAVX512BW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22417; GFNIAVX512BW-NEXT:    vpsrlw %xmm2, %zmm3, %zmm32418; GFNIAVX512BW-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]2419; GFNIAVX512BW-NEXT:    vpandq %zmm4, %zmm3, %zmm32420; GFNIAVX512BW-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]2421; GFNIAVX512BW-NEXT:    vpsrlw %xmm2, %zmm0, %zmm02422; GFNIAVX512BW-NEXT:    vpandq %zmm4, %zmm0, %zmm02423; GFNIAVX512BW-NEXT:    vpackuswb %zmm3, %zmm0, %zmm02424; GFNIAVX512BW-NEXT:    retq2425  %splat = shufflevector <64 x i8> %amt, <64 x i8> undef, <64 x i32> zeroinitializer2426  %res = call <64 x i8> @llvm.fshr.v64i8(<64 x i8> %a, <64 x i8> %b, <64 x i8> %splat)2427  ret <64 x i8> %res2428}2429 2430define <64 x i8> @constant_fshl_v64i8(<64 x i8> %a, <64 x i8> %b) nounwind {2431; GFNISSE-LABEL: constant_fshl_v64i8:2432; GFNISSE:       # %bb.0:2433; GFNISSE-NEXT:    movdqa %xmm4, %xmm102434; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm10 = xmm10[8],xmm0[8],xmm10[9],xmm0[9],xmm10[10],xmm0[10],xmm10[11],xmm0[11],xmm10[12],xmm0[12],xmm10[13],xmm0[13],xmm10[14],xmm0[14],xmm10[15],xmm0[15]2435; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm9 = [1,128,64,32,16,8,4,2]2436; GFNISSE-NEXT:    pmullw %xmm9, %xmm102437; GFNISSE-NEXT:    psrlw $8, %xmm102438; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm0[0],xmm4[1],xmm0[1],xmm4[2],xmm0[2],xmm4[3],xmm0[3],xmm4[4],xmm0[4],xmm4[5],xmm0[5],xmm4[6],xmm0[6],xmm4[7],xmm0[7]2439; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm8 = [1,2,4,8,16,32,64,128]2440; GFNISSE-NEXT:    pmullw %xmm8, %xmm42441; GFNISSE-NEXT:    psrlw $8, %xmm42442; GFNISSE-NEXT:    packuswb %xmm10, %xmm42443; GFNISSE-NEXT:    movdqa %xmm5, %xmm02444; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]2445; GFNISSE-NEXT:    pmullw %xmm9, %xmm02446; GFNISSE-NEXT:    psrlw $8, %xmm02447; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm5 = xmm5[0],xmm1[0],xmm5[1],xmm1[1],xmm5[2],xmm1[2],xmm5[3],xmm1[3],xmm5[4],xmm1[4],xmm5[5],xmm1[5],xmm5[6],xmm1[6],xmm5[7],xmm1[7]2448; GFNISSE-NEXT:    pmullw %xmm8, %xmm52449; GFNISSE-NEXT:    psrlw $8, %xmm52450; GFNISSE-NEXT:    packuswb %xmm0, %xmm52451; GFNISSE-NEXT:    movdqa %xmm6, %xmm02452; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]2453; GFNISSE-NEXT:    pmullw %xmm9, %xmm02454; GFNISSE-NEXT:    psrlw $8, %xmm02455; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm2[0],xmm6[1],xmm2[1],xmm6[2],xmm2[2],xmm6[3],xmm2[3],xmm6[4],xmm2[4],xmm6[5],xmm2[5],xmm6[6],xmm2[6],xmm6[7],xmm2[7]2456; GFNISSE-NEXT:    pmullw %xmm8, %xmm62457; GFNISSE-NEXT:    psrlw $8, %xmm62458; GFNISSE-NEXT:    packuswb %xmm0, %xmm62459; GFNISSE-NEXT:    movdqa %xmm7, %xmm02460; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm3[8],xmm0[9],xmm3[9],xmm0[10],xmm3[10],xmm0[11],xmm3[11],xmm0[12],xmm3[12],xmm0[13],xmm3[13],xmm0[14],xmm3[14],xmm0[15],xmm3[15]2461; GFNISSE-NEXT:    pmullw %xmm9, %xmm02462; GFNISSE-NEXT:    psrlw $8, %xmm02463; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm7 = xmm7[0],xmm3[0],xmm7[1],xmm3[1],xmm7[2],xmm3[2],xmm7[3],xmm3[3],xmm7[4],xmm3[4],xmm7[5],xmm3[5],xmm7[6],xmm3[6],xmm7[7],xmm3[7]2464; GFNISSE-NEXT:    pmullw %xmm7, %xmm82465; GFNISSE-NEXT:    psrlw $8, %xmm82466; GFNISSE-NEXT:    packuswb %xmm0, %xmm82467; GFNISSE-NEXT:    movdqa %xmm4, %xmm02468; GFNISSE-NEXT:    movdqa %xmm5, %xmm12469; GFNISSE-NEXT:    movdqa %xmm6, %xmm22470; GFNISSE-NEXT:    movdqa %xmm8, %xmm32471; GFNISSE-NEXT:    retq2472;2473; GFNIAVX1-LABEL: constant_fshl_v64i8:2474; GFNIAVX1:       # %bb.0:2475; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm42476; GFNIAVX1-NEXT:    vextractf128 $1, %ymm2, %xmm52477; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm6 = xmm5[8],xmm4[8],xmm5[9],xmm4[9],xmm5[10],xmm4[10],xmm5[11],xmm4[11],xmm5[12],xmm4[12],xmm5[13],xmm4[13],xmm5[14],xmm4[14],xmm5[15],xmm4[15]2478; GFNIAVX1-NEXT:    vpmovzxbw {{.*#+}} xmm7 = [1,128,64,32,16,8,4,2]2479; GFNIAVX1-NEXT:    vpmullw %xmm7, %xmm6, %xmm62480; GFNIAVX1-NEXT:    vpsrlw $8, %xmm6, %xmm62481; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm4 = xmm5[0],xmm4[0],xmm5[1],xmm4[1],xmm5[2],xmm4[2],xmm5[3],xmm4[3],xmm5[4],xmm4[4],xmm5[5],xmm4[5],xmm5[6],xmm4[6],xmm5[7],xmm4[7]2482; GFNIAVX1-NEXT:    vpmovzxbw {{.*#+}} xmm5 = [1,2,4,8,16,32,64,128]2483; GFNIAVX1-NEXT:    vpmullw %xmm5, %xmm4, %xmm42484; GFNIAVX1-NEXT:    vpsrlw $8, %xmm4, %xmm42485; GFNIAVX1-NEXT:    vpackuswb %xmm6, %xmm4, %xmm42486; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm6 = xmm2[8],xmm0[8],xmm2[9],xmm0[9],xmm2[10],xmm0[10],xmm2[11],xmm0[11],xmm2[12],xmm0[12],xmm2[13],xmm0[13],xmm2[14],xmm0[14],xmm2[15],xmm0[15]2487; GFNIAVX1-NEXT:    vpmullw %xmm7, %xmm6, %xmm62488; GFNIAVX1-NEXT:    vpsrlw $8, %xmm6, %xmm62489; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]2490; GFNIAVX1-NEXT:    vpmullw %xmm5, %xmm0, %xmm02491; GFNIAVX1-NEXT:    vpsrlw $8, %xmm0, %xmm02492; GFNIAVX1-NEXT:    vpackuswb %xmm6, %xmm0, %xmm02493; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm02494; GFNIAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm22495; GFNIAVX1-NEXT:    vextractf128 $1, %ymm3, %xmm42496; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm6 = xmm4[8],xmm2[8],xmm4[9],xmm2[9],xmm4[10],xmm2[10],xmm4[11],xmm2[11],xmm4[12],xmm2[12],xmm4[13],xmm2[13],xmm4[14],xmm2[14],xmm4[15],xmm2[15]2497; GFNIAVX1-NEXT:    vpmullw %xmm7, %xmm6, %xmm62498; GFNIAVX1-NEXT:    vpsrlw $8, %xmm6, %xmm62499; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm2 = xmm4[0],xmm2[0],xmm4[1],xmm2[1],xmm4[2],xmm2[2],xmm4[3],xmm2[3],xmm4[4],xmm2[4],xmm4[5],xmm2[5],xmm4[6],xmm2[6],xmm4[7],xmm2[7]2500; GFNIAVX1-NEXT:    vpmullw %xmm5, %xmm2, %xmm22501; GFNIAVX1-NEXT:    vpsrlw $8, %xmm2, %xmm22502; GFNIAVX1-NEXT:    vpackuswb %xmm6, %xmm2, %xmm22503; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm4 = xmm3[8],xmm1[8],xmm3[9],xmm1[9],xmm3[10],xmm1[10],xmm3[11],xmm1[11],xmm3[12],xmm1[12],xmm3[13],xmm1[13],xmm3[14],xmm1[14],xmm3[15],xmm1[15]2504; GFNIAVX1-NEXT:    vpmullw %xmm7, %xmm4, %xmm42505; GFNIAVX1-NEXT:    vpsrlw $8, %xmm4, %xmm42506; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3],xmm3[4],xmm1[4],xmm3[5],xmm1[5],xmm3[6],xmm1[6],xmm3[7],xmm1[7]2507; GFNIAVX1-NEXT:    vpmullw %xmm5, %xmm1, %xmm12508; GFNIAVX1-NEXT:    vpsrlw $8, %xmm1, %xmm12509; GFNIAVX1-NEXT:    vpackuswb %xmm4, %xmm1, %xmm12510; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm12511; GFNIAVX1-NEXT:    retq2512;2513; GFNIAVX2-LABEL: constant_fshl_v64i8:2514; GFNIAVX2:       # %bb.0:2515; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} ymm4 = ymm2[8],ymm0[8],ymm2[9],ymm0[9],ymm2[10],ymm0[10],ymm2[11],ymm0[11],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15],ymm2[24],ymm0[24],ymm2[25],ymm0[25],ymm2[26],ymm0[26],ymm2[27],ymm0[27],ymm2[28],ymm0[28],ymm2[29],ymm0[29],ymm2[30],ymm0[30],ymm2[31],ymm0[31]2516; GFNIAVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm5 = [1,128,64,32,16,8,4,2,1,128,64,32,16,8,4,2]2517; GFNIAVX2-NEXT:    # ymm5 = mem[0,1,0,1]2518; GFNIAVX2-NEXT:    vpmullw %ymm5, %ymm4, %ymm42519; GFNIAVX2-NEXT:    vpsrlw $8, %ymm4, %ymm42520; GFNIAVX2-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm2[0],ymm0[0],ymm2[1],ymm0[1],ymm2[2],ymm0[2],ymm2[3],ymm0[3],ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[16],ymm0[16],ymm2[17],ymm0[17],ymm2[18],ymm0[18],ymm2[19],ymm0[19],ymm2[20],ymm0[20],ymm2[21],ymm0[21],ymm2[22],ymm0[22],ymm2[23],ymm0[23]2521; GFNIAVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm2 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]2522; GFNIAVX2-NEXT:    # ymm2 = mem[0,1,0,1]2523; GFNIAVX2-NEXT:    vpmullw %ymm2, %ymm0, %ymm02524; GFNIAVX2-NEXT:    vpsrlw $8, %ymm0, %ymm02525; GFNIAVX2-NEXT:    vpackuswb %ymm4, %ymm0, %ymm02526; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} ymm4 = ymm3[8],ymm1[8],ymm3[9],ymm1[9],ymm3[10],ymm1[10],ymm3[11],ymm1[11],ymm3[12],ymm1[12],ymm3[13],ymm1[13],ymm3[14],ymm1[14],ymm3[15],ymm1[15],ymm3[24],ymm1[24],ymm3[25],ymm1[25],ymm3[26],ymm1[26],ymm3[27],ymm1[27],ymm3[28],ymm1[28],ymm3[29],ymm1[29],ymm3[30],ymm1[30],ymm3[31],ymm1[31]2527; GFNIAVX2-NEXT:    vpmullw %ymm5, %ymm4, %ymm42528; GFNIAVX2-NEXT:    vpsrlw $8, %ymm4, %ymm42529; GFNIAVX2-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm3[0],ymm1[0],ymm3[1],ymm1[1],ymm3[2],ymm1[2],ymm3[3],ymm1[3],ymm3[4],ymm1[4],ymm3[5],ymm1[5],ymm3[6],ymm1[6],ymm3[7],ymm1[7],ymm3[16],ymm1[16],ymm3[17],ymm1[17],ymm3[18],ymm1[18],ymm3[19],ymm1[19],ymm3[20],ymm1[20],ymm3[21],ymm1[21],ymm3[22],ymm1[22],ymm3[23],ymm1[23]2530; GFNIAVX2-NEXT:    vpmullw %ymm2, %ymm1, %ymm12531; GFNIAVX2-NEXT:    vpsrlw $8, %ymm1, %ymm12532; GFNIAVX2-NEXT:    vpackuswb %ymm4, %ymm1, %ymm12533; GFNIAVX2-NEXT:    retq2534;2535; GFNIAVX512VL-LABEL: constant_fshl_v64i8:2536; GFNIAVX512VL:       # %bb.0:2537; GFNIAVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm22538; GFNIAVX512VL-NEXT:    vextracti64x4 $1, %zmm1, %ymm32539; GFNIAVX512VL-NEXT:    vpunpckhbw {{.*#+}} ymm4 = ymm3[8],ymm2[8],ymm3[9],ymm2[9],ymm3[10],ymm2[10],ymm3[11],ymm2[11],ymm3[12],ymm2[12],ymm3[13],ymm2[13],ymm3[14],ymm2[14],ymm3[15],ymm2[15],ymm3[24],ymm2[24],ymm3[25],ymm2[25],ymm3[26],ymm2[26],ymm3[27],ymm2[27],ymm3[28],ymm2[28],ymm3[29],ymm2[29],ymm3[30],ymm2[30],ymm3[31],ymm2[31]2540; GFNIAVX512VL-NEXT:    vbroadcasti128 {{.*#+}} ymm5 = [1,128,64,32,16,8,4,2,1,128,64,32,16,8,4,2]2541; GFNIAVX512VL-NEXT:    # ymm5 = mem[0,1,0,1]2542; GFNIAVX512VL-NEXT:    vpmullw %ymm5, %ymm4, %ymm42543; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm4, %ymm42544; GFNIAVX512VL-NEXT:    vpunpcklbw {{.*#+}} ymm2 = ymm3[0],ymm2[0],ymm3[1],ymm2[1],ymm3[2],ymm2[2],ymm3[3],ymm2[3],ymm3[4],ymm2[4],ymm3[5],ymm2[5],ymm3[6],ymm2[6],ymm3[7],ymm2[7],ymm3[16],ymm2[16],ymm3[17],ymm2[17],ymm3[18],ymm2[18],ymm3[19],ymm2[19],ymm3[20],ymm2[20],ymm3[21],ymm2[21],ymm3[22],ymm2[22],ymm3[23],ymm2[23]2545; GFNIAVX512VL-NEXT:    vbroadcasti128 {{.*#+}} ymm3 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]2546; GFNIAVX512VL-NEXT:    # ymm3 = mem[0,1,0,1]2547; GFNIAVX512VL-NEXT:    vpmullw %ymm3, %ymm2, %ymm22548; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm2, %ymm22549; GFNIAVX512VL-NEXT:    vpackuswb %ymm4, %ymm2, %ymm22550; GFNIAVX512VL-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]2551; GFNIAVX512VL-NEXT:    vpmullw %ymm5, %ymm4, %ymm42552; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm4, %ymm42553; GFNIAVX512VL-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]2554; GFNIAVX512VL-NEXT:    vpmullw %ymm3, %ymm0, %ymm02555; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm0, %ymm02556; GFNIAVX512VL-NEXT:    vpackuswb %ymm4, %ymm0, %ymm02557; GFNIAVX512VL-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm02558; GFNIAVX512VL-NEXT:    retq2559;2560; GFNIAVX512BW-LABEL: constant_fshl_v64i8:2561; GFNIAVX512BW:       # %bb.0:2562; GFNIAVX512BW-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]2563; GFNIAVX512BW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm2, %zmm22564; GFNIAVX512BW-NEXT:    vpsrlw $8, %zmm2, %zmm22565; GFNIAVX512BW-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]2566; GFNIAVX512BW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm02567; GFNIAVX512BW-NEXT:    vpsrlw $8, %zmm0, %zmm02568; GFNIAVX512BW-NEXT:    vpackuswb %zmm2, %zmm0, %zmm02569; GFNIAVX512BW-NEXT:    retq2570  %res = call <64 x i8> @llvm.fshl.v64i8(<64 x i8> %a, <64 x i8> %b, <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>)2571  ret <64 x i8> %res2572}2573 2574define <64 x i8> @constant_fshr_v64i8(<64 x i8> %a, <64 x i8> %b) nounwind {2575; GFNISSE-LABEL: constant_fshr_v64i8:2576; GFNISSE:       # %bb.0:2577; GFNISSE-NEXT:    movdqa %xmm4, %xmm102578; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm10 = xmm10[8],xmm0[8],xmm10[9],xmm0[9],xmm10[10],xmm0[10],xmm10[11],xmm0[11],xmm10[12],xmm0[12],xmm10[13],xmm0[13],xmm10[14],xmm0[14],xmm10[15],xmm0[15]2579; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm9 = [1,128,64,32,16,8,4,2]2580; GFNISSE-NEXT:    pmullw %xmm9, %xmm102581; GFNISSE-NEXT:    psrlw $8, %xmm102582; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm0[0],xmm4[1],xmm0[1],xmm4[2],xmm0[2],xmm4[3],xmm0[3],xmm4[4],xmm0[4],xmm4[5],xmm0[5],xmm4[6],xmm0[6],xmm4[7],xmm0[7]2583; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm8 = [1,2,4,8,16,32,64,128]2584; GFNISSE-NEXT:    pmullw %xmm8, %xmm42585; GFNISSE-NEXT:    psrlw $8, %xmm42586; GFNISSE-NEXT:    packuswb %xmm10, %xmm42587; GFNISSE-NEXT:    movdqa %xmm5, %xmm02588; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]2589; GFNISSE-NEXT:    pmullw %xmm9, %xmm02590; GFNISSE-NEXT:    psrlw $8, %xmm02591; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm5 = xmm5[0],xmm1[0],xmm5[1],xmm1[1],xmm5[2],xmm1[2],xmm5[3],xmm1[3],xmm5[4],xmm1[4],xmm5[5],xmm1[5],xmm5[6],xmm1[6],xmm5[7],xmm1[7]2592; GFNISSE-NEXT:    pmullw %xmm8, %xmm52593; GFNISSE-NEXT:    psrlw $8, %xmm52594; GFNISSE-NEXT:    packuswb %xmm0, %xmm52595; GFNISSE-NEXT:    movdqa %xmm6, %xmm02596; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]2597; GFNISSE-NEXT:    pmullw %xmm9, %xmm02598; GFNISSE-NEXT:    psrlw $8, %xmm02599; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm2[0],xmm6[1],xmm2[1],xmm6[2],xmm2[2],xmm6[3],xmm2[3],xmm6[4],xmm2[4],xmm6[5],xmm2[5],xmm6[6],xmm2[6],xmm6[7],xmm2[7]2600; GFNISSE-NEXT:    pmullw %xmm8, %xmm62601; GFNISSE-NEXT:    psrlw $8, %xmm62602; GFNISSE-NEXT:    packuswb %xmm0, %xmm62603; GFNISSE-NEXT:    movdqa %xmm7, %xmm02604; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm3[8],xmm0[9],xmm3[9],xmm0[10],xmm3[10],xmm0[11],xmm3[11],xmm0[12],xmm3[12],xmm0[13],xmm3[13],xmm0[14],xmm3[14],xmm0[15],xmm3[15]2605; GFNISSE-NEXT:    pmullw %xmm9, %xmm02606; GFNISSE-NEXT:    psrlw $8, %xmm02607; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm7 = xmm7[0],xmm3[0],xmm7[1],xmm3[1],xmm7[2],xmm3[2],xmm7[3],xmm3[3],xmm7[4],xmm3[4],xmm7[5],xmm3[5],xmm7[6],xmm3[6],xmm7[7],xmm3[7]2608; GFNISSE-NEXT:    pmullw %xmm7, %xmm82609; GFNISSE-NEXT:    psrlw $8, %xmm82610; GFNISSE-NEXT:    packuswb %xmm0, %xmm82611; GFNISSE-NEXT:    movdqa %xmm4, %xmm02612; GFNISSE-NEXT:    movdqa %xmm5, %xmm12613; GFNISSE-NEXT:    movdqa %xmm6, %xmm22614; GFNISSE-NEXT:    movdqa %xmm8, %xmm32615; GFNISSE-NEXT:    retq2616;2617; GFNIAVX1-LABEL: constant_fshr_v64i8:2618; GFNIAVX1:       # %bb.0:2619; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm42620; GFNIAVX1-NEXT:    vextractf128 $1, %ymm2, %xmm52621; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm6 = xmm5[8],xmm4[8],xmm5[9],xmm4[9],xmm5[10],xmm4[10],xmm5[11],xmm4[11],xmm5[12],xmm4[12],xmm5[13],xmm4[13],xmm5[14],xmm4[14],xmm5[15],xmm4[15]2622; GFNIAVX1-NEXT:    vpmovzxbw {{.*#+}} xmm7 = [1,128,64,32,16,8,4,2]2623; GFNIAVX1-NEXT:    vpmullw %xmm7, %xmm6, %xmm62624; GFNIAVX1-NEXT:    vpsrlw $8, %xmm6, %xmm62625; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm4 = xmm5[0],xmm4[0],xmm5[1],xmm4[1],xmm5[2],xmm4[2],xmm5[3],xmm4[3],xmm5[4],xmm4[4],xmm5[5],xmm4[5],xmm5[6],xmm4[6],xmm5[7],xmm4[7]2626; GFNIAVX1-NEXT:    vpmovzxbw {{.*#+}} xmm5 = [1,2,4,8,16,32,64,128]2627; GFNIAVX1-NEXT:    vpmullw %xmm5, %xmm4, %xmm42628; GFNIAVX1-NEXT:    vpsrlw $8, %xmm4, %xmm42629; GFNIAVX1-NEXT:    vpackuswb %xmm6, %xmm4, %xmm42630; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm6 = xmm2[8],xmm0[8],xmm2[9],xmm0[9],xmm2[10],xmm0[10],xmm2[11],xmm0[11],xmm2[12],xmm0[12],xmm2[13],xmm0[13],xmm2[14],xmm0[14],xmm2[15],xmm0[15]2631; GFNIAVX1-NEXT:    vpmullw %xmm7, %xmm6, %xmm62632; GFNIAVX1-NEXT:    vpsrlw $8, %xmm6, %xmm62633; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]2634; GFNIAVX1-NEXT:    vpmullw %xmm5, %xmm0, %xmm02635; GFNIAVX1-NEXT:    vpsrlw $8, %xmm0, %xmm02636; GFNIAVX1-NEXT:    vpackuswb %xmm6, %xmm0, %xmm02637; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm02638; GFNIAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm22639; GFNIAVX1-NEXT:    vextractf128 $1, %ymm3, %xmm42640; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm6 = xmm4[8],xmm2[8],xmm4[9],xmm2[9],xmm4[10],xmm2[10],xmm4[11],xmm2[11],xmm4[12],xmm2[12],xmm4[13],xmm2[13],xmm4[14],xmm2[14],xmm4[15],xmm2[15]2641; GFNIAVX1-NEXT:    vpmullw %xmm7, %xmm6, %xmm62642; GFNIAVX1-NEXT:    vpsrlw $8, %xmm6, %xmm62643; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm2 = xmm4[0],xmm2[0],xmm4[1],xmm2[1],xmm4[2],xmm2[2],xmm4[3],xmm2[3],xmm4[4],xmm2[4],xmm4[5],xmm2[5],xmm4[6],xmm2[6],xmm4[7],xmm2[7]2644; GFNIAVX1-NEXT:    vpmullw %xmm5, %xmm2, %xmm22645; GFNIAVX1-NEXT:    vpsrlw $8, %xmm2, %xmm22646; GFNIAVX1-NEXT:    vpackuswb %xmm6, %xmm2, %xmm22647; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm4 = xmm3[8],xmm1[8],xmm3[9],xmm1[9],xmm3[10],xmm1[10],xmm3[11],xmm1[11],xmm3[12],xmm1[12],xmm3[13],xmm1[13],xmm3[14],xmm1[14],xmm3[15],xmm1[15]2648; GFNIAVX1-NEXT:    vpmullw %xmm7, %xmm4, %xmm42649; GFNIAVX1-NEXT:    vpsrlw $8, %xmm4, %xmm42650; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3],xmm3[4],xmm1[4],xmm3[5],xmm1[5],xmm3[6],xmm1[6],xmm3[7],xmm1[7]2651; GFNIAVX1-NEXT:    vpmullw %xmm5, %xmm1, %xmm12652; GFNIAVX1-NEXT:    vpsrlw $8, %xmm1, %xmm12653; GFNIAVX1-NEXT:    vpackuswb %xmm4, %xmm1, %xmm12654; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm12655; GFNIAVX1-NEXT:    retq2656;2657; GFNIAVX2-LABEL: constant_fshr_v64i8:2658; GFNIAVX2:       # %bb.0:2659; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} ymm4 = ymm2[8],ymm0[8],ymm2[9],ymm0[9],ymm2[10],ymm0[10],ymm2[11],ymm0[11],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15],ymm2[24],ymm0[24],ymm2[25],ymm0[25],ymm2[26],ymm0[26],ymm2[27],ymm0[27],ymm2[28],ymm0[28],ymm2[29],ymm0[29],ymm2[30],ymm0[30],ymm2[31],ymm0[31]2660; GFNIAVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm5 = [1,128,64,32,16,8,4,2,1,128,64,32,16,8,4,2]2661; GFNIAVX2-NEXT:    # ymm5 = mem[0,1,0,1]2662; GFNIAVX2-NEXT:    vpmullw %ymm5, %ymm4, %ymm42663; GFNIAVX2-NEXT:    vpsrlw $8, %ymm4, %ymm42664; GFNIAVX2-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm2[0],ymm0[0],ymm2[1],ymm0[1],ymm2[2],ymm0[2],ymm2[3],ymm0[3],ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[16],ymm0[16],ymm2[17],ymm0[17],ymm2[18],ymm0[18],ymm2[19],ymm0[19],ymm2[20],ymm0[20],ymm2[21],ymm0[21],ymm2[22],ymm0[22],ymm2[23],ymm0[23]2665; GFNIAVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm2 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]2666; GFNIAVX2-NEXT:    # ymm2 = mem[0,1,0,1]2667; GFNIAVX2-NEXT:    vpmullw %ymm2, %ymm0, %ymm02668; GFNIAVX2-NEXT:    vpsrlw $8, %ymm0, %ymm02669; GFNIAVX2-NEXT:    vpackuswb %ymm4, %ymm0, %ymm02670; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} ymm4 = ymm3[8],ymm1[8],ymm3[9],ymm1[9],ymm3[10],ymm1[10],ymm3[11],ymm1[11],ymm3[12],ymm1[12],ymm3[13],ymm1[13],ymm3[14],ymm1[14],ymm3[15],ymm1[15],ymm3[24],ymm1[24],ymm3[25],ymm1[25],ymm3[26],ymm1[26],ymm3[27],ymm1[27],ymm3[28],ymm1[28],ymm3[29],ymm1[29],ymm3[30],ymm1[30],ymm3[31],ymm1[31]2671; GFNIAVX2-NEXT:    vpmullw %ymm5, %ymm4, %ymm42672; GFNIAVX2-NEXT:    vpsrlw $8, %ymm4, %ymm42673; GFNIAVX2-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm3[0],ymm1[0],ymm3[1],ymm1[1],ymm3[2],ymm1[2],ymm3[3],ymm1[3],ymm3[4],ymm1[4],ymm3[5],ymm1[5],ymm3[6],ymm1[6],ymm3[7],ymm1[7],ymm3[16],ymm1[16],ymm3[17],ymm1[17],ymm3[18],ymm1[18],ymm3[19],ymm1[19],ymm3[20],ymm1[20],ymm3[21],ymm1[21],ymm3[22],ymm1[22],ymm3[23],ymm1[23]2674; GFNIAVX2-NEXT:    vpmullw %ymm2, %ymm1, %ymm12675; GFNIAVX2-NEXT:    vpsrlw $8, %ymm1, %ymm12676; GFNIAVX2-NEXT:    vpackuswb %ymm4, %ymm1, %ymm12677; GFNIAVX2-NEXT:    retq2678;2679; GFNIAVX512VL-LABEL: constant_fshr_v64i8:2680; GFNIAVX512VL:       # %bb.0:2681; GFNIAVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm22682; GFNIAVX512VL-NEXT:    vextracti64x4 $1, %zmm1, %ymm32683; GFNIAVX512VL-NEXT:    vpunpckhbw {{.*#+}} ymm4 = ymm3[8],ymm2[8],ymm3[9],ymm2[9],ymm3[10],ymm2[10],ymm3[11],ymm2[11],ymm3[12],ymm2[12],ymm3[13],ymm2[13],ymm3[14],ymm2[14],ymm3[15],ymm2[15],ymm3[24],ymm2[24],ymm3[25],ymm2[25],ymm3[26],ymm2[26],ymm3[27],ymm2[27],ymm3[28],ymm2[28],ymm3[29],ymm2[29],ymm3[30],ymm2[30],ymm3[31],ymm2[31]2684; GFNIAVX512VL-NEXT:    vbroadcasti128 {{.*#+}} ymm5 = [1,128,64,32,16,8,4,2,1,128,64,32,16,8,4,2]2685; GFNIAVX512VL-NEXT:    # ymm5 = mem[0,1,0,1]2686; GFNIAVX512VL-NEXT:    vpmullw %ymm5, %ymm4, %ymm42687; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm4, %ymm42688; GFNIAVX512VL-NEXT:    vpunpcklbw {{.*#+}} ymm2 = ymm3[0],ymm2[0],ymm3[1],ymm2[1],ymm3[2],ymm2[2],ymm3[3],ymm2[3],ymm3[4],ymm2[4],ymm3[5],ymm2[5],ymm3[6],ymm2[6],ymm3[7],ymm2[7],ymm3[16],ymm2[16],ymm3[17],ymm2[17],ymm3[18],ymm2[18],ymm3[19],ymm2[19],ymm3[20],ymm2[20],ymm3[21],ymm2[21],ymm3[22],ymm2[22],ymm3[23],ymm2[23]2689; GFNIAVX512VL-NEXT:    vbroadcasti128 {{.*#+}} ymm3 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]2690; GFNIAVX512VL-NEXT:    # ymm3 = mem[0,1,0,1]2691; GFNIAVX512VL-NEXT:    vpmullw %ymm3, %ymm2, %ymm22692; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm2, %ymm22693; GFNIAVX512VL-NEXT:    vpackuswb %ymm4, %ymm2, %ymm22694; GFNIAVX512VL-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]2695; GFNIAVX512VL-NEXT:    vpmullw %ymm5, %ymm4, %ymm42696; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm4, %ymm42697; GFNIAVX512VL-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]2698; GFNIAVX512VL-NEXT:    vpmullw %ymm3, %ymm0, %ymm02699; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm0, %ymm02700; GFNIAVX512VL-NEXT:    vpackuswb %ymm4, %ymm0, %ymm02701; GFNIAVX512VL-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm02702; GFNIAVX512VL-NEXT:    retq2703;2704; GFNIAVX512BW-LABEL: constant_fshr_v64i8:2705; GFNIAVX512BW:       # %bb.0:2706; GFNIAVX512BW-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]2707; GFNIAVX512BW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm2, %zmm22708; GFNIAVX512BW-NEXT:    vpsrlw $8, %zmm2, %zmm22709; GFNIAVX512BW-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]2710; GFNIAVX512BW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm02711; GFNIAVX512BW-NEXT:    vpsrlw $8, %zmm0, %zmm02712; GFNIAVX512BW-NEXT:    vpackuswb %zmm2, %zmm0, %zmm02713; GFNIAVX512BW-NEXT:    retq2714  %res = call <64 x i8> @llvm.fshl.v64i8(<64 x i8> %a, <64 x i8> %b, <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>)2715  ret <64 x i8> %res2716}2717 2718define <64 x i8> @splatconstant_fshl_v64i8(<64 x i8> %a, <64 x i8> %b) nounwind {2719; GFNISSE-LABEL: splatconstant_fshl_v64i8:2720; GFNISSE:       # %bb.0:2721; GFNISSE-NEXT:    movdqa {{.*#+}} xmm8 = [0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,128]2722; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm8, %xmm42723; GFNISSE-NEXT:    paddb %xmm0, %xmm02724; GFNISSE-NEXT:    por %xmm4, %xmm02725; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm8, %xmm52726; GFNISSE-NEXT:    paddb %xmm1, %xmm12727; GFNISSE-NEXT:    por %xmm5, %xmm12728; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm8, %xmm62729; GFNISSE-NEXT:    paddb %xmm2, %xmm22730; GFNISSE-NEXT:    por %xmm6, %xmm22731; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm8, %xmm72732; GFNISSE-NEXT:    paddb %xmm3, %xmm32733; GFNISSE-NEXT:    por %xmm7, %xmm32734; GFNISSE-NEXT:    retq2735;2736; GFNIAVX1-LABEL: splatconstant_fshl_v64i8:2737; GFNIAVX1:       # %bb.0:2738; GFNIAVX1-NEXT:    vbroadcastsd {{.*#+}} ymm4 = [0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,128]2739; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %ymm4, %ymm2, %ymm22740; GFNIAVX1-NEXT:    vpaddb %xmm0, %xmm0, %xmm52741; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02742; GFNIAVX1-NEXT:    vpaddb %xmm0, %xmm0, %xmm02743; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm5, %ymm02744; GFNIAVX1-NEXT:    vorps %ymm2, %ymm0, %ymm02745; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %ymm4, %ymm3, %ymm22746; GFNIAVX1-NEXT:    vpaddb %xmm1, %xmm1, %xmm32747; GFNIAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm12748; GFNIAVX1-NEXT:    vpaddb %xmm1, %xmm1, %xmm12749; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm3, %ymm12750; GFNIAVX1-NEXT:    vorps %ymm2, %ymm1, %ymm12751; GFNIAVX1-NEXT:    retq2752;2753; GFNIAVX2-LABEL: splatconstant_fshl_v64i8:2754; GFNIAVX2:       # %bb.0:2755; GFNIAVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,128]2756; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm4, %ymm2, %ymm22757; GFNIAVX2-NEXT:    vpaddb %ymm0, %ymm0, %ymm02758; GFNIAVX2-NEXT:    vpor %ymm2, %ymm0, %ymm02759; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm4, %ymm3, %ymm22760; GFNIAVX2-NEXT:    vpaddb %ymm1, %ymm1, %ymm12761; GFNIAVX2-NEXT:    vpor %ymm2, %ymm1, %ymm12762; GFNIAVX2-NEXT:    retq2763;2764; GFNIAVX512VL-LABEL: splatconstant_fshl_v64i8:2765; GFNIAVX512VL:       # %bb.0:2766; GFNIAVX512VL-NEXT:    vpaddb %ymm0, %ymm0, %ymm22767; GFNIAVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm02768; GFNIAVX512VL-NEXT:    vpaddb %ymm0, %ymm0, %ymm02769; GFNIAVX512VL-NEXT:    vinserti64x4 $1, %ymm0, %zmm2, %zmm02770; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm1, %zmm12771; GFNIAVX512VL-NEXT:    vporq %zmm1, %zmm0, %zmm02772; GFNIAVX512VL-NEXT:    retq2773;2774; GFNIAVX512BW-LABEL: splatconstant_fshl_v64i8:2775; GFNIAVX512BW:       # %bb.0:2776; GFNIAVX512BW-NEXT:    vpaddw %zmm0, %zmm0, %zmm22777; GFNIAVX512BW-NEXT:    vpsrlw $7, %zmm1, %zmm02778; GFNIAVX512BW-NEXT:    vpternlogd {{.*#+}} zmm0 = zmm0 ^ (m32bcst & (zmm0 ^ zmm2))2779; GFNIAVX512BW-NEXT:    retq2780  %res = call <64 x i8> @llvm.fshl.v64i8(<64 x i8> %a, <64 x i8> %b, <64 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>)2781  ret <64 x i8> %res2782}2783declare <64 x i8> @llvm.fshl.v64i8(<64 x i8>, <64 x i8>, <64 x i8>)2784 2785define <64 x i8> @splatconstant_fshr_v64i8(<64 x i8> %a, <64 x i8> %b) nounwind {2786; GFNISSE-LABEL: splatconstant_fshr_v64i8:2787; GFNISSE:       # %bb.0:2788; GFNISSE-NEXT:    movdqa {{.*#+}} xmm8 = [0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4]2789; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm8, %xmm42790; GFNISSE-NEXT:    pmovsxwq {{.*#+}} xmm9 = [258,258]2791; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm9, %xmm02792; GFNISSE-NEXT:    por %xmm4, %xmm02793; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm8, %xmm52794; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm9, %xmm12795; GFNISSE-NEXT:    por %xmm5, %xmm12796; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm8, %xmm62797; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm9, %xmm22798; GFNISSE-NEXT:    por %xmm6, %xmm22799; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm8, %xmm72800; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm9, %xmm32801; GFNISSE-NEXT:    por %xmm7, %xmm32802; GFNISSE-NEXT:    retq2803;2804; GFNIAVX1-LABEL: splatconstant_fshr_v64i8:2805; GFNIAVX1:       # %bb.0:2806; GFNIAVX1-NEXT:    vbroadcastsd {{.*#+}} ymm4 = [0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4]2807; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %ymm4, %ymm2, %ymm22808; GFNIAVX1-NEXT:    vbroadcastsd {{.*#+}} ymm5 = [2,1,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,1,0,0,0,0,0,0]2809; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %ymm5, %ymm0, %ymm02810; GFNIAVX1-NEXT:    vorps %ymm2, %ymm0, %ymm02811; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %ymm4, %ymm3, %ymm22812; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %ymm5, %ymm1, %ymm12813; GFNIAVX1-NEXT:    vorps %ymm2, %ymm1, %ymm12814; GFNIAVX1-NEXT:    retq2815;2816; GFNIAVX2-LABEL: splatconstant_fshr_v64i8:2817; GFNIAVX2:       # %bb.0:2818; GFNIAVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4]2819; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm4, %ymm2, %ymm22820; GFNIAVX2-NEXT:    vpbroadcastq {{.*#+}} ymm5 = [2,1,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,1,0,0,0,0,0,0]2821; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm5, %ymm0, %ymm02822; GFNIAVX2-NEXT:    vpor %ymm2, %ymm0, %ymm02823; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm4, %ymm3, %ymm22824; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm5, %ymm1, %ymm12825; GFNIAVX2-NEXT:    vpor %ymm2, %ymm1, %ymm12826; GFNIAVX2-NEXT:    retq2827;2828; GFNIAVX512VL-LABEL: splatconstant_fshr_v64i8:2829; GFNIAVX512VL:       # %bb.0:2830; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm1, %zmm12831; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm02832; GFNIAVX512VL-NEXT:    vporq %zmm1, %zmm0, %zmm02833; GFNIAVX512VL-NEXT:    retq2834;2835; GFNIAVX512BW-LABEL: splatconstant_fshr_v64i8:2836; GFNIAVX512BW:       # %bb.0:2837; GFNIAVX512BW-NEXT:    vpsllw $6, %zmm0, %zmm22838; GFNIAVX512BW-NEXT:    vpsrlw $2, %zmm1, %zmm02839; GFNIAVX512BW-NEXT:    vpternlogd {{.*#+}} zmm0 = zmm0 ^ (m32bcst & (zmm0 ^ zmm2))2840; GFNIAVX512BW-NEXT:    retq2841  %res = call <64 x i8> @llvm.fshr.v64i8(<64 x i8> %a, <64 x i8> %b, <64 x i8> <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>)2842  ret <64 x i8> %res2843}2844declare <64 x i8> @llvm.fshr.v64i8(<64 x i8>, <64 x i8>, <64 x i8>)2845