brintos

brintos / llvm-project-archived public Read only

0
0
Text · 129.5 KiB · 967f26f Raw
2300 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 Rotates10;11 12define <16 x i8> @var_rotl_v16i8(<16 x i8> %a, <16 x i8> %amt) nounwind {13; GFNISSE-LABEL: var_rotl_v16i8:14; GFNISSE:       # %bb.0:15; GFNISSE-NEXT:    movdqa %xmm1, %xmm216; GFNISSE-NEXT:    movdqa %xmm0, %xmm117; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm018; GFNISSE-NEXT:    movdqa %xmm1, %xmm319; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm320; GFNISSE-NEXT:    por %xmm0, %xmm321; GFNISSE-NEXT:    psllw $5, %xmm222; GFNISSE-NEXT:    movdqa %xmm2, %xmm023; GFNISSE-NEXT:    pblendvb %xmm0, %xmm3, %xmm124; GFNISSE-NEXT:    movdqa %xmm1, %xmm025; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm026; GFNISSE-NEXT:    movdqa %xmm1, %xmm327; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm328; GFNISSE-NEXT:    por %xmm0, %xmm329; GFNISSE-NEXT:    paddb %xmm2, %xmm230; GFNISSE-NEXT:    movdqa %xmm2, %xmm031; GFNISSE-NEXT:    pblendvb %xmm0, %xmm3, %xmm132; GFNISSE-NEXT:    movdqa %xmm1, %xmm033; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm034; GFNISSE-NEXT:    movdqa %xmm1, %xmm335; GFNISSE-NEXT:    paddb %xmm1, %xmm336; GFNISSE-NEXT:    por %xmm0, %xmm337; GFNISSE-NEXT:    paddb %xmm2, %xmm238; GFNISSE-NEXT:    movdqa %xmm2, %xmm039; GFNISSE-NEXT:    pblendvb %xmm0, %xmm3, %xmm140; GFNISSE-NEXT:    movdqa %xmm1, %xmm041; GFNISSE-NEXT:    retq42;43; GFNIAVX1OR2-LABEL: var_rotl_v16i8:44; GFNIAVX1OR2:       # %bb.0:45; GFNIAVX1OR2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm246; GFNIAVX1OR2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm347; GFNIAVX1OR2-NEXT:    vpor %xmm2, %xmm3, %xmm248; GFNIAVX1OR2-NEXT:    vpsllw $5, %xmm1, %xmm149; GFNIAVX1OR2-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm050; GFNIAVX1OR2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm251; GFNIAVX1OR2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm352; GFNIAVX1OR2-NEXT:    vpor %xmm2, %xmm3, %xmm253; GFNIAVX1OR2-NEXT:    vpaddb %xmm1, %xmm1, %xmm154; GFNIAVX1OR2-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm055; GFNIAVX1OR2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm256; GFNIAVX1OR2-NEXT:    vpaddb %xmm0, %xmm0, %xmm357; GFNIAVX1OR2-NEXT:    vpor %xmm2, %xmm3, %xmm258; GFNIAVX1OR2-NEXT:    vpaddb %xmm1, %xmm1, %xmm159; GFNIAVX1OR2-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm060; GFNIAVX1OR2-NEXT:    retq61;62; GFNIAVX512VL-LABEL: var_rotl_v16i8:63; GFNIAVX512VL:       # %bb.0:64; 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,zero65; GFNIAVX512VL-NEXT:    vpslld $8, %zmm0, %zmm266; GFNIAVX512VL-NEXT:    vpord %zmm2, %zmm0, %zmm067; GFNIAVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm1, %xmm168; 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,zero69; GFNIAVX512VL-NEXT:    vpsllvd %zmm1, %zmm0, %zmm070; GFNIAVX512VL-NEXT:    vpsrld $8, %zmm0, %zmm071; GFNIAVX512VL-NEXT:    vpmovdb %zmm0, %xmm072; GFNIAVX512VL-NEXT:    vzeroupper73; GFNIAVX512VL-NEXT:    retq74;75; GFNIAVX512BW-LABEL: var_rotl_v16i8:76; GFNIAVX512BW:       # %bb.0:77; GFNIAVX512BW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm1, %xmm178; GFNIAVX512BW-NEXT:    vpxor %xmm2, %xmm2, %xmm279; GFNIAVX512BW-NEXT:    vpunpckhbw {{.*#+}} xmm2 = xmm1[8],xmm2[8],xmm1[9],xmm2[9],xmm1[10],xmm2[10],xmm1[11],xmm2[11],xmm1[12],xmm2[12],xmm1[13],xmm2[13],xmm1[14],xmm2[14],xmm1[15],xmm2[15]80; GFNIAVX512BW-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]81; GFNIAVX512BW-NEXT:    vpsllvw %xmm2, %xmm3, %xmm282; GFNIAVX512BW-NEXT:    vpsrlw $8, %xmm2, %xmm283; GFNIAVX512BW-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]84; GFNIAVX512BW-NEXT:    vpmovzxbw {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero85; GFNIAVX512BW-NEXT:    vpsllvw %xmm1, %xmm0, %xmm086; GFNIAVX512BW-NEXT:    vpsrlw $8, %xmm0, %xmm087; GFNIAVX512BW-NEXT:    vpackuswb %xmm2, %xmm0, %xmm088; GFNIAVX512BW-NEXT:    retq89  %res = call <16 x i8> @llvm.fshl.v16i8(<16 x i8> %a, <16 x i8> %a, <16 x i8> %amt)90  ret <16 x i8> %res91}92define <16 x i8> @var_rotr_v16i8(<16 x i8> %a, <16 x i8> %amt) nounwind {93; GFNISSE-LABEL: var_rotr_v16i8:94; GFNISSE:       # %bb.0:95; GFNISSE-NEXT:    movdqa %xmm0, %xmm296; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm097; GFNISSE-NEXT:    movdqa %xmm2, %xmm398; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm399; GFNISSE-NEXT:    por %xmm0, %xmm3100; GFNISSE-NEXT:    pxor %xmm0, %xmm0101; GFNISSE-NEXT:    psubb %xmm1, %xmm0102; GFNISSE-NEXT:    psllw $5, %xmm0103; GFNISSE-NEXT:    pblendvb %xmm0, %xmm3, %xmm2104; GFNISSE-NEXT:    movdqa %xmm2, %xmm1105; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1106; GFNISSE-NEXT:    movdqa %xmm2, %xmm3107; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3108; GFNISSE-NEXT:    por %xmm1, %xmm3109; GFNISSE-NEXT:    paddb %xmm0, %xmm0110; GFNISSE-NEXT:    pblendvb %xmm0, %xmm3, %xmm2111; GFNISSE-NEXT:    movdqa %xmm2, %xmm1112; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1113; GFNISSE-NEXT:    movdqa %xmm2, %xmm3114; GFNISSE-NEXT:    paddb %xmm2, %xmm3115; GFNISSE-NEXT:    por %xmm1, %xmm3116; GFNISSE-NEXT:    paddb %xmm0, %xmm0117; GFNISSE-NEXT:    pblendvb %xmm0, %xmm3, %xmm2118; GFNISSE-NEXT:    movdqa %xmm2, %xmm0119; GFNISSE-NEXT:    retq120;121; GFNIAVX1OR2-LABEL: var_rotr_v16i8:122; GFNIAVX1OR2:       # %bb.0:123; GFNIAVX1OR2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm2124; GFNIAVX1OR2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm3125; GFNIAVX1OR2-NEXT:    vpor %xmm2, %xmm3, %xmm2126; GFNIAVX1OR2-NEXT:    vpxor %xmm3, %xmm3, %xmm3127; GFNIAVX1OR2-NEXT:    vpsubb %xmm1, %xmm3, %xmm1128; GFNIAVX1OR2-NEXT:    vpsllw $5, %xmm1, %xmm1129; GFNIAVX1OR2-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0130; GFNIAVX1OR2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm2131; GFNIAVX1OR2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm3132; GFNIAVX1OR2-NEXT:    vpor %xmm2, %xmm3, %xmm2133; GFNIAVX1OR2-NEXT:    vpaddb %xmm1, %xmm1, %xmm1134; GFNIAVX1OR2-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0135; GFNIAVX1OR2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm2136; GFNIAVX1OR2-NEXT:    vpaddb %xmm0, %xmm0, %xmm3137; GFNIAVX1OR2-NEXT:    vpor %xmm2, %xmm3, %xmm2138; GFNIAVX1OR2-NEXT:    vpaddb %xmm1, %xmm1, %xmm1139; GFNIAVX1OR2-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0140; GFNIAVX1OR2-NEXT:    retq141;142; GFNIAVX512VL-LABEL: var_rotr_v16i8:143; GFNIAVX512VL:       # %bb.0:144; 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,zero145; GFNIAVX512VL-NEXT:    vpslld $8, %zmm0, %zmm2146; GFNIAVX512VL-NEXT:    vpord %zmm2, %zmm0, %zmm0147; GFNIAVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm1, %xmm1148; 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,zero149; GFNIAVX512VL-NEXT:    vpsrlvd %zmm1, %zmm0, %zmm0150; GFNIAVX512VL-NEXT:    vpmovdb %zmm0, %xmm0151; GFNIAVX512VL-NEXT:    vzeroupper152; GFNIAVX512VL-NEXT:    retq153;154; GFNIAVX512BW-LABEL: var_rotr_v16i8:155; GFNIAVX512BW:       # %bb.0:156; GFNIAVX512BW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm1, %xmm1157; GFNIAVX512BW-NEXT:    vpxor %xmm2, %xmm2, %xmm2158; GFNIAVX512BW-NEXT:    vpunpckhbw {{.*#+}} xmm2 = xmm1[8],xmm2[8],xmm1[9],xmm2[9],xmm1[10],xmm2[10],xmm1[11],xmm2[11],xmm1[12],xmm2[12],xmm1[13],xmm2[13],xmm1[14],xmm2[14],xmm1[15],xmm2[15]159; GFNIAVX512BW-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]160; GFNIAVX512BW-NEXT:    vpsrlvw %xmm2, %xmm3, %xmm2161; GFNIAVX512BW-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]162; GFNIAVX512BW-NEXT:    vpmovzxbw {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero163; GFNIAVX512BW-NEXT:    vpsrlvw %xmm1, %xmm0, %xmm0164; GFNIAVX512BW-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0165; GFNIAVX512BW-NEXT:    vpmovwb %ymm0, %xmm0166; GFNIAVX512BW-NEXT:    vzeroupper167; GFNIAVX512BW-NEXT:    retq168  %res = call <16 x i8> @llvm.fshr.v16i8(<16 x i8> %a, <16 x i8> %a, <16 x i8> %amt)169  ret <16 x i8> %res170}171 172define <16 x i8> @splatvar_rotl_v16i8(<16 x i8> %a, <16 x i8> %amt) nounwind {173; GFNISSE-LABEL: splatvar_rotl_v16i8:174; GFNISSE:       # %bb.0:175; GFNISSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1176; GFNISSE-NEXT:    movdqa %xmm0, %xmm2177; 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]178; GFNISSE-NEXT:    psllw %xmm1, %xmm2179; GFNISSE-NEXT:    psrlw $8, %xmm2180; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]181; GFNISSE-NEXT:    psllw %xmm1, %xmm0182; GFNISSE-NEXT:    psrlw $8, %xmm0183; GFNISSE-NEXT:    packuswb %xmm2, %xmm0184; GFNISSE-NEXT:    retq185;186; GFNIAVX-LABEL: splatvar_rotl_v16i8:187; GFNIAVX:       # %bb.0:188; GFNIAVX-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1189; GFNIAVX-NEXT:    vpunpckhbw {{.*#+}} xmm2 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]190; GFNIAVX-NEXT:    vpsllw %xmm1, %xmm2, %xmm2191; GFNIAVX-NEXT:    vpsrlw $8, %xmm2, %xmm2192; GFNIAVX-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]193; GFNIAVX-NEXT:    vpsllw %xmm1, %xmm0, %xmm0194; GFNIAVX-NEXT:    vpsrlw $8, %xmm0, %xmm0195; GFNIAVX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0196; GFNIAVX-NEXT:    retq197  %splat = shufflevector <16 x i8> %amt, <16 x i8> undef, <16 x i32> zeroinitializer198  %res = call <16 x i8> @llvm.fshl.v16i8(<16 x i8> %a, <16 x i8> %a, <16 x i8> %splat)199  ret <16 x i8> %res200}201 202define <16 x i8> @splatvar_rotr_v16i8(<16 x i8> %a, <16 x i8> %amt) nounwind {203; GFNISSE-LABEL: splatvar_rotr_v16i8:204; GFNISSE:       # %bb.0:205; GFNISSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1206; GFNISSE-NEXT:    movdqa %xmm0, %xmm2207; 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]208; GFNISSE-NEXT:    psrlw %xmm1, %xmm2209; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm3 = [255,255,255,255,255,255,255,255]210; GFNISSE-NEXT:    pand %xmm3, %xmm2211; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]212; GFNISSE-NEXT:    psrlw %xmm1, %xmm0213; GFNISSE-NEXT:    pand %xmm3, %xmm0214; GFNISSE-NEXT:    packuswb %xmm2, %xmm0215; GFNISSE-NEXT:    retq216;217; GFNIAVX1-LABEL: splatvar_rotr_v16i8:218; GFNIAVX1:       # %bb.0:219; GFNIAVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1220; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm2 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]221; GFNIAVX1-NEXT:    vpsrlw %xmm1, %xmm2, %xmm2222; GFNIAVX1-NEXT:    vbroadcastss {{.*#+}} xmm3 = [255,255,255,255,255,255,255,255]223; GFNIAVX1-NEXT:    vpand %xmm3, %xmm2, %xmm2224; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]225; GFNIAVX1-NEXT:    vpsrlw %xmm1, %xmm0, %xmm0226; GFNIAVX1-NEXT:    vpand %xmm3, %xmm0, %xmm0227; GFNIAVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0228; GFNIAVX1-NEXT:    retq229;230; GFNIAVX2-LABEL: splatvar_rotr_v16i8:231; GFNIAVX2:       # %bb.0:232; GFNIAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1233; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} xmm2 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]234; GFNIAVX2-NEXT:    vpsrlw %xmm1, %xmm2, %xmm2235; GFNIAVX2-NEXT:    vpbroadcastw {{.*#+}} xmm3 = [255,255,255,255,255,255,255,255]236; GFNIAVX2-NEXT:    vpand %xmm3, %xmm2, %xmm2237; GFNIAVX2-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]238; GFNIAVX2-NEXT:    vpsrlw %xmm1, %xmm0, %xmm0239; GFNIAVX2-NEXT:    vpand %xmm3, %xmm0, %xmm0240; GFNIAVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0241; GFNIAVX2-NEXT:    retq242;243; GFNIAVX512VL-LABEL: splatvar_rotr_v16i8:244; GFNIAVX512VL:       # %bb.0:245; GFNIAVX512VL-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1246; GFNIAVX512VL-NEXT:    vpunpckhbw {{.*#+}} xmm2 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]247; GFNIAVX512VL-NEXT:    vpsrlw %xmm1, %xmm2, %xmm2248; GFNIAVX512VL-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [255,255,255,255,255,255,255,255]249; GFNIAVX512VL-NEXT:    vpand %xmm3, %xmm2, %xmm2250; GFNIAVX512VL-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]251; GFNIAVX512VL-NEXT:    vpsrlw %xmm1, %xmm0, %xmm0252; GFNIAVX512VL-NEXT:    vpand %xmm3, %xmm0, %xmm0253; GFNIAVX512VL-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0254; GFNIAVX512VL-NEXT:    retq255;256; GFNIAVX512BW-LABEL: splatvar_rotr_v16i8:257; GFNIAVX512BW:       # %bb.0:258; GFNIAVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0259; GFNIAVX512BW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]260; GFNIAVX512BW-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]261; GFNIAVX512BW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1262; GFNIAVX512BW-NEXT:    vpsrlw %xmm1, %ymm0, %ymm0263; GFNIAVX512BW-NEXT:    vpmovwb %ymm0, %xmm0264; GFNIAVX512BW-NEXT:    vzeroupper265; GFNIAVX512BW-NEXT:    retq266  %splat = shufflevector <16 x i8> %amt, <16 x i8> undef, <16 x i32> zeroinitializer267  %res = call <16 x i8> @llvm.fshr.v16i8(<16 x i8> %a, <16 x i8> %a, <16 x i8> %splat)268  ret <16 x i8> %res269}270 271define <16 x i8> @constant_rotl_v16i8(<16 x i8> %a) nounwind {272; GFNISSE-LABEL: constant_rotl_v16i8:273; GFNISSE:       # %bb.0:274; GFNISSE-NEXT:    movdqa %xmm0, %xmm1275; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm1 = 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]276; GFNISSE-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [1,128,64,32,16,8,4,2]277; GFNISSE-NEXT:    psrlw $8, %xmm1278; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]279; GFNISSE-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [1,2,4,8,16,32,64,128]280; GFNISSE-NEXT:    psrlw $8, %xmm0281; GFNISSE-NEXT:    packuswb %xmm1, %xmm0282; GFNISSE-NEXT:    retq283;284; GFNIAVX1OR2-LABEL: constant_rotl_v16i8:285; GFNIAVX1OR2:       # %bb.0:286; GFNIAVX1OR2-NEXT:    vpunpckhbw {{.*#+}} xmm1 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]287; GFNIAVX1OR2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1 # [1,128,64,32,16,8,4,2]288; GFNIAVX1OR2-NEXT:    vpsrlw $8, %xmm1, %xmm1289; GFNIAVX1OR2-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]290; GFNIAVX1OR2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [1,2,4,8,16,32,64,128]291; GFNIAVX1OR2-NEXT:    vpsrlw $8, %xmm0, %xmm0292; GFNIAVX1OR2-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0293; GFNIAVX1OR2-NEXT:    retq294;295; GFNIAVX512VL-LABEL: constant_rotl_v16i8:296; GFNIAVX512VL:       # %bb.0:297; GFNIAVX512VL-NEXT:    vpunpckhbw {{.*#+}} xmm1 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]298; GFNIAVX512VL-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1 # [1,128,64,32,16,8,4,2]299; GFNIAVX512VL-NEXT:    vpsrlw $8, %xmm1, %xmm1300; GFNIAVX512VL-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]301; GFNIAVX512VL-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [1,2,4,8,16,32,64,128]302; GFNIAVX512VL-NEXT:    vpsrlw $8, %xmm0, %xmm0303; GFNIAVX512VL-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0304; GFNIAVX512VL-NEXT:    retq305;306; GFNIAVX512BW-LABEL: constant_rotl_v16i8:307; GFNIAVX512BW:       # %bb.0:308; GFNIAVX512BW-NEXT:    vpunpckhbw {{.*#+}} xmm1 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]309; GFNIAVX512BW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1310; GFNIAVX512BW-NEXT:    vpsrlw $8, %xmm1, %xmm1311; GFNIAVX512BW-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]312; GFNIAVX512BW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0313; GFNIAVX512BW-NEXT:    vpsrlw $8, %xmm0, %xmm0314; GFNIAVX512BW-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0315; GFNIAVX512BW-NEXT:    retq316  %res = call <16 x i8> @llvm.fshl.v16i8(<16 x i8> %a, <16 x i8> %a, <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>)317  ret <16 x i8> %res318}319 320define <16 x i8> @constant_rotr_v16i8(<16 x i8> %a) nounwind {321; GFNISSE-LABEL: constant_rotr_v16i8:322; GFNISSE:       # %bb.0:323; GFNISSE-NEXT:    movdqa %xmm0, %xmm1324; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm1 = 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]325; GFNISSE-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [1,128,64,32,16,8,4,2]326; GFNISSE-NEXT:    psrlw $8, %xmm1327; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]328; GFNISSE-NEXT:    pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [1,2,4,8,16,32,64,128]329; GFNISSE-NEXT:    psrlw $8, %xmm0330; GFNISSE-NEXT:    packuswb %xmm1, %xmm0331; GFNISSE-NEXT:    retq332;333; GFNIAVX1OR2-LABEL: constant_rotr_v16i8:334; GFNIAVX1OR2:       # %bb.0:335; GFNIAVX1OR2-NEXT:    vpunpckhbw {{.*#+}} xmm1 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]336; GFNIAVX1OR2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1 # [1,128,64,32,16,8,4,2]337; GFNIAVX1OR2-NEXT:    vpsrlw $8, %xmm1, %xmm1338; GFNIAVX1OR2-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]339; GFNIAVX1OR2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [1,2,4,8,16,32,64,128]340; GFNIAVX1OR2-NEXT:    vpsrlw $8, %xmm0, %xmm0341; GFNIAVX1OR2-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0342; GFNIAVX1OR2-NEXT:    retq343;344; GFNIAVX512VL-LABEL: constant_rotr_v16i8:345; GFNIAVX512VL:       # %bb.0:346; GFNIAVX512VL-NEXT:    vpunpckhbw {{.*#+}} xmm1 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]347; GFNIAVX512VL-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1 # [1,128,64,32,16,8,4,2]348; GFNIAVX512VL-NEXT:    vpsrlw $8, %xmm1, %xmm1349; GFNIAVX512VL-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]350; GFNIAVX512VL-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [1,2,4,8,16,32,64,128]351; GFNIAVX512VL-NEXT:    vpsrlw $8, %xmm0, %xmm0352; GFNIAVX512VL-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0353; GFNIAVX512VL-NEXT:    retq354;355; GFNIAVX512BW-LABEL: constant_rotr_v16i8:356; GFNIAVX512BW:       # %bb.0:357; GFNIAVX512BW-NEXT:    vpunpckhbw {{.*#+}} xmm1 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]358; GFNIAVX512BW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1359; GFNIAVX512BW-NEXT:    vpsrlw $8, %xmm1, %xmm1360; GFNIAVX512BW-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]361; GFNIAVX512BW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0362; GFNIAVX512BW-NEXT:    vpsrlw $8, %xmm0, %xmm0363; GFNIAVX512BW-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0364; GFNIAVX512BW-NEXT:    retq365  %res = call <16 x i8> @llvm.fshl.v16i8(<16 x i8> %a, <16 x i8> %a, <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>)366  ret <16 x i8> %res367}368 369define <16 x i8> @splatconstant_rotl_v16i8(<16 x i8> %a) nounwind {370; GFNISSE-LABEL: splatconstant_rotl_v16i8:371; GFNISSE:       # %bb.0:372; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0373; GFNISSE-NEXT:    retq374;375; GFNIAVX1OR2-LABEL: splatconstant_rotl_v16i8:376; GFNIAVX1OR2:       # %bb.0:377; GFNIAVX1OR2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0378; GFNIAVX1OR2-NEXT:    retq379;380; GFNIAVX512-LABEL: splatconstant_rotl_v16i8:381; GFNIAVX512:       # %bb.0:382; GFNIAVX512-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0383; GFNIAVX512-NEXT:    retq384  %res = call <16 x i8> @llvm.fshl.v16i8(<16 x i8> %a, <16 x i8> %a, <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>)385  ret <16 x i8> %res386}387declare <16 x i8> @llvm.fshl.v16i8(<16 x i8>, <16 x i8>, <16 x i8>)388 389define <16 x i8> @splatconstant_rotr_v16i8(<16 x i8> %a) nounwind {390; GFNISSE-LABEL: splatconstant_rotr_v16i8:391; GFNISSE:       # %bb.0:392; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0393; GFNISSE-NEXT:    retq394;395; GFNIAVX1OR2-LABEL: splatconstant_rotr_v16i8:396; GFNIAVX1OR2:       # %bb.0:397; GFNIAVX1OR2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0398; GFNIAVX1OR2-NEXT:    retq399;400; GFNIAVX512-LABEL: splatconstant_rotr_v16i8:401; GFNIAVX512:       # %bb.0:402; GFNIAVX512-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0403; GFNIAVX512-NEXT:    retq404  %res = call <16 x i8> @llvm.fshr.v16i8(<16 x i8> %a, <16 x i8> %a, <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>)405  ret <16 x i8> %res406}407declare <16 x i8> @llvm.fshr.v16i8(<16 x i8>, <16 x i8>, <16 x i8>)408 409;410; 256 Bit Vector Rotates411;412 413define <32 x i8> @var_rotl_v32i8(<32 x i8> %a, <32 x i8> %amt) nounwind {414; GFNISSE-LABEL: var_rotl_v32i8:415; GFNISSE:       # %bb.0:416; GFNISSE-NEXT:    movdqa %xmm2, %xmm4417; GFNISSE-NEXT:    movdqa %xmm0, %xmm2418; GFNISSE-NEXT:    movdqa {{.*#+}} xmm5 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]419; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm5, %xmm0420; GFNISSE-NEXT:    pmovsxdq {{.*#+}} xmm6 = [16909320,16909320]421; GFNISSE-NEXT:    movdqa %xmm2, %xmm7422; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm6, %xmm7423; GFNISSE-NEXT:    por %xmm0, %xmm7424; GFNISSE-NEXT:    psllw $5, %xmm4425; GFNISSE-NEXT:    movdqa %xmm4, %xmm0426; GFNISSE-NEXT:    pblendvb %xmm0, %xmm7, %xmm2427; GFNISSE-NEXT:    movdqa {{.*#+}} xmm7 = [0,0,0,0,0,0,128,64,0,0,0,0,0,0,128,64]428; GFNISSE-NEXT:    movdqa %xmm2, %xmm0429; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm7, %xmm0430; GFNISSE-NEXT:    movdqa {{.*#+}} xmm8 = [32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0]431; GFNISSE-NEXT:    movdqa %xmm2, %xmm9432; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm8, %xmm9433; GFNISSE-NEXT:    por %xmm0, %xmm9434; GFNISSE-NEXT:    paddb %xmm4, %xmm4435; GFNISSE-NEXT:    movdqa %xmm4, %xmm0436; GFNISSE-NEXT:    pblendvb %xmm0, %xmm9, %xmm2437; GFNISSE-NEXT:    movdqa {{.*#+}} xmm9 = [0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,128]438; GFNISSE-NEXT:    movdqa %xmm2, %xmm0439; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm9, %xmm0440; GFNISSE-NEXT:    movdqa %xmm2, %xmm10441; GFNISSE-NEXT:    paddb %xmm2, %xmm10442; GFNISSE-NEXT:    por %xmm0, %xmm10443; GFNISSE-NEXT:    paddb %xmm4, %xmm4444; GFNISSE-NEXT:    movdqa %xmm4, %xmm0445; GFNISSE-NEXT:    pblendvb %xmm0, %xmm10, %xmm2446; GFNISSE-NEXT:    movdqa %xmm1, %xmm0447; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm5, %xmm0448; GFNISSE-NEXT:    movdqa %xmm1, %xmm4449; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm6, %xmm4450; GFNISSE-NEXT:    por %xmm0, %xmm4451; GFNISSE-NEXT:    psllw $5, %xmm3452; GFNISSE-NEXT:    movdqa %xmm3, %xmm0453; GFNISSE-NEXT:    pblendvb %xmm0, %xmm4, %xmm1454; GFNISSE-NEXT:    movdqa %xmm1, %xmm0455; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm7, %xmm0456; GFNISSE-NEXT:    movdqa %xmm1, %xmm4457; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm8, %xmm4458; GFNISSE-NEXT:    por %xmm0, %xmm4459; GFNISSE-NEXT:    paddb %xmm3, %xmm3460; GFNISSE-NEXT:    movdqa %xmm3, %xmm0461; GFNISSE-NEXT:    pblendvb %xmm0, %xmm4, %xmm1462; GFNISSE-NEXT:    movdqa %xmm1, %xmm0463; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm9, %xmm0464; GFNISSE-NEXT:    movdqa %xmm1, %xmm4465; GFNISSE-NEXT:    paddb %xmm1, %xmm4466; GFNISSE-NEXT:    por %xmm0, %xmm4467; GFNISSE-NEXT:    paddb %xmm3, %xmm3468; GFNISSE-NEXT:    movdqa %xmm3, %xmm0469; GFNISSE-NEXT:    pblendvb %xmm0, %xmm4, %xmm1470; GFNISSE-NEXT:    movdqa %xmm2, %xmm0471; GFNISSE-NEXT:    retq472;473; GFNIAVX1-LABEL: var_rotl_v32i8:474; GFNIAVX1:       # %bb.0:475; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2476; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]477; GFNIAVX1-NEXT:    # xmm3 = mem[0,0]478; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm3, %xmm2, %xmm4479; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm5 = [8,4,2,1,0,0,0,0,8,4,2,1,0,0,0,0]480; GFNIAVX1-NEXT:    # xmm5 = mem[0,0]481; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm5, %xmm2, %xmm6482; GFNIAVX1-NEXT:    vpor %xmm4, %xmm6, %xmm4483; GFNIAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6484; GFNIAVX1-NEXT:    vpsllw $5, %xmm6, %xmm6485; GFNIAVX1-NEXT:    vpblendvb %xmm6, %xmm4, %xmm2, %xmm2486; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm4 = [0,0,0,0,0,0,128,64,0,0,0,0,0,0,128,64]487; GFNIAVX1-NEXT:    # xmm4 = mem[0,0]488; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm4, %xmm2, %xmm7489; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm8 = [32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0]490; GFNIAVX1-NEXT:    # xmm8 = mem[0,0]491; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm8, %xmm2, %xmm9492; GFNIAVX1-NEXT:    vpor %xmm7, %xmm9, %xmm7493; GFNIAVX1-NEXT:    vpaddb %xmm6, %xmm6, %xmm6494; GFNIAVX1-NEXT:    vpblendvb %xmm6, %xmm7, %xmm2, %xmm2495; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm7 = [0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,128]496; GFNIAVX1-NEXT:    # xmm7 = mem[0,0]497; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm7, %xmm2, %xmm9498; GFNIAVX1-NEXT:    vpaddb %xmm2, %xmm2, %xmm10499; GFNIAVX1-NEXT:    vpor %xmm9, %xmm10, %xmm9500; GFNIAVX1-NEXT:    vpaddb %xmm6, %xmm6, %xmm6501; GFNIAVX1-NEXT:    vpblendvb %xmm6, %xmm9, %xmm2, %xmm2502; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm3, %xmm0, %xmm3503; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm5, %xmm0, %xmm5504; GFNIAVX1-NEXT:    vpor %xmm3, %xmm5, %xmm3505; GFNIAVX1-NEXT:    vpsllw $5, %xmm1, %xmm1506; GFNIAVX1-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0507; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm4, %xmm0, %xmm3508; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm8, %xmm0, %xmm4509; GFNIAVX1-NEXT:    vpor %xmm3, %xmm4, %xmm3510; GFNIAVX1-NEXT:    vpaddb %xmm1, %xmm1, %xmm1511; GFNIAVX1-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0512; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm7, %xmm0, %xmm3513; GFNIAVX1-NEXT:    vpaddb %xmm0, %xmm0, %xmm4514; GFNIAVX1-NEXT:    vpor %xmm3, %xmm4, %xmm3515; GFNIAVX1-NEXT:    vpaddb %xmm1, %xmm1, %xmm1516; GFNIAVX1-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0517; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0518; GFNIAVX1-NEXT:    retq519;520; GFNIAVX2-LABEL: var_rotl_v32i8:521; GFNIAVX2:       # %bb.0:522; GFNIAVX2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm2523; GFNIAVX2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm3524; GFNIAVX2-NEXT:    vpor %ymm2, %ymm3, %ymm2525; GFNIAVX2-NEXT:    vpsllw $5, %ymm1, %ymm1526; GFNIAVX2-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0527; GFNIAVX2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm2528; GFNIAVX2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm3529; GFNIAVX2-NEXT:    vpor %ymm2, %ymm3, %ymm2530; GFNIAVX2-NEXT:    vpaddb %ymm1, %ymm1, %ymm1531; GFNIAVX2-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0532; GFNIAVX2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm2533; GFNIAVX2-NEXT:    vpaddb %ymm0, %ymm0, %ymm3534; GFNIAVX2-NEXT:    vpor %ymm2, %ymm3, %ymm2535; GFNIAVX2-NEXT:    vpaddb %ymm1, %ymm1, %ymm1536; GFNIAVX2-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0537; GFNIAVX2-NEXT:    retq538;539; GFNIAVX512VL-LABEL: var_rotl_v32i8:540; GFNIAVX512VL:       # %bb.0:541; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm2542; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm3543; GFNIAVX512VL-NEXT:    vpor %ymm2, %ymm3, %ymm2544; GFNIAVX512VL-NEXT:    vpsllw $5, %ymm1, %ymm1545; GFNIAVX512VL-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0546; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm2547; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm3548; GFNIAVX512VL-NEXT:    vpor %ymm2, %ymm3, %ymm2549; GFNIAVX512VL-NEXT:    vpaddb %ymm1, %ymm1, %ymm1550; GFNIAVX512VL-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0551; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm2552; GFNIAVX512VL-NEXT:    vpaddb %ymm0, %ymm0, %ymm3553; GFNIAVX512VL-NEXT:    vpor %ymm2, %ymm3, %ymm2554; GFNIAVX512VL-NEXT:    vpaddb %ymm1, %ymm1, %ymm1555; GFNIAVX512VL-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0556; GFNIAVX512VL-NEXT:    retq557;558; GFNIAVX512BW-LABEL: var_rotl_v32i8:559; GFNIAVX512BW:       # %bb.0:560; GFNIAVX512BW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm1, %ymm1561; GFNIAVX512BW-NEXT:    vpxor %xmm2, %xmm2, %xmm2562; GFNIAVX512BW-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm1[8],ymm2[8],ymm1[9],ymm2[9],ymm1[10],ymm2[10],ymm1[11],ymm2[11],ymm1[12],ymm2[12],ymm1[13],ymm2[13],ymm1[14],ymm2[14],ymm1[15],ymm2[15],ymm1[24],ymm2[24],ymm1[25],ymm2[25],ymm1[26],ymm2[26],ymm1[27],ymm2[27],ymm1[28],ymm2[28],ymm1[29],ymm2[29],ymm1[30],ymm2[30],ymm1[31],ymm2[31]563; GFNIAVX512BW-NEXT:    vpunpckhbw {{.*#+}} ymm4 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]564; GFNIAVX512BW-NEXT:    vpsllvw %ymm3, %ymm4, %ymm3565; GFNIAVX512BW-NEXT:    vpsrlw $8, %ymm3, %ymm3566; GFNIAVX512BW-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm1[0],ymm2[0],ymm1[1],ymm2[1],ymm1[2],ymm2[2],ymm1[3],ymm2[3],ymm1[4],ymm2[4],ymm1[5],ymm2[5],ymm1[6],ymm2[6],ymm1[7],ymm2[7],ymm1[16],ymm2[16],ymm1[17],ymm2[17],ymm1[18],ymm2[18],ymm1[19],ymm2[19],ymm1[20],ymm2[20],ymm1[21],ymm2[21],ymm1[22],ymm2[22],ymm1[23],ymm2[23]567; GFNIAVX512BW-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]568; GFNIAVX512BW-NEXT:    vpsllvw %ymm1, %ymm0, %ymm0569; GFNIAVX512BW-NEXT:    vpsrlw $8, %ymm0, %ymm0570; GFNIAVX512BW-NEXT:    vpackuswb %ymm3, %ymm0, %ymm0571; GFNIAVX512BW-NEXT:    retq572  %res = call <32 x i8> @llvm.fshl.v32i8(<32 x i8> %a, <32 x i8> %a, <32 x i8> %amt)573  ret <32 x i8> %res574}575define <32 x i8> @var_rotr_v32i8(<32 x i8> %a, <32 x i8> %amt) nounwind {576; GFNISSE-LABEL: var_rotr_v32i8:577; GFNISSE:       # %bb.0:578; GFNISSE-NEXT:    movdqa %xmm0, %xmm5579; GFNISSE-NEXT:    movdqa {{.*#+}} xmm6 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]580; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm6, %xmm0581; GFNISSE-NEXT:    pmovsxdq {{.*#+}} xmm7 = [16909320,16909320]582; GFNISSE-NEXT:    movdqa %xmm5, %xmm8583; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm7, %xmm8584; GFNISSE-NEXT:    por %xmm0, %xmm8585; GFNISSE-NEXT:    pxor %xmm4, %xmm4586; GFNISSE-NEXT:    pxor %xmm0, %xmm0587; GFNISSE-NEXT:    psubb %xmm2, %xmm0588; GFNISSE-NEXT:    psllw $5, %xmm0589; GFNISSE-NEXT:    pblendvb %xmm0, %xmm8, %xmm5590; GFNISSE-NEXT:    movdqa {{.*#+}} xmm2 = [0,0,0,0,0,0,128,64,0,0,0,0,0,0,128,64]591; GFNISSE-NEXT:    movdqa %xmm5, %xmm9592; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm2, %xmm9593; GFNISSE-NEXT:    movdqa {{.*#+}} xmm8 = [32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0]594; GFNISSE-NEXT:    movdqa %xmm5, %xmm10595; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm8, %xmm10596; GFNISSE-NEXT:    por %xmm9, %xmm10597; GFNISSE-NEXT:    paddb %xmm0, %xmm0598; GFNISSE-NEXT:    pblendvb %xmm0, %xmm10, %xmm5599; GFNISSE-NEXT:    movdqa {{.*#+}} xmm9 = [0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,128]600; GFNISSE-NEXT:    movdqa %xmm5, %xmm10601; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm9, %xmm10602; GFNISSE-NEXT:    movdqa %xmm5, %xmm11603; GFNISSE-NEXT:    paddb %xmm5, %xmm11604; GFNISSE-NEXT:    por %xmm10, %xmm11605; GFNISSE-NEXT:    paddb %xmm0, %xmm0606; GFNISSE-NEXT:    pblendvb %xmm0, %xmm11, %xmm5607; GFNISSE-NEXT:    movdqa %xmm1, %xmm0608; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm6, %xmm0609; GFNISSE-NEXT:    movdqa %xmm1, %xmm6610; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm7, %xmm6611; GFNISSE-NEXT:    por %xmm0, %xmm6612; GFNISSE-NEXT:    psubb %xmm3, %xmm4613; GFNISSE-NEXT:    psllw $5, %xmm4614; GFNISSE-NEXT:    movdqa %xmm4, %xmm0615; GFNISSE-NEXT:    pblendvb %xmm0, %xmm6, %xmm1616; GFNISSE-NEXT:    movdqa %xmm1, %xmm0617; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm2, %xmm0618; GFNISSE-NEXT:    movdqa %xmm1, %xmm2619; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm8, %xmm2620; GFNISSE-NEXT:    por %xmm0, %xmm2621; GFNISSE-NEXT:    paddb %xmm4, %xmm4622; GFNISSE-NEXT:    movdqa %xmm4, %xmm0623; GFNISSE-NEXT:    pblendvb %xmm0, %xmm2, %xmm1624; GFNISSE-NEXT:    movdqa %xmm1, %xmm0625; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm9, %xmm0626; GFNISSE-NEXT:    movdqa %xmm1, %xmm2627; GFNISSE-NEXT:    paddb %xmm1, %xmm2628; GFNISSE-NEXT:    por %xmm0, %xmm2629; GFNISSE-NEXT:    paddb %xmm4, %xmm4630; GFNISSE-NEXT:    movdqa %xmm4, %xmm0631; GFNISSE-NEXT:    pblendvb %xmm0, %xmm2, %xmm1632; GFNISSE-NEXT:    movdqa %xmm5, %xmm0633; GFNISSE-NEXT:    retq634;635; GFNIAVX1-LABEL: var_rotr_v32i8:636; GFNIAVX1:       # %bb.0:637; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2638; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]639; GFNIAVX1-NEXT:    # xmm3 = mem[0,0]640; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm3, %xmm2, %xmm4641; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm5 = [8,4,2,1,0,0,0,0,8,4,2,1,0,0,0,0]642; GFNIAVX1-NEXT:    # xmm5 = mem[0,0]643; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm5, %xmm2, %xmm6644; GFNIAVX1-NEXT:    vpor %xmm4, %xmm6, %xmm4645; GFNIAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6646; GFNIAVX1-NEXT:    vpxor %xmm7, %xmm7, %xmm7647; GFNIAVX1-NEXT:    vpsubb %xmm6, %xmm7, %xmm6648; GFNIAVX1-NEXT:    vpsllw $5, %xmm6, %xmm6649; GFNIAVX1-NEXT:    vpblendvb %xmm6, %xmm4, %xmm2, %xmm2650; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm4 = [0,0,0,0,0,0,128,64,0,0,0,0,0,0,128,64]651; GFNIAVX1-NEXT:    # xmm4 = mem[0,0]652; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm4, %xmm2, %xmm8653; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm9 = [32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0]654; GFNIAVX1-NEXT:    # xmm9 = mem[0,0]655; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm9, %xmm2, %xmm10656; GFNIAVX1-NEXT:    vpor %xmm8, %xmm10, %xmm8657; GFNIAVX1-NEXT:    vpaddb %xmm6, %xmm6, %xmm6658; GFNIAVX1-NEXT:    vpblendvb %xmm6, %xmm8, %xmm2, %xmm2659; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm8 = [0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,128]660; GFNIAVX1-NEXT:    # xmm8 = mem[0,0]661; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm8, %xmm2, %xmm10662; GFNIAVX1-NEXT:    vpaddb %xmm2, %xmm2, %xmm11663; GFNIAVX1-NEXT:    vpor %xmm10, %xmm11, %xmm10664; GFNIAVX1-NEXT:    vpaddb %xmm6, %xmm6, %xmm6665; GFNIAVX1-NEXT:    vpblendvb %xmm6, %xmm10, %xmm2, %xmm2666; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm3, %xmm0, %xmm3667; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm5, %xmm0, %xmm5668; GFNIAVX1-NEXT:    vpor %xmm3, %xmm5, %xmm3669; GFNIAVX1-NEXT:    vpsubb %xmm1, %xmm7, %xmm1670; GFNIAVX1-NEXT:    vpsllw $5, %xmm1, %xmm1671; GFNIAVX1-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0672; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm4, %xmm0, %xmm3673; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm9, %xmm0, %xmm4674; GFNIAVX1-NEXT:    vpor %xmm3, %xmm4, %xmm3675; GFNIAVX1-NEXT:    vpaddb %xmm1, %xmm1, %xmm1676; GFNIAVX1-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0677; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm8, %xmm0, %xmm3678; GFNIAVX1-NEXT:    vpaddb %xmm0, %xmm0, %xmm4679; GFNIAVX1-NEXT:    vpor %xmm3, %xmm4, %xmm3680; GFNIAVX1-NEXT:    vpaddb %xmm1, %xmm1, %xmm1681; GFNIAVX1-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0682; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0683; GFNIAVX1-NEXT:    retq684;685; GFNIAVX2-LABEL: var_rotr_v32i8:686; GFNIAVX2:       # %bb.0:687; GFNIAVX2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm2688; GFNIAVX2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm3689; GFNIAVX2-NEXT:    vpor %ymm2, %ymm3, %ymm2690; GFNIAVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3691; GFNIAVX2-NEXT:    vpsubb %ymm1, %ymm3, %ymm1692; GFNIAVX2-NEXT:    vpsllw $5, %ymm1, %ymm1693; GFNIAVX2-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0694; GFNIAVX2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm2695; GFNIAVX2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm3696; GFNIAVX2-NEXT:    vpor %ymm2, %ymm3, %ymm2697; GFNIAVX2-NEXT:    vpaddb %ymm1, %ymm1, %ymm1698; GFNIAVX2-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0699; GFNIAVX2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm2700; GFNIAVX2-NEXT:    vpaddb %ymm0, %ymm0, %ymm3701; GFNIAVX2-NEXT:    vpor %ymm2, %ymm3, %ymm2702; GFNIAVX2-NEXT:    vpaddb %ymm1, %ymm1, %ymm1703; GFNIAVX2-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0704; GFNIAVX2-NEXT:    retq705;706; GFNIAVX512VL-LABEL: var_rotr_v32i8:707; GFNIAVX512VL:       # %bb.0:708; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm2709; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm3710; GFNIAVX512VL-NEXT:    vpor %ymm2, %ymm3, %ymm2711; GFNIAVX512VL-NEXT:    vpsllw $5, %ymm1, %ymm1712; GFNIAVX512VL-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0713; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm2714; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm3715; GFNIAVX512VL-NEXT:    vpor %ymm2, %ymm3, %ymm2716; GFNIAVX512VL-NEXT:    vpaddb %ymm1, %ymm1, %ymm1717; GFNIAVX512VL-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0718; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm2719; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm3720; GFNIAVX512VL-NEXT:    vpor %ymm2, %ymm3, %ymm2721; GFNIAVX512VL-NEXT:    vpaddb %ymm1, %ymm1, %ymm1722; GFNIAVX512VL-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0723; GFNIAVX512VL-NEXT:    retq724;725; GFNIAVX512BW-LABEL: var_rotr_v32i8:726; GFNIAVX512BW:       # %bb.0:727; GFNIAVX512BW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm1, %ymm1728; GFNIAVX512BW-NEXT:    vpxor %xmm2, %xmm2, %xmm2729; GFNIAVX512BW-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm1[8],ymm2[8],ymm1[9],ymm2[9],ymm1[10],ymm2[10],ymm1[11],ymm2[11],ymm1[12],ymm2[12],ymm1[13],ymm2[13],ymm1[14],ymm2[14],ymm1[15],ymm2[15],ymm1[24],ymm2[24],ymm1[25],ymm2[25],ymm1[26],ymm2[26],ymm1[27],ymm2[27],ymm1[28],ymm2[28],ymm1[29],ymm2[29],ymm1[30],ymm2[30],ymm1[31],ymm2[31]730; GFNIAVX512BW-NEXT:    vpunpckhbw {{.*#+}} ymm4 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]731; GFNIAVX512BW-NEXT:    vpsrlvw %ymm3, %ymm4, %ymm3732; GFNIAVX512BW-NEXT:    vpbroadcastw {{.*#+}} ymm4 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]733; GFNIAVX512BW-NEXT:    vpand %ymm4, %ymm3, %ymm3734; GFNIAVX512BW-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm1[0],ymm2[0],ymm1[1],ymm2[1],ymm1[2],ymm2[2],ymm1[3],ymm2[3],ymm1[4],ymm2[4],ymm1[5],ymm2[5],ymm1[6],ymm2[6],ymm1[7],ymm2[7],ymm1[16],ymm2[16],ymm1[17],ymm2[17],ymm1[18],ymm2[18],ymm1[19],ymm2[19],ymm1[20],ymm2[20],ymm1[21],ymm2[21],ymm1[22],ymm2[22],ymm1[23],ymm2[23]735; GFNIAVX512BW-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]736; GFNIAVX512BW-NEXT:    vpsrlvw %ymm1, %ymm0, %ymm0737; GFNIAVX512BW-NEXT:    vpand %ymm4, %ymm0, %ymm0738; GFNIAVX512BW-NEXT:    vpackuswb %ymm3, %ymm0, %ymm0739; GFNIAVX512BW-NEXT:    retq740  %res = call <32 x i8> @llvm.fshr.v32i8(<32 x i8> %a, <32 x i8> %a, <32 x i8> %amt)741  ret <32 x i8> %res742}743 744define <32 x i8> @splatvar_rotl_v32i8(<32 x i8> %a, <32 x i8> %amt) nounwind {745; GFNISSE-LABEL: splatvar_rotl_v32i8:746; GFNISSE:       # %bb.0:747; GFNISSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2748; GFNISSE-NEXT:    movdqa %xmm0, %xmm3749; 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]750; GFNISSE-NEXT:    psllw %xmm2, %xmm3751; GFNISSE-NEXT:    psrlw $8, %xmm3752; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]753; GFNISSE-NEXT:    psllw %xmm2, %xmm0754; GFNISSE-NEXT:    psrlw $8, %xmm0755; GFNISSE-NEXT:    packuswb %xmm3, %xmm0756; GFNISSE-NEXT:    movdqa %xmm1, %xmm3757; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm3 = 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]758; GFNISSE-NEXT:    psllw %xmm2, %xmm3759; GFNISSE-NEXT:    psrlw $8, %xmm3760; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]761; GFNISSE-NEXT:    psllw %xmm2, %xmm1762; GFNISSE-NEXT:    psrlw $8, %xmm1763; GFNISSE-NEXT:    packuswb %xmm3, %xmm1764; GFNISSE-NEXT:    retq765;766; GFNIAVX1-LABEL: splatvar_rotl_v32i8:767; GFNIAVX1:       # %bb.0:768; GFNIAVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1769; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2770; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]771; GFNIAVX1-NEXT:    vpsllw %xmm1, %xmm3, %xmm3772; GFNIAVX1-NEXT:    vpsrlw $8, %xmm3, %xmm3773; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]774; GFNIAVX1-NEXT:    vpsllw %xmm1, %xmm2, %xmm2775; GFNIAVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2776; GFNIAVX1-NEXT:    vpackuswb %xmm3, %xmm2, %xmm2777; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]778; GFNIAVX1-NEXT:    vpsllw %xmm1, %xmm3, %xmm3779; GFNIAVX1-NEXT:    vpsrlw $8, %xmm3, %xmm3780; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]781; GFNIAVX1-NEXT:    vpsllw %xmm1, %xmm0, %xmm0782; GFNIAVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0783; GFNIAVX1-NEXT:    vpackuswb %xmm3, %xmm0, %xmm0784; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0785; GFNIAVX1-NEXT:    retq786;787; GFNIAVX2-LABEL: splatvar_rotl_v32i8:788; GFNIAVX2:       # %bb.0:789; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]790; GFNIAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1791; GFNIAVX2-NEXT:    vpsllw %xmm1, %ymm2, %ymm2792; GFNIAVX2-NEXT:    vpsrlw $8, %ymm2, %ymm2793; GFNIAVX2-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]794; GFNIAVX2-NEXT:    vpsllw %xmm1, %ymm0, %ymm0795; GFNIAVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0796; GFNIAVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0797; GFNIAVX2-NEXT:    retq798;799; GFNIAVX512-LABEL: splatvar_rotl_v32i8:800; GFNIAVX512:       # %bb.0:801; GFNIAVX512-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]802; GFNIAVX512-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1803; GFNIAVX512-NEXT:    vpsllw %xmm1, %ymm2, %ymm2804; GFNIAVX512-NEXT:    vpsrlw $8, %ymm2, %ymm2805; GFNIAVX512-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]806; GFNIAVX512-NEXT:    vpsllw %xmm1, %ymm0, %ymm0807; GFNIAVX512-NEXT:    vpsrlw $8, %ymm0, %ymm0808; GFNIAVX512-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0809; GFNIAVX512-NEXT:    retq810  %splat = shufflevector <32 x i8> %amt, <32 x i8> undef, <32 x i32> zeroinitializer811  %res = call <32 x i8> @llvm.fshl.v32i8(<32 x i8> %a, <32 x i8> %a, <32 x i8> %splat)812  ret <32 x i8> %res813}814 815define <32 x i8> @splatvar_rotr_v32i8(<32 x i8> %a, <32 x i8> %amt) nounwind {816; GFNISSE-LABEL: splatvar_rotr_v32i8:817; GFNISSE:       # %bb.0:818; GFNISSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2819; GFNISSE-NEXT:    movdqa %xmm0, %xmm3820; 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]821; GFNISSE-NEXT:    psrlw %xmm2, %xmm3822; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]823; GFNISSE-NEXT:    pand %xmm4, %xmm3824; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]825; GFNISSE-NEXT:    psrlw %xmm2, %xmm0826; GFNISSE-NEXT:    pand %xmm4, %xmm0827; GFNISSE-NEXT:    packuswb %xmm3, %xmm0828; GFNISSE-NEXT:    movdqa %xmm1, %xmm3829; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm3 = 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]830; GFNISSE-NEXT:    psrlw %xmm2, %xmm3831; GFNISSE-NEXT:    pand %xmm4, %xmm3832; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]833; GFNISSE-NEXT:    psrlw %xmm2, %xmm1834; GFNISSE-NEXT:    pand %xmm4, %xmm1835; GFNISSE-NEXT:    packuswb %xmm3, %xmm1836; GFNISSE-NEXT:    retq837;838; GFNIAVX1-LABEL: splatvar_rotr_v32i8:839; GFNIAVX1:       # %bb.0:840; GFNIAVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1841; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2842; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]843; GFNIAVX1-NEXT:    vpsrlw %xmm1, %xmm3, %xmm3844; GFNIAVX1-NEXT:    vbroadcastss {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]845; GFNIAVX1-NEXT:    vpand %xmm4, %xmm3, %xmm3846; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]847; GFNIAVX1-NEXT:    vpsrlw %xmm1, %xmm2, %xmm2848; GFNIAVX1-NEXT:    vpand %xmm4, %xmm2, %xmm2849; GFNIAVX1-NEXT:    vpackuswb %xmm3, %xmm2, %xmm2850; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]851; GFNIAVX1-NEXT:    vpsrlw %xmm1, %xmm3, %xmm3852; GFNIAVX1-NEXT:    vpand %xmm4, %xmm3, %xmm3853; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]854; GFNIAVX1-NEXT:    vpsrlw %xmm1, %xmm0, %xmm0855; GFNIAVX1-NEXT:    vpand %xmm4, %xmm0, %xmm0856; GFNIAVX1-NEXT:    vpackuswb %xmm3, %xmm0, %xmm0857; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0858; GFNIAVX1-NEXT:    retq859;860; GFNIAVX2-LABEL: splatvar_rotr_v32i8:861; GFNIAVX2:       # %bb.0:862; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]863; GFNIAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1864; GFNIAVX2-NEXT:    vpsrlw %xmm1, %ymm2, %ymm2865; GFNIAVX2-NEXT:    vpbroadcastw {{.*#+}} ymm3 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]866; GFNIAVX2-NEXT:    vpand %ymm3, %ymm2, %ymm2867; GFNIAVX2-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]868; GFNIAVX2-NEXT:    vpsrlw %xmm1, %ymm0, %ymm0869; GFNIAVX2-NEXT:    vpand %ymm3, %ymm0, %ymm0870; GFNIAVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0871; GFNIAVX2-NEXT:    retq872;873; GFNIAVX512VL-LABEL: splatvar_rotr_v32i8:874; GFNIAVX512VL:       # %bb.0:875; GFNIAVX512VL-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]876; GFNIAVX512VL-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1877; GFNIAVX512VL-NEXT:    vpsrlw %xmm1, %ymm2, %ymm2878; GFNIAVX512VL-NEXT:    vpbroadcastd {{.*#+}} ymm3 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]879; GFNIAVX512VL-NEXT:    vpand %ymm3, %ymm2, %ymm2880; GFNIAVX512VL-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]881; GFNIAVX512VL-NEXT:    vpsrlw %xmm1, %ymm0, %ymm0882; GFNIAVX512VL-NEXT:    vpand %ymm3, %ymm0, %ymm0883; GFNIAVX512VL-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0884; GFNIAVX512VL-NEXT:    retq885;886; GFNIAVX512BW-LABEL: splatvar_rotr_v32i8:887; GFNIAVX512BW:       # %bb.0:888; GFNIAVX512BW-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]889; GFNIAVX512BW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1890; GFNIAVX512BW-NEXT:    vpsrlw %xmm1, %ymm2, %ymm2891; GFNIAVX512BW-NEXT:    vpbroadcastw {{.*#+}} ymm3 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]892; GFNIAVX512BW-NEXT:    vpand %ymm3, %ymm2, %ymm2893; GFNIAVX512BW-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]894; GFNIAVX512BW-NEXT:    vpsrlw %xmm1, %ymm0, %ymm0895; GFNIAVX512BW-NEXT:    vpand %ymm3, %ymm0, %ymm0896; GFNIAVX512BW-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0897; GFNIAVX512BW-NEXT:    retq898  %splat = shufflevector <32 x i8> %amt, <32 x i8> undef, <32 x i32> zeroinitializer899  %res = call <32 x i8> @llvm.fshr.v32i8(<32 x i8> %a, <32 x i8> %a, <32 x i8> %splat)900  ret <32 x i8> %res901}902 903define <32 x i8> @constant_rotl_v32i8(<32 x i8> %a) nounwind {904; GFNISSE-LABEL: constant_rotl_v32i8:905; GFNISSE:       # %bb.0:906; GFNISSE-NEXT:    movdqa %xmm0, %xmm2907; 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]908; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm3 = [1,128,64,32,16,8,4,2]909; GFNISSE-NEXT:    pmullw %xmm3, %xmm2910; GFNISSE-NEXT:    psrlw $8, %xmm2911; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]912; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm4 = [1,2,4,8,16,32,64,128]913; GFNISSE-NEXT:    pmullw %xmm4, %xmm0914; GFNISSE-NEXT:    psrlw $8, %xmm0915; GFNISSE-NEXT:    packuswb %xmm2, %xmm0916; GFNISSE-NEXT:    movdqa %xmm1, %xmm2917; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm1[8],xmm2[9],xmm1[9],xmm2[10],xmm1[10],xmm2[11],xmm1[11],xmm2[12],xmm1[12],xmm2[13],xmm1[13],xmm2[14],xmm1[14],xmm2[15],xmm1[15]918; GFNISSE-NEXT:    pmullw %xmm3, %xmm2919; GFNISSE-NEXT:    psrlw $8, %xmm2920; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]921; GFNISSE-NEXT:    pmullw %xmm4, %xmm1922; GFNISSE-NEXT:    psrlw $8, %xmm1923; GFNISSE-NEXT:    packuswb %xmm2, %xmm1924; GFNISSE-NEXT:    retq925;926; GFNIAVX1-LABEL: constant_rotl_v32i8:927; GFNIAVX1:       # %bb.0:928; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1929; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm2 = xmm1[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]930; GFNIAVX1-NEXT:    vpmovzxbw {{.*#+}} xmm3 = [1,128,64,32,16,8,4,2]931; GFNIAVX1-NEXT:    vpmullw %xmm3, %xmm2, %xmm2932; GFNIAVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2933; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]934; GFNIAVX1-NEXT:    vpmovzxbw {{.*#+}} xmm4 = [1,2,4,8,16,32,64,128]935; GFNIAVX1-NEXT:    vpmullw %xmm4, %xmm1, %xmm1936; GFNIAVX1-NEXT:    vpsrlw $8, %xmm1, %xmm1937; GFNIAVX1-NEXT:    vpackuswb %xmm2, %xmm1, %xmm1938; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm2 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]939; GFNIAVX1-NEXT:    vpmullw %xmm3, %xmm2, %xmm2940; GFNIAVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2941; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]942; GFNIAVX1-NEXT:    vpmullw %xmm4, %xmm0, %xmm0943; GFNIAVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0944; GFNIAVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0945; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0946; GFNIAVX1-NEXT:    retq947;948; GFNIAVX2-LABEL: constant_rotl_v32i8:949; GFNIAVX2:       # %bb.0:950; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} ymm1 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]951; GFNIAVX2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [1,128,64,32,16,8,4,2,1,128,64,32,16,8,4,2]952; GFNIAVX2-NEXT:    vpsrlw $8, %ymm1, %ymm1953; GFNIAVX2-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]954; 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]955; GFNIAVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0956; GFNIAVX2-NEXT:    vpackuswb %ymm1, %ymm0, %ymm0957; GFNIAVX2-NEXT:    retq958;959; GFNIAVX512VL-LABEL: constant_rotl_v32i8:960; GFNIAVX512VL:       # %bb.0:961; GFNIAVX512VL-NEXT:    vpunpckhbw {{.*#+}} ymm1 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]962; GFNIAVX512VL-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [1,128,64,32,16,8,4,2,1,128,64,32,16,8,4,2]963; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm1, %ymm1964; GFNIAVX512VL-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]965; 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]966; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm0, %ymm0967; GFNIAVX512VL-NEXT:    vpackuswb %ymm1, %ymm0, %ymm0968; GFNIAVX512VL-NEXT:    retq969;970; GFNIAVX512BW-LABEL: constant_rotl_v32i8:971; GFNIAVX512BW:       # %bb.0:972; GFNIAVX512BW-NEXT:    vpunpckhbw {{.*#+}} ymm1 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]973; GFNIAVX512BW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1974; GFNIAVX512BW-NEXT:    vpsrlw $8, %ymm1, %ymm1975; GFNIAVX512BW-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]976; GFNIAVX512BW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0977; GFNIAVX512BW-NEXT:    vpsrlw $8, %ymm0, %ymm0978; GFNIAVX512BW-NEXT:    vpackuswb %ymm1, %ymm0, %ymm0979; GFNIAVX512BW-NEXT:    retq980  %res = call <32 x i8> @llvm.fshl.v32i8(<32 x i8> %a, <32 x i8> %a, <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>)981  ret <32 x i8> %res982}983 984define <32 x i8> @constant_rotr_v32i8(<32 x i8> %a) nounwind {985; GFNISSE-LABEL: constant_rotr_v32i8:986; GFNISSE:       # %bb.0:987; GFNISSE-NEXT:    movdqa %xmm0, %xmm2988; 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]989; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm3 = [1,128,64,32,16,8,4,2]990; GFNISSE-NEXT:    pmullw %xmm3, %xmm2991; GFNISSE-NEXT:    psrlw $8, %xmm2992; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]993; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm4 = [1,2,4,8,16,32,64,128]994; GFNISSE-NEXT:    pmullw %xmm4, %xmm0995; GFNISSE-NEXT:    psrlw $8, %xmm0996; GFNISSE-NEXT:    packuswb %xmm2, %xmm0997; GFNISSE-NEXT:    movdqa %xmm1, %xmm2998; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm1[8],xmm2[9],xmm1[9],xmm2[10],xmm1[10],xmm2[11],xmm1[11],xmm2[12],xmm1[12],xmm2[13],xmm1[13],xmm2[14],xmm1[14],xmm2[15],xmm1[15]999; GFNISSE-NEXT:    pmullw %xmm3, %xmm21000; GFNISSE-NEXT:    psrlw $8, %xmm21001; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1002; GFNISSE-NEXT:    pmullw %xmm4, %xmm11003; GFNISSE-NEXT:    psrlw $8, %xmm11004; GFNISSE-NEXT:    packuswb %xmm2, %xmm11005; GFNISSE-NEXT:    retq1006;1007; GFNIAVX1-LABEL: constant_rotr_v32i8:1008; GFNIAVX1:       # %bb.0:1009; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm11010; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm2 = xmm1[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]1011; GFNIAVX1-NEXT:    vpmovzxbw {{.*#+}} xmm3 = [1,128,64,32,16,8,4,2]1012; GFNIAVX1-NEXT:    vpmullw %xmm3, %xmm2, %xmm21013; GFNIAVX1-NEXT:    vpsrlw $8, %xmm2, %xmm21014; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1015; GFNIAVX1-NEXT:    vpmovzxbw {{.*#+}} xmm4 = [1,2,4,8,16,32,64,128]1016; GFNIAVX1-NEXT:    vpmullw %xmm4, %xmm1, %xmm11017; GFNIAVX1-NEXT:    vpsrlw $8, %xmm1, %xmm11018; GFNIAVX1-NEXT:    vpackuswb %xmm2, %xmm1, %xmm11019; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm2 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]1020; GFNIAVX1-NEXT:    vpmullw %xmm3, %xmm2, %xmm21021; GFNIAVX1-NEXT:    vpsrlw $8, %xmm2, %xmm21022; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1023; GFNIAVX1-NEXT:    vpmullw %xmm4, %xmm0, %xmm01024; GFNIAVX1-NEXT:    vpsrlw $8, %xmm0, %xmm01025; GFNIAVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm01026; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01027; GFNIAVX1-NEXT:    retq1028;1029; GFNIAVX2-LABEL: constant_rotr_v32i8:1030; GFNIAVX2:       # %bb.0:1031; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} ymm1 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]1032; GFNIAVX2-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [1,128,64,32,16,8,4,2,1,128,64,32,16,8,4,2]1033; GFNIAVX2-NEXT:    vpsrlw $8, %ymm1, %ymm11034; GFNIAVX2-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]1035; 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]1036; GFNIAVX2-NEXT:    vpsrlw $8, %ymm0, %ymm01037; GFNIAVX2-NEXT:    vpackuswb %ymm1, %ymm0, %ymm01038; GFNIAVX2-NEXT:    retq1039;1040; GFNIAVX512VL-LABEL: constant_rotr_v32i8:1041; GFNIAVX512VL:       # %bb.0:1042; GFNIAVX512VL-NEXT:    vpunpckhbw {{.*#+}} ymm1 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]1043; GFNIAVX512VL-NEXT:    vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [1,128,64,32,16,8,4,2,1,128,64,32,16,8,4,2]1044; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm1, %ymm11045; GFNIAVX512VL-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]1046; 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]1047; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm0, %ymm01048; GFNIAVX512VL-NEXT:    vpackuswb %ymm1, %ymm0, %ymm01049; GFNIAVX512VL-NEXT:    retq1050;1051; GFNIAVX512BW-LABEL: constant_rotr_v32i8:1052; GFNIAVX512BW:       # %bb.0:1053; GFNIAVX512BW-NEXT:    vpunpckhbw {{.*#+}} ymm1 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]1054; GFNIAVX512BW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11055; GFNIAVX512BW-NEXT:    vpsrlw $8, %ymm1, %ymm11056; GFNIAVX512BW-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]1057; GFNIAVX512BW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01058; GFNIAVX512BW-NEXT:    vpsrlw $8, %ymm0, %ymm01059; GFNIAVX512BW-NEXT:    vpackuswb %ymm1, %ymm0, %ymm01060; GFNIAVX512BW-NEXT:    retq1061  %res = call <32 x i8> @llvm.fshl.v32i8(<32 x i8> %a, <32 x i8> %a, <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>)1062  ret <32 x i8> %res1063}1064 1065define <32 x i8> @splatconstant_rotl_v32i8(<32 x i8> %a) nounwind {1066; GFNISSE-LABEL: splatconstant_rotl_v32i8:1067; GFNISSE:       # %bb.0:1068; GFNISSE-NEXT:    movdqa {{.*#+}} xmm2 = [8,4,2,1,128,64,32,16,8,4,2,1,128,64,32,16]1069; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm2, %xmm01070; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm2, %xmm11071; GFNISSE-NEXT:    retq1072;1073; GFNIAVX1OR2-LABEL: splatconstant_rotl_v32i8:1074; GFNIAVX1OR2:       # %bb.0:1075; GFNIAVX1OR2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01076; GFNIAVX1OR2-NEXT:    retq1077;1078; GFNIAVX512-LABEL: splatconstant_rotl_v32i8:1079; GFNIAVX512:       # %bb.0:1080; GFNIAVX512-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm01081; GFNIAVX512-NEXT:    retq1082  %res = call <32 x i8> @llvm.fshl.v32i8(<32 x i8> %a, <32 x i8> %a, <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>)1083  ret <32 x i8> %res1084}1085declare <32 x i8> @llvm.fshl.v32i8(<32 x i8>, <32 x i8>, <32 x i8>)1086 1087define <32 x i8> @splatconstant_rotr_v32i8(<32 x i8> %a) nounwind {1088; GFNISSE-LABEL: splatconstant_rotr_v32i8:1089; GFNISSE:       # %bb.0:1090; GFNISSE-NEXT:    movdqa {{.*#+}} xmm2 = [32,16,8,4,2,1,128,64,32,16,8,4,2,1,128,64]1091; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm2, %xmm01092; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm2, %xmm11093; GFNISSE-NEXT:    retq1094;1095; GFNIAVX1OR2-LABEL: splatconstant_rotr_v32i8:1096; GFNIAVX1OR2:       # %bb.0:1097; GFNIAVX1OR2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01098; GFNIAVX1OR2-NEXT:    retq1099;1100; GFNIAVX512-LABEL: splatconstant_rotr_v32i8:1101; GFNIAVX512:       # %bb.0:1102; GFNIAVX512-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm01103; GFNIAVX512-NEXT:    retq1104  %res = call <32 x i8> @llvm.fshr.v32i8(<32 x i8> %a, <32 x i8> %a, <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>)1105  ret <32 x i8> %res1106}1107declare <32 x i8> @llvm.fshr.v32i8(<32 x i8>, <32 x i8>, <32 x i8>)1108 1109;1110; 512 Bit Vector Rotates1111;1112 1113define <64 x i8> @var_rotl_v64i8(<64 x i8> %a, <64 x i8> %amt) nounwind {1114; GFNISSE-LABEL: var_rotl_v64i8:1115; GFNISSE:       # %bb.0:1116; GFNISSE-NEXT:    movdqa %xmm4, %xmm81117; GFNISSE-NEXT:    movdqa %xmm0, %xmm41118; GFNISSE-NEXT:    movdqa {{.*#+}} xmm9 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]1119; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm9, %xmm01120; GFNISSE-NEXT:    pmovsxdq {{.*#+}} xmm10 = [16909320,16909320]1121; GFNISSE-NEXT:    movdqa %xmm4, %xmm111122; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm10, %xmm111123; GFNISSE-NEXT:    por %xmm0, %xmm111124; GFNISSE-NEXT:    psllw $5, %xmm81125; GFNISSE-NEXT:    movdqa %xmm8, %xmm01126; GFNISSE-NEXT:    pblendvb %xmm0, %xmm11, %xmm41127; GFNISSE-NEXT:    movdqa {{.*#+}} xmm11 = [0,0,0,0,0,0,128,64,0,0,0,0,0,0,128,64]1128; GFNISSE-NEXT:    movdqa %xmm4, %xmm01129; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm11, %xmm01130; GFNISSE-NEXT:    movdqa {{.*#+}} xmm12 = [32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0]1131; GFNISSE-NEXT:    movdqa %xmm4, %xmm131132; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm12, %xmm131133; GFNISSE-NEXT:    por %xmm0, %xmm131134; GFNISSE-NEXT:    paddb %xmm8, %xmm81135; GFNISSE-NEXT:    movdqa %xmm8, %xmm01136; GFNISSE-NEXT:    pblendvb %xmm0, %xmm13, %xmm41137; GFNISSE-NEXT:    movdqa {{.*#+}} xmm13 = [0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,128]1138; GFNISSE-NEXT:    movdqa %xmm4, %xmm01139; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm13, %xmm01140; GFNISSE-NEXT:    movdqa %xmm4, %xmm141141; GFNISSE-NEXT:    paddb %xmm4, %xmm141142; GFNISSE-NEXT:    por %xmm0, %xmm141143; GFNISSE-NEXT:    paddb %xmm8, %xmm81144; GFNISSE-NEXT:    movdqa %xmm8, %xmm01145; GFNISSE-NEXT:    pblendvb %xmm0, %xmm14, %xmm41146; GFNISSE-NEXT:    movdqa %xmm1, %xmm01147; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm9, %xmm01148; GFNISSE-NEXT:    movdqa %xmm1, %xmm81149; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm10, %xmm81150; GFNISSE-NEXT:    por %xmm0, %xmm81151; GFNISSE-NEXT:    psllw $5, %xmm51152; GFNISSE-NEXT:    movdqa %xmm5, %xmm01153; GFNISSE-NEXT:    pblendvb %xmm0, %xmm8, %xmm11154; GFNISSE-NEXT:    movdqa %xmm1, %xmm01155; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm11, %xmm01156; GFNISSE-NEXT:    movdqa %xmm1, %xmm81157; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm12, %xmm81158; GFNISSE-NEXT:    por %xmm0, %xmm81159; GFNISSE-NEXT:    paddb %xmm5, %xmm51160; GFNISSE-NEXT:    movdqa %xmm5, %xmm01161; GFNISSE-NEXT:    pblendvb %xmm0, %xmm8, %xmm11162; GFNISSE-NEXT:    movdqa %xmm1, %xmm01163; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm13, %xmm01164; GFNISSE-NEXT:    movdqa %xmm1, %xmm81165; GFNISSE-NEXT:    paddb %xmm1, %xmm81166; GFNISSE-NEXT:    por %xmm0, %xmm81167; GFNISSE-NEXT:    paddb %xmm5, %xmm51168; GFNISSE-NEXT:    movdqa %xmm5, %xmm01169; GFNISSE-NEXT:    pblendvb %xmm0, %xmm8, %xmm11170; GFNISSE-NEXT:    movdqa %xmm2, %xmm01171; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm9, %xmm01172; GFNISSE-NEXT:    movdqa %xmm2, %xmm51173; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm10, %xmm51174; GFNISSE-NEXT:    por %xmm0, %xmm51175; GFNISSE-NEXT:    psllw $5, %xmm61176; GFNISSE-NEXT:    movdqa %xmm6, %xmm01177; GFNISSE-NEXT:    pblendvb %xmm0, %xmm5, %xmm21178; GFNISSE-NEXT:    movdqa %xmm2, %xmm01179; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm11, %xmm01180; GFNISSE-NEXT:    movdqa %xmm2, %xmm51181; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm12, %xmm51182; GFNISSE-NEXT:    por %xmm0, %xmm51183; GFNISSE-NEXT:    paddb %xmm6, %xmm61184; GFNISSE-NEXT:    movdqa %xmm6, %xmm01185; GFNISSE-NEXT:    pblendvb %xmm0, %xmm5, %xmm21186; GFNISSE-NEXT:    movdqa %xmm2, %xmm01187; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm13, %xmm01188; GFNISSE-NEXT:    movdqa %xmm2, %xmm51189; GFNISSE-NEXT:    paddb %xmm2, %xmm51190; GFNISSE-NEXT:    por %xmm0, %xmm51191; GFNISSE-NEXT:    paddb %xmm6, %xmm61192; GFNISSE-NEXT:    movdqa %xmm6, %xmm01193; GFNISSE-NEXT:    pblendvb %xmm0, %xmm5, %xmm21194; GFNISSE-NEXT:    movdqa %xmm3, %xmm01195; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm9, %xmm01196; GFNISSE-NEXT:    movdqa %xmm3, %xmm51197; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm10, %xmm51198; GFNISSE-NEXT:    por %xmm0, %xmm51199; GFNISSE-NEXT:    psllw $5, %xmm71200; GFNISSE-NEXT:    movdqa %xmm7, %xmm01201; GFNISSE-NEXT:    pblendvb %xmm0, %xmm5, %xmm31202; GFNISSE-NEXT:    movdqa %xmm3, %xmm01203; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm11, %xmm01204; GFNISSE-NEXT:    movdqa %xmm3, %xmm51205; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm12, %xmm51206; GFNISSE-NEXT:    por %xmm0, %xmm51207; GFNISSE-NEXT:    paddb %xmm7, %xmm71208; GFNISSE-NEXT:    movdqa %xmm7, %xmm01209; GFNISSE-NEXT:    pblendvb %xmm0, %xmm5, %xmm31210; GFNISSE-NEXT:    movdqa %xmm3, %xmm01211; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm13, %xmm01212; GFNISSE-NEXT:    movdqa %xmm3, %xmm51213; GFNISSE-NEXT:    paddb %xmm3, %xmm51214; GFNISSE-NEXT:    por %xmm0, %xmm51215; GFNISSE-NEXT:    paddb %xmm7, %xmm71216; GFNISSE-NEXT:    movdqa %xmm7, %xmm01217; GFNISSE-NEXT:    pblendvb %xmm0, %xmm5, %xmm31218; GFNISSE-NEXT:    movdqa %xmm4, %xmm01219; GFNISSE-NEXT:    retq1220;1221; GFNIAVX1-LABEL: var_rotl_v64i8:1222; GFNIAVX1:       # %bb.0:1223; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm61224; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm4 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]1225; GFNIAVX1-NEXT:    # xmm4 = mem[0,0]1226; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm4, %xmm6, %xmm71227; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm5 = [8,4,2,1,0,0,0,0,8,4,2,1,0,0,0,0]1228; GFNIAVX1-NEXT:    # xmm5 = mem[0,0]1229; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm5, %xmm6, %xmm81230; GFNIAVX1-NEXT:    vpor %xmm7, %xmm8, %xmm71231; GFNIAVX1-NEXT:    vextractf128 $1, %ymm2, %xmm81232; GFNIAVX1-NEXT:    vpsllw $5, %xmm8, %xmm81233; GFNIAVX1-NEXT:    vpblendvb %xmm8, %xmm7, %xmm6, %xmm91234; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm6 = [0,0,0,0,0,0,128,64,0,0,0,0,0,0,128,64]1235; GFNIAVX1-NEXT:    # xmm6 = mem[0,0]1236; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm6, %xmm9, %xmm101237; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm7 = [32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0]1238; GFNIAVX1-NEXT:    # xmm7 = mem[0,0]1239; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm7, %xmm9, %xmm111240; GFNIAVX1-NEXT:    vpor %xmm10, %xmm11, %xmm101241; GFNIAVX1-NEXT:    vpaddb %xmm8, %xmm8, %xmm111242; GFNIAVX1-NEXT:    vpblendvb %xmm11, %xmm10, %xmm9, %xmm91243; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm8 = [0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,128]1244; GFNIAVX1-NEXT:    # xmm8 = mem[0,0]1245; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm8, %xmm9, %xmm101246; GFNIAVX1-NEXT:    vpaddb %xmm9, %xmm9, %xmm121247; GFNIAVX1-NEXT:    vpor %xmm10, %xmm12, %xmm101248; GFNIAVX1-NEXT:    vpaddb %xmm11, %xmm11, %xmm111249; GFNIAVX1-NEXT:    vpblendvb %xmm11, %xmm10, %xmm9, %xmm91250; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm4, %xmm0, %xmm101251; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm5, %xmm0, %xmm111252; GFNIAVX1-NEXT:    vpor %xmm10, %xmm11, %xmm101253; GFNIAVX1-NEXT:    vpsllw $5, %xmm2, %xmm21254; GFNIAVX1-NEXT:    vpblendvb %xmm2, %xmm10, %xmm0, %xmm01255; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm6, %xmm0, %xmm101256; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm7, %xmm0, %xmm111257; GFNIAVX1-NEXT:    vpor %xmm10, %xmm11, %xmm101258; GFNIAVX1-NEXT:    vpaddb %xmm2, %xmm2, %xmm21259; GFNIAVX1-NEXT:    vpblendvb %xmm2, %xmm10, %xmm0, %xmm01260; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm8, %xmm0, %xmm101261; GFNIAVX1-NEXT:    vpaddb %xmm0, %xmm0, %xmm111262; GFNIAVX1-NEXT:    vpor %xmm10, %xmm11, %xmm101263; GFNIAVX1-NEXT:    vpaddb %xmm2, %xmm2, %xmm21264; GFNIAVX1-NEXT:    vpblendvb %xmm2, %xmm10, %xmm0, %xmm01265; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm9, %ymm0, %ymm01266; GFNIAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm21267; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm4, %xmm2, %xmm91268; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm5, %xmm2, %xmm101269; GFNIAVX1-NEXT:    vpor %xmm9, %xmm10, %xmm91270; GFNIAVX1-NEXT:    vextractf128 $1, %ymm3, %xmm101271; GFNIAVX1-NEXT:    vpsllw $5, %xmm10, %xmm101272; GFNIAVX1-NEXT:    vpblendvb %xmm10, %xmm9, %xmm2, %xmm21273; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm6, %xmm2, %xmm91274; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm7, %xmm2, %xmm111275; GFNIAVX1-NEXT:    vpor %xmm9, %xmm11, %xmm91276; GFNIAVX1-NEXT:    vpaddb %xmm10, %xmm10, %xmm101277; GFNIAVX1-NEXT:    vpblendvb %xmm10, %xmm9, %xmm2, %xmm21278; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm8, %xmm2, %xmm91279; GFNIAVX1-NEXT:    vpaddb %xmm2, %xmm2, %xmm111280; GFNIAVX1-NEXT:    vpor %xmm9, %xmm11, %xmm91281; GFNIAVX1-NEXT:    vpaddb %xmm10, %xmm10, %xmm101282; GFNIAVX1-NEXT:    vpblendvb %xmm10, %xmm9, %xmm2, %xmm21283; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm4, %xmm1, %xmm41284; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm5, %xmm1, %xmm51285; GFNIAVX1-NEXT:    vpor %xmm4, %xmm5, %xmm41286; GFNIAVX1-NEXT:    vpsllw $5, %xmm3, %xmm31287; GFNIAVX1-NEXT:    vpblendvb %xmm3, %xmm4, %xmm1, %xmm11288; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm6, %xmm1, %xmm41289; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm7, %xmm1, %xmm51290; GFNIAVX1-NEXT:    vpor %xmm4, %xmm5, %xmm41291; GFNIAVX1-NEXT:    vpaddb %xmm3, %xmm3, %xmm31292; GFNIAVX1-NEXT:    vpblendvb %xmm3, %xmm4, %xmm1, %xmm11293; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm8, %xmm1, %xmm41294; GFNIAVX1-NEXT:    vpaddb %xmm1, %xmm1, %xmm51295; GFNIAVX1-NEXT:    vpor %xmm4, %xmm5, %xmm41296; GFNIAVX1-NEXT:    vpaddb %xmm3, %xmm3, %xmm31297; GFNIAVX1-NEXT:    vpblendvb %xmm3, %xmm4, %xmm1, %xmm11298; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm11299; GFNIAVX1-NEXT:    retq1300;1301; GFNIAVX2-LABEL: var_rotl_v64i8:1302; GFNIAVX2:       # %bb.0:1303; GFNIAVX2-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]1304; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm4, %ymm0, %ymm51305; GFNIAVX2-NEXT:    vpbroadcastq {{.*#+}} ymm6 = [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]1306; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm6, %ymm0, %ymm71307; GFNIAVX2-NEXT:    vpor %ymm5, %ymm7, %ymm51308; GFNIAVX2-NEXT:    vpsllw $5, %ymm2, %ymm21309; GFNIAVX2-NEXT:    vpblendvb %ymm2, %ymm5, %ymm0, %ymm01310; GFNIAVX2-NEXT:    vpbroadcastq {{.*#+}} ymm5 = [0,0,0,0,0,0,128,64,0,0,0,0,0,0,128,64,0,0,0,0,0,0,128,64,0,0,0,0,0,0,128,64]1311; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm5, %ymm0, %ymm71312; GFNIAVX2-NEXT:    vpbroadcastq {{.*#+}} ymm8 = [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]1313; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm8, %ymm0, %ymm91314; GFNIAVX2-NEXT:    vpor %ymm7, %ymm9, %ymm71315; GFNIAVX2-NEXT:    vpaddb %ymm2, %ymm2, %ymm21316; GFNIAVX2-NEXT:    vpblendvb %ymm2, %ymm7, %ymm0, %ymm01317; GFNIAVX2-NEXT:    vpbroadcastq {{.*#+}} ymm7 = [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]1318; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm7, %ymm0, %ymm91319; GFNIAVX2-NEXT:    vpaddb %ymm0, %ymm0, %ymm101320; GFNIAVX2-NEXT:    vpor %ymm9, %ymm10, %ymm91321; GFNIAVX2-NEXT:    vpaddb %ymm2, %ymm2, %ymm21322; GFNIAVX2-NEXT:    vpblendvb %ymm2, %ymm9, %ymm0, %ymm01323; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm4, %ymm1, %ymm21324; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm6, %ymm1, %ymm41325; GFNIAVX2-NEXT:    vpor %ymm2, %ymm4, %ymm21326; GFNIAVX2-NEXT:    vpsllw $5, %ymm3, %ymm31327; GFNIAVX2-NEXT:    vpblendvb %ymm3, %ymm2, %ymm1, %ymm11328; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm5, %ymm1, %ymm21329; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm8, %ymm1, %ymm41330; GFNIAVX2-NEXT:    vpor %ymm2, %ymm4, %ymm21331; GFNIAVX2-NEXT:    vpaddb %ymm3, %ymm3, %ymm31332; GFNIAVX2-NEXT:    vpblendvb %ymm3, %ymm2, %ymm1, %ymm11333; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm7, %ymm1, %ymm21334; GFNIAVX2-NEXT:    vpaddb %ymm1, %ymm1, %ymm41335; GFNIAVX2-NEXT:    vpor %ymm2, %ymm4, %ymm21336; GFNIAVX2-NEXT:    vpaddb %ymm3, %ymm3, %ymm31337; GFNIAVX2-NEXT:    vpblendvb %ymm3, %ymm2, %ymm1, %ymm11338; GFNIAVX2-NEXT:    retq1339;1340; GFNIAVX512VL-LABEL: var_rotl_v64i8:1341; GFNIAVX512VL:       # %bb.0:1342; GFNIAVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm21343; GFNIAVX512VL-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [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]1344; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm3, %ymm2, %ymm41345; GFNIAVX512VL-NEXT:    vpbroadcastq {{.*#+}} ymm5 = [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]1346; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm5, %ymm2, %ymm61347; GFNIAVX512VL-NEXT:    vpor %ymm4, %ymm6, %ymm41348; GFNIAVX512VL-NEXT:    vextracti64x4 $1, %zmm1, %ymm61349; GFNIAVX512VL-NEXT:    vpsllw $5, %ymm6, %ymm61350; GFNIAVX512VL-NEXT:    vpblendvb %ymm6, %ymm4, %ymm2, %ymm21351; GFNIAVX512VL-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [0,0,0,0,0,0,128,64,0,0,0,0,0,0,128,64,0,0,0,0,0,0,128,64,0,0,0,0,0,0,128,64]1352; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm4, %ymm2, %ymm71353; GFNIAVX512VL-NEXT:    vpbroadcastq {{.*#+}} ymm8 = [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]1354; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm8, %ymm2, %ymm91355; GFNIAVX512VL-NEXT:    vpor %ymm7, %ymm9, %ymm71356; GFNIAVX512VL-NEXT:    vpaddb %ymm6, %ymm6, %ymm61357; GFNIAVX512VL-NEXT:    vpblendvb %ymm6, %ymm7, %ymm2, %ymm21358; GFNIAVX512VL-NEXT:    vpbroadcastq {{.*#+}} ymm7 = [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]1359; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm7, %ymm2, %ymm91360; GFNIAVX512VL-NEXT:    vpaddb %ymm2, %ymm2, %ymm101361; GFNIAVX512VL-NEXT:    vpor %ymm9, %ymm10, %ymm91362; GFNIAVX512VL-NEXT:    vpaddb %ymm6, %ymm6, %ymm61363; GFNIAVX512VL-NEXT:    vpblendvb %ymm6, %ymm9, %ymm2, %ymm21364; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm3, %ymm0, %ymm31365; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm5, %ymm0, %ymm51366; GFNIAVX512VL-NEXT:    vpor %ymm3, %ymm5, %ymm31367; GFNIAVX512VL-NEXT:    vpsllw $5, %ymm1, %ymm11368; GFNIAVX512VL-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm01369; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm4, %ymm0, %ymm31370; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm8, %ymm0, %ymm41371; GFNIAVX512VL-NEXT:    vpor %ymm3, %ymm4, %ymm31372; GFNIAVX512VL-NEXT:    vpaddb %ymm1, %ymm1, %ymm11373; GFNIAVX512VL-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm01374; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm7, %ymm0, %ymm31375; GFNIAVX512VL-NEXT:    vpaddb %ymm0, %ymm0, %ymm41376; GFNIAVX512VL-NEXT:    vpor %ymm3, %ymm4, %ymm31377; GFNIAVX512VL-NEXT:    vpaddb %ymm1, %ymm1, %ymm11378; GFNIAVX512VL-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm01379; GFNIAVX512VL-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm01380; GFNIAVX512VL-NEXT:    retq1381;1382; GFNIAVX512BW-LABEL: var_rotl_v64i8:1383; GFNIAVX512BW:       # %bb.0:1384; GFNIAVX512BW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm1, %zmm11385; GFNIAVX512BW-NEXT:    vpxor %xmm2, %xmm2, %xmm21386; GFNIAVX512BW-NEXT:    vpunpckhbw {{.*#+}} zmm3 = zmm1[8],zmm2[8],zmm1[9],zmm2[9],zmm1[10],zmm2[10],zmm1[11],zmm2[11],zmm1[12],zmm2[12],zmm1[13],zmm2[13],zmm1[14],zmm2[14],zmm1[15],zmm2[15],zmm1[24],zmm2[24],zmm1[25],zmm2[25],zmm1[26],zmm2[26],zmm1[27],zmm2[27],zmm1[28],zmm2[28],zmm1[29],zmm2[29],zmm1[30],zmm2[30],zmm1[31],zmm2[31],zmm1[40],zmm2[40],zmm1[41],zmm2[41],zmm1[42],zmm2[42],zmm1[43],zmm2[43],zmm1[44],zmm2[44],zmm1[45],zmm2[45],zmm1[46],zmm2[46],zmm1[47],zmm2[47],zmm1[56],zmm2[56],zmm1[57],zmm2[57],zmm1[58],zmm2[58],zmm1[59],zmm2[59],zmm1[60],zmm2[60],zmm1[61],zmm2[61],zmm1[62],zmm2[62],zmm1[63],zmm2[63]1387; GFNIAVX512BW-NEXT:    vpunpckhbw {{.*#+}} zmm4 = zmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,56,56,57,57,58,58,59,59,60,60,61,61,62,62,63,63]1388; GFNIAVX512BW-NEXT:    vpsllvw %zmm3, %zmm4, %zmm31389; GFNIAVX512BW-NEXT:    vpsrlw $8, %zmm3, %zmm31390; GFNIAVX512BW-NEXT:    vpunpcklbw {{.*#+}} zmm1 = zmm1[0],zmm2[0],zmm1[1],zmm2[1],zmm1[2],zmm2[2],zmm1[3],zmm2[3],zmm1[4],zmm2[4],zmm1[5],zmm2[5],zmm1[6],zmm2[6],zmm1[7],zmm2[7],zmm1[16],zmm2[16],zmm1[17],zmm2[17],zmm1[18],zmm2[18],zmm1[19],zmm2[19],zmm1[20],zmm2[20],zmm1[21],zmm2[21],zmm1[22],zmm2[22],zmm1[23],zmm2[23],zmm1[32],zmm2[32],zmm1[33],zmm2[33],zmm1[34],zmm2[34],zmm1[35],zmm2[35],zmm1[36],zmm2[36],zmm1[37],zmm2[37],zmm1[38],zmm2[38],zmm1[39],zmm2[39],zmm1[48],zmm2[48],zmm1[49],zmm2[49],zmm1[50],zmm2[50],zmm1[51],zmm2[51],zmm1[52],zmm2[52],zmm1[53],zmm2[53],zmm1[54],zmm2[54],zmm1[55],zmm2[55]1391; GFNIAVX512BW-NEXT:    vpunpcklbw {{.*#+}} zmm0 = zmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,48,48,49,49,50,50,51,51,52,52,53,53,54,54,55,55]1392; GFNIAVX512BW-NEXT:    vpsllvw %zmm1, %zmm0, %zmm01393; GFNIAVX512BW-NEXT:    vpsrlw $8, %zmm0, %zmm01394; GFNIAVX512BW-NEXT:    vpackuswb %zmm3, %zmm0, %zmm01395; GFNIAVX512BW-NEXT:    retq1396  %res = call <64 x i8> @llvm.fshl.v64i8(<64 x i8> %a, <64 x i8> %a, <64 x i8> %amt)1397  ret <64 x i8> %res1398}1399define <64 x i8> @var_rotr_v64i8(<64 x i8> %a, <64 x i8> %amt) nounwind {1400; GFNISSE-LABEL: var_rotr_v64i8:1401; GFNISSE:       # %bb.0:1402; GFNISSE-NEXT:    movdqa %xmm0, %xmm91403; GFNISSE-NEXT:    movdqa {{.*#+}} xmm10 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]1404; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm10, %xmm01405; GFNISSE-NEXT:    pmovsxdq {{.*#+}} xmm11 = [16909320,16909320]1406; GFNISSE-NEXT:    movdqa %xmm9, %xmm121407; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm11, %xmm121408; GFNISSE-NEXT:    por %xmm0, %xmm121409; GFNISSE-NEXT:    pxor %xmm8, %xmm81410; GFNISSE-NEXT:    pxor %xmm0, %xmm01411; GFNISSE-NEXT:    psubb %xmm4, %xmm01412; GFNISSE-NEXT:    psllw $5, %xmm01413; GFNISSE-NEXT:    pblendvb %xmm0, %xmm12, %xmm91414; GFNISSE-NEXT:    movdqa {{.*#+}} xmm4 = [0,0,0,0,0,0,128,64,0,0,0,0,0,0,128,64]1415; GFNISSE-NEXT:    movdqa %xmm9, %xmm131416; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm4, %xmm131417; GFNISSE-NEXT:    movdqa {{.*#+}} xmm12 = [32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0]1418; GFNISSE-NEXT:    movdqa %xmm9, %xmm141419; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm12, %xmm141420; GFNISSE-NEXT:    por %xmm13, %xmm141421; GFNISSE-NEXT:    paddb %xmm0, %xmm01422; GFNISSE-NEXT:    pblendvb %xmm0, %xmm14, %xmm91423; GFNISSE-NEXT:    movdqa {{.*#+}} xmm13 = [0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,128]1424; GFNISSE-NEXT:    movdqa %xmm9, %xmm141425; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm13, %xmm141426; GFNISSE-NEXT:    movdqa %xmm9, %xmm151427; GFNISSE-NEXT:    paddb %xmm9, %xmm151428; GFNISSE-NEXT:    por %xmm14, %xmm151429; GFNISSE-NEXT:    paddb %xmm0, %xmm01430; GFNISSE-NEXT:    pblendvb %xmm0, %xmm15, %xmm91431; GFNISSE-NEXT:    movdqa %xmm1, %xmm01432; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm10, %xmm01433; GFNISSE-NEXT:    movdqa %xmm1, %xmm141434; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm11, %xmm141435; GFNISSE-NEXT:    por %xmm0, %xmm141436; GFNISSE-NEXT:    pxor %xmm0, %xmm01437; GFNISSE-NEXT:    psubb %xmm5, %xmm01438; GFNISSE-NEXT:    psllw $5, %xmm01439; GFNISSE-NEXT:    pblendvb %xmm0, %xmm14, %xmm11440; GFNISSE-NEXT:    movdqa %xmm1, %xmm51441; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm4, %xmm51442; GFNISSE-NEXT:    movdqa %xmm1, %xmm141443; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm12, %xmm141444; GFNISSE-NEXT:    por %xmm5, %xmm141445; GFNISSE-NEXT:    paddb %xmm0, %xmm01446; GFNISSE-NEXT:    pblendvb %xmm0, %xmm14, %xmm11447; GFNISSE-NEXT:    movdqa %xmm1, %xmm51448; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm13, %xmm51449; GFNISSE-NEXT:    movdqa %xmm1, %xmm141450; GFNISSE-NEXT:    paddb %xmm1, %xmm141451; GFNISSE-NEXT:    por %xmm5, %xmm141452; GFNISSE-NEXT:    paddb %xmm0, %xmm01453; GFNISSE-NEXT:    pblendvb %xmm0, %xmm14, %xmm11454; GFNISSE-NEXT:    movdqa %xmm2, %xmm01455; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm10, %xmm01456; GFNISSE-NEXT:    movdqa %xmm2, %xmm51457; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm11, %xmm51458; GFNISSE-NEXT:    por %xmm0, %xmm51459; GFNISSE-NEXT:    pxor %xmm0, %xmm01460; GFNISSE-NEXT:    psubb %xmm6, %xmm01461; GFNISSE-NEXT:    psllw $5, %xmm01462; GFNISSE-NEXT:    pblendvb %xmm0, %xmm5, %xmm21463; GFNISSE-NEXT:    movdqa %xmm2, %xmm51464; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm4, %xmm51465; GFNISSE-NEXT:    movdqa %xmm2, %xmm61466; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm12, %xmm61467; GFNISSE-NEXT:    por %xmm5, %xmm61468; GFNISSE-NEXT:    paddb %xmm0, %xmm01469; GFNISSE-NEXT:    pblendvb %xmm0, %xmm6, %xmm21470; GFNISSE-NEXT:    movdqa %xmm2, %xmm51471; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm13, %xmm51472; GFNISSE-NEXT:    movdqa %xmm2, %xmm61473; GFNISSE-NEXT:    paddb %xmm2, %xmm61474; GFNISSE-NEXT:    por %xmm5, %xmm61475; GFNISSE-NEXT:    paddb %xmm0, %xmm01476; GFNISSE-NEXT:    pblendvb %xmm0, %xmm6, %xmm21477; GFNISSE-NEXT:    movdqa %xmm3, %xmm01478; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm10, %xmm01479; GFNISSE-NEXT:    movdqa %xmm3, %xmm51480; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm11, %xmm51481; GFNISSE-NEXT:    por %xmm0, %xmm51482; GFNISSE-NEXT:    psubb %xmm7, %xmm81483; GFNISSE-NEXT:    psllw $5, %xmm81484; GFNISSE-NEXT:    movdqa %xmm8, %xmm01485; GFNISSE-NEXT:    pblendvb %xmm0, %xmm5, %xmm31486; GFNISSE-NEXT:    movdqa %xmm3, %xmm01487; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm4, %xmm01488; GFNISSE-NEXT:    movdqa %xmm3, %xmm41489; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm12, %xmm41490; GFNISSE-NEXT:    por %xmm0, %xmm41491; GFNISSE-NEXT:    paddb %xmm8, %xmm81492; GFNISSE-NEXT:    movdqa %xmm8, %xmm01493; GFNISSE-NEXT:    pblendvb %xmm0, %xmm4, %xmm31494; GFNISSE-NEXT:    movdqa %xmm3, %xmm01495; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm13, %xmm01496; GFNISSE-NEXT:    movdqa %xmm3, %xmm41497; GFNISSE-NEXT:    paddb %xmm3, %xmm41498; GFNISSE-NEXT:    por %xmm0, %xmm41499; GFNISSE-NEXT:    paddb %xmm8, %xmm81500; GFNISSE-NEXT:    movdqa %xmm8, %xmm01501; GFNISSE-NEXT:    pblendvb %xmm0, %xmm4, %xmm31502; GFNISSE-NEXT:    movdqa %xmm9, %xmm01503; GFNISSE-NEXT:    retq1504;1505; GFNIAVX1-LABEL: var_rotr_v64i8:1506; GFNIAVX1:       # %bb.0:1507; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm71508; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm4 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]1509; GFNIAVX1-NEXT:    # xmm4 = mem[0,0]1510; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm4, %xmm7, %xmm61511; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm5 = [8,4,2,1,0,0,0,0,8,4,2,1,0,0,0,0]1512; GFNIAVX1-NEXT:    # xmm5 = mem[0,0]1513; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm5, %xmm7, %xmm81514; GFNIAVX1-NEXT:    vpor %xmm6, %xmm8, %xmm81515; GFNIAVX1-NEXT:    vextractf128 $1, %ymm2, %xmm91516; GFNIAVX1-NEXT:    vpxor %xmm6, %xmm6, %xmm61517; GFNIAVX1-NEXT:    vpsubb %xmm9, %xmm6, %xmm91518; GFNIAVX1-NEXT:    vpsllw $5, %xmm9, %xmm91519; GFNIAVX1-NEXT:    vpblendvb %xmm9, %xmm8, %xmm7, %xmm101520; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm7 = [0,0,0,0,0,0,128,64,0,0,0,0,0,0,128,64]1521; GFNIAVX1-NEXT:    # xmm7 = mem[0,0]1522; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm7, %xmm10, %xmm111523; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm8 = [32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0]1524; GFNIAVX1-NEXT:    # xmm8 = mem[0,0]1525; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm8, %xmm10, %xmm121526; GFNIAVX1-NEXT:    vpor %xmm11, %xmm12, %xmm111527; GFNIAVX1-NEXT:    vpaddb %xmm9, %xmm9, %xmm121528; GFNIAVX1-NEXT:    vpblendvb %xmm12, %xmm11, %xmm10, %xmm101529; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm9 = [0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,128]1530; GFNIAVX1-NEXT:    # xmm9 = mem[0,0]1531; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm9, %xmm10, %xmm111532; GFNIAVX1-NEXT:    vpaddb %xmm10, %xmm10, %xmm131533; GFNIAVX1-NEXT:    vpor %xmm11, %xmm13, %xmm111534; GFNIAVX1-NEXT:    vpaddb %xmm12, %xmm12, %xmm121535; GFNIAVX1-NEXT:    vpblendvb %xmm12, %xmm11, %xmm10, %xmm101536; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm4, %xmm0, %xmm111537; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm5, %xmm0, %xmm121538; GFNIAVX1-NEXT:    vpor %xmm11, %xmm12, %xmm111539; GFNIAVX1-NEXT:    vpsubb %xmm2, %xmm6, %xmm21540; GFNIAVX1-NEXT:    vpsllw $5, %xmm2, %xmm21541; GFNIAVX1-NEXT:    vpblendvb %xmm2, %xmm11, %xmm0, %xmm01542; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm7, %xmm0, %xmm111543; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm8, %xmm0, %xmm121544; GFNIAVX1-NEXT:    vpor %xmm11, %xmm12, %xmm111545; GFNIAVX1-NEXT:    vpaddb %xmm2, %xmm2, %xmm21546; GFNIAVX1-NEXT:    vpblendvb %xmm2, %xmm11, %xmm0, %xmm01547; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm9, %xmm0, %xmm111548; GFNIAVX1-NEXT:    vpaddb %xmm0, %xmm0, %xmm121549; GFNIAVX1-NEXT:    vpor %xmm11, %xmm12, %xmm111550; GFNIAVX1-NEXT:    vpaddb %xmm2, %xmm2, %xmm21551; GFNIAVX1-NEXT:    vpblendvb %xmm2, %xmm11, %xmm0, %xmm01552; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm10, %ymm0, %ymm01553; GFNIAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm21554; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm4, %xmm2, %xmm101555; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm5, %xmm2, %xmm111556; GFNIAVX1-NEXT:    vpor %xmm10, %xmm11, %xmm101557; GFNIAVX1-NEXT:    vextractf128 $1, %ymm3, %xmm111558; GFNIAVX1-NEXT:    vpsubb %xmm11, %xmm6, %xmm111559; GFNIAVX1-NEXT:    vpsllw $5, %xmm11, %xmm111560; GFNIAVX1-NEXT:    vpblendvb %xmm11, %xmm10, %xmm2, %xmm21561; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm7, %xmm2, %xmm101562; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm8, %xmm2, %xmm121563; GFNIAVX1-NEXT:    vpor %xmm10, %xmm12, %xmm101564; GFNIAVX1-NEXT:    vpaddb %xmm11, %xmm11, %xmm111565; GFNIAVX1-NEXT:    vpblendvb %xmm11, %xmm10, %xmm2, %xmm21566; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm9, %xmm2, %xmm101567; GFNIAVX1-NEXT:    vpaddb %xmm2, %xmm2, %xmm121568; GFNIAVX1-NEXT:    vpor %xmm10, %xmm12, %xmm101569; GFNIAVX1-NEXT:    vpaddb %xmm11, %xmm11, %xmm111570; GFNIAVX1-NEXT:    vpblendvb %xmm11, %xmm10, %xmm2, %xmm21571; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm4, %xmm1, %xmm41572; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm5, %xmm1, %xmm51573; GFNIAVX1-NEXT:    vpor %xmm4, %xmm5, %xmm41574; GFNIAVX1-NEXT:    vpsubb %xmm3, %xmm6, %xmm31575; GFNIAVX1-NEXT:    vpsllw $5, %xmm3, %xmm31576; GFNIAVX1-NEXT:    vpblendvb %xmm3, %xmm4, %xmm1, %xmm11577; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm7, %xmm1, %xmm41578; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm8, %xmm1, %xmm51579; GFNIAVX1-NEXT:    vpor %xmm4, %xmm5, %xmm41580; GFNIAVX1-NEXT:    vpaddb %xmm3, %xmm3, %xmm31581; GFNIAVX1-NEXT:    vpblendvb %xmm3, %xmm4, %xmm1, %xmm11582; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm9, %xmm1, %xmm41583; GFNIAVX1-NEXT:    vpaddb %xmm1, %xmm1, %xmm51584; GFNIAVX1-NEXT:    vpor %xmm4, %xmm5, %xmm41585; GFNIAVX1-NEXT:    vpaddb %xmm3, %xmm3, %xmm31586; GFNIAVX1-NEXT:    vpblendvb %xmm3, %xmm4, %xmm1, %xmm11587; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm11588; GFNIAVX1-NEXT:    retq1589;1590; GFNIAVX2-LABEL: var_rotr_v64i8:1591; GFNIAVX2:       # %bb.0:1592; GFNIAVX2-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]1593; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm4, %ymm0, %ymm51594; GFNIAVX2-NEXT:    vpbroadcastq {{.*#+}} ymm6 = [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]1595; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm6, %ymm0, %ymm71596; GFNIAVX2-NEXT:    vpor %ymm5, %ymm7, %ymm51597; GFNIAVX2-NEXT:    vpxor %xmm7, %xmm7, %xmm71598; GFNIAVX2-NEXT:    vpsubb %ymm2, %ymm7, %ymm21599; GFNIAVX2-NEXT:    vpsllw $5, %ymm2, %ymm21600; GFNIAVX2-NEXT:    vpblendvb %ymm2, %ymm5, %ymm0, %ymm01601; GFNIAVX2-NEXT:    vpbroadcastq {{.*#+}} ymm5 = [0,0,0,0,0,0,128,64,0,0,0,0,0,0,128,64,0,0,0,0,0,0,128,64,0,0,0,0,0,0,128,64]1602; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm5, %ymm0, %ymm81603; GFNIAVX2-NEXT:    vpbroadcastq {{.*#+}} ymm9 = [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]1604; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm9, %ymm0, %ymm101605; GFNIAVX2-NEXT:    vpor %ymm8, %ymm10, %ymm81606; GFNIAVX2-NEXT:    vpaddb %ymm2, %ymm2, %ymm21607; GFNIAVX2-NEXT:    vpblendvb %ymm2, %ymm8, %ymm0, %ymm01608; GFNIAVX2-NEXT:    vpbroadcastq {{.*#+}} ymm8 = [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]1609; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm8, %ymm0, %ymm101610; GFNIAVX2-NEXT:    vpaddb %ymm0, %ymm0, %ymm111611; GFNIAVX2-NEXT:    vpor %ymm10, %ymm11, %ymm101612; GFNIAVX2-NEXT:    vpaddb %ymm2, %ymm2, %ymm21613; GFNIAVX2-NEXT:    vpblendvb %ymm2, %ymm10, %ymm0, %ymm01614; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm4, %ymm1, %ymm21615; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm6, %ymm1, %ymm41616; GFNIAVX2-NEXT:    vpor %ymm2, %ymm4, %ymm21617; GFNIAVX2-NEXT:    vpsubb %ymm3, %ymm7, %ymm31618; GFNIAVX2-NEXT:    vpsllw $5, %ymm3, %ymm31619; GFNIAVX2-NEXT:    vpblendvb %ymm3, %ymm2, %ymm1, %ymm11620; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm5, %ymm1, %ymm21621; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm9, %ymm1, %ymm41622; GFNIAVX2-NEXT:    vpor %ymm2, %ymm4, %ymm21623; GFNIAVX2-NEXT:    vpaddb %ymm3, %ymm3, %ymm31624; GFNIAVX2-NEXT:    vpblendvb %ymm3, %ymm2, %ymm1, %ymm11625; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm8, %ymm1, %ymm21626; GFNIAVX2-NEXT:    vpaddb %ymm1, %ymm1, %ymm41627; GFNIAVX2-NEXT:    vpor %ymm2, %ymm4, %ymm21628; GFNIAVX2-NEXT:    vpaddb %ymm3, %ymm3, %ymm31629; GFNIAVX2-NEXT:    vpblendvb %ymm3, %ymm2, %ymm1, %ymm11630; GFNIAVX2-NEXT:    retq1631;1632; GFNIAVX512VL-LABEL: var_rotr_v64i8:1633; GFNIAVX512VL:       # %bb.0:1634; GFNIAVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm21635; GFNIAVX512VL-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [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]1636; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm3, %ymm2, %ymm41637; 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]1638; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm5, %ymm2, %ymm61639; GFNIAVX512VL-NEXT:    vpor %ymm4, %ymm6, %ymm41640; GFNIAVX512VL-NEXT:    vextracti64x4 $1, %zmm1, %ymm61641; GFNIAVX512VL-NEXT:    vpsllw $5, %ymm6, %ymm61642; GFNIAVX512VL-NEXT:    vpblendvb %ymm6, %ymm4, %ymm2, %ymm21643; GFNIAVX512VL-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [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]1644; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm4, %ymm2, %ymm71645; GFNIAVX512VL-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]1646; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm8, %ymm2, %ymm91647; GFNIAVX512VL-NEXT:    vpor %ymm7, %ymm9, %ymm71648; GFNIAVX512VL-NEXT:    vpaddb %ymm6, %ymm6, %ymm61649; GFNIAVX512VL-NEXT:    vpblendvb %ymm6, %ymm7, %ymm2, %ymm21650; GFNIAVX512VL-NEXT:    vpbroadcastq {{.*#+}} ymm7 = [1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0]1651; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm7, %ymm2, %ymm91652; GFNIAVX512VL-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]1653; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm10, %ymm2, %ymm111654; GFNIAVX512VL-NEXT:    vpor %ymm9, %ymm11, %ymm91655; GFNIAVX512VL-NEXT:    vpaddb %ymm6, %ymm6, %ymm61656; GFNIAVX512VL-NEXT:    vpblendvb %ymm6, %ymm9, %ymm2, %ymm21657; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm3, %ymm0, %ymm31658; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm5, %ymm0, %ymm51659; GFNIAVX512VL-NEXT:    vpor %ymm3, %ymm5, %ymm31660; GFNIAVX512VL-NEXT:    vpsllw $5, %ymm1, %ymm11661; GFNIAVX512VL-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm01662; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm4, %ymm0, %ymm31663; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm8, %ymm0, %ymm41664; GFNIAVX512VL-NEXT:    vpor %ymm3, %ymm4, %ymm31665; GFNIAVX512VL-NEXT:    vpaddb %ymm1, %ymm1, %ymm11666; GFNIAVX512VL-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm01667; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm7, %ymm0, %ymm31668; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm10, %ymm0, %ymm41669; GFNIAVX512VL-NEXT:    vpor %ymm3, %ymm4, %ymm31670; GFNIAVX512VL-NEXT:    vpaddb %ymm1, %ymm1, %ymm11671; GFNIAVX512VL-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm01672; GFNIAVX512VL-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm01673; GFNIAVX512VL-NEXT:    retq1674;1675; GFNIAVX512BW-LABEL: var_rotr_v64i8:1676; GFNIAVX512BW:       # %bb.0:1677; GFNIAVX512BW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm1, %zmm11678; GFNIAVX512BW-NEXT:    vpxor %xmm2, %xmm2, %xmm21679; GFNIAVX512BW-NEXT:    vpunpckhbw {{.*#+}} zmm3 = zmm1[8],zmm2[8],zmm1[9],zmm2[9],zmm1[10],zmm2[10],zmm1[11],zmm2[11],zmm1[12],zmm2[12],zmm1[13],zmm2[13],zmm1[14],zmm2[14],zmm1[15],zmm2[15],zmm1[24],zmm2[24],zmm1[25],zmm2[25],zmm1[26],zmm2[26],zmm1[27],zmm2[27],zmm1[28],zmm2[28],zmm1[29],zmm2[29],zmm1[30],zmm2[30],zmm1[31],zmm2[31],zmm1[40],zmm2[40],zmm1[41],zmm2[41],zmm1[42],zmm2[42],zmm1[43],zmm2[43],zmm1[44],zmm2[44],zmm1[45],zmm2[45],zmm1[46],zmm2[46],zmm1[47],zmm2[47],zmm1[56],zmm2[56],zmm1[57],zmm2[57],zmm1[58],zmm2[58],zmm1[59],zmm2[59],zmm1[60],zmm2[60],zmm1[61],zmm2[61],zmm1[62],zmm2[62],zmm1[63],zmm2[63]1680; GFNIAVX512BW-NEXT:    vpunpckhbw {{.*#+}} zmm4 = zmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,56,56,57,57,58,58,59,59,60,60,61,61,62,62,63,63]1681; GFNIAVX512BW-NEXT:    vpsrlvw %zmm3, %zmm4, %zmm31682; 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]1683; GFNIAVX512BW-NEXT:    vpandq %zmm4, %zmm3, %zmm31684; GFNIAVX512BW-NEXT:    vpunpcklbw {{.*#+}} zmm1 = zmm1[0],zmm2[0],zmm1[1],zmm2[1],zmm1[2],zmm2[2],zmm1[3],zmm2[3],zmm1[4],zmm2[4],zmm1[5],zmm2[5],zmm1[6],zmm2[6],zmm1[7],zmm2[7],zmm1[16],zmm2[16],zmm1[17],zmm2[17],zmm1[18],zmm2[18],zmm1[19],zmm2[19],zmm1[20],zmm2[20],zmm1[21],zmm2[21],zmm1[22],zmm2[22],zmm1[23],zmm2[23],zmm1[32],zmm2[32],zmm1[33],zmm2[33],zmm1[34],zmm2[34],zmm1[35],zmm2[35],zmm1[36],zmm2[36],zmm1[37],zmm2[37],zmm1[38],zmm2[38],zmm1[39],zmm2[39],zmm1[48],zmm2[48],zmm1[49],zmm2[49],zmm1[50],zmm2[50],zmm1[51],zmm2[51],zmm1[52],zmm2[52],zmm1[53],zmm2[53],zmm1[54],zmm2[54],zmm1[55],zmm2[55]1685; GFNIAVX512BW-NEXT:    vpunpcklbw {{.*#+}} zmm0 = zmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,48,48,49,49,50,50,51,51,52,52,53,53,54,54,55,55]1686; GFNIAVX512BW-NEXT:    vpsrlvw %zmm1, %zmm0, %zmm01687; GFNIAVX512BW-NEXT:    vpandq %zmm4, %zmm0, %zmm01688; GFNIAVX512BW-NEXT:    vpackuswb %zmm3, %zmm0, %zmm01689; GFNIAVX512BW-NEXT:    retq1690  %res = call <64 x i8> @llvm.fshr.v64i8(<64 x i8> %a, <64 x i8> %a, <64 x i8> %amt)1691  ret <64 x i8> %res1692}1693 1694define <64 x i8> @splatvar_rotl_v64i8(<64 x i8> %a, <64 x i8> %amt) nounwind {1695; GFNISSE-LABEL: splatvar_rotl_v64i8:1696; GFNISSE:       # %bb.0:1697; GFNISSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm41698; GFNISSE-NEXT:    movdqa %xmm0, %xmm51699; 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]1700; GFNISSE-NEXT:    psllw %xmm4, %xmm51701; GFNISSE-NEXT:    psrlw $8, %xmm51702; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1703; GFNISSE-NEXT:    psllw %xmm4, %xmm01704; GFNISSE-NEXT:    psrlw $8, %xmm01705; GFNISSE-NEXT:    packuswb %xmm5, %xmm01706; GFNISSE-NEXT:    movdqa %xmm1, %xmm51707; 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]1708; GFNISSE-NEXT:    psllw %xmm4, %xmm51709; GFNISSE-NEXT:    psrlw $8, %xmm51710; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1711; GFNISSE-NEXT:    psllw %xmm4, %xmm11712; GFNISSE-NEXT:    psrlw $8, %xmm11713; GFNISSE-NEXT:    packuswb %xmm5, %xmm11714; GFNISSE-NEXT:    movdqa %xmm2, %xmm51715; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm5 = 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]1716; GFNISSE-NEXT:    psllw %xmm4, %xmm51717; GFNISSE-NEXT:    psrlw $8, %xmm51718; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1719; GFNISSE-NEXT:    psllw %xmm4, %xmm21720; GFNISSE-NEXT:    psrlw $8, %xmm21721; GFNISSE-NEXT:    packuswb %xmm5, %xmm21722; GFNISSE-NEXT:    movdqa %xmm3, %xmm51723; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm5 = xmm5[8],xmm3[8],xmm5[9],xmm3[9],xmm5[10],xmm3[10],xmm5[11],xmm3[11],xmm5[12],xmm3[12],xmm5[13],xmm3[13],xmm5[14],xmm3[14],xmm5[15],xmm3[15]1724; GFNISSE-NEXT:    psllw %xmm4, %xmm51725; GFNISSE-NEXT:    psrlw $8, %xmm51726; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1727; GFNISSE-NEXT:    psllw %xmm4, %xmm31728; GFNISSE-NEXT:    psrlw $8, %xmm31729; GFNISSE-NEXT:    packuswb %xmm5, %xmm31730; GFNISSE-NEXT:    retq1731;1732; GFNIAVX1-LABEL: splatvar_rotl_v64i8:1733; GFNIAVX1:       # %bb.0:1734; GFNIAVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21735; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31736; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm4 = xmm3[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]1737; GFNIAVX1-NEXT:    vpsllw %xmm2, %xmm4, %xmm41738; GFNIAVX1-NEXT:    vpsrlw $8, %xmm4, %xmm41739; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1740; GFNIAVX1-NEXT:    vpsllw %xmm2, %xmm3, %xmm31741; GFNIAVX1-NEXT:    vpsrlw $8, %xmm3, %xmm31742; GFNIAVX1-NEXT:    vpackuswb %xmm4, %xmm3, %xmm31743; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm4 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]1744; GFNIAVX1-NEXT:    vpsllw %xmm2, %xmm4, %xmm41745; GFNIAVX1-NEXT:    vpsrlw $8, %xmm4, %xmm41746; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1747; GFNIAVX1-NEXT:    vpsllw %xmm2, %xmm0, %xmm01748; GFNIAVX1-NEXT:    vpsrlw $8, %xmm0, %xmm01749; GFNIAVX1-NEXT:    vpackuswb %xmm4, %xmm0, %xmm01750; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm01751; GFNIAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm31752; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm4 = xmm3[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]1753; GFNIAVX1-NEXT:    vpsllw %xmm2, %xmm4, %xmm41754; GFNIAVX1-NEXT:    vpsrlw $8, %xmm4, %xmm41755; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1756; GFNIAVX1-NEXT:    vpsllw %xmm2, %xmm3, %xmm31757; GFNIAVX1-NEXT:    vpsrlw $8, %xmm3, %xmm31758; GFNIAVX1-NEXT:    vpackuswb %xmm4, %xmm3, %xmm31759; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm4 = xmm1[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]1760; GFNIAVX1-NEXT:    vpsllw %xmm2, %xmm4, %xmm41761; GFNIAVX1-NEXT:    vpsrlw $8, %xmm4, %xmm41762; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1763; GFNIAVX1-NEXT:    vpsllw %xmm2, %xmm1, %xmm11764; GFNIAVX1-NEXT:    vpsrlw $8, %xmm1, %xmm11765; GFNIAVX1-NEXT:    vpackuswb %xmm4, %xmm1, %xmm11766; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm11767; GFNIAVX1-NEXT:    retq1768;1769; GFNIAVX2-LABEL: splatvar_rotl_v64i8:1770; GFNIAVX2:       # %bb.0:1771; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]1772; GFNIAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21773; GFNIAVX2-NEXT:    vpsllw %xmm2, %ymm3, %ymm31774; GFNIAVX2-NEXT:    vpsrlw $8, %ymm3, %ymm31775; GFNIAVX2-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]1776; GFNIAVX2-NEXT:    vpsllw %xmm2, %ymm0, %ymm01777; GFNIAVX2-NEXT:    vpsrlw $8, %ymm0, %ymm01778; GFNIAVX2-NEXT:    vpackuswb %ymm3, %ymm0, %ymm01779; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm1[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]1780; GFNIAVX2-NEXT:    vpsllw %xmm2, %ymm3, %ymm31781; GFNIAVX2-NEXT:    vpsrlw $8, %ymm3, %ymm31782; GFNIAVX2-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]1783; GFNIAVX2-NEXT:    vpsllw %xmm2, %ymm1, %ymm11784; GFNIAVX2-NEXT:    vpsrlw $8, %ymm1, %ymm11785; GFNIAVX2-NEXT:    vpackuswb %ymm3, %ymm1, %ymm11786; GFNIAVX2-NEXT:    retq1787;1788; GFNIAVX512VL-LABEL: splatvar_rotl_v64i8:1789; GFNIAVX512VL:       # %bb.0:1790; GFNIAVX512VL-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11791; GFNIAVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm21792; GFNIAVX512VL-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]1793; GFNIAVX512VL-NEXT:    vpsllw %xmm1, %ymm3, %ymm31794; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm3, %ymm31795; GFNIAVX512VL-NEXT:    vpunpcklbw {{.*#+}} ymm2 = ymm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]1796; GFNIAVX512VL-NEXT:    vpsllw %xmm1, %ymm2, %ymm21797; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm2, %ymm21798; GFNIAVX512VL-NEXT:    vpackuswb %ymm3, %ymm2, %ymm21799; GFNIAVX512VL-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]1800; GFNIAVX512VL-NEXT:    vpsllw %xmm1, %ymm3, %ymm31801; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm3, %ymm31802; GFNIAVX512VL-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]1803; GFNIAVX512VL-NEXT:    vpsllw %xmm1, %ymm0, %ymm01804; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm0, %ymm01805; GFNIAVX512VL-NEXT:    vpackuswb %ymm3, %ymm0, %ymm01806; GFNIAVX512VL-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm01807; GFNIAVX512VL-NEXT:    retq1808;1809; GFNIAVX512BW-LABEL: splatvar_rotl_v64i8:1810; GFNIAVX512BW:       # %bb.0:1811; GFNIAVX512BW-NEXT:    vpunpckhbw {{.*#+}} zmm2 = zmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,56,56,57,57,58,58,59,59,60,60,61,61,62,62,63,63]1812; GFNIAVX512BW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11813; GFNIAVX512BW-NEXT:    vpsllw %xmm1, %zmm2, %zmm21814; GFNIAVX512BW-NEXT:    vpsrlw $8, %zmm2, %zmm21815; GFNIAVX512BW-NEXT:    vpunpcklbw {{.*#+}} zmm0 = zmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,48,48,49,49,50,50,51,51,52,52,53,53,54,54,55,55]1816; GFNIAVX512BW-NEXT:    vpsllw %xmm1, %zmm0, %zmm01817; GFNIAVX512BW-NEXT:    vpsrlw $8, %zmm0, %zmm01818; GFNIAVX512BW-NEXT:    vpackuswb %zmm2, %zmm0, %zmm01819; GFNIAVX512BW-NEXT:    retq1820  %splat = shufflevector <64 x i8> %amt, <64 x i8> undef, <64 x i32> zeroinitializer1821  %res = call <64 x i8> @llvm.fshl.v64i8(<64 x i8> %a, <64 x i8> %a, <64 x i8> %splat)1822  ret <64 x i8> %res1823}1824 1825define <64 x i8> @splatvar_rotr_v64i8(<64 x i8> %a, <64 x i8> %amt) nounwind {1826; GFNISSE-LABEL: splatvar_rotr_v64i8:1827; GFNISSE:       # %bb.0:1828; GFNISSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm41829; GFNISSE-NEXT:    movdqa %xmm0, %xmm61830; 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]1831; GFNISSE-NEXT:    psrlw %xmm4, %xmm61832; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm5 = [255,255,255,255,255,255,255,255]1833; GFNISSE-NEXT:    pand %xmm5, %xmm61834; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1835; GFNISSE-NEXT:    psrlw %xmm4, %xmm01836; GFNISSE-NEXT:    pand %xmm5, %xmm01837; GFNISSE-NEXT:    packuswb %xmm6, %xmm01838; GFNISSE-NEXT:    movdqa %xmm1, %xmm61839; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm6 = xmm6[8],xmm1[8],xmm6[9],xmm1[9],xmm6[10],xmm1[10],xmm6[11],xmm1[11],xmm6[12],xmm1[12],xmm6[13],xmm1[13],xmm6[14],xmm1[14],xmm6[15],xmm1[15]1840; GFNISSE-NEXT:    psrlw %xmm4, %xmm61841; GFNISSE-NEXT:    pand %xmm5, %xmm61842; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1843; GFNISSE-NEXT:    psrlw %xmm4, %xmm11844; GFNISSE-NEXT:    pand %xmm5, %xmm11845; GFNISSE-NEXT:    packuswb %xmm6, %xmm11846; GFNISSE-NEXT:    movdqa %xmm2, %xmm61847; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm6 = 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]1848; GFNISSE-NEXT:    psrlw %xmm4, %xmm61849; GFNISSE-NEXT:    pand %xmm5, %xmm61850; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1851; GFNISSE-NEXT:    psrlw %xmm4, %xmm21852; GFNISSE-NEXT:    pand %xmm5, %xmm21853; GFNISSE-NEXT:    packuswb %xmm6, %xmm21854; GFNISSE-NEXT:    movdqa %xmm3, %xmm61855; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm6 = xmm6[8],xmm3[8],xmm6[9],xmm3[9],xmm6[10],xmm3[10],xmm6[11],xmm3[11],xmm6[12],xmm3[12],xmm6[13],xmm3[13],xmm6[14],xmm3[14],xmm6[15],xmm3[15]1856; GFNISSE-NEXT:    psrlw %xmm4, %xmm61857; GFNISSE-NEXT:    pand %xmm5, %xmm61858; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1859; GFNISSE-NEXT:    psrlw %xmm4, %xmm31860; GFNISSE-NEXT:    pand %xmm5, %xmm31861; GFNISSE-NEXT:    packuswb %xmm6, %xmm31862; GFNISSE-NEXT:    retq1863;1864; GFNIAVX1-LABEL: splatvar_rotr_v64i8:1865; GFNIAVX1:       # %bb.0:1866; GFNIAVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21867; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31868; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm4 = xmm3[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]1869; GFNIAVX1-NEXT:    vpsrlw %xmm2, %xmm4, %xmm41870; GFNIAVX1-NEXT:    vbroadcastss {{.*#+}} xmm5 = [255,255,255,255,255,255,255,255]1871; GFNIAVX1-NEXT:    vpand %xmm5, %xmm4, %xmm41872; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1873; GFNIAVX1-NEXT:    vpsrlw %xmm2, %xmm3, %xmm31874; GFNIAVX1-NEXT:    vpand %xmm5, %xmm3, %xmm31875; GFNIAVX1-NEXT:    vpackuswb %xmm4, %xmm3, %xmm31876; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm4 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]1877; GFNIAVX1-NEXT:    vpsrlw %xmm2, %xmm4, %xmm41878; GFNIAVX1-NEXT:    vpand %xmm5, %xmm4, %xmm41879; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1880; GFNIAVX1-NEXT:    vpsrlw %xmm2, %xmm0, %xmm01881; GFNIAVX1-NEXT:    vpand %xmm5, %xmm0, %xmm01882; GFNIAVX1-NEXT:    vpackuswb %xmm4, %xmm0, %xmm01883; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm01884; GFNIAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm31885; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm4 = xmm3[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]1886; GFNIAVX1-NEXT:    vpsrlw %xmm2, %xmm4, %xmm41887; GFNIAVX1-NEXT:    vpand %xmm5, %xmm4, %xmm41888; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1889; GFNIAVX1-NEXT:    vpsrlw %xmm2, %xmm3, %xmm31890; GFNIAVX1-NEXT:    vpand %xmm5, %xmm3, %xmm31891; GFNIAVX1-NEXT:    vpackuswb %xmm4, %xmm3, %xmm31892; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm4 = xmm1[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]1893; GFNIAVX1-NEXT:    vpsrlw %xmm2, %xmm4, %xmm41894; GFNIAVX1-NEXT:    vpand %xmm5, %xmm4, %xmm41895; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1896; GFNIAVX1-NEXT:    vpsrlw %xmm2, %xmm1, %xmm11897; GFNIAVX1-NEXT:    vpand %xmm5, %xmm1, %xmm11898; GFNIAVX1-NEXT:    vpackuswb %xmm4, %xmm1, %xmm11899; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm11900; GFNIAVX1-NEXT:    retq1901;1902; GFNIAVX2-LABEL: splatvar_rotr_v64i8:1903; GFNIAVX2:       # %bb.0:1904; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]1905; GFNIAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21906; GFNIAVX2-NEXT:    vpsrlw %xmm2, %ymm3, %ymm31907; GFNIAVX2-NEXT:    vpbroadcastw {{.*#+}} ymm4 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]1908; GFNIAVX2-NEXT:    vpand %ymm4, %ymm3, %ymm31909; GFNIAVX2-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]1910; GFNIAVX2-NEXT:    vpsrlw %xmm2, %ymm0, %ymm01911; GFNIAVX2-NEXT:    vpand %ymm4, %ymm0, %ymm01912; GFNIAVX2-NEXT:    vpackuswb %ymm3, %ymm0, %ymm01913; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm1[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]1914; GFNIAVX2-NEXT:    vpsrlw %xmm2, %ymm3, %ymm31915; GFNIAVX2-NEXT:    vpand %ymm4, %ymm3, %ymm31916; GFNIAVX2-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]1917; GFNIAVX2-NEXT:    vpsrlw %xmm2, %ymm1, %ymm11918; GFNIAVX2-NEXT:    vpand %ymm4, %ymm1, %ymm11919; GFNIAVX2-NEXT:    vpackuswb %ymm3, %ymm1, %ymm11920; GFNIAVX2-NEXT:    retq1921;1922; GFNIAVX512VL-LABEL: splatvar_rotr_v64i8:1923; GFNIAVX512VL:       # %bb.0:1924; GFNIAVX512VL-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11925; GFNIAVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm21926; GFNIAVX512VL-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]1927; GFNIAVX512VL-NEXT:    vpsrlw %xmm1, %ymm3, %ymm31928; GFNIAVX512VL-NEXT:    vpbroadcastd {{.*#+}} ymm4 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]1929; GFNIAVX512VL-NEXT:    vpand %ymm4, %ymm3, %ymm31930; GFNIAVX512VL-NEXT:    vpunpcklbw {{.*#+}} ymm2 = ymm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]1931; GFNIAVX512VL-NEXT:    vpsrlw %xmm1, %ymm2, %ymm21932; GFNIAVX512VL-NEXT:    vpand %ymm4, %ymm2, %ymm21933; GFNIAVX512VL-NEXT:    vpackuswb %ymm3, %ymm2, %ymm21934; GFNIAVX512VL-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]1935; GFNIAVX512VL-NEXT:    vpsrlw %xmm1, %ymm3, %ymm31936; GFNIAVX512VL-NEXT:    vpand %ymm4, %ymm3, %ymm31937; GFNIAVX512VL-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]1938; GFNIAVX512VL-NEXT:    vpsrlw %xmm1, %ymm0, %ymm01939; GFNIAVX512VL-NEXT:    vpand %ymm4, %ymm0, %ymm01940; GFNIAVX512VL-NEXT:    vpackuswb %ymm3, %ymm0, %ymm01941; GFNIAVX512VL-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm01942; GFNIAVX512VL-NEXT:    retq1943;1944; GFNIAVX512BW-LABEL: splatvar_rotr_v64i8:1945; GFNIAVX512BW:       # %bb.0:1946; GFNIAVX512BW-NEXT:    vpunpckhbw {{.*#+}} zmm2 = zmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,56,56,57,57,58,58,59,59,60,60,61,61,62,62,63,63]1947; GFNIAVX512BW-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11948; GFNIAVX512BW-NEXT:    vpsrlw %xmm1, %zmm2, %zmm21949; GFNIAVX512BW-NEXT:    vpbroadcastw {{.*#+}} zmm3 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]1950; GFNIAVX512BW-NEXT:    vpandq %zmm3, %zmm2, %zmm21951; GFNIAVX512BW-NEXT:    vpunpcklbw {{.*#+}} zmm0 = zmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,48,48,49,49,50,50,51,51,52,52,53,53,54,54,55,55]1952; GFNIAVX512BW-NEXT:    vpsrlw %xmm1, %zmm0, %zmm01953; GFNIAVX512BW-NEXT:    vpandq %zmm3, %zmm0, %zmm01954; GFNIAVX512BW-NEXT:    vpackuswb %zmm2, %zmm0, %zmm01955; GFNIAVX512BW-NEXT:    retq1956  %splat = shufflevector <64 x i8> %amt, <64 x i8> undef, <64 x i32> zeroinitializer1957  %res = call <64 x i8> @llvm.fshr.v64i8(<64 x i8> %a, <64 x i8> %a, <64 x i8> %splat)1958  ret <64 x i8> %res1959}1960 1961define <64 x i8> @constant_rotl_v64i8(<64 x i8> %a) nounwind {1962; GFNISSE-LABEL: constant_rotl_v64i8:1963; GFNISSE:       # %bb.0:1964; GFNISSE-NEXT:    movdqa %xmm0, %xmm61965; 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]1966; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm4 = [1,128,64,32,16,8,4,2]1967; GFNISSE-NEXT:    pmullw %xmm4, %xmm61968; GFNISSE-NEXT:    psrlw $8, %xmm61969; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1970; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm5 = [1,2,4,8,16,32,64,128]1971; GFNISSE-NEXT:    pmullw %xmm5, %xmm01972; GFNISSE-NEXT:    psrlw $8, %xmm01973; GFNISSE-NEXT:    packuswb %xmm6, %xmm01974; GFNISSE-NEXT:    movdqa %xmm1, %xmm61975; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm6 = xmm6[8],xmm1[8],xmm6[9],xmm1[9],xmm6[10],xmm1[10],xmm6[11],xmm1[11],xmm6[12],xmm1[12],xmm6[13],xmm1[13],xmm6[14],xmm1[14],xmm6[15],xmm1[15]1976; GFNISSE-NEXT:    pmullw %xmm4, %xmm61977; GFNISSE-NEXT:    psrlw $8, %xmm61978; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1979; GFNISSE-NEXT:    pmullw %xmm5, %xmm11980; GFNISSE-NEXT:    psrlw $8, %xmm11981; GFNISSE-NEXT:    packuswb %xmm6, %xmm11982; GFNISSE-NEXT:    movdqa %xmm2, %xmm61983; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm6 = 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]1984; GFNISSE-NEXT:    pmullw %xmm4, %xmm61985; GFNISSE-NEXT:    psrlw $8, %xmm61986; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1987; GFNISSE-NEXT:    pmullw %xmm5, %xmm21988; GFNISSE-NEXT:    psrlw $8, %xmm21989; GFNISSE-NEXT:    packuswb %xmm6, %xmm21990; GFNISSE-NEXT:    movdqa %xmm3, %xmm61991; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm6 = xmm6[8],xmm3[8],xmm6[9],xmm3[9],xmm6[10],xmm3[10],xmm6[11],xmm3[11],xmm6[12],xmm3[12],xmm6[13],xmm3[13],xmm6[14],xmm3[14],xmm6[15],xmm3[15]1992; GFNISSE-NEXT:    pmullw %xmm4, %xmm61993; GFNISSE-NEXT:    psrlw $8, %xmm61994; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1995; GFNISSE-NEXT:    pmullw %xmm5, %xmm31996; GFNISSE-NEXT:    psrlw $8, %xmm31997; GFNISSE-NEXT:    packuswb %xmm6, %xmm31998; GFNISSE-NEXT:    retq1999;2000; GFNIAVX1-LABEL: constant_rotl_v64i8:2001; GFNIAVX1:       # %bb.0:2002; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm22003; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2004; GFNIAVX1-NEXT:    vpmovzxbw {{.*#+}} xmm4 = [1,128,64,32,16,8,4,2]2005; GFNIAVX1-NEXT:    vpmullw %xmm4, %xmm3, %xmm32006; GFNIAVX1-NEXT:    vpsrlw $8, %xmm3, %xmm32007; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2008; GFNIAVX1-NEXT:    vpmovzxbw {{.*#+}} xmm5 = [1,2,4,8,16,32,64,128]2009; GFNIAVX1-NEXT:    vpmullw %xmm5, %xmm2, %xmm22010; GFNIAVX1-NEXT:    vpsrlw $8, %xmm2, %xmm22011; GFNIAVX1-NEXT:    vpackuswb %xmm3, %xmm2, %xmm22012; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2013; GFNIAVX1-NEXT:    vpmullw %xmm4, %xmm3, %xmm32014; GFNIAVX1-NEXT:    vpsrlw $8, %xmm3, %xmm32015; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2016; GFNIAVX1-NEXT:    vpmullw %xmm5, %xmm0, %xmm02017; GFNIAVX1-NEXT:    vpsrlw $8, %xmm0, %xmm02018; GFNIAVX1-NEXT:    vpackuswb %xmm3, %xmm0, %xmm02019; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm02020; GFNIAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm22021; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2022; GFNIAVX1-NEXT:    vpmullw %xmm4, %xmm3, %xmm32023; GFNIAVX1-NEXT:    vpsrlw $8, %xmm3, %xmm32024; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2025; GFNIAVX1-NEXT:    vpmullw %xmm5, %xmm2, %xmm22026; GFNIAVX1-NEXT:    vpsrlw $8, %xmm2, %xmm22027; GFNIAVX1-NEXT:    vpackuswb %xmm3, %xmm2, %xmm22028; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm1[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2029; GFNIAVX1-NEXT:    vpmullw %xmm4, %xmm3, %xmm32030; GFNIAVX1-NEXT:    vpsrlw $8, %xmm3, %xmm32031; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2032; GFNIAVX1-NEXT:    vpmullw %xmm5, %xmm1, %xmm12033; GFNIAVX1-NEXT:    vpsrlw $8, %xmm1, %xmm12034; GFNIAVX1-NEXT:    vpackuswb %xmm3, %xmm1, %xmm12035; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm12036; GFNIAVX1-NEXT:    retq2037;2038; GFNIAVX2-LABEL: constant_rotl_v64i8:2039; GFNIAVX2:       # %bb.0:2040; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]2041; GFNIAVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm3 = [1,128,64,32,16,8,4,2,1,128,64,32,16,8,4,2]2042; GFNIAVX2-NEXT:    # ymm3 = mem[0,1,0,1]2043; GFNIAVX2-NEXT:    vpmullw %ymm3, %ymm2, %ymm22044; GFNIAVX2-NEXT:    vpsrlw $8, %ymm2, %ymm22045; GFNIAVX2-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]2046; GFNIAVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm4 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]2047; GFNIAVX2-NEXT:    # ymm4 = mem[0,1,0,1]2048; GFNIAVX2-NEXT:    vpmullw %ymm4, %ymm0, %ymm02049; GFNIAVX2-NEXT:    vpsrlw $8, %ymm0, %ymm02050; GFNIAVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm02051; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm1[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]2052; GFNIAVX2-NEXT:    vpmullw %ymm3, %ymm2, %ymm22053; GFNIAVX2-NEXT:    vpsrlw $8, %ymm2, %ymm22054; GFNIAVX2-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]2055; GFNIAVX2-NEXT:    vpmullw %ymm4, %ymm1, %ymm12056; GFNIAVX2-NEXT:    vpsrlw $8, %ymm1, %ymm12057; GFNIAVX2-NEXT:    vpackuswb %ymm2, %ymm1, %ymm12058; GFNIAVX2-NEXT:    retq2059;2060; GFNIAVX512VL-LABEL: constant_rotl_v64i8:2061; GFNIAVX512VL:       # %bb.0:2062; GFNIAVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm12063; GFNIAVX512VL-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm1[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]2064; GFNIAVX512VL-NEXT:    vbroadcasti128 {{.*#+}} ymm3 = [1,128,64,32,16,8,4,2,1,128,64,32,16,8,4,2]2065; GFNIAVX512VL-NEXT:    # ymm3 = mem[0,1,0,1]2066; GFNIAVX512VL-NEXT:    vpmullw %ymm3, %ymm2, %ymm22067; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm2, %ymm22068; GFNIAVX512VL-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]2069; GFNIAVX512VL-NEXT:    vbroadcasti128 {{.*#+}} ymm4 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]2070; GFNIAVX512VL-NEXT:    # ymm4 = mem[0,1,0,1]2071; GFNIAVX512VL-NEXT:    vpmullw %ymm4, %ymm1, %ymm12072; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm1, %ymm12073; GFNIAVX512VL-NEXT:    vpackuswb %ymm2, %ymm1, %ymm12074; GFNIAVX512VL-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]2075; GFNIAVX512VL-NEXT:    vpmullw %ymm3, %ymm2, %ymm22076; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm2, %ymm22077; GFNIAVX512VL-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]2078; GFNIAVX512VL-NEXT:    vpmullw %ymm4, %ymm0, %ymm02079; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm0, %ymm02080; GFNIAVX512VL-NEXT:    vpackuswb %ymm2, %ymm0, %ymm02081; GFNIAVX512VL-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm02082; GFNIAVX512VL-NEXT:    retq2083;2084; GFNIAVX512BW-LABEL: constant_rotl_v64i8:2085; GFNIAVX512BW:       # %bb.0:2086; GFNIAVX512BW-NEXT:    vpunpckhbw {{.*#+}} zmm1 = zmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,56,56,57,57,58,58,59,59,60,60,61,61,62,62,63,63]2087; GFNIAVX512BW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm12088; GFNIAVX512BW-NEXT:    vpsrlw $8, %zmm1, %zmm12089; GFNIAVX512BW-NEXT:    vpunpcklbw {{.*#+}} zmm0 = zmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,48,48,49,49,50,50,51,51,52,52,53,53,54,54,55,55]2090; GFNIAVX512BW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm02091; GFNIAVX512BW-NEXT:    vpsrlw $8, %zmm0, %zmm02092; GFNIAVX512BW-NEXT:    vpackuswb %zmm1, %zmm0, %zmm02093; GFNIAVX512BW-NEXT:    retq2094  %res = call <64 x i8> @llvm.fshl.v64i8(<64 x i8> %a, <64 x i8> %a, <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>)2095  ret <64 x i8> %res2096}2097 2098define <64 x i8> @constant_rotr_v64i8(<64 x i8> %a) nounwind {2099; GFNISSE-LABEL: constant_rotr_v64i8:2100; GFNISSE:       # %bb.0:2101; GFNISSE-NEXT:    movdqa %xmm0, %xmm62102; 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]2103; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm4 = [1,128,64,32,16,8,4,2]2104; GFNISSE-NEXT:    pmullw %xmm4, %xmm62105; GFNISSE-NEXT:    psrlw $8, %xmm62106; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2107; GFNISSE-NEXT:    pmovzxbw {{.*#+}} xmm5 = [1,2,4,8,16,32,64,128]2108; GFNISSE-NEXT:    pmullw %xmm5, %xmm02109; GFNISSE-NEXT:    psrlw $8, %xmm02110; GFNISSE-NEXT:    packuswb %xmm6, %xmm02111; GFNISSE-NEXT:    movdqa %xmm1, %xmm62112; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm6 = xmm6[8],xmm1[8],xmm6[9],xmm1[9],xmm6[10],xmm1[10],xmm6[11],xmm1[11],xmm6[12],xmm1[12],xmm6[13],xmm1[13],xmm6[14],xmm1[14],xmm6[15],xmm1[15]2113; GFNISSE-NEXT:    pmullw %xmm4, %xmm62114; GFNISSE-NEXT:    psrlw $8, %xmm62115; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2116; GFNISSE-NEXT:    pmullw %xmm5, %xmm12117; GFNISSE-NEXT:    psrlw $8, %xmm12118; GFNISSE-NEXT:    packuswb %xmm6, %xmm12119; GFNISSE-NEXT:    movdqa %xmm2, %xmm62120; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm6 = 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]2121; GFNISSE-NEXT:    pmullw %xmm4, %xmm62122; GFNISSE-NEXT:    psrlw $8, %xmm62123; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2124; GFNISSE-NEXT:    pmullw %xmm5, %xmm22125; GFNISSE-NEXT:    psrlw $8, %xmm22126; GFNISSE-NEXT:    packuswb %xmm6, %xmm22127; GFNISSE-NEXT:    movdqa %xmm3, %xmm62128; GFNISSE-NEXT:    punpckhbw {{.*#+}} xmm6 = xmm6[8],xmm3[8],xmm6[9],xmm3[9],xmm6[10],xmm3[10],xmm6[11],xmm3[11],xmm6[12],xmm3[12],xmm6[13],xmm3[13],xmm6[14],xmm3[14],xmm6[15],xmm3[15]2129; GFNISSE-NEXT:    pmullw %xmm4, %xmm62130; GFNISSE-NEXT:    psrlw $8, %xmm62131; GFNISSE-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2132; GFNISSE-NEXT:    pmullw %xmm5, %xmm32133; GFNISSE-NEXT:    psrlw $8, %xmm32134; GFNISSE-NEXT:    packuswb %xmm6, %xmm32135; GFNISSE-NEXT:    retq2136;2137; GFNIAVX1-LABEL: constant_rotr_v64i8:2138; GFNIAVX1:       # %bb.0:2139; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm22140; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2141; GFNIAVX1-NEXT:    vpmovzxbw {{.*#+}} xmm4 = [1,128,64,32,16,8,4,2]2142; GFNIAVX1-NEXT:    vpmullw %xmm4, %xmm3, %xmm32143; GFNIAVX1-NEXT:    vpsrlw $8, %xmm3, %xmm32144; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2145; GFNIAVX1-NEXT:    vpmovzxbw {{.*#+}} xmm5 = [1,2,4,8,16,32,64,128]2146; GFNIAVX1-NEXT:    vpmullw %xmm5, %xmm2, %xmm22147; GFNIAVX1-NEXT:    vpsrlw $8, %xmm2, %xmm22148; GFNIAVX1-NEXT:    vpackuswb %xmm3, %xmm2, %xmm22149; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2150; GFNIAVX1-NEXT:    vpmullw %xmm4, %xmm3, %xmm32151; GFNIAVX1-NEXT:    vpsrlw $8, %xmm3, %xmm32152; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2153; GFNIAVX1-NEXT:    vpmullw %xmm5, %xmm0, %xmm02154; GFNIAVX1-NEXT:    vpsrlw $8, %xmm0, %xmm02155; GFNIAVX1-NEXT:    vpackuswb %xmm3, %xmm0, %xmm02156; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm02157; GFNIAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm22158; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2159; GFNIAVX1-NEXT:    vpmullw %xmm4, %xmm3, %xmm32160; GFNIAVX1-NEXT:    vpsrlw $8, %xmm3, %xmm32161; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2162; GFNIAVX1-NEXT:    vpmullw %xmm5, %xmm2, %xmm22163; GFNIAVX1-NEXT:    vpsrlw $8, %xmm2, %xmm22164; GFNIAVX1-NEXT:    vpackuswb %xmm3, %xmm2, %xmm22165; GFNIAVX1-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm1[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2166; GFNIAVX1-NEXT:    vpmullw %xmm4, %xmm3, %xmm32167; GFNIAVX1-NEXT:    vpsrlw $8, %xmm3, %xmm32168; GFNIAVX1-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2169; GFNIAVX1-NEXT:    vpmullw %xmm5, %xmm1, %xmm12170; GFNIAVX1-NEXT:    vpsrlw $8, %xmm1, %xmm12171; GFNIAVX1-NEXT:    vpackuswb %xmm3, %xmm1, %xmm12172; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm12173; GFNIAVX1-NEXT:    retq2174;2175; GFNIAVX2-LABEL: constant_rotr_v64i8:2176; GFNIAVX2:       # %bb.0:2177; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]2178; GFNIAVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm3 = [1,128,64,32,16,8,4,2,1,128,64,32,16,8,4,2]2179; GFNIAVX2-NEXT:    # ymm3 = mem[0,1,0,1]2180; GFNIAVX2-NEXT:    vpmullw %ymm3, %ymm2, %ymm22181; GFNIAVX2-NEXT:    vpsrlw $8, %ymm2, %ymm22182; GFNIAVX2-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]2183; GFNIAVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm4 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]2184; GFNIAVX2-NEXT:    # ymm4 = mem[0,1,0,1]2185; GFNIAVX2-NEXT:    vpmullw %ymm4, %ymm0, %ymm02186; GFNIAVX2-NEXT:    vpsrlw $8, %ymm0, %ymm02187; GFNIAVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm02188; GFNIAVX2-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm1[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]2189; GFNIAVX2-NEXT:    vpmullw %ymm3, %ymm2, %ymm22190; GFNIAVX2-NEXT:    vpsrlw $8, %ymm2, %ymm22191; GFNIAVX2-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]2192; GFNIAVX2-NEXT:    vpmullw %ymm4, %ymm1, %ymm12193; GFNIAVX2-NEXT:    vpsrlw $8, %ymm1, %ymm12194; GFNIAVX2-NEXT:    vpackuswb %ymm2, %ymm1, %ymm12195; GFNIAVX2-NEXT:    retq2196;2197; GFNIAVX512VL-LABEL: constant_rotr_v64i8:2198; GFNIAVX512VL:       # %bb.0:2199; GFNIAVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm12200; GFNIAVX512VL-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm1[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]2201; GFNIAVX512VL-NEXT:    vbroadcasti128 {{.*#+}} ymm3 = [1,128,64,32,16,8,4,2,1,128,64,32,16,8,4,2]2202; GFNIAVX512VL-NEXT:    # ymm3 = mem[0,1,0,1]2203; GFNIAVX512VL-NEXT:    vpmullw %ymm3, %ymm2, %ymm22204; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm2, %ymm22205; GFNIAVX512VL-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]2206; GFNIAVX512VL-NEXT:    vbroadcasti128 {{.*#+}} ymm4 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]2207; GFNIAVX512VL-NEXT:    # ymm4 = mem[0,1,0,1]2208; GFNIAVX512VL-NEXT:    vpmullw %ymm4, %ymm1, %ymm12209; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm1, %ymm12210; GFNIAVX512VL-NEXT:    vpackuswb %ymm2, %ymm1, %ymm12211; GFNIAVX512VL-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]2212; GFNIAVX512VL-NEXT:    vpmullw %ymm3, %ymm2, %ymm22213; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm2, %ymm22214; GFNIAVX512VL-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]2215; GFNIAVX512VL-NEXT:    vpmullw %ymm4, %ymm0, %ymm02216; GFNIAVX512VL-NEXT:    vpsrlw $8, %ymm0, %ymm02217; GFNIAVX512VL-NEXT:    vpackuswb %ymm2, %ymm0, %ymm02218; GFNIAVX512VL-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm02219; GFNIAVX512VL-NEXT:    retq2220;2221; GFNIAVX512BW-LABEL: constant_rotr_v64i8:2222; GFNIAVX512BW:       # %bb.0:2223; GFNIAVX512BW-NEXT:    vpunpckhbw {{.*#+}} zmm1 = zmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,56,56,57,57,58,58,59,59,60,60,61,61,62,62,63,63]2224; GFNIAVX512BW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm12225; GFNIAVX512BW-NEXT:    vpsrlw $8, %zmm1, %zmm12226; GFNIAVX512BW-NEXT:    vpunpcklbw {{.*#+}} zmm0 = zmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,48,48,49,49,50,50,51,51,52,52,53,53,54,54,55,55]2227; GFNIAVX512BW-NEXT:    vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm02228; GFNIAVX512BW-NEXT:    vpsrlw $8, %zmm0, %zmm02229; GFNIAVX512BW-NEXT:    vpackuswb %zmm1, %zmm0, %zmm02230; GFNIAVX512BW-NEXT:    retq2231  %res = call <64 x i8> @llvm.fshl.v64i8(<64 x i8> %a, <64 x i8> %a, <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>)2232  ret <64 x i8> %res2233}2234 2235define <64 x i8> @splatconstant_rotl_v64i8(<64 x i8> %a) nounwind {2236; GFNISSE-LABEL: splatconstant_rotl_v64i8:2237; GFNISSE:       # %bb.0:2238; GFNISSE-NEXT:    movdqa {{.*#+}} xmm4 = [64,32,16,8,4,2,1,128,64,32,16,8,4,2,1,128]2239; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm4, %xmm02240; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm4, %xmm12241; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm4, %xmm22242; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm4, %xmm32243; GFNISSE-NEXT:    retq2244;2245; GFNIAVX1-LABEL: splatconstant_rotl_v64i8:2246; GFNIAVX1:       # %bb.0:2247; GFNIAVX1-NEXT:    vbroadcastsd {{.*#+}} ymm2 = [64,32,16,8,4,2,1,128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1,128]2248; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %ymm2, %ymm0, %ymm02249; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %ymm2, %ymm1, %ymm12250; GFNIAVX1-NEXT:    retq2251;2252; GFNIAVX2-LABEL: splatconstant_rotl_v64i8:2253; GFNIAVX2:       # %bb.0:2254; GFNIAVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [64,32,16,8,4,2,1,128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1,128]2255; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm2, %ymm0, %ymm02256; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm2, %ymm1, %ymm12257; GFNIAVX2-NEXT:    retq2258;2259; GFNIAVX512-LABEL: splatconstant_rotl_v64i8:2260; GFNIAVX512:       # %bb.0:2261; GFNIAVX512-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm02262; GFNIAVX512-NEXT:    retq2263  %res = call <64 x i8> @llvm.fshl.v64i8(<64 x i8> %a, <64 x i8> %a, <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>)2264  ret <64 x i8> %res2265}2266declare <64 x i8> @llvm.fshl.v64i8(<64 x i8>, <64 x i8>, <64 x i8>)2267 2268define <64 x i8> @splatconstant_rotr_v64i8(<64 x i8> %a) nounwind {2269; GFNISSE-LABEL: splatconstant_rotr_v64i8:2270; GFNISSE:       # %bb.0:2271; GFNISSE-NEXT:    movdqa {{.*#+}} xmm4 = [2,1,128,64,32,16,8,4,2,1,128,64,32,16,8,4]2272; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm4, %xmm02273; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm4, %xmm12274; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm4, %xmm22275; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm4, %xmm32276; GFNISSE-NEXT:    retq2277;2278; GFNIAVX1-LABEL: splatconstant_rotr_v64i8:2279; GFNIAVX1:       # %bb.0:2280; GFNIAVX1-NEXT:    vbroadcastsd {{.*#+}} ymm2 = [2,1,128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1,128,64,32,16,8,4]2281; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %ymm2, %ymm0, %ymm02282; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %ymm2, %ymm1, %ymm12283; GFNIAVX1-NEXT:    retq2284;2285; GFNIAVX2-LABEL: splatconstant_rotr_v64i8:2286; GFNIAVX2:       # %bb.0:2287; GFNIAVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [2,1,128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1,128,64,32,16,8,4]2288; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm2, %ymm0, %ymm02289; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm2, %ymm1, %ymm12290; GFNIAVX2-NEXT:    retq2291;2292; GFNIAVX512-LABEL: splatconstant_rotr_v64i8:2293; GFNIAVX512:       # %bb.0:2294; GFNIAVX512-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm02295; GFNIAVX512-NEXT:    retq2296  %res = call <64 x i8> @llvm.fshr.v64i8(<64 x i8> %a, <64 x i8> %a, <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>)2297  ret <64 x i8> %res2298}2299declare <64 x i8> @llvm.fshr.v64i8(<64 x i8>, <64 x i8>, <64 x i8>)2300