3030 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 Shifts10;11 12define <16 x i8> @var_shl_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {13; GFNISSE-LABEL: var_shl_v16i8:14; GFNISSE: # %bb.0:15; GFNISSE-NEXT: movdqa %xmm0, %xmm216; GFNISSE-NEXT: psllw $5, %xmm117; GFNISSE-NEXT: movdqa %xmm0, %xmm318; GFNISSE-NEXT: gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm319; GFNISSE-NEXT: movdqa %xmm1, %xmm020; GFNISSE-NEXT: pblendvb %xmm0, %xmm3, %xmm221; GFNISSE-NEXT: movdqa %xmm2, %xmm322; GFNISSE-NEXT: gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm323; GFNISSE-NEXT: paddb %xmm1, %xmm124; GFNISSE-NEXT: movdqa %xmm1, %xmm025; GFNISSE-NEXT: pblendvb %xmm0, %xmm3, %xmm226; GFNISSE-NEXT: movdqa %xmm2, %xmm327; GFNISSE-NEXT: paddb %xmm2, %xmm328; GFNISSE-NEXT: paddb %xmm1, %xmm129; GFNISSE-NEXT: movdqa %xmm1, %xmm030; GFNISSE-NEXT: pblendvb %xmm0, %xmm3, %xmm231; GFNISSE-NEXT: movdqa %xmm2, %xmm032; GFNISSE-NEXT: retq33;34; GFNIAVX1OR2-LABEL: var_shl_v16i8:35; GFNIAVX1OR2: # %bb.0:36; GFNIAVX1OR2-NEXT: vpsllw $5, %xmm1, %xmm137; GFNIAVX1OR2-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm238; GFNIAVX1OR2-NEXT: vpblendvb %xmm1, %xmm2, %xmm0, %xmm039; GFNIAVX1OR2-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm240; GFNIAVX1OR2-NEXT: vpaddb %xmm1, %xmm1, %xmm141; GFNIAVX1OR2-NEXT: vpblendvb %xmm1, %xmm2, %xmm0, %xmm042; GFNIAVX1OR2-NEXT: vpaddb %xmm0, %xmm0, %xmm243; GFNIAVX1OR2-NEXT: vpaddb %xmm1, %xmm1, %xmm144; GFNIAVX1OR2-NEXT: vpblendvb %xmm1, %xmm2, %xmm0, %xmm045; GFNIAVX1OR2-NEXT: retq46;47; GFNIAVX512VL-LABEL: var_shl_v16i8:48; GFNIAVX512VL: # %bb.0:49; 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,zero50; 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,zero51; GFNIAVX512VL-NEXT: vpsllvd %zmm1, %zmm0, %zmm052; GFNIAVX512VL-NEXT: vpmovdb %zmm0, %xmm053; GFNIAVX512VL-NEXT: vzeroupper54; GFNIAVX512VL-NEXT: retq55;56; GFNIAVX512BW-LABEL: var_shl_v16i8:57; GFNIAVX512BW: # %bb.0:58; GFNIAVX512BW-NEXT: vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero59; GFNIAVX512BW-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero60; GFNIAVX512BW-NEXT: vpsllvw %ymm1, %ymm0, %ymm061; GFNIAVX512BW-NEXT: vpmovwb %ymm0, %xmm062; GFNIAVX512BW-NEXT: vzeroupper63; GFNIAVX512BW-NEXT: retq64 %shift = shl <16 x i8> %a, %b65 ret <16 x i8> %shift66}67 68define <16 x i8> @var_lshr_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {69; GFNISSE-LABEL: var_lshr_v16i8:70; GFNISSE: # %bb.0:71; GFNISSE-NEXT: movdqa %xmm0, %xmm272; GFNISSE-NEXT: psllw $5, %xmm173; GFNISSE-NEXT: movdqa %xmm0, %xmm374; GFNISSE-NEXT: gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm375; GFNISSE-NEXT: movdqa %xmm1, %xmm076; GFNISSE-NEXT: pblendvb %xmm0, %xmm3, %xmm277; GFNISSE-NEXT: movdqa %xmm2, %xmm378; GFNISSE-NEXT: gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm379; GFNISSE-NEXT: paddb %xmm1, %xmm180; GFNISSE-NEXT: movdqa %xmm1, %xmm081; GFNISSE-NEXT: pblendvb %xmm0, %xmm3, %xmm282; GFNISSE-NEXT: movdqa %xmm2, %xmm383; GFNISSE-NEXT: gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm384; GFNISSE-NEXT: paddb %xmm1, %xmm185; GFNISSE-NEXT: movdqa %xmm1, %xmm086; GFNISSE-NEXT: pblendvb %xmm0, %xmm3, %xmm287; GFNISSE-NEXT: movdqa %xmm2, %xmm088; GFNISSE-NEXT: retq89;90; GFNIAVX1OR2-LABEL: var_lshr_v16i8:91; GFNIAVX1OR2: # %bb.0:92; GFNIAVX1OR2-NEXT: vpsllw $5, %xmm1, %xmm193; GFNIAVX1OR2-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm294; GFNIAVX1OR2-NEXT: vpblendvb %xmm1, %xmm2, %xmm0, %xmm095; GFNIAVX1OR2-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm296; GFNIAVX1OR2-NEXT: vpaddb %xmm1, %xmm1, %xmm197; GFNIAVX1OR2-NEXT: vpblendvb %xmm1, %xmm2, %xmm0, %xmm098; GFNIAVX1OR2-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm299; GFNIAVX1OR2-NEXT: vpaddb %xmm1, %xmm1, %xmm1100; GFNIAVX1OR2-NEXT: vpblendvb %xmm1, %xmm2, %xmm0, %xmm0101; GFNIAVX1OR2-NEXT: retq102;103; GFNIAVX512VL-LABEL: var_lshr_v16i8:104; GFNIAVX512VL: # %bb.0:105; 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,zero106; 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,zero107; GFNIAVX512VL-NEXT: vpsrlvd %zmm1, %zmm0, %zmm0108; GFNIAVX512VL-NEXT: vpmovdb %zmm0, %xmm0109; GFNIAVX512VL-NEXT: vzeroupper110; GFNIAVX512VL-NEXT: retq111;112; GFNIAVX512BW-LABEL: var_lshr_v16i8:113; GFNIAVX512BW: # %bb.0:114; GFNIAVX512BW-NEXT: vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero115; GFNIAVX512BW-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero116; GFNIAVX512BW-NEXT: vpsrlvw %ymm1, %ymm0, %ymm0117; GFNIAVX512BW-NEXT: vpmovwb %ymm0, %xmm0118; GFNIAVX512BW-NEXT: vzeroupper119; GFNIAVX512BW-NEXT: retq120 %shift = lshr <16 x i8> %a, %b121 ret <16 x i8> %shift122}123 124define <16 x i8> @var_ashr_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {125; GFNISSE-LABEL: var_ashr_v16i8:126; GFNISSE: # %bb.0:127; GFNISSE-NEXT: movdqa %xmm0, %xmm2128; GFNISSE-NEXT: psllw $5, %xmm1129; GFNISSE-NEXT: punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]130; GFNISSE-NEXT: punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm2[8],xmm3[9],xmm2[9],xmm3[10],xmm2[10],xmm3[11],xmm2[11],xmm3[12],xmm2[12],xmm3[13],xmm2[13],xmm3[14],xmm2[14],xmm3[15],xmm2[15]131; GFNISSE-NEXT: movdqa %xmm3, %xmm4132; GFNISSE-NEXT: psraw $4, %xmm4133; GFNISSE-NEXT: pblendvb %xmm0, %xmm4, %xmm3134; GFNISSE-NEXT: movdqa %xmm3, %xmm4135; GFNISSE-NEXT: psraw $2, %xmm4136; GFNISSE-NEXT: paddw %xmm0, %xmm0137; GFNISSE-NEXT: pblendvb %xmm0, %xmm4, %xmm3138; GFNISSE-NEXT: movdqa %xmm3, %xmm4139; GFNISSE-NEXT: psraw $1, %xmm4140; GFNISSE-NEXT: paddw %xmm0, %xmm0141; GFNISSE-NEXT: pblendvb %xmm0, %xmm4, %xmm3142; GFNISSE-NEXT: psrlw $8, %xmm3143; GFNISSE-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]144; GFNISSE-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]145; GFNISSE-NEXT: movdqa %xmm1, %xmm2146; GFNISSE-NEXT: psraw $4, %xmm2147; GFNISSE-NEXT: pblendvb %xmm0, %xmm2, %xmm1148; GFNISSE-NEXT: movdqa %xmm1, %xmm2149; GFNISSE-NEXT: psraw $2, %xmm2150; GFNISSE-NEXT: paddw %xmm0, %xmm0151; GFNISSE-NEXT: pblendvb %xmm0, %xmm2, %xmm1152; GFNISSE-NEXT: movdqa %xmm1, %xmm2153; GFNISSE-NEXT: psraw $1, %xmm2154; GFNISSE-NEXT: paddw %xmm0, %xmm0155; GFNISSE-NEXT: pblendvb %xmm0, %xmm2, %xmm1156; GFNISSE-NEXT: psrlw $8, %xmm1157; GFNISSE-NEXT: packuswb %xmm3, %xmm1158; GFNISSE-NEXT: movdqa %xmm1, %xmm0159; GFNISSE-NEXT: retq160;161; GFNIAVX1OR2-LABEL: var_ashr_v16i8:162; GFNIAVX1OR2: # %bb.0:163; GFNIAVX1OR2-NEXT: vpsllw $5, %xmm1, %xmm1164; GFNIAVX1OR2-NEXT: vpunpckhbw {{.*#+}} xmm2 = xmm1[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]165; GFNIAVX1OR2-NEXT: vpunpckhbw {{.*#+}} xmm3 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]166; GFNIAVX1OR2-NEXT: vpsraw $4, %xmm3, %xmm4167; GFNIAVX1OR2-NEXT: vpblendvb %xmm2, %xmm4, %xmm3, %xmm3168; GFNIAVX1OR2-NEXT: vpsraw $2, %xmm3, %xmm4169; GFNIAVX1OR2-NEXT: vpaddw %xmm2, %xmm2, %xmm5170; GFNIAVX1OR2-NEXT: vpblendvb %xmm5, %xmm4, %xmm3, %xmm3171; GFNIAVX1OR2-NEXT: vpsraw $1, %xmm3, %xmm4172; GFNIAVX1OR2-NEXT: vpsllw $2, %xmm2, %xmm2173; GFNIAVX1OR2-NEXT: vpblendvb %xmm2, %xmm4, %xmm3, %xmm2174; GFNIAVX1OR2-NEXT: vpsrlw $8, %xmm2, %xmm2175; GFNIAVX1OR2-NEXT: vpunpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]176; GFNIAVX1OR2-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]177; GFNIAVX1OR2-NEXT: vpsraw $4, %xmm0, %xmm3178; GFNIAVX1OR2-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0179; GFNIAVX1OR2-NEXT: vpsraw $2, %xmm0, %xmm3180; GFNIAVX1OR2-NEXT: vpaddw %xmm1, %xmm1, %xmm4181; GFNIAVX1OR2-NEXT: vpblendvb %xmm4, %xmm3, %xmm0, %xmm0182; GFNIAVX1OR2-NEXT: vpsraw $1, %xmm0, %xmm3183; GFNIAVX1OR2-NEXT: vpsllw $2, %xmm1, %xmm1184; GFNIAVX1OR2-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0185; GFNIAVX1OR2-NEXT: vpsrlw $8, %xmm0, %xmm0186; GFNIAVX1OR2-NEXT: vpackuswb %xmm2, %xmm0, %xmm0187; GFNIAVX1OR2-NEXT: retq188;189; GFNIAVX512VL-LABEL: var_ashr_v16i8:190; GFNIAVX512VL: # %bb.0:191; 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,zero192; GFNIAVX512VL-NEXT: vpmovsxbd %xmm0, %zmm0193; GFNIAVX512VL-NEXT: vpsravd %zmm1, %zmm0, %zmm0194; GFNIAVX512VL-NEXT: vpmovdb %zmm0, %xmm0195; GFNIAVX512VL-NEXT: vzeroupper196; GFNIAVX512VL-NEXT: retq197;198; GFNIAVX512BW-LABEL: var_ashr_v16i8:199; GFNIAVX512BW: # %bb.0:200; GFNIAVX512BW-NEXT: vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero201; GFNIAVX512BW-NEXT: vpmovsxbw %xmm0, %ymm0202; GFNIAVX512BW-NEXT: vpsravw %ymm1, %ymm0, %ymm0203; GFNIAVX512BW-NEXT: vpmovwb %ymm0, %xmm0204; GFNIAVX512BW-NEXT: vzeroupper205; GFNIAVX512BW-NEXT: retq206 %shift = ashr <16 x i8> %a, %b207 ret <16 x i8> %shift208}209 210define <16 x i8> @splatvar_shl_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {211; GFNISSE-LABEL: splatvar_shl_v16i8:212; GFNISSE: # %bb.0:213; GFNISSE-NEXT: pmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero214; GFNISSE-NEXT: psllw %xmm1, %xmm0215; GFNISSE-NEXT: pcmpeqd %xmm2, %xmm2216; GFNISSE-NEXT: psllw %xmm1, %xmm2217; GFNISSE-NEXT: pxor %xmm1, %xmm1218; GFNISSE-NEXT: pshufb %xmm1, %xmm2219; GFNISSE-NEXT: pand %xmm2, %xmm0220; GFNISSE-NEXT: retq221;222; GFNIAVX1-LABEL: splatvar_shl_v16i8:223; GFNIAVX1: # %bb.0:224; GFNIAVX1-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero225; GFNIAVX1-NEXT: vpsllw %xmm1, %xmm0, %xmm0226; GFNIAVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2227; GFNIAVX1-NEXT: vpsllw %xmm1, %xmm2, %xmm1228; GFNIAVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2229; GFNIAVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1230; GFNIAVX1-NEXT: vpand %xmm1, %xmm0, %xmm0231; GFNIAVX1-NEXT: retq232;233; GFNIAVX2-LABEL: splatvar_shl_v16i8:234; GFNIAVX2: # %bb.0:235; GFNIAVX2-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero236; GFNIAVX2-NEXT: vpsllw %xmm1, %xmm0, %xmm0237; GFNIAVX2-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2238; GFNIAVX2-NEXT: vpsllw %xmm1, %xmm2, %xmm1239; GFNIAVX2-NEXT: vpbroadcastb %xmm1, %xmm1240; GFNIAVX2-NEXT: vpand %xmm1, %xmm0, %xmm0241; GFNIAVX2-NEXT: retq242;243; GFNIAVX512VL-LABEL: splatvar_shl_v16i8:244; GFNIAVX512VL: # %bb.0:245; GFNIAVX512VL-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero246; 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,zero247; GFNIAVX512VL-NEXT: vpslld %xmm1, %zmm0, %zmm0248; GFNIAVX512VL-NEXT: vpmovdb %zmm0, %xmm0249; GFNIAVX512VL-NEXT: vzeroupper250; GFNIAVX512VL-NEXT: retq251;252; GFNIAVX512BW-LABEL: splatvar_shl_v16i8:253; GFNIAVX512BW: # %bb.0:254; GFNIAVX512BW-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero255; GFNIAVX512BW-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero256; GFNIAVX512BW-NEXT: vpsllw %xmm1, %ymm0, %ymm0257; GFNIAVX512BW-NEXT: vpmovwb %ymm0, %xmm0258; GFNIAVX512BW-NEXT: vzeroupper259; GFNIAVX512BW-NEXT: retq260 %splat = shufflevector <16 x i8> %b, <16 x i8> undef, <16 x i32> zeroinitializer261 %shift = shl <16 x i8> %a, %splat262 ret <16 x i8> %shift263}264 265define <16 x i8> @splatvar_lshr_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {266; GFNISSE-LABEL: splatvar_lshr_v16i8:267; GFNISSE: # %bb.0:268; GFNISSE-NEXT: pmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero269; GFNISSE-NEXT: psrlw %xmm1, %xmm0270; GFNISSE-NEXT: pcmpeqd %xmm2, %xmm2271; GFNISSE-NEXT: psrlw %xmm1, %xmm2272; GFNISSE-NEXT: pshufb {{.*#+}} xmm2 = xmm2[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]273; GFNISSE-NEXT: pand %xmm2, %xmm0274; GFNISSE-NEXT: retq275;276; GFNIAVX1-LABEL: splatvar_lshr_v16i8:277; GFNIAVX1: # %bb.0:278; GFNIAVX1-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero279; GFNIAVX1-NEXT: vpsrlw %xmm1, %xmm0, %xmm0280; GFNIAVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2281; GFNIAVX1-NEXT: vpsrlw %xmm1, %xmm2, %xmm1282; GFNIAVX1-NEXT: vpshufb {{.*#+}} xmm1 = xmm1[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]283; GFNIAVX1-NEXT: vpand %xmm1, %xmm0, %xmm0284; GFNIAVX1-NEXT: retq285;286; GFNIAVX2-LABEL: splatvar_lshr_v16i8:287; GFNIAVX2: # %bb.0:288; GFNIAVX2-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero289; GFNIAVX2-NEXT: vpsrlw %xmm1, %xmm0, %xmm0290; GFNIAVX2-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2291; GFNIAVX2-NEXT: vpsrlw %xmm1, %xmm2, %xmm1292; GFNIAVX2-NEXT: vpsrlw $8, %xmm1, %xmm1293; GFNIAVX2-NEXT: vpbroadcastb %xmm1, %xmm1294; GFNIAVX2-NEXT: vpand %xmm1, %xmm0, %xmm0295; GFNIAVX2-NEXT: retq296;297; GFNIAVX512VL-LABEL: splatvar_lshr_v16i8:298; GFNIAVX512VL: # %bb.0:299; GFNIAVX512VL-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero300; 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,zero301; GFNIAVX512VL-NEXT: vpsrld %xmm1, %zmm0, %zmm0302; GFNIAVX512VL-NEXT: vpmovdb %zmm0, %xmm0303; GFNIAVX512VL-NEXT: vzeroupper304; GFNIAVX512VL-NEXT: retq305;306; GFNIAVX512BW-LABEL: splatvar_lshr_v16i8:307; GFNIAVX512BW: # %bb.0:308; GFNIAVX512BW-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero309; GFNIAVX512BW-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero310; GFNIAVX512BW-NEXT: vpsrlw %xmm1, %ymm0, %ymm0311; GFNIAVX512BW-NEXT: vpmovwb %ymm0, %xmm0312; GFNIAVX512BW-NEXT: vzeroupper313; GFNIAVX512BW-NEXT: retq314 %splat = shufflevector <16 x i8> %b, <16 x i8> undef, <16 x i32> zeroinitializer315 %shift = lshr <16 x i8> %a, %splat316 ret <16 x i8> %shift317}318 319define <16 x i8> @splatvar_ashr_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {320; GFNISSE-LABEL: splatvar_ashr_v16i8:321; GFNISSE: # %bb.0:322; GFNISSE-NEXT: pmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero323; GFNISSE-NEXT: psrlw %xmm1, %xmm0324; GFNISSE-NEXT: pcmpeqd %xmm2, %xmm2325; GFNISSE-NEXT: psrlw %xmm1, %xmm2326; GFNISSE-NEXT: pshufb {{.*#+}} xmm2 = xmm2[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]327; GFNISSE-NEXT: pand %xmm2, %xmm0328; GFNISSE-NEXT: movdqa {{.*#+}} xmm2 = [32896,32896,32896,32896,32896,32896,32896,32896]329; GFNISSE-NEXT: psrlw %xmm1, %xmm2330; GFNISSE-NEXT: pxor %xmm2, %xmm0331; GFNISSE-NEXT: psubb %xmm2, %xmm0332; GFNISSE-NEXT: retq333;334; GFNIAVX1-LABEL: splatvar_ashr_v16i8:335; GFNIAVX1: # %bb.0:336; GFNIAVX1-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero337; GFNIAVX1-NEXT: vpsrlw %xmm1, %xmm0, %xmm0338; GFNIAVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2339; GFNIAVX1-NEXT: vpsrlw %xmm1, %xmm2, %xmm2340; GFNIAVX1-NEXT: vpshufb {{.*#+}} xmm2 = xmm2[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]341; GFNIAVX1-NEXT: vpand %xmm2, %xmm0, %xmm0342; GFNIAVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [32896,32896,32896,32896,32896,32896,32896,32896]343; GFNIAVX1-NEXT: vpsrlw %xmm1, %xmm2, %xmm1344; GFNIAVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0345; GFNIAVX1-NEXT: vpsubb %xmm1, %xmm0, %xmm0346; GFNIAVX1-NEXT: retq347;348; GFNIAVX2-LABEL: splatvar_ashr_v16i8:349; GFNIAVX2: # %bb.0:350; GFNIAVX2-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero351; GFNIAVX2-NEXT: vpsrlw %xmm1, %xmm0, %xmm0352; GFNIAVX2-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2353; GFNIAVX2-NEXT: vpsrlw %xmm1, %xmm2, %xmm2354; GFNIAVX2-NEXT: vpsrlw $8, %xmm2, %xmm2355; GFNIAVX2-NEXT: vpbroadcastb %xmm2, %xmm2356; GFNIAVX2-NEXT: vpand %xmm2, %xmm0, %xmm0357; GFNIAVX2-NEXT: vpbroadcastb {{.*#+}} xmm2 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]358; GFNIAVX2-NEXT: vpsrlw %xmm1, %xmm2, %xmm1359; GFNIAVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0360; GFNIAVX2-NEXT: vpsubb %xmm1, %xmm0, %xmm0361; GFNIAVX2-NEXT: retq362;363; GFNIAVX512VL-LABEL: splatvar_ashr_v16i8:364; GFNIAVX512VL: # %bb.0:365; GFNIAVX512VL-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero366; GFNIAVX512VL-NEXT: vpmovsxbd %xmm0, %zmm0367; GFNIAVX512VL-NEXT: vpsrad %xmm1, %zmm0, %zmm0368; GFNIAVX512VL-NEXT: vpmovdb %zmm0, %xmm0369; GFNIAVX512VL-NEXT: vzeroupper370; GFNIAVX512VL-NEXT: retq371;372; GFNIAVX512BW-LABEL: splatvar_ashr_v16i8:373; GFNIAVX512BW: # %bb.0:374; GFNIAVX512BW-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero375; GFNIAVX512BW-NEXT: vpmovsxbw %xmm0, %ymm0376; GFNIAVX512BW-NEXT: vpsraw %xmm1, %ymm0, %ymm0377; GFNIAVX512BW-NEXT: vpmovwb %ymm0, %xmm0378; GFNIAVX512BW-NEXT: vzeroupper379; GFNIAVX512BW-NEXT: retq380 %splat = shufflevector <16 x i8> %b, <16 x i8> undef, <16 x i32> zeroinitializer381 %shift = ashr <16 x i8> %a, %splat382 ret <16 x i8> %shift383}384 385define <16 x i8> @constant_shl_v16i8(<16 x i8> %a) nounwind {386; GFNISSE-LABEL: constant_shl_v16i8:387; GFNISSE: # %bb.0:388; GFNISSE-NEXT: movdqa %xmm0, %xmm1389; GFNISSE-NEXT: pmaddubsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1]390; GFNISSE-NEXT: psllw $8, %xmm1391; GFNISSE-NEXT: pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1]392; GFNISSE-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0393; GFNISSE-NEXT: por %xmm1, %xmm0394; GFNISSE-NEXT: retq395;396; GFNIAVX1-LABEL: constant_shl_v16i8:397; GFNIAVX1: # %bb.0:398; GFNIAVX1-NEXT: vpmaddubsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1 # [0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1]399; GFNIAVX1-NEXT: vpsllw $8, %xmm1, %xmm1400; GFNIAVX1-NEXT: vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1]401; GFNIAVX1-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0402; GFNIAVX1-NEXT: vpor %xmm1, %xmm0, %xmm0403; GFNIAVX1-NEXT: retq404;405; GFNIAVX2-LABEL: constant_shl_v16i8:406; GFNIAVX2: # %bb.0:407; GFNIAVX2-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero408; GFNIAVX2-NEXT: vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1]409; GFNIAVX2-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0410; GFNIAVX2-NEXT: vextracti128 $1, %ymm0, %xmm1411; GFNIAVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0412; GFNIAVX2-NEXT: vzeroupper413; GFNIAVX2-NEXT: retq414;415; GFNIAVX512VL-LABEL: constant_shl_v16i8:416; GFNIAVX512VL: # %bb.0:417; 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,zero418; GFNIAVX512VL-NEXT: vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0419; GFNIAVX512VL-NEXT: vpmovdb %zmm0, %xmm0420; GFNIAVX512VL-NEXT: vzeroupper421; GFNIAVX512VL-NEXT: retq422;423; GFNIAVX512BW-LABEL: constant_shl_v16i8:424; GFNIAVX512BW: # %bb.0:425; GFNIAVX512BW-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero426; GFNIAVX512BW-NEXT: vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0427; GFNIAVX512BW-NEXT: vpmovwb %ymm0, %xmm0428; GFNIAVX512BW-NEXT: vzeroupper429; GFNIAVX512BW-NEXT: retq430 %shift = shl <16 x i8> %a, <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>431 ret <16 x i8> %shift432}433 434define <16 x i8> @constant_lshr_v16i8(<16 x i8> %a) nounwind {435; GFNISSE-LABEL: constant_lshr_v16i8:436; GFNISSE: # %bb.0:437; GFNISSE-NEXT: pxor %xmm2, %xmm2438; GFNISSE-NEXT: pmovzxbw {{.*#+}} xmm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero439; GFNISSE-NEXT: punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]440; GFNISSE-NEXT: pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [2,4,8,16,32,64,128,256]441; GFNISSE-NEXT: psrlw $8, %xmm0442; GFNISSE-NEXT: pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [256,128,64,32,16,8,4,2]443; GFNISSE-NEXT: psrlw $8, %xmm1444; GFNISSE-NEXT: packuswb %xmm0, %xmm1445; GFNISSE-NEXT: movdqa %xmm1, %xmm0446; GFNISSE-NEXT: retq447;448; GFNIAVX1-LABEL: constant_lshr_v16i8:449; GFNIAVX1: # %bb.0:450; GFNIAVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1451; GFNIAVX1-NEXT: vpunpckhbw {{.*#+}} xmm1 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]452; GFNIAVX1-NEXT: vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1 # [2,4,8,16,32,64,128,256]453; GFNIAVX1-NEXT: vpsrlw $8, %xmm1, %xmm1454; GFNIAVX1-NEXT: vpmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero455; GFNIAVX1-NEXT: vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [256,128,64,32,16,8,4,2]456; GFNIAVX1-NEXT: vpsrlw $8, %xmm0, %xmm0457; GFNIAVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0458; GFNIAVX1-NEXT: retq459;460; GFNIAVX2-LABEL: constant_lshr_v16i8:461; GFNIAVX2: # %bb.0:462; GFNIAVX2-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero463; GFNIAVX2-NEXT: vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [256,128,64,32,16,8,4,2,2,4,8,16,32,64,128,256]464; GFNIAVX2-NEXT: vpsrlw $8, %ymm0, %ymm0465; GFNIAVX2-NEXT: vextracti128 $1, %ymm0, %xmm1466; GFNIAVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0467; GFNIAVX2-NEXT: vzeroupper468; GFNIAVX2-NEXT: retq469;470; GFNIAVX512VL-LABEL: constant_lshr_v16i8:471; GFNIAVX512VL: # %bb.0:472; 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,zero473; GFNIAVX512VL-NEXT: vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0474; GFNIAVX512VL-NEXT: vpmovdb %zmm0, %xmm0475; GFNIAVX512VL-NEXT: vzeroupper476; GFNIAVX512VL-NEXT: retq477;478; GFNIAVX512BW-LABEL: constant_lshr_v16i8:479; GFNIAVX512BW: # %bb.0:480; GFNIAVX512BW-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero481; GFNIAVX512BW-NEXT: vpsrlvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0482; GFNIAVX512BW-NEXT: vpmovwb %ymm0, %xmm0483; GFNIAVX512BW-NEXT: vzeroupper484; GFNIAVX512BW-NEXT: retq485 %shift = lshr <16 x i8> %a, <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>486 ret <16 x i8> %shift487}488 489define <16 x i8> @constant_ashr_v16i8(<16 x i8> %a) nounwind {490; GFNISSE-LABEL: constant_ashr_v16i8:491; GFNISSE: # %bb.0:492; GFNISSE-NEXT: movdqa %xmm0, %xmm1493; 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]494; GFNISSE-NEXT: psraw $8, %xmm1495; GFNISSE-NEXT: pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [2,4,8,16,32,64,128,256]496; GFNISSE-NEXT: psrlw $8, %xmm1497; GFNISSE-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]498; GFNISSE-NEXT: psraw $8, %xmm0499; GFNISSE-NEXT: pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [256,128,64,32,16,8,4,2]500; GFNISSE-NEXT: psrlw $8, %xmm0501; GFNISSE-NEXT: packuswb %xmm1, %xmm0502; GFNISSE-NEXT: retq503;504; GFNIAVX1-LABEL: constant_ashr_v16i8:505; GFNIAVX1: # %bb.0:506; GFNIAVX1-NEXT: vpunpckhbw {{.*#+}} xmm1 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]507; GFNIAVX1-NEXT: vpsraw $8, %xmm1, %xmm1508; GFNIAVX1-NEXT: vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1 # [2,4,8,16,32,64,128,256]509; GFNIAVX1-NEXT: vpsrlw $8, %xmm1, %xmm1510; GFNIAVX1-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]511; GFNIAVX1-NEXT: vpsraw $8, %xmm0, %xmm0512; GFNIAVX1-NEXT: vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [256,128,64,32,16,8,4,2]513; GFNIAVX1-NEXT: vpsrlw $8, %xmm0, %xmm0514; GFNIAVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0515; GFNIAVX1-NEXT: retq516;517; GFNIAVX2-LABEL: constant_ashr_v16i8:518; GFNIAVX2: # %bb.0:519; GFNIAVX2-NEXT: vpmovsxbw %xmm0, %ymm0520; GFNIAVX2-NEXT: vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [256,128,64,32,16,8,4,2,2,4,8,16,32,64,128,256]521; GFNIAVX2-NEXT: vpsrlw $8, %ymm0, %ymm0522; GFNIAVX2-NEXT: vextracti128 $1, %ymm0, %xmm1523; GFNIAVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0524; GFNIAVX2-NEXT: vzeroupper525; GFNIAVX2-NEXT: retq526;527; GFNIAVX512VL-LABEL: constant_ashr_v16i8:528; GFNIAVX512VL: # %bb.0:529; GFNIAVX512VL-NEXT: vpmovsxbd %xmm0, %zmm0530; GFNIAVX512VL-NEXT: vpsravd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0531; GFNIAVX512VL-NEXT: vpmovdb %zmm0, %xmm0532; GFNIAVX512VL-NEXT: vzeroupper533; GFNIAVX512VL-NEXT: retq534;535; GFNIAVX512BW-LABEL: constant_ashr_v16i8:536; GFNIAVX512BW: # %bb.0:537; GFNIAVX512BW-NEXT: vpmovsxbw %xmm0, %ymm0538; GFNIAVX512BW-NEXT: vpsravw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0539; GFNIAVX512BW-NEXT: vpmovwb %ymm0, %xmm0540; GFNIAVX512BW-NEXT: vzeroupper541; GFNIAVX512BW-NEXT: retq542 %shift = ashr <16 x i8> %a, <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>543 ret <16 x i8> %shift544}545 546define <16 x i8> @splatconstant_shl_v16i8(<16 x i8> %a) nounwind {547; GFNISSE-LABEL: splatconstant_shl_v16i8:548; GFNISSE: # %bb.0:549; GFNISSE-NEXT: gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0550; GFNISSE-NEXT: retq551;552; GFNIAVX1OR2-LABEL: splatconstant_shl_v16i8:553; GFNIAVX1OR2: # %bb.0:554; GFNIAVX1OR2-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0555; GFNIAVX1OR2-NEXT: retq556;557; GFNIAVX512-LABEL: splatconstant_shl_v16i8:558; GFNIAVX512: # %bb.0:559; GFNIAVX512-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0560; GFNIAVX512-NEXT: retq561 %shift = shl <16 x i8> %a, <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>562 ret <16 x i8> %shift563}564 565define <16 x i8> @splatconstant_lshr_v16i8(<16 x i8> %a) nounwind {566; GFNISSE-LABEL: splatconstant_lshr_v16i8:567; GFNISSE: # %bb.0:568; GFNISSE-NEXT: gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0569; GFNISSE-NEXT: retq570;571; GFNIAVX1OR2-LABEL: splatconstant_lshr_v16i8:572; GFNIAVX1OR2: # %bb.0:573; GFNIAVX1OR2-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0574; GFNIAVX1OR2-NEXT: retq575;576; GFNIAVX512-LABEL: splatconstant_lshr_v16i8:577; GFNIAVX512: # %bb.0:578; GFNIAVX512-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0579; GFNIAVX512-NEXT: retq580 %shift = lshr <16 x i8> %a, <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>581 ret <16 x i8> %shift582}583 584define <16 x i8> @splatconstant_ashr_v16i8(<16 x i8> %a) nounwind {585; GFNISSE-LABEL: splatconstant_ashr_v16i8:586; GFNISSE: # %bb.0:587; GFNISSE-NEXT: gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0588; GFNISSE-NEXT: retq589;590; GFNIAVX1OR2-LABEL: splatconstant_ashr_v16i8:591; GFNIAVX1OR2: # %bb.0:592; GFNIAVX1OR2-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0593; GFNIAVX1OR2-NEXT: retq594;595; GFNIAVX512-LABEL: splatconstant_ashr_v16i8:596; GFNIAVX512: # %bb.0:597; GFNIAVX512-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0598; GFNIAVX512-NEXT: retq599 %shift = ashr <16 x i8> %a, <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>600 ret <16 x i8> %shift601}602 603;604; 256 Bit Vector Shifts605;606 607define <32 x i8> @var_shl_v32i8(<32 x i8> %a, <32 x i8> %b) nounwind {608; GFNISSE-LABEL: var_shl_v32i8:609; GFNISSE: # %bb.0:610; GFNISSE-NEXT: movdqa %xmm2, %xmm4611; GFNISSE-NEXT: movdqa %xmm0, %xmm2612; GFNISSE-NEXT: pmovsxdq {{.*#+}} xmm5 = [16909320,16909320]613; GFNISSE-NEXT: movdqa %xmm0, %xmm6614; GFNISSE-NEXT: gf2p8affineqb $0, %xmm5, %xmm6615; GFNISSE-NEXT: psllw $5, %xmm4616; GFNISSE-NEXT: movdqa %xmm4, %xmm0617; GFNISSE-NEXT: pblendvb %xmm0, %xmm6, %xmm2618; GFNISSE-NEXT: movdqa {{.*#+}} xmm6 = [32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0]619; GFNISSE-NEXT: movdqa %xmm2, %xmm7620; GFNISSE-NEXT: gf2p8affineqb $0, %xmm6, %xmm7621; GFNISSE-NEXT: paddb %xmm4, %xmm4622; GFNISSE-NEXT: movdqa %xmm4, %xmm0623; GFNISSE-NEXT: pblendvb %xmm0, %xmm7, %xmm2624; GFNISSE-NEXT: movdqa %xmm2, %xmm7625; GFNISSE-NEXT: paddb %xmm2, %xmm7626; GFNISSE-NEXT: paddb %xmm4, %xmm4627; GFNISSE-NEXT: movdqa %xmm4, %xmm0628; GFNISSE-NEXT: pblendvb %xmm0, %xmm7, %xmm2629; GFNISSE-NEXT: movdqa %xmm1, %xmm4630; GFNISSE-NEXT: gf2p8affineqb $0, %xmm5, %xmm4631; GFNISSE-NEXT: psllw $5, %xmm3632; GFNISSE-NEXT: movdqa %xmm3, %xmm0633; GFNISSE-NEXT: pblendvb %xmm0, %xmm4, %xmm1634; GFNISSE-NEXT: movdqa %xmm1, %xmm4635; GFNISSE-NEXT: gf2p8affineqb $0, %xmm6, %xmm4636; GFNISSE-NEXT: paddb %xmm3, %xmm3637; GFNISSE-NEXT: movdqa %xmm3, %xmm0638; GFNISSE-NEXT: pblendvb %xmm0, %xmm4, %xmm1639; GFNISSE-NEXT: movdqa %xmm1, %xmm4640; GFNISSE-NEXT: paddb %xmm1, %xmm4641; GFNISSE-NEXT: paddb %xmm3, %xmm3642; GFNISSE-NEXT: movdqa %xmm3, %xmm0643; GFNISSE-NEXT: pblendvb %xmm0, %xmm4, %xmm1644; GFNISSE-NEXT: movdqa %xmm2, %xmm0645; GFNISSE-NEXT: retq646;647; GFNIAVX1-LABEL: var_shl_v32i8:648; GFNIAVX1: # %bb.0:649; GFNIAVX1-NEXT: vextractf128 $1, %ymm0, %xmm2650; GFNIAVX1-NEXT: vmovddup {{.*#+}} xmm3 = [8,4,2,1,0,0,0,0,8,4,2,1,0,0,0,0]651; GFNIAVX1-NEXT: # xmm3 = mem[0,0]652; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm3, %xmm2, %xmm4653; GFNIAVX1-NEXT: vextractf128 $1, %ymm1, %xmm5654; GFNIAVX1-NEXT: vpsllw $5, %xmm5, %xmm5655; GFNIAVX1-NEXT: vpblendvb %xmm5, %xmm4, %xmm2, %xmm2656; GFNIAVX1-NEXT: vmovddup {{.*#+}} xmm4 = [32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0]657; GFNIAVX1-NEXT: # xmm4 = mem[0,0]658; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm4, %xmm2, %xmm6659; GFNIAVX1-NEXT: vpaddb %xmm5, %xmm5, %xmm5660; GFNIAVX1-NEXT: vpblendvb %xmm5, %xmm6, %xmm2, %xmm2661; GFNIAVX1-NEXT: vpaddb %xmm2, %xmm2, %xmm6662; GFNIAVX1-NEXT: vpaddb %xmm5, %xmm5, %xmm5663; GFNIAVX1-NEXT: vpblendvb %xmm5, %xmm6, %xmm2, %xmm2664; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm3, %xmm0, %xmm3665; GFNIAVX1-NEXT: vpsllw $5, %xmm1, %xmm1666; GFNIAVX1-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0667; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm4, %xmm0, %xmm3668; GFNIAVX1-NEXT: vpaddb %xmm1, %xmm1, %xmm1669; GFNIAVX1-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0670; GFNIAVX1-NEXT: vpaddb %xmm0, %xmm0, %xmm3671; GFNIAVX1-NEXT: vpaddb %xmm1, %xmm1, %xmm1672; GFNIAVX1-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0673; GFNIAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0674; GFNIAVX1-NEXT: retq675;676; GFNIAVX2-LABEL: var_shl_v32i8:677; GFNIAVX2: # %bb.0:678; GFNIAVX2-NEXT: vpsllw $5, %ymm1, %ymm1679; GFNIAVX2-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm2680; GFNIAVX2-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0681; GFNIAVX2-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm2682; GFNIAVX2-NEXT: vpaddb %ymm1, %ymm1, %ymm1683; GFNIAVX2-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0684; GFNIAVX2-NEXT: vpaddb %ymm0, %ymm0, %ymm2685; GFNIAVX2-NEXT: vpaddb %ymm1, %ymm1, %ymm1686; GFNIAVX2-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0687; GFNIAVX2-NEXT: retq688;689; GFNIAVX512VL-LABEL: var_shl_v32i8:690; GFNIAVX512VL: # %bb.0:691; GFNIAVX512VL-NEXT: vpsllw $5, %ymm1, %ymm1692; GFNIAVX512VL-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm2693; GFNIAVX512VL-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0694; GFNIAVX512VL-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm2695; GFNIAVX512VL-NEXT: vpaddb %ymm1, %ymm1, %ymm1696; GFNIAVX512VL-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0697; GFNIAVX512VL-NEXT: vpaddb %ymm0, %ymm0, %ymm2698; GFNIAVX512VL-NEXT: vpaddb %ymm1, %ymm1, %ymm1699; GFNIAVX512VL-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0700; GFNIAVX512VL-NEXT: retq701;702; GFNIAVX512BW-LABEL: var_shl_v32i8:703; GFNIAVX512BW: # %bb.0:704; GFNIAVX512BW-NEXT: vpmovzxbw {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero,ymm1[16],zero,ymm1[17],zero,ymm1[18],zero,ymm1[19],zero,ymm1[20],zero,ymm1[21],zero,ymm1[22],zero,ymm1[23],zero,ymm1[24],zero,ymm1[25],zero,ymm1[26],zero,ymm1[27],zero,ymm1[28],zero,ymm1[29],zero,ymm1[30],zero,ymm1[31],zero705; GFNIAVX512BW-NEXT: vpmovzxbw {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero,ymm0[16],zero,ymm0[17],zero,ymm0[18],zero,ymm0[19],zero,ymm0[20],zero,ymm0[21],zero,ymm0[22],zero,ymm0[23],zero,ymm0[24],zero,ymm0[25],zero,ymm0[26],zero,ymm0[27],zero,ymm0[28],zero,ymm0[29],zero,ymm0[30],zero,ymm0[31],zero706; GFNIAVX512BW-NEXT: vpsllvw %zmm1, %zmm0, %zmm0707; GFNIAVX512BW-NEXT: vpmovwb %zmm0, %ymm0708; GFNIAVX512BW-NEXT: retq709 %shift = shl <32 x i8> %a, %b710 ret <32 x i8> %shift711}712 713define <32 x i8> @var_lshr_v32i8(<32 x i8> %a, <32 x i8> %b) nounwind {714; GFNISSE-LABEL: var_lshr_v32i8:715; GFNISSE: # %bb.0:716; GFNISSE-NEXT: movdqa %xmm2, %xmm4717; GFNISSE-NEXT: movdqa %xmm0, %xmm2718; GFNISSE-NEXT: movdqa {{.*#+}} xmm5 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]719; GFNISSE-NEXT: movdqa %xmm0, %xmm6720; GFNISSE-NEXT: gf2p8affineqb $0, %xmm5, %xmm6721; GFNISSE-NEXT: psllw $5, %xmm4722; GFNISSE-NEXT: movdqa %xmm4, %xmm0723; GFNISSE-NEXT: pblendvb %xmm0, %xmm6, %xmm2724; GFNISSE-NEXT: movdqa {{.*#+}} xmm6 = [0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4]725; GFNISSE-NEXT: movdqa %xmm2, %xmm7726; GFNISSE-NEXT: gf2p8affineqb $0, %xmm6, %xmm7727; GFNISSE-NEXT: paddb %xmm4, %xmm4728; GFNISSE-NEXT: movdqa %xmm4, %xmm0729; GFNISSE-NEXT: pblendvb %xmm0, %xmm7, %xmm2730; GFNISSE-NEXT: movdqa {{.*#+}} xmm7 = [0,128,64,32,16,8,4,2,0,128,64,32,16,8,4,2]731; GFNISSE-NEXT: movdqa %xmm2, %xmm8732; GFNISSE-NEXT: gf2p8affineqb $0, %xmm7, %xmm8733; GFNISSE-NEXT: paddb %xmm4, %xmm4734; GFNISSE-NEXT: movdqa %xmm4, %xmm0735; GFNISSE-NEXT: pblendvb %xmm0, %xmm8, %xmm2736; GFNISSE-NEXT: movdqa %xmm1, %xmm4737; GFNISSE-NEXT: gf2p8affineqb $0, %xmm5, %xmm4738; GFNISSE-NEXT: psllw $5, %xmm3739; GFNISSE-NEXT: movdqa %xmm3, %xmm0740; GFNISSE-NEXT: pblendvb %xmm0, %xmm4, %xmm1741; GFNISSE-NEXT: movdqa %xmm1, %xmm4742; GFNISSE-NEXT: gf2p8affineqb $0, %xmm6, %xmm4743; GFNISSE-NEXT: paddb %xmm3, %xmm3744; GFNISSE-NEXT: movdqa %xmm3, %xmm0745; GFNISSE-NEXT: pblendvb %xmm0, %xmm4, %xmm1746; GFNISSE-NEXT: movdqa %xmm1, %xmm4747; GFNISSE-NEXT: gf2p8affineqb $0, %xmm7, %xmm4748; GFNISSE-NEXT: paddb %xmm3, %xmm3749; GFNISSE-NEXT: movdqa %xmm3, %xmm0750; GFNISSE-NEXT: pblendvb %xmm0, %xmm4, %xmm1751; GFNISSE-NEXT: movdqa %xmm2, %xmm0752; GFNISSE-NEXT: retq753;754; GFNIAVX1-LABEL: var_lshr_v32i8:755; GFNIAVX1: # %bb.0:756; GFNIAVX1-NEXT: vextractf128 $1, %ymm0, %xmm2757; GFNIAVX1-NEXT: vmovddup {{.*#+}} xmm3 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]758; GFNIAVX1-NEXT: # xmm3 = mem[0,0]759; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm3, %xmm2, %xmm4760; GFNIAVX1-NEXT: vextractf128 $1, %ymm1, %xmm5761; GFNIAVX1-NEXT: vpsllw $5, %xmm5, %xmm5762; GFNIAVX1-NEXT: vpblendvb %xmm5, %xmm4, %xmm2, %xmm2763; GFNIAVX1-NEXT: vmovddup {{.*#+}} xmm4 = [0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4]764; GFNIAVX1-NEXT: # xmm4 = mem[0,0]765; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm4, %xmm2, %xmm6766; GFNIAVX1-NEXT: vpaddb %xmm5, %xmm5, %xmm5767; GFNIAVX1-NEXT: vpblendvb %xmm5, %xmm6, %xmm2, %xmm2768; GFNIAVX1-NEXT: vmovddup {{.*#+}} xmm6 = [0,128,64,32,16,8,4,2,0,128,64,32,16,8,4,2]769; GFNIAVX1-NEXT: # xmm6 = mem[0,0]770; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm6, %xmm2, %xmm7771; GFNIAVX1-NEXT: vpaddb %xmm5, %xmm5, %xmm5772; GFNIAVX1-NEXT: vpblendvb %xmm5, %xmm7, %xmm2, %xmm2773; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm3, %xmm0, %xmm3774; GFNIAVX1-NEXT: vpsllw $5, %xmm1, %xmm1775; GFNIAVX1-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0776; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm4, %xmm0, %xmm3777; GFNIAVX1-NEXT: vpaddb %xmm1, %xmm1, %xmm1778; GFNIAVX1-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0779; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm6, %xmm0, %xmm3780; GFNIAVX1-NEXT: vpaddb %xmm1, %xmm1, %xmm1781; GFNIAVX1-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0782; GFNIAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0783; GFNIAVX1-NEXT: retq784;785; GFNIAVX2-LABEL: var_lshr_v32i8:786; GFNIAVX2: # %bb.0:787; GFNIAVX2-NEXT: vpsllw $5, %ymm1, %ymm1788; GFNIAVX2-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm2789; GFNIAVX2-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0790; GFNIAVX2-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm2791; GFNIAVX2-NEXT: vpaddb %ymm1, %ymm1, %ymm1792; GFNIAVX2-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0793; GFNIAVX2-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm2794; GFNIAVX2-NEXT: vpaddb %ymm1, %ymm1, %ymm1795; GFNIAVX2-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0796; GFNIAVX2-NEXT: retq797;798; GFNIAVX512VL-LABEL: var_lshr_v32i8:799; GFNIAVX512VL: # %bb.0:800; GFNIAVX512VL-NEXT: vpsllw $5, %ymm1, %ymm1801; GFNIAVX512VL-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm2802; GFNIAVX512VL-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0803; GFNIAVX512VL-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm2804; GFNIAVX512VL-NEXT: vpaddb %ymm1, %ymm1, %ymm1805; GFNIAVX512VL-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0806; GFNIAVX512VL-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm2807; GFNIAVX512VL-NEXT: vpaddb %ymm1, %ymm1, %ymm1808; GFNIAVX512VL-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0809; GFNIAVX512VL-NEXT: retq810;811; GFNIAVX512BW-LABEL: var_lshr_v32i8:812; GFNIAVX512BW: # %bb.0:813; GFNIAVX512BW-NEXT: vpmovzxbw {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero,ymm1[16],zero,ymm1[17],zero,ymm1[18],zero,ymm1[19],zero,ymm1[20],zero,ymm1[21],zero,ymm1[22],zero,ymm1[23],zero,ymm1[24],zero,ymm1[25],zero,ymm1[26],zero,ymm1[27],zero,ymm1[28],zero,ymm1[29],zero,ymm1[30],zero,ymm1[31],zero814; GFNIAVX512BW-NEXT: vpmovzxbw {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero,ymm0[16],zero,ymm0[17],zero,ymm0[18],zero,ymm0[19],zero,ymm0[20],zero,ymm0[21],zero,ymm0[22],zero,ymm0[23],zero,ymm0[24],zero,ymm0[25],zero,ymm0[26],zero,ymm0[27],zero,ymm0[28],zero,ymm0[29],zero,ymm0[30],zero,ymm0[31],zero815; GFNIAVX512BW-NEXT: vpsrlvw %zmm1, %zmm0, %zmm0816; GFNIAVX512BW-NEXT: vpmovwb %zmm0, %ymm0817; GFNIAVX512BW-NEXT: retq818 %shift = lshr <32 x i8> %a, %b819 ret <32 x i8> %shift820}821 822define <32 x i8> @var_ashr_v32i8(<32 x i8> %a, <32 x i8> %b) nounwind {823; GFNISSE-LABEL: var_ashr_v32i8:824; GFNISSE: # %bb.0:825; GFNISSE-NEXT: movdqa %xmm0, %xmm4826; GFNISSE-NEXT: psllw $5, %xmm2827; GFNISSE-NEXT: punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]828; GFNISSE-NEXT: punpckhbw {{.*#+}} xmm5 = xmm5[8],xmm4[8],xmm5[9],xmm4[9],xmm5[10],xmm4[10],xmm5[11],xmm4[11],xmm5[12],xmm4[12],xmm5[13],xmm4[13],xmm5[14],xmm4[14],xmm5[15],xmm4[15]829; GFNISSE-NEXT: movdqa %xmm5, %xmm6830; GFNISSE-NEXT: psraw $4, %xmm6831; GFNISSE-NEXT: pblendvb %xmm0, %xmm6, %xmm5832; GFNISSE-NEXT: movdqa %xmm5, %xmm6833; GFNISSE-NEXT: psraw $2, %xmm6834; GFNISSE-NEXT: paddw %xmm0, %xmm0835; GFNISSE-NEXT: pblendvb %xmm0, %xmm6, %xmm5836; GFNISSE-NEXT: movdqa %xmm5, %xmm6837; GFNISSE-NEXT: psraw $1, %xmm6838; GFNISSE-NEXT: paddw %xmm0, %xmm0839; GFNISSE-NEXT: pblendvb %xmm0, %xmm6, %xmm5840; GFNISSE-NEXT: psrlw $8, %xmm5841; GFNISSE-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]842; GFNISSE-NEXT: punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1],xmm2[2],xmm4[2],xmm2[3],xmm4[3],xmm2[4],xmm4[4],xmm2[5],xmm4[5],xmm2[6],xmm4[6],xmm2[7],xmm4[7]843; GFNISSE-NEXT: movdqa %xmm2, %xmm4844; GFNISSE-NEXT: psraw $4, %xmm4845; GFNISSE-NEXT: pblendvb %xmm0, %xmm4, %xmm2846; GFNISSE-NEXT: movdqa %xmm2, %xmm4847; GFNISSE-NEXT: psraw $2, %xmm4848; GFNISSE-NEXT: paddw %xmm0, %xmm0849; GFNISSE-NEXT: pblendvb %xmm0, %xmm4, %xmm2850; GFNISSE-NEXT: movdqa %xmm2, %xmm4851; GFNISSE-NEXT: psraw $1, %xmm4852; GFNISSE-NEXT: paddw %xmm0, %xmm0853; GFNISSE-NEXT: pblendvb %xmm0, %xmm4, %xmm2854; GFNISSE-NEXT: psrlw $8, %xmm2855; GFNISSE-NEXT: packuswb %xmm5, %xmm2856; GFNISSE-NEXT: psllw $5, %xmm3857; GFNISSE-NEXT: punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm3[8],xmm0[9],xmm3[9],xmm0[10],xmm3[10],xmm0[11],xmm3[11],xmm0[12],xmm3[12],xmm0[13],xmm3[13],xmm0[14],xmm3[14],xmm0[15],xmm3[15]858; GFNISSE-NEXT: punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm1[8],xmm4[9],xmm1[9],xmm4[10],xmm1[10],xmm4[11],xmm1[11],xmm4[12],xmm1[12],xmm4[13],xmm1[13],xmm4[14],xmm1[14],xmm4[15],xmm1[15]859; GFNISSE-NEXT: movdqa %xmm4, %xmm5860; GFNISSE-NEXT: psraw $4, %xmm5861; GFNISSE-NEXT: pblendvb %xmm0, %xmm5, %xmm4862; GFNISSE-NEXT: movdqa %xmm4, %xmm5863; GFNISSE-NEXT: psraw $2, %xmm5864; GFNISSE-NEXT: paddw %xmm0, %xmm0865; GFNISSE-NEXT: pblendvb %xmm0, %xmm5, %xmm4866; GFNISSE-NEXT: movdqa %xmm4, %xmm5867; GFNISSE-NEXT: psraw $1, %xmm5868; GFNISSE-NEXT: paddw %xmm0, %xmm0869; GFNISSE-NEXT: pblendvb %xmm0, %xmm5, %xmm4870; GFNISSE-NEXT: psrlw $8, %xmm4871; GFNISSE-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]872; GFNISSE-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]873; GFNISSE-NEXT: movdqa %xmm1, %xmm3874; GFNISSE-NEXT: psraw $4, %xmm3875; GFNISSE-NEXT: pblendvb %xmm0, %xmm3, %xmm1876; GFNISSE-NEXT: movdqa %xmm1, %xmm3877; GFNISSE-NEXT: psraw $2, %xmm3878; GFNISSE-NEXT: paddw %xmm0, %xmm0879; GFNISSE-NEXT: pblendvb %xmm0, %xmm3, %xmm1880; GFNISSE-NEXT: movdqa %xmm1, %xmm3881; GFNISSE-NEXT: psraw $1, %xmm3882; GFNISSE-NEXT: paddw %xmm0, %xmm0883; GFNISSE-NEXT: pblendvb %xmm0, %xmm3, %xmm1884; GFNISSE-NEXT: psrlw $8, %xmm1885; GFNISSE-NEXT: packuswb %xmm4, %xmm1886; GFNISSE-NEXT: movdqa %xmm2, %xmm0887; GFNISSE-NEXT: retq888;889; GFNIAVX1-LABEL: var_ashr_v32i8:890; GFNIAVX1: # %bb.0:891; GFNIAVX1-NEXT: vextractf128 $1, %ymm1, %xmm2892; GFNIAVX1-NEXT: vpsllw $5, %xmm2, %xmm2893; GFNIAVX1-NEXT: vpunpckhbw {{.*#+}} xmm3 = xmm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]894; GFNIAVX1-NEXT: vextractf128 $1, %ymm0, %xmm4895; GFNIAVX1-NEXT: vpunpckhbw {{.*#+}} xmm5 = xmm4[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]896; GFNIAVX1-NEXT: vpsraw $4, %xmm5, %xmm6897; GFNIAVX1-NEXT: vpblendvb %xmm3, %xmm6, %xmm5, %xmm5898; GFNIAVX1-NEXT: vpsraw $2, %xmm5, %xmm6899; GFNIAVX1-NEXT: vpaddw %xmm3, %xmm3, %xmm7900; GFNIAVX1-NEXT: vpblendvb %xmm7, %xmm6, %xmm5, %xmm5901; GFNIAVX1-NEXT: vpsraw $1, %xmm5, %xmm6902; GFNIAVX1-NEXT: vpsllw $2, %xmm3, %xmm3903; GFNIAVX1-NEXT: vpblendvb %xmm3, %xmm6, %xmm5, %xmm3904; GFNIAVX1-NEXT: vpsrlw $8, %xmm3, %xmm3905; GFNIAVX1-NEXT: vpunpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]906; GFNIAVX1-NEXT: vpunpcklbw {{.*#+}} xmm4 = xmm4[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]907; GFNIAVX1-NEXT: vpsraw $4, %xmm4, %xmm5908; GFNIAVX1-NEXT: vpblendvb %xmm2, %xmm5, %xmm4, %xmm4909; GFNIAVX1-NEXT: vpsraw $2, %xmm4, %xmm5910; GFNIAVX1-NEXT: vpaddw %xmm2, %xmm2, %xmm6911; GFNIAVX1-NEXT: vpblendvb %xmm6, %xmm5, %xmm4, %xmm4912; GFNIAVX1-NEXT: vpsraw $1, %xmm4, %xmm5913; GFNIAVX1-NEXT: vpsllw $2, %xmm2, %xmm2914; GFNIAVX1-NEXT: vpblendvb %xmm2, %xmm5, %xmm4, %xmm2915; GFNIAVX1-NEXT: vpsrlw $8, %xmm2, %xmm2916; GFNIAVX1-NEXT: vpackuswb %xmm3, %xmm2, %xmm2917; GFNIAVX1-NEXT: vpsllw $5, %xmm1, %xmm1918; GFNIAVX1-NEXT: vpunpckhbw {{.*#+}} xmm3 = xmm1[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]919; GFNIAVX1-NEXT: vpunpckhbw {{.*#+}} xmm4 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]920; GFNIAVX1-NEXT: vpsraw $4, %xmm4, %xmm5921; GFNIAVX1-NEXT: vpblendvb %xmm3, %xmm5, %xmm4, %xmm4922; GFNIAVX1-NEXT: vpsraw $2, %xmm4, %xmm5923; GFNIAVX1-NEXT: vpaddw %xmm3, %xmm3, %xmm6924; GFNIAVX1-NEXT: vpblendvb %xmm6, %xmm5, %xmm4, %xmm4925; GFNIAVX1-NEXT: vpsraw $1, %xmm4, %xmm5926; GFNIAVX1-NEXT: vpsllw $2, %xmm3, %xmm3927; GFNIAVX1-NEXT: vpblendvb %xmm3, %xmm5, %xmm4, %xmm3928; GFNIAVX1-NEXT: vpsrlw $8, %xmm3, %xmm3929; GFNIAVX1-NEXT: vpunpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]930; GFNIAVX1-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]931; GFNIAVX1-NEXT: vpsraw $4, %xmm0, %xmm4932; GFNIAVX1-NEXT: vpblendvb %xmm1, %xmm4, %xmm0, %xmm0933; GFNIAVX1-NEXT: vpsraw $2, %xmm0, %xmm4934; GFNIAVX1-NEXT: vpaddw %xmm1, %xmm1, %xmm5935; GFNIAVX1-NEXT: vpblendvb %xmm5, %xmm4, %xmm0, %xmm0936; GFNIAVX1-NEXT: vpsraw $1, %xmm0, %xmm4937; GFNIAVX1-NEXT: vpsllw $2, %xmm1, %xmm1938; GFNIAVX1-NEXT: vpblendvb %xmm1, %xmm4, %xmm0, %xmm0939; GFNIAVX1-NEXT: vpsrlw $8, %xmm0, %xmm0940; GFNIAVX1-NEXT: vpackuswb %xmm3, %xmm0, %xmm0941; GFNIAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0942; GFNIAVX1-NEXT: retq943;944; GFNIAVX2-LABEL: var_ashr_v32i8:945; GFNIAVX2: # %bb.0:946; GFNIAVX2-NEXT: vpsllw $5, %ymm1, %ymm1947; 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]948; 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]949; GFNIAVX2-NEXT: vpsraw $4, %ymm3, %ymm4950; GFNIAVX2-NEXT: vpblendvb %ymm2, %ymm4, %ymm3, %ymm3951; GFNIAVX2-NEXT: vpsraw $2, %ymm3, %ymm4952; GFNIAVX2-NEXT: vpaddw %ymm2, %ymm2, %ymm5953; GFNIAVX2-NEXT: vpblendvb %ymm5, %ymm4, %ymm3, %ymm3954; GFNIAVX2-NEXT: vpsraw $1, %ymm3, %ymm4955; GFNIAVX2-NEXT: vpsllw $2, %ymm2, %ymm2956; GFNIAVX2-NEXT: vpblendvb %ymm2, %ymm4, %ymm3, %ymm2957; GFNIAVX2-NEXT: vpsrlw $8, %ymm2, %ymm2958; 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]959; 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]960; GFNIAVX2-NEXT: vpsraw $4, %ymm0, %ymm3961; GFNIAVX2-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm0962; GFNIAVX2-NEXT: vpsraw $2, %ymm0, %ymm3963; GFNIAVX2-NEXT: vpaddw %ymm1, %ymm1, %ymm4964; GFNIAVX2-NEXT: vpblendvb %ymm4, %ymm3, %ymm0, %ymm0965; GFNIAVX2-NEXT: vpsraw $1, %ymm0, %ymm3966; GFNIAVX2-NEXT: vpsllw $2, %ymm1, %ymm1967; GFNIAVX2-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm0968; GFNIAVX2-NEXT: vpsrlw $8, %ymm0, %ymm0969; GFNIAVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0970; GFNIAVX2-NEXT: retq971;972; GFNIAVX512VL-LABEL: var_ashr_v32i8:973; GFNIAVX512VL: # %bb.0:974; GFNIAVX512VL-NEXT: vpsllw $5, %ymm1, %ymm1975; 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]976; 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]977; GFNIAVX512VL-NEXT: vpsraw $4, %ymm3, %ymm4978; GFNIAVX512VL-NEXT: vpblendvb %ymm2, %ymm4, %ymm3, %ymm3979; GFNIAVX512VL-NEXT: vpsraw $2, %ymm3, %ymm4980; GFNIAVX512VL-NEXT: vpaddw %ymm2, %ymm2, %ymm5981; GFNIAVX512VL-NEXT: vpblendvb %ymm5, %ymm4, %ymm3, %ymm3982; GFNIAVX512VL-NEXT: vpsraw $1, %ymm3, %ymm4983; GFNIAVX512VL-NEXT: vpsllw $2, %ymm2, %ymm2984; GFNIAVX512VL-NEXT: vpblendvb %ymm2, %ymm4, %ymm3, %ymm2985; GFNIAVX512VL-NEXT: vpsrlw $8, %ymm2, %ymm2986; 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]987; 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]988; GFNIAVX512VL-NEXT: vpsraw $4, %ymm0, %ymm3989; GFNIAVX512VL-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm0990; GFNIAVX512VL-NEXT: vpsraw $2, %ymm0, %ymm3991; GFNIAVX512VL-NEXT: vpaddw %ymm1, %ymm1, %ymm4992; GFNIAVX512VL-NEXT: vpblendvb %ymm4, %ymm3, %ymm0, %ymm0993; GFNIAVX512VL-NEXT: vpsraw $1, %ymm0, %ymm3994; GFNIAVX512VL-NEXT: vpsllw $2, %ymm1, %ymm1995; GFNIAVX512VL-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm0996; GFNIAVX512VL-NEXT: vpsrlw $8, %ymm0, %ymm0997; GFNIAVX512VL-NEXT: vpackuswb %ymm2, %ymm0, %ymm0998; GFNIAVX512VL-NEXT: retq999;1000; GFNIAVX512BW-LABEL: var_ashr_v32i8:1001; GFNIAVX512BW: # %bb.0:1002; GFNIAVX512BW-NEXT: vpmovzxbw {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero,ymm1[16],zero,ymm1[17],zero,ymm1[18],zero,ymm1[19],zero,ymm1[20],zero,ymm1[21],zero,ymm1[22],zero,ymm1[23],zero,ymm1[24],zero,ymm1[25],zero,ymm1[26],zero,ymm1[27],zero,ymm1[28],zero,ymm1[29],zero,ymm1[30],zero,ymm1[31],zero1003; GFNIAVX512BW-NEXT: vpmovsxbw %ymm0, %zmm01004; GFNIAVX512BW-NEXT: vpsravw %zmm1, %zmm0, %zmm01005; GFNIAVX512BW-NEXT: vpmovwb %zmm0, %ymm01006; GFNIAVX512BW-NEXT: retq1007 %shift = ashr <32 x i8> %a, %b1008 ret <32 x i8> %shift1009}1010 1011define <32 x i8> @splatvar_shl_v32i8(<32 x i8> %a, <32 x i8> %b) nounwind {1012; GFNISSE-LABEL: splatvar_shl_v32i8:1013; GFNISSE: # %bb.0:1014; GFNISSE-NEXT: pmovzxbq {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,zero,zero,zero,zero,xmm2[1],zero,zero,zero,zero,zero,zero,zero1015; GFNISSE-NEXT: psllw %xmm2, %xmm01016; GFNISSE-NEXT: pcmpeqd %xmm3, %xmm31017; GFNISSE-NEXT: psllw %xmm2, %xmm31018; GFNISSE-NEXT: pxor %xmm4, %xmm41019; GFNISSE-NEXT: pshufb %xmm4, %xmm31020; GFNISSE-NEXT: pand %xmm3, %xmm01021; GFNISSE-NEXT: psllw %xmm2, %xmm11022; GFNISSE-NEXT: pand %xmm3, %xmm11023; GFNISSE-NEXT: retq1024;1025; GFNIAVX1-LABEL: splatvar_shl_v32i8:1026; GFNIAVX1: # %bb.0:1027; GFNIAVX1-NEXT: vextractf128 $1, %ymm0, %xmm21028; GFNIAVX1-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1029; GFNIAVX1-NEXT: vpsllw %xmm1, %xmm2, %xmm21030; GFNIAVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm31031; GFNIAVX1-NEXT: vpsllw %xmm1, %xmm3, %xmm31032; GFNIAVX1-NEXT: vpxor %xmm4, %xmm4, %xmm41033; GFNIAVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm31034; GFNIAVX1-NEXT: vpand %xmm3, %xmm2, %xmm21035; GFNIAVX1-NEXT: vpsllw %xmm1, %xmm0, %xmm01036; GFNIAVX1-NEXT: vpand %xmm3, %xmm0, %xmm01037; GFNIAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm01038; GFNIAVX1-NEXT: retq1039;1040; GFNIAVX2-LABEL: splatvar_shl_v32i8:1041; GFNIAVX2: # %bb.0:1042; GFNIAVX2-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1043; GFNIAVX2-NEXT: vpsllw %xmm1, %ymm0, %ymm01044; GFNIAVX2-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm21045; GFNIAVX2-NEXT: vpsllw %xmm1, %xmm2, %xmm11046; GFNIAVX2-NEXT: vpbroadcastb %xmm1, %ymm11047; GFNIAVX2-NEXT: vpand %ymm1, %ymm0, %ymm01048; GFNIAVX2-NEXT: retq1049;1050; GFNIAVX512VL-LABEL: splatvar_shl_v32i8:1051; GFNIAVX512VL: # %bb.0:1052; GFNIAVX512VL-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1053; GFNIAVX512VL-NEXT: vpsllw %xmm1, %ymm0, %ymm01054; GFNIAVX512VL-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm21055; GFNIAVX512VL-NEXT: vpsllw %xmm1, %xmm2, %xmm11056; GFNIAVX512VL-NEXT: vpbroadcastb %xmm1, %ymm11057; GFNIAVX512VL-NEXT: vpand %ymm1, %ymm0, %ymm01058; GFNIAVX512VL-NEXT: retq1059;1060; GFNIAVX512BW-LABEL: splatvar_shl_v32i8:1061; GFNIAVX512BW: # %bb.0:1062; GFNIAVX512BW-NEXT: vpmovzxbw {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero,ymm0[16],zero,ymm0[17],zero,ymm0[18],zero,ymm0[19],zero,ymm0[20],zero,ymm0[21],zero,ymm0[22],zero,ymm0[23],zero,ymm0[24],zero,ymm0[25],zero,ymm0[26],zero,ymm0[27],zero,ymm0[28],zero,ymm0[29],zero,ymm0[30],zero,ymm0[31],zero1063; GFNIAVX512BW-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1064; GFNIAVX512BW-NEXT: vpsllw %xmm1, %zmm0, %zmm01065; GFNIAVX512BW-NEXT: vpmovwb %zmm0, %ymm01066; GFNIAVX512BW-NEXT: retq1067 %splat = shufflevector <32 x i8> %b, <32 x i8> undef, <32 x i32> zeroinitializer1068 %shift = shl <32 x i8> %a, %splat1069 ret <32 x i8> %shift1070}1071 1072define <32 x i8> @splatvar_lshr_v32i8(<32 x i8> %a, <32 x i8> %b) nounwind {1073; GFNISSE-LABEL: splatvar_lshr_v32i8:1074; GFNISSE: # %bb.0:1075; GFNISSE-NEXT: pmovzxbq {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,zero,zero,zero,zero,xmm2[1],zero,zero,zero,zero,zero,zero,zero1076; GFNISSE-NEXT: psrlw %xmm2, %xmm01077; GFNISSE-NEXT: pcmpeqd %xmm3, %xmm31078; GFNISSE-NEXT: psrlw %xmm2, %xmm31079; GFNISSE-NEXT: pshufb {{.*#+}} xmm3 = xmm3[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]1080; GFNISSE-NEXT: pand %xmm3, %xmm01081; GFNISSE-NEXT: psrlw %xmm2, %xmm11082; GFNISSE-NEXT: pand %xmm3, %xmm11083; GFNISSE-NEXT: retq1084;1085; GFNIAVX1-LABEL: splatvar_lshr_v32i8:1086; GFNIAVX1: # %bb.0:1087; GFNIAVX1-NEXT: vextractf128 $1, %ymm0, %xmm21088; GFNIAVX1-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1089; GFNIAVX1-NEXT: vpsrlw %xmm1, %xmm2, %xmm21090; GFNIAVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm31091; GFNIAVX1-NEXT: vpsrlw %xmm1, %xmm3, %xmm31092; GFNIAVX1-NEXT: vpshufb {{.*#+}} xmm3 = xmm3[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]1093; GFNIAVX1-NEXT: vpand %xmm3, %xmm2, %xmm21094; GFNIAVX1-NEXT: vpsrlw %xmm1, %xmm0, %xmm01095; GFNIAVX1-NEXT: vpand %xmm3, %xmm0, %xmm01096; GFNIAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm01097; GFNIAVX1-NEXT: retq1098;1099; GFNIAVX2-LABEL: splatvar_lshr_v32i8:1100; GFNIAVX2: # %bb.0:1101; GFNIAVX2-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1102; GFNIAVX2-NEXT: vpsrlw %xmm1, %ymm0, %ymm01103; GFNIAVX2-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm21104; GFNIAVX2-NEXT: vpsrlw %xmm1, %xmm2, %xmm11105; GFNIAVX2-NEXT: vpsrlw $8, %xmm1, %xmm11106; GFNIAVX2-NEXT: vpbroadcastb %xmm1, %ymm11107; GFNIAVX2-NEXT: vpand %ymm1, %ymm0, %ymm01108; GFNIAVX2-NEXT: retq1109;1110; GFNIAVX512VL-LABEL: splatvar_lshr_v32i8:1111; GFNIAVX512VL: # %bb.0:1112; GFNIAVX512VL-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1113; GFNIAVX512VL-NEXT: vpsrlw %xmm1, %ymm0, %ymm01114; GFNIAVX512VL-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm21115; GFNIAVX512VL-NEXT: vpsrlw %xmm1, %xmm2, %xmm11116; GFNIAVX512VL-NEXT: vpsrlw $8, %xmm1, %xmm11117; GFNIAVX512VL-NEXT: vpbroadcastb %xmm1, %ymm11118; GFNIAVX512VL-NEXT: vpand %ymm1, %ymm0, %ymm01119; GFNIAVX512VL-NEXT: retq1120;1121; GFNIAVX512BW-LABEL: splatvar_lshr_v32i8:1122; GFNIAVX512BW: # %bb.0:1123; GFNIAVX512BW-NEXT: vpmovzxbw {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero,ymm0[16],zero,ymm0[17],zero,ymm0[18],zero,ymm0[19],zero,ymm0[20],zero,ymm0[21],zero,ymm0[22],zero,ymm0[23],zero,ymm0[24],zero,ymm0[25],zero,ymm0[26],zero,ymm0[27],zero,ymm0[28],zero,ymm0[29],zero,ymm0[30],zero,ymm0[31],zero1124; GFNIAVX512BW-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1125; GFNIAVX512BW-NEXT: vpsrlw %xmm1, %zmm0, %zmm01126; GFNIAVX512BW-NEXT: vpmovwb %zmm0, %ymm01127; GFNIAVX512BW-NEXT: retq1128 %splat = shufflevector <32 x i8> %b, <32 x i8> undef, <32 x i32> zeroinitializer1129 %shift = lshr <32 x i8> %a, %splat1130 ret <32 x i8> %shift1131}1132 1133define <32 x i8> @splatvar_ashr_v32i8(<32 x i8> %a, <32 x i8> %b) nounwind {1134; GFNISSE-LABEL: splatvar_ashr_v32i8:1135; GFNISSE: # %bb.0:1136; GFNISSE-NEXT: pmovzxbq {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,zero,zero,zero,zero,xmm2[1],zero,zero,zero,zero,zero,zero,zero1137; GFNISSE-NEXT: psrlw %xmm2, %xmm01138; GFNISSE-NEXT: pcmpeqd %xmm3, %xmm31139; GFNISSE-NEXT: psrlw %xmm2, %xmm31140; GFNISSE-NEXT: pshufb {{.*#+}} xmm3 = xmm3[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]1141; GFNISSE-NEXT: pand %xmm3, %xmm01142; GFNISSE-NEXT: movdqa {{.*#+}} xmm4 = [32896,32896,32896,32896,32896,32896,32896,32896]1143; GFNISSE-NEXT: psrlw %xmm2, %xmm41144; GFNISSE-NEXT: pxor %xmm4, %xmm01145; GFNISSE-NEXT: psubb %xmm4, %xmm01146; GFNISSE-NEXT: psrlw %xmm2, %xmm11147; GFNISSE-NEXT: pand %xmm3, %xmm11148; GFNISSE-NEXT: pxor %xmm4, %xmm11149; GFNISSE-NEXT: psubb %xmm4, %xmm11150; GFNISSE-NEXT: retq1151;1152; GFNIAVX1-LABEL: splatvar_ashr_v32i8:1153; GFNIAVX1: # %bb.0:1154; GFNIAVX1-NEXT: vextractf128 $1, %ymm0, %xmm21155; GFNIAVX1-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1156; GFNIAVX1-NEXT: vpsrlw %xmm1, %xmm2, %xmm21157; GFNIAVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm31158; GFNIAVX1-NEXT: vpsrlw %xmm1, %xmm3, %xmm31159; GFNIAVX1-NEXT: vpshufb {{.*#+}} xmm3 = xmm3[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]1160; GFNIAVX1-NEXT: vpand %xmm3, %xmm2, %xmm21161; GFNIAVX1-NEXT: vbroadcastss {{.*#+}} xmm4 = [32896,32896,32896,32896,32896,32896,32896,32896]1162; GFNIAVX1-NEXT: vpsrlw %xmm1, %xmm4, %xmm41163; GFNIAVX1-NEXT: vpxor %xmm4, %xmm2, %xmm21164; GFNIAVX1-NEXT: vpsubb %xmm4, %xmm2, %xmm21165; GFNIAVX1-NEXT: vpsrlw %xmm1, %xmm0, %xmm01166; GFNIAVX1-NEXT: vpand %xmm3, %xmm0, %xmm01167; GFNIAVX1-NEXT: vpxor %xmm4, %xmm0, %xmm01168; GFNIAVX1-NEXT: vpsubb %xmm4, %xmm0, %xmm01169; GFNIAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm01170; GFNIAVX1-NEXT: retq1171;1172; GFNIAVX2-LABEL: splatvar_ashr_v32i8:1173; GFNIAVX2: # %bb.0:1174; GFNIAVX2-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1175; GFNIAVX2-NEXT: vpsrlw %xmm1, %ymm0, %ymm01176; GFNIAVX2-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm21177; GFNIAVX2-NEXT: vpsrlw %xmm1, %xmm2, %xmm21178; GFNIAVX2-NEXT: vpsrlw $8, %xmm2, %xmm21179; GFNIAVX2-NEXT: vpbroadcastb %xmm2, %ymm21180; GFNIAVX2-NEXT: vpand %ymm2, %ymm0, %ymm01181; GFNIAVX2-NEXT: vpbroadcastb {{.*#+}} ymm2 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]1182; GFNIAVX2-NEXT: vpsrlw %xmm1, %ymm2, %ymm11183; GFNIAVX2-NEXT: vpxor %ymm1, %ymm0, %ymm01184; GFNIAVX2-NEXT: vpsubb %ymm1, %ymm0, %ymm01185; GFNIAVX2-NEXT: retq1186;1187; GFNIAVX512VL-LABEL: splatvar_ashr_v32i8:1188; GFNIAVX512VL: # %bb.0:1189; GFNIAVX512VL-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1190; GFNIAVX512VL-NEXT: vpsrlw %xmm1, %ymm0, %ymm01191; GFNIAVX512VL-NEXT: vpbroadcastd {{.*#+}} ymm2 = [32896,32896,32896,32896,32896,32896,32896,32896,32896,32896,32896,32896,32896,32896,32896,32896]1192; GFNIAVX512VL-NEXT: vpsrlw %xmm1, %ymm2, %ymm21193; GFNIAVX512VL-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm31194; GFNIAVX512VL-NEXT: vpsrlw %xmm1, %xmm3, %xmm11195; GFNIAVX512VL-NEXT: vpsrlw $8, %xmm1, %xmm11196; GFNIAVX512VL-NEXT: vpbroadcastb %xmm1, %ymm11197; GFNIAVX512VL-NEXT: vpternlogq {{.*#+}} ymm1 = ymm2 ^ (ymm1 & ymm0)1198; GFNIAVX512VL-NEXT: vpsubb %ymm2, %ymm1, %ymm01199; GFNIAVX512VL-NEXT: retq1200;1201; GFNIAVX512BW-LABEL: splatvar_ashr_v32i8:1202; GFNIAVX512BW: # %bb.0:1203; GFNIAVX512BW-NEXT: vpmovsxbw %ymm0, %zmm01204; GFNIAVX512BW-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero1205; GFNIAVX512BW-NEXT: vpsraw %xmm1, %zmm0, %zmm01206; GFNIAVX512BW-NEXT: vpmovwb %zmm0, %ymm01207; GFNIAVX512BW-NEXT: retq1208 %splat = shufflevector <32 x i8> %b, <32 x i8> undef, <32 x i32> zeroinitializer1209 %shift = ashr <32 x i8> %a, %splat1210 ret <32 x i8> %shift1211}1212 1213define <32 x i8> @constant_shl_v32i8(<32 x i8> %a) nounwind {1214; GFNISSE-LABEL: constant_shl_v32i8:1215; GFNISSE: # %bb.0:1216; GFNISSE-NEXT: movdqa {{.*#+}} xmm2 = [1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1]1217; GFNISSE-NEXT: movdqa %xmm0, %xmm31218; GFNISSE-NEXT: pmullw %xmm2, %xmm31219; GFNISSE-NEXT: pmovzxbw {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]1220; GFNISSE-NEXT: pand %xmm4, %xmm31221; GFNISSE-NEXT: movdqa {{.*#+}} xmm5 = [0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1]1222; GFNISSE-NEXT: pmaddubsw %xmm5, %xmm01223; GFNISSE-NEXT: psllw $8, %xmm01224; GFNISSE-NEXT: por %xmm3, %xmm01225; GFNISSE-NEXT: pmullw %xmm1, %xmm21226; GFNISSE-NEXT: pand %xmm4, %xmm21227; GFNISSE-NEXT: pmaddubsw %xmm5, %xmm11228; GFNISSE-NEXT: psllw $8, %xmm11229; GFNISSE-NEXT: por %xmm2, %xmm11230; GFNISSE-NEXT: retq1231;1232; GFNIAVX1-LABEL: constant_shl_v32i8:1233; GFNIAVX1: # %bb.0:1234; GFNIAVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1]1235; GFNIAVX1-NEXT: vpmaddubsw %xmm1, %xmm0, %xmm21236; GFNIAVX1-NEXT: vpsllw $8, %xmm2, %xmm21237; GFNIAVX1-NEXT: vextractf128 $1, %ymm0, %xmm31238; GFNIAVX1-NEXT: vpmaddubsw %xmm1, %xmm3, %xmm11239; GFNIAVX1-NEXT: vpsllw $8, %xmm1, %xmm11240; GFNIAVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm11241; GFNIAVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1]1242; GFNIAVX1-NEXT: vpmullw %xmm2, %xmm3, %xmm31243; GFNIAVX1-NEXT: vpmullw %xmm2, %xmm0, %xmm01244; GFNIAVX1-NEXT: vinsertf128 $1, %xmm3, %ymm0, %ymm01245; GFNIAVX1-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01246; GFNIAVX1-NEXT: vorps %ymm1, %ymm0, %ymm01247; GFNIAVX1-NEXT: retq1248;1249; GFNIAVX2-LABEL: constant_shl_v32i8:1250; GFNIAVX2: # %bb.0:1251; GFNIAVX2-NEXT: vpmaddubsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 # [0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1,0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1]1252; GFNIAVX2-NEXT: vpsllw $8, %ymm1, %ymm11253; GFNIAVX2-NEXT: vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1,1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1]1254; GFNIAVX2-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01255; GFNIAVX2-NEXT: vpor %ymm1, %ymm0, %ymm01256; GFNIAVX2-NEXT: retq1257;1258; GFNIAVX512VL-LABEL: constant_shl_v32i8:1259; GFNIAVX512VL: # %bb.0:1260; GFNIAVX512VL-NEXT: vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 # [1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1,1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1]1261; GFNIAVX512VL-NEXT: vpmaddubsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1,0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1]1262; GFNIAVX512VL-NEXT: vpsllw $8, %ymm0, %ymm01263; GFNIAVX512VL-NEXT: vpternlogd {{.*#+}} ymm0 = ymm0 | (ymm1 & m32bcst)1264; GFNIAVX512VL-NEXT: retq1265;1266; GFNIAVX512BW-LABEL: constant_shl_v32i8:1267; GFNIAVX512BW: # %bb.0:1268; GFNIAVX512BW-NEXT: vpmovzxbw {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero,ymm0[16],zero,ymm0[17],zero,ymm0[18],zero,ymm0[19],zero,ymm0[20],zero,ymm0[21],zero,ymm0[22],zero,ymm0[23],zero,ymm0[24],zero,ymm0[25],zero,ymm0[26],zero,ymm0[27],zero,ymm0[28],zero,ymm0[29],zero,ymm0[30],zero,ymm0[31],zero1269; GFNIAVX512BW-NEXT: vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm01270; GFNIAVX512BW-NEXT: vpmovwb %zmm0, %ymm01271; GFNIAVX512BW-NEXT: retq1272 %shift = shl <32 x i8> %a, <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>1273 ret <32 x i8> %shift1274}1275 1276define <32 x i8> @constant_lshr_v32i8(<32 x i8> %a) nounwind {1277; GFNISSE-LABEL: constant_lshr_v32i8:1278; GFNISSE: # %bb.0:1279; GFNISSE-NEXT: pxor %xmm4, %xmm41280; GFNISSE-NEXT: pmovzxbw {{.*#+}} xmm2 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero1281; GFNISSE-NEXT: punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm4[8],xmm0[9],xmm4[9],xmm0[10],xmm4[10],xmm0[11],xmm4[11],xmm0[12],xmm4[12],xmm0[13],xmm4[13],xmm0[14],xmm4[14],xmm0[15],xmm4[15]1282; GFNISSE-NEXT: movdqa {{.*#+}} xmm5 = [2,4,8,16,32,64,128,256]1283; GFNISSE-NEXT: pmullw %xmm5, %xmm01284; GFNISSE-NEXT: psrlw $8, %xmm01285; GFNISSE-NEXT: movdqa {{.*#+}} xmm6 = [256,128,64,32,16,8,4,2]1286; GFNISSE-NEXT: pmullw %xmm6, %xmm21287; GFNISSE-NEXT: psrlw $8, %xmm21288; GFNISSE-NEXT: packuswb %xmm0, %xmm21289; GFNISSE-NEXT: pmovzxbw {{.*#+}} xmm3 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero1290; GFNISSE-NEXT: punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm4[8],xmm1[9],xmm4[9],xmm1[10],xmm4[10],xmm1[11],xmm4[11],xmm1[12],xmm4[12],xmm1[13],xmm4[13],xmm1[14],xmm4[14],xmm1[15],xmm4[15]1291; GFNISSE-NEXT: pmullw %xmm5, %xmm11292; GFNISSE-NEXT: psrlw $8, %xmm11293; GFNISSE-NEXT: pmullw %xmm6, %xmm31294; GFNISSE-NEXT: psrlw $8, %xmm31295; GFNISSE-NEXT: packuswb %xmm1, %xmm31296; GFNISSE-NEXT: movdqa %xmm2, %xmm01297; GFNISSE-NEXT: movdqa %xmm3, %xmm11298; GFNISSE-NEXT: retq1299;1300; GFNIAVX1-LABEL: constant_lshr_v32i8:1301; GFNIAVX1: # %bb.0:1302; GFNIAVX1-NEXT: vextractf128 $1, %ymm0, %xmm11303; GFNIAVX1-NEXT: vpxor %xmm2, %xmm2, %xmm21304; GFNIAVX1-NEXT: vpunpckhbw {{.*#+}} xmm3 = 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]1305; GFNIAVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [2,4,8,16,32,64,128,256]1306; GFNIAVX1-NEXT: vpmullw %xmm4, %xmm3, %xmm31307; GFNIAVX1-NEXT: vpsrlw $8, %xmm3, %xmm31308; GFNIAVX1-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],zero1309; GFNIAVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [256,128,64,32,16,8,4,2]1310; GFNIAVX1-NEXT: vpmullw %xmm5, %xmm1, %xmm11311; GFNIAVX1-NEXT: vpsrlw $8, %xmm1, %xmm11312; GFNIAVX1-NEXT: vpackuswb %xmm3, %xmm1, %xmm11313; GFNIAVX1-NEXT: vpunpckhbw {{.*#+}} xmm2 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]1314; GFNIAVX1-NEXT: vpmullw %xmm4, %xmm2, %xmm21315; GFNIAVX1-NEXT: vpsrlw $8, %xmm2, %xmm21316; GFNIAVX1-NEXT: vpmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero1317; GFNIAVX1-NEXT: vpmullw %xmm5, %xmm0, %xmm01318; GFNIAVX1-NEXT: vpsrlw $8, %xmm0, %xmm01319; GFNIAVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm01320; GFNIAVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm01321; GFNIAVX1-NEXT: retq1322;1323; GFNIAVX2-LABEL: constant_lshr_v32i8:1324; GFNIAVX2: # %bb.0:1325; GFNIAVX2-NEXT: vpxor %xmm1, %xmm1, %xmm11326; GFNIAVX2-NEXT: vpunpckhbw {{.*#+}} ymm2 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31]1327; GFNIAVX2-NEXT: vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2 # [2,4,8,16,32,64,128,256,2,4,8,16,32,64,128,256]1328; GFNIAVX2-NEXT: vpsrlw $8, %ymm2, %ymm21329; GFNIAVX2-NEXT: vpunpcklbw {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23]1330; GFNIAVX2-NEXT: vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [256,128,64,32,16,8,4,2,256,128,64,32,16,8,4,2]1331; GFNIAVX2-NEXT: vpsrlw $8, %ymm0, %ymm01332; GFNIAVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm01333; GFNIAVX2-NEXT: retq1334;1335; GFNIAVX512VL-LABEL: constant_lshr_v32i8:1336; GFNIAVX512VL: # %bb.0:1337; GFNIAVX512VL-NEXT: vpxor %xmm1, %xmm1, %xmm11338; GFNIAVX512VL-NEXT: vpunpckhbw {{.*#+}} ymm2 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31]1339; GFNIAVX512VL-NEXT: vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2 # [2,4,8,16,32,64,128,256,2,4,8,16,32,64,128,256]1340; GFNIAVX512VL-NEXT: vpsrlw $8, %ymm2, %ymm21341; GFNIAVX512VL-NEXT: vpunpcklbw {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23]1342; GFNIAVX512VL-NEXT: vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [256,128,64,32,16,8,4,2,256,128,64,32,16,8,4,2]1343; GFNIAVX512VL-NEXT: vpsrlw $8, %ymm0, %ymm01344; GFNIAVX512VL-NEXT: vpackuswb %ymm2, %ymm0, %ymm01345; GFNIAVX512VL-NEXT: retq1346;1347; GFNIAVX512BW-LABEL: constant_lshr_v32i8:1348; GFNIAVX512BW: # %bb.0:1349; GFNIAVX512BW-NEXT: vpmovzxbw {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero,ymm0[16],zero,ymm0[17],zero,ymm0[18],zero,ymm0[19],zero,ymm0[20],zero,ymm0[21],zero,ymm0[22],zero,ymm0[23],zero,ymm0[24],zero,ymm0[25],zero,ymm0[26],zero,ymm0[27],zero,ymm0[28],zero,ymm0[29],zero,ymm0[30],zero,ymm0[31],zero1350; GFNIAVX512BW-NEXT: vpsrlvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm01351; GFNIAVX512BW-NEXT: vpmovwb %zmm0, %ymm01352; GFNIAVX512BW-NEXT: retq1353 %shift = lshr <32 x i8> %a, <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>1354 ret <32 x i8> %shift1355}1356 1357define <32 x i8> @constant_ashr_v32i8(<32 x i8> %a) nounwind {1358; GFNISSE-LABEL: constant_ashr_v32i8:1359; GFNISSE: # %bb.0:1360; GFNISSE-NEXT: movdqa %xmm0, %xmm21361; 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]1362; GFNISSE-NEXT: psraw $8, %xmm21363; GFNISSE-NEXT: movdqa {{.*#+}} xmm3 = [2,4,8,16,32,64,128,256]1364; GFNISSE-NEXT: pmullw %xmm3, %xmm21365; GFNISSE-NEXT: psrlw $8, %xmm21366; GFNISSE-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1367; GFNISSE-NEXT: psraw $8, %xmm01368; GFNISSE-NEXT: movdqa {{.*#+}} xmm4 = [256,128,64,32,16,8,4,2]1369; GFNISSE-NEXT: pmullw %xmm4, %xmm01370; GFNISSE-NEXT: psrlw $8, %xmm01371; GFNISSE-NEXT: packuswb %xmm2, %xmm01372; GFNISSE-NEXT: movdqa %xmm1, %xmm21373; 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]1374; GFNISSE-NEXT: psraw $8, %xmm21375; GFNISSE-NEXT: pmullw %xmm3, %xmm21376; GFNISSE-NEXT: psrlw $8, %xmm21377; GFNISSE-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1378; GFNISSE-NEXT: psraw $8, %xmm11379; GFNISSE-NEXT: pmullw %xmm4, %xmm11380; GFNISSE-NEXT: psrlw $8, %xmm11381; GFNISSE-NEXT: packuswb %xmm2, %xmm11382; GFNISSE-NEXT: retq1383;1384; GFNIAVX1-LABEL: constant_ashr_v32i8:1385; GFNIAVX1: # %bb.0:1386; GFNIAVX1-NEXT: vextractf128 $1, %ymm0, %xmm11387; GFNIAVX1-NEXT: vpunpckhbw {{.*#+}} xmm2 = xmm1[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]1388; GFNIAVX1-NEXT: vpsraw $8, %xmm2, %xmm21389; GFNIAVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [2,4,8,16,32,64,128,256]1390; GFNIAVX1-NEXT: vpmullw %xmm3, %xmm2, %xmm21391; GFNIAVX1-NEXT: vpsrlw $8, %xmm2, %xmm21392; GFNIAVX1-NEXT: vpunpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1393; GFNIAVX1-NEXT: vpsraw $8, %xmm1, %xmm11394; GFNIAVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [256,128,64,32,16,8,4,2]1395; GFNIAVX1-NEXT: vpmullw %xmm4, %xmm1, %xmm11396; GFNIAVX1-NEXT: vpsrlw $8, %xmm1, %xmm11397; GFNIAVX1-NEXT: vpackuswb %xmm2, %xmm1, %xmm11398; GFNIAVX1-NEXT: vpunpckhbw {{.*#+}} xmm2 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]1399; GFNIAVX1-NEXT: vpsraw $8, %xmm2, %xmm21400; GFNIAVX1-NEXT: vpmullw %xmm3, %xmm2, %xmm21401; GFNIAVX1-NEXT: vpsrlw $8, %xmm2, %xmm21402; GFNIAVX1-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1403; GFNIAVX1-NEXT: vpsraw $8, %xmm0, %xmm01404; GFNIAVX1-NEXT: vpmullw %xmm4, %xmm0, %xmm01405; GFNIAVX1-NEXT: vpsrlw $8, %xmm0, %xmm01406; GFNIAVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm01407; GFNIAVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm01408; GFNIAVX1-NEXT: retq1409;1410; GFNIAVX2-LABEL: constant_ashr_v32i8:1411; GFNIAVX2: # %bb.0:1412; 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]1413; GFNIAVX2-NEXT: vpsraw $8, %ymm1, %ymm11414; GFNIAVX2-NEXT: vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [2,4,8,16,32,64,128,256,2,4,8,16,32,64,128,256]1415; GFNIAVX2-NEXT: vpsrlw $8, %ymm1, %ymm11416; 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]1417; GFNIAVX2-NEXT: vpsraw $8, %ymm0, %ymm01418; GFNIAVX2-NEXT: vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [256,128,64,32,16,8,4,2,256,128,64,32,16,8,4,2]1419; GFNIAVX2-NEXT: vpsrlw $8, %ymm0, %ymm01420; GFNIAVX2-NEXT: vpackuswb %ymm1, %ymm0, %ymm01421; GFNIAVX2-NEXT: retq1422;1423; GFNIAVX512VL-LABEL: constant_ashr_v32i8:1424; GFNIAVX512VL: # %bb.0:1425; 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]1426; GFNIAVX512VL-NEXT: vpsraw $8, %ymm1, %ymm11427; GFNIAVX512VL-NEXT: vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [2,4,8,16,32,64,128,256,2,4,8,16,32,64,128,256]1428; GFNIAVX512VL-NEXT: vpsrlw $8, %ymm1, %ymm11429; 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]1430; GFNIAVX512VL-NEXT: vpsraw $8, %ymm0, %ymm01431; GFNIAVX512VL-NEXT: vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [256,128,64,32,16,8,4,2,256,128,64,32,16,8,4,2]1432; GFNIAVX512VL-NEXT: vpsrlw $8, %ymm0, %ymm01433; GFNIAVX512VL-NEXT: vpackuswb %ymm1, %ymm0, %ymm01434; GFNIAVX512VL-NEXT: retq1435;1436; GFNIAVX512BW-LABEL: constant_ashr_v32i8:1437; GFNIAVX512BW: # %bb.0:1438; GFNIAVX512BW-NEXT: vpmovsxbw %ymm0, %zmm01439; GFNIAVX512BW-NEXT: vpsravw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm01440; GFNIAVX512BW-NEXT: vpmovwb %zmm0, %ymm01441; GFNIAVX512BW-NEXT: retq1442 %shift = ashr <32 x i8> %a, <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>1443 ret <32 x i8> %shift1444}1445 1446define <32 x i8> @splatconstant_shl_v32i8(<32 x i8> %a) nounwind {1447; GFNISSE-LABEL: splatconstant_shl_v32i8:1448; GFNISSE: # %bb.0:1449; GFNISSE-NEXT: pmovsxwq {{.*#+}} xmm2 = [258,258]1450; GFNISSE-NEXT: gf2p8affineqb $0, %xmm2, %xmm01451; GFNISSE-NEXT: gf2p8affineqb $0, %xmm2, %xmm11452; GFNISSE-NEXT: retq1453;1454; GFNIAVX1OR2-LABEL: splatconstant_shl_v32i8:1455; GFNIAVX1OR2: # %bb.0:1456; GFNIAVX1OR2-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01457; GFNIAVX1OR2-NEXT: retq1458;1459; GFNIAVX512-LABEL: splatconstant_shl_v32i8:1460; GFNIAVX512: # %bb.0:1461; GFNIAVX512-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm01462; GFNIAVX512-NEXT: retq1463 %shift = shl <32 x i8> %a, <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>1464 ret <32 x i8> %shift1465}1466 1467define <32 x i8> @splatconstant_lshr_v32i8(<32 x i8> %a) nounwind {1468; GFNISSE-LABEL: splatconstant_lshr_v32i8:1469; GFNISSE: # %bb.0:1470; GFNISSE-NEXT: movdqa {{.*#+}} xmm2 = [0,128,64,32,16,8,4,2,0,128,64,32,16,8,4,2]1471; GFNISSE-NEXT: gf2p8affineqb $0, %xmm2, %xmm01472; GFNISSE-NEXT: gf2p8affineqb $0, %xmm2, %xmm11473; GFNISSE-NEXT: retq1474;1475; GFNIAVX1OR2-LABEL: splatconstant_lshr_v32i8:1476; GFNIAVX1OR2: # %bb.0:1477; GFNIAVX1OR2-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01478; GFNIAVX1OR2-NEXT: retq1479;1480; GFNIAVX512-LABEL: splatconstant_lshr_v32i8:1481; GFNIAVX512: # %bb.0:1482; GFNIAVX512-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm01483; GFNIAVX512-NEXT: retq1484 %shift = lshr <32 x i8> %a, <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>1485 ret <32 x i8> %shift1486}1487 1488define <32 x i8> @splatconstant_ashr_v32i8(<32 x i8> %a) nounwind {1489; GFNISSE-LABEL: splatconstant_ashr_v32i8:1490; GFNISSE: # %bb.0:1491; GFNISSE-NEXT: movdqa {{.*#+}} xmm2 = [128,128,128,64,32,16,8,4,128,128,128,64,32,16,8,4]1492; GFNISSE-NEXT: gf2p8affineqb $0, %xmm2, %xmm01493; GFNISSE-NEXT: gf2p8affineqb $0, %xmm2, %xmm11494; GFNISSE-NEXT: retq1495;1496; GFNIAVX1OR2-LABEL: splatconstant_ashr_v32i8:1497; GFNIAVX1OR2: # %bb.0:1498; GFNIAVX1OR2-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01499; GFNIAVX1OR2-NEXT: retq1500;1501; GFNIAVX512-LABEL: splatconstant_ashr_v32i8:1502; GFNIAVX512: # %bb.0:1503; GFNIAVX512-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm01504; GFNIAVX512-NEXT: retq1505 %shift = ashr <32 x i8> %a, <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>1506 ret <32 x i8> %shift1507}1508 1509;1510; 512 Bit Vector Shifts1511;1512 1513define <64 x i8> @var_shl_v64i8(<64 x i8> %a, <64 x i8> %b) nounwind {1514; GFNISSE-LABEL: var_shl_v64i8:1515; GFNISSE: # %bb.0:1516; GFNISSE-NEXT: movdqa %xmm4, %xmm81517; GFNISSE-NEXT: movdqa %xmm0, %xmm41518; GFNISSE-NEXT: pmovsxdq {{.*#+}} xmm9 = [16909320,16909320]1519; GFNISSE-NEXT: movdqa %xmm0, %xmm101520; GFNISSE-NEXT: gf2p8affineqb $0, %xmm9, %xmm101521; GFNISSE-NEXT: psllw $5, %xmm81522; GFNISSE-NEXT: movdqa %xmm8, %xmm01523; GFNISSE-NEXT: pblendvb %xmm0, %xmm10, %xmm41524; GFNISSE-NEXT: movdqa {{.*#+}} xmm10 = [32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0]1525; GFNISSE-NEXT: movdqa %xmm4, %xmm111526; GFNISSE-NEXT: gf2p8affineqb $0, %xmm10, %xmm111527; GFNISSE-NEXT: paddb %xmm8, %xmm81528; GFNISSE-NEXT: movdqa %xmm8, %xmm01529; GFNISSE-NEXT: pblendvb %xmm0, %xmm11, %xmm41530; GFNISSE-NEXT: movdqa %xmm4, %xmm111531; GFNISSE-NEXT: paddb %xmm4, %xmm111532; GFNISSE-NEXT: paddb %xmm8, %xmm81533; GFNISSE-NEXT: movdqa %xmm8, %xmm01534; GFNISSE-NEXT: pblendvb %xmm0, %xmm11, %xmm41535; GFNISSE-NEXT: movdqa %xmm1, %xmm81536; GFNISSE-NEXT: gf2p8affineqb $0, %xmm9, %xmm81537; GFNISSE-NEXT: psllw $5, %xmm51538; GFNISSE-NEXT: movdqa %xmm5, %xmm01539; GFNISSE-NEXT: pblendvb %xmm0, %xmm8, %xmm11540; GFNISSE-NEXT: movdqa %xmm1, %xmm81541; GFNISSE-NEXT: gf2p8affineqb $0, %xmm10, %xmm81542; GFNISSE-NEXT: paddb %xmm5, %xmm51543; GFNISSE-NEXT: movdqa %xmm5, %xmm01544; GFNISSE-NEXT: pblendvb %xmm0, %xmm8, %xmm11545; GFNISSE-NEXT: movdqa %xmm1, %xmm81546; GFNISSE-NEXT: paddb %xmm1, %xmm81547; GFNISSE-NEXT: paddb %xmm5, %xmm51548; GFNISSE-NEXT: movdqa %xmm5, %xmm01549; GFNISSE-NEXT: pblendvb %xmm0, %xmm8, %xmm11550; GFNISSE-NEXT: movdqa %xmm2, %xmm51551; GFNISSE-NEXT: gf2p8affineqb $0, %xmm9, %xmm51552; GFNISSE-NEXT: psllw $5, %xmm61553; GFNISSE-NEXT: movdqa %xmm6, %xmm01554; GFNISSE-NEXT: pblendvb %xmm0, %xmm5, %xmm21555; GFNISSE-NEXT: movdqa %xmm2, %xmm51556; GFNISSE-NEXT: gf2p8affineqb $0, %xmm10, %xmm51557; GFNISSE-NEXT: paddb %xmm6, %xmm61558; GFNISSE-NEXT: movdqa %xmm6, %xmm01559; GFNISSE-NEXT: pblendvb %xmm0, %xmm5, %xmm21560; GFNISSE-NEXT: movdqa %xmm2, %xmm51561; GFNISSE-NEXT: paddb %xmm2, %xmm51562; GFNISSE-NEXT: paddb %xmm6, %xmm61563; GFNISSE-NEXT: movdqa %xmm6, %xmm01564; GFNISSE-NEXT: pblendvb %xmm0, %xmm5, %xmm21565; GFNISSE-NEXT: movdqa %xmm3, %xmm51566; GFNISSE-NEXT: gf2p8affineqb $0, %xmm9, %xmm51567; GFNISSE-NEXT: psllw $5, %xmm71568; GFNISSE-NEXT: movdqa %xmm7, %xmm01569; GFNISSE-NEXT: pblendvb %xmm0, %xmm5, %xmm31570; GFNISSE-NEXT: movdqa %xmm3, %xmm51571; GFNISSE-NEXT: gf2p8affineqb $0, %xmm10, %xmm51572; GFNISSE-NEXT: paddb %xmm7, %xmm71573; GFNISSE-NEXT: movdqa %xmm7, %xmm01574; GFNISSE-NEXT: pblendvb %xmm0, %xmm5, %xmm31575; GFNISSE-NEXT: movdqa %xmm3, %xmm51576; GFNISSE-NEXT: paddb %xmm3, %xmm51577; GFNISSE-NEXT: paddb %xmm7, %xmm71578; GFNISSE-NEXT: movdqa %xmm7, %xmm01579; GFNISSE-NEXT: pblendvb %xmm0, %xmm5, %xmm31580; GFNISSE-NEXT: movdqa %xmm4, %xmm01581; GFNISSE-NEXT: retq1582;1583; GFNIAVX1-LABEL: var_shl_v64i8:1584; GFNIAVX1: # %bb.0:1585; GFNIAVX1-NEXT: vextractf128 $1, %ymm0, %xmm51586; GFNIAVX1-NEXT: vmovddup {{.*#+}} xmm4 = [8,4,2,1,0,0,0,0,8,4,2,1,0,0,0,0]1587; GFNIAVX1-NEXT: # xmm4 = mem[0,0]1588; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm4, %xmm5, %xmm61589; GFNIAVX1-NEXT: vextractf128 $1, %ymm2, %xmm71590; GFNIAVX1-NEXT: vpsllw $5, %xmm7, %xmm71591; GFNIAVX1-NEXT: vpblendvb %xmm7, %xmm6, %xmm5, %xmm61592; GFNIAVX1-NEXT: vmovddup {{.*#+}} xmm5 = [32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0]1593; GFNIAVX1-NEXT: # xmm5 = mem[0,0]1594; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm5, %xmm6, %xmm81595; GFNIAVX1-NEXT: vpaddb %xmm7, %xmm7, %xmm71596; GFNIAVX1-NEXT: vpblendvb %xmm7, %xmm8, %xmm6, %xmm61597; GFNIAVX1-NEXT: vpaddb %xmm6, %xmm6, %xmm81598; GFNIAVX1-NEXT: vpaddb %xmm7, %xmm7, %xmm71599; GFNIAVX1-NEXT: vpblendvb %xmm7, %xmm8, %xmm6, %xmm61600; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm4, %xmm0, %xmm71601; GFNIAVX1-NEXT: vpsllw $5, %xmm2, %xmm21602; GFNIAVX1-NEXT: vpblendvb %xmm2, %xmm7, %xmm0, %xmm01603; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm5, %xmm0, %xmm71604; GFNIAVX1-NEXT: vpaddb %xmm2, %xmm2, %xmm21605; GFNIAVX1-NEXT: vpblendvb %xmm2, %xmm7, %xmm0, %xmm01606; GFNIAVX1-NEXT: vpaddb %xmm0, %xmm0, %xmm71607; GFNIAVX1-NEXT: vpaddb %xmm2, %xmm2, %xmm21608; GFNIAVX1-NEXT: vpblendvb %xmm2, %xmm7, %xmm0, %xmm01609; GFNIAVX1-NEXT: vinsertf128 $1, %xmm6, %ymm0, %ymm01610; GFNIAVX1-NEXT: vextractf128 $1, %ymm1, %xmm21611; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm4, %xmm2, %xmm61612; GFNIAVX1-NEXT: vextractf128 $1, %ymm3, %xmm71613; GFNIAVX1-NEXT: vpsllw $5, %xmm7, %xmm71614; GFNIAVX1-NEXT: vpblendvb %xmm7, %xmm6, %xmm2, %xmm21615; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm5, %xmm2, %xmm61616; GFNIAVX1-NEXT: vpaddb %xmm7, %xmm7, %xmm71617; GFNIAVX1-NEXT: vpblendvb %xmm7, %xmm6, %xmm2, %xmm21618; GFNIAVX1-NEXT: vpaddb %xmm2, %xmm2, %xmm61619; GFNIAVX1-NEXT: vpaddb %xmm7, %xmm7, %xmm71620; GFNIAVX1-NEXT: vpblendvb %xmm7, %xmm6, %xmm2, %xmm21621; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm4, %xmm1, %xmm41622; GFNIAVX1-NEXT: vpsllw $5, %xmm3, %xmm31623; GFNIAVX1-NEXT: vpblendvb %xmm3, %xmm4, %xmm1, %xmm11624; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm5, %xmm1, %xmm41625; GFNIAVX1-NEXT: vpaddb %xmm3, %xmm3, %xmm31626; GFNIAVX1-NEXT: vpblendvb %xmm3, %xmm4, %xmm1, %xmm11627; GFNIAVX1-NEXT: vpaddb %xmm1, %xmm1, %xmm41628; GFNIAVX1-NEXT: vpaddb %xmm3, %xmm3, %xmm31629; GFNIAVX1-NEXT: vpblendvb %xmm3, %xmm4, %xmm1, %xmm11630; GFNIAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm11631; GFNIAVX1-NEXT: retq1632;1633; GFNIAVX2-LABEL: var_shl_v64i8:1634; GFNIAVX2: # %bb.0:1635; GFNIAVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [8,4,2,1,0,0,0,0,8,4,2,1,0,0,0,0,8,4,2,1,0,0,0,0,8,4,2,1,0,0,0,0]1636; GFNIAVX2-NEXT: vgf2p8affineqb $0, %ymm4, %ymm0, %ymm51637; GFNIAVX2-NEXT: vpsllw $5, %ymm2, %ymm21638; GFNIAVX2-NEXT: vpblendvb %ymm2, %ymm5, %ymm0, %ymm01639; GFNIAVX2-NEXT: vpbroadcastq {{.*#+}} ymm5 = [32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0,32,16,8,4,2,1,0,0]1640; GFNIAVX2-NEXT: vgf2p8affineqb $0, %ymm5, %ymm0, %ymm61641; GFNIAVX2-NEXT: vpaddb %ymm2, %ymm2, %ymm21642; GFNIAVX2-NEXT: vpblendvb %ymm2, %ymm6, %ymm0, %ymm01643; GFNIAVX2-NEXT: vpaddb %ymm0, %ymm0, %ymm61644; GFNIAVX2-NEXT: vpaddb %ymm2, %ymm2, %ymm21645; GFNIAVX2-NEXT: vpblendvb %ymm2, %ymm6, %ymm0, %ymm01646; GFNIAVX2-NEXT: vgf2p8affineqb $0, %ymm4, %ymm1, %ymm21647; GFNIAVX2-NEXT: vpsllw $5, %ymm3, %ymm31648; GFNIAVX2-NEXT: vpblendvb %ymm3, %ymm2, %ymm1, %ymm11649; GFNIAVX2-NEXT: vgf2p8affineqb $0, %ymm5, %ymm1, %ymm21650; GFNIAVX2-NEXT: vpaddb %ymm3, %ymm3, %ymm31651; GFNIAVX2-NEXT: vpblendvb %ymm3, %ymm2, %ymm1, %ymm11652; GFNIAVX2-NEXT: vpaddb %ymm1, %ymm1, %ymm21653; GFNIAVX2-NEXT: vpaddb %ymm3, %ymm3, %ymm31654; GFNIAVX2-NEXT: vpblendvb %ymm3, %ymm2, %ymm1, %ymm11655; GFNIAVX2-NEXT: retq1656;1657; GFNIAVX512VL-LABEL: var_shl_v64i8:1658; GFNIAVX512VL: # %bb.0:1659; GFNIAVX512VL-NEXT: vextracti64x4 $1, %zmm0, %ymm21660; 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]1661; GFNIAVX512VL-NEXT: vgf2p8affineqb $0, %ymm3, %ymm2, %ymm41662; GFNIAVX512VL-NEXT: vextracti64x4 $1, %zmm1, %ymm51663; GFNIAVX512VL-NEXT: vpsllw $5, %ymm5, %ymm51664; GFNIAVX512VL-NEXT: vpblendvb %ymm5, %ymm4, %ymm2, %ymm21665; GFNIAVX512VL-NEXT: vpbroadcastq {{.*#+}} ymm4 = [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]1666; GFNIAVX512VL-NEXT: vgf2p8affineqb $0, %ymm4, %ymm2, %ymm61667; GFNIAVX512VL-NEXT: vpaddb %ymm5, %ymm5, %ymm51668; GFNIAVX512VL-NEXT: vpblendvb %ymm5, %ymm6, %ymm2, %ymm21669; GFNIAVX512VL-NEXT: vpaddb %ymm2, %ymm2, %ymm61670; GFNIAVX512VL-NEXT: vpaddb %ymm5, %ymm5, %ymm51671; GFNIAVX512VL-NEXT: vpblendvb %ymm5, %ymm6, %ymm2, %ymm21672; GFNIAVX512VL-NEXT: vgf2p8affineqb $0, %ymm3, %ymm0, %ymm31673; GFNIAVX512VL-NEXT: vpsllw $5, %ymm1, %ymm11674; GFNIAVX512VL-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm01675; GFNIAVX512VL-NEXT: vgf2p8affineqb $0, %ymm4, %ymm0, %ymm31676; GFNIAVX512VL-NEXT: vpaddb %ymm1, %ymm1, %ymm11677; GFNIAVX512VL-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm01678; GFNIAVX512VL-NEXT: vpaddb %ymm0, %ymm0, %ymm31679; GFNIAVX512VL-NEXT: vpaddb %ymm1, %ymm1, %ymm11680; GFNIAVX512VL-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm01681; GFNIAVX512VL-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm01682; GFNIAVX512VL-NEXT: retq1683;1684; GFNIAVX512BW-LABEL: var_shl_v64i8:1685; GFNIAVX512BW: # %bb.0:1686; GFNIAVX512BW-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm1, %zmm21687; GFNIAVX512BW-NEXT: vpsllvw %zmm2, %zmm0, %zmm21688; GFNIAVX512BW-NEXT: vpsrlw $8, %zmm1, %zmm11689; GFNIAVX512BW-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm01690; GFNIAVX512BW-NEXT: vpsllvw %zmm1, %zmm0, %zmm01691; GFNIAVX512BW-NEXT: movabsq $6148914691236517205, %rax # imm = 0x55555555555555551692; GFNIAVX512BW-NEXT: kmovq %rax, %k11693; GFNIAVX512BW-NEXT: vmovdqu8 %zmm2, %zmm0 {%k1}1694; GFNIAVX512BW-NEXT: retq1695 %shift = shl <64 x i8> %a, %b1696 ret <64 x i8> %shift1697}1698 1699define <64 x i8> @var_lshr_v64i8(<64 x i8> %a, <64 x i8> %b) nounwind {1700; GFNISSE-LABEL: var_lshr_v64i8:1701; GFNISSE: # %bb.0:1702; GFNISSE-NEXT: movdqa %xmm4, %xmm81703; GFNISSE-NEXT: movdqa %xmm0, %xmm41704; GFNISSE-NEXT: movdqa {{.*#+}} xmm9 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]1705; GFNISSE-NEXT: movdqa %xmm0, %xmm101706; GFNISSE-NEXT: gf2p8affineqb $0, %xmm9, %xmm101707; GFNISSE-NEXT: psllw $5, %xmm81708; GFNISSE-NEXT: movdqa %xmm8, %xmm01709; GFNISSE-NEXT: pblendvb %xmm0, %xmm10, %xmm41710; GFNISSE-NEXT: movdqa {{.*#+}} xmm10 = [0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4]1711; GFNISSE-NEXT: movdqa %xmm4, %xmm111712; GFNISSE-NEXT: gf2p8affineqb $0, %xmm10, %xmm111713; GFNISSE-NEXT: paddb %xmm8, %xmm81714; GFNISSE-NEXT: movdqa %xmm8, %xmm01715; GFNISSE-NEXT: pblendvb %xmm0, %xmm11, %xmm41716; GFNISSE-NEXT: movdqa {{.*#+}} xmm11 = [0,128,64,32,16,8,4,2,0,128,64,32,16,8,4,2]1717; GFNISSE-NEXT: movdqa %xmm4, %xmm121718; GFNISSE-NEXT: gf2p8affineqb $0, %xmm11, %xmm121719; GFNISSE-NEXT: paddb %xmm8, %xmm81720; GFNISSE-NEXT: movdqa %xmm8, %xmm01721; GFNISSE-NEXT: pblendvb %xmm0, %xmm12, %xmm41722; GFNISSE-NEXT: movdqa %xmm1, %xmm81723; GFNISSE-NEXT: gf2p8affineqb $0, %xmm9, %xmm81724; GFNISSE-NEXT: psllw $5, %xmm51725; GFNISSE-NEXT: movdqa %xmm5, %xmm01726; GFNISSE-NEXT: pblendvb %xmm0, %xmm8, %xmm11727; GFNISSE-NEXT: movdqa %xmm1, %xmm81728; GFNISSE-NEXT: gf2p8affineqb $0, %xmm10, %xmm81729; GFNISSE-NEXT: paddb %xmm5, %xmm51730; GFNISSE-NEXT: movdqa %xmm5, %xmm01731; GFNISSE-NEXT: pblendvb %xmm0, %xmm8, %xmm11732; GFNISSE-NEXT: movdqa %xmm1, %xmm81733; GFNISSE-NEXT: gf2p8affineqb $0, %xmm11, %xmm81734; GFNISSE-NEXT: paddb %xmm5, %xmm51735; GFNISSE-NEXT: movdqa %xmm5, %xmm01736; GFNISSE-NEXT: pblendvb %xmm0, %xmm8, %xmm11737; GFNISSE-NEXT: movdqa %xmm2, %xmm51738; GFNISSE-NEXT: gf2p8affineqb $0, %xmm9, %xmm51739; GFNISSE-NEXT: psllw $5, %xmm61740; GFNISSE-NEXT: movdqa %xmm6, %xmm01741; GFNISSE-NEXT: pblendvb %xmm0, %xmm5, %xmm21742; GFNISSE-NEXT: movdqa %xmm2, %xmm51743; GFNISSE-NEXT: gf2p8affineqb $0, %xmm10, %xmm51744; GFNISSE-NEXT: paddb %xmm6, %xmm61745; GFNISSE-NEXT: movdqa %xmm6, %xmm01746; GFNISSE-NEXT: pblendvb %xmm0, %xmm5, %xmm21747; GFNISSE-NEXT: movdqa %xmm2, %xmm51748; GFNISSE-NEXT: gf2p8affineqb $0, %xmm11, %xmm51749; GFNISSE-NEXT: paddb %xmm6, %xmm61750; GFNISSE-NEXT: movdqa %xmm6, %xmm01751; GFNISSE-NEXT: pblendvb %xmm0, %xmm5, %xmm21752; GFNISSE-NEXT: movdqa %xmm3, %xmm51753; GFNISSE-NEXT: gf2p8affineqb $0, %xmm9, %xmm51754; GFNISSE-NEXT: psllw $5, %xmm71755; GFNISSE-NEXT: movdqa %xmm7, %xmm01756; GFNISSE-NEXT: pblendvb %xmm0, %xmm5, %xmm31757; GFNISSE-NEXT: movdqa %xmm3, %xmm51758; GFNISSE-NEXT: gf2p8affineqb $0, %xmm10, %xmm51759; GFNISSE-NEXT: paddb %xmm7, %xmm71760; GFNISSE-NEXT: movdqa %xmm7, %xmm01761; GFNISSE-NEXT: pblendvb %xmm0, %xmm5, %xmm31762; GFNISSE-NEXT: movdqa %xmm3, %xmm51763; GFNISSE-NEXT: gf2p8affineqb $0, %xmm11, %xmm51764; GFNISSE-NEXT: paddb %xmm7, %xmm71765; GFNISSE-NEXT: movdqa %xmm7, %xmm01766; GFNISSE-NEXT: pblendvb %xmm0, %xmm5, %xmm31767; GFNISSE-NEXT: movdqa %xmm4, %xmm01768; GFNISSE-NEXT: retq1769;1770; GFNIAVX1-LABEL: var_lshr_v64i8:1771; GFNIAVX1: # %bb.0:1772; GFNIAVX1-NEXT: vextractf128 $1, %ymm0, %xmm51773; GFNIAVX1-NEXT: vmovddup {{.*#+}} xmm4 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]1774; GFNIAVX1-NEXT: # xmm4 = mem[0,0]1775; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm4, %xmm5, %xmm61776; GFNIAVX1-NEXT: vextractf128 $1, %ymm2, %xmm71777; GFNIAVX1-NEXT: vpsllw $5, %xmm7, %xmm71778; GFNIAVX1-NEXT: vpblendvb %xmm7, %xmm6, %xmm5, %xmm61779; GFNIAVX1-NEXT: vmovddup {{.*#+}} xmm5 = [0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4]1780; GFNIAVX1-NEXT: # xmm5 = mem[0,0]1781; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm5, %xmm6, %xmm81782; GFNIAVX1-NEXT: vpaddb %xmm7, %xmm7, %xmm71783; GFNIAVX1-NEXT: vpblendvb %xmm7, %xmm8, %xmm6, %xmm81784; GFNIAVX1-NEXT: vmovddup {{.*#+}} xmm6 = [0,128,64,32,16,8,4,2,0,128,64,32,16,8,4,2]1785; GFNIAVX1-NEXT: # xmm6 = mem[0,0]1786; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm6, %xmm8, %xmm91787; GFNIAVX1-NEXT: vpaddb %xmm7, %xmm7, %xmm71788; GFNIAVX1-NEXT: vpblendvb %xmm7, %xmm9, %xmm8, %xmm71789; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm4, %xmm0, %xmm81790; GFNIAVX1-NEXT: vpsllw $5, %xmm2, %xmm21791; GFNIAVX1-NEXT: vpblendvb %xmm2, %xmm8, %xmm0, %xmm01792; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm5, %xmm0, %xmm81793; GFNIAVX1-NEXT: vpaddb %xmm2, %xmm2, %xmm21794; GFNIAVX1-NEXT: vpblendvb %xmm2, %xmm8, %xmm0, %xmm01795; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm6, %xmm0, %xmm81796; GFNIAVX1-NEXT: vpaddb %xmm2, %xmm2, %xmm21797; GFNIAVX1-NEXT: vpblendvb %xmm2, %xmm8, %xmm0, %xmm01798; GFNIAVX1-NEXT: vinsertf128 $1, %xmm7, %ymm0, %ymm01799; GFNIAVX1-NEXT: vextractf128 $1, %ymm1, %xmm21800; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm4, %xmm2, %xmm71801; GFNIAVX1-NEXT: vextractf128 $1, %ymm3, %xmm81802; GFNIAVX1-NEXT: vpsllw $5, %xmm8, %xmm81803; GFNIAVX1-NEXT: vpblendvb %xmm8, %xmm7, %xmm2, %xmm21804; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm5, %xmm2, %xmm71805; GFNIAVX1-NEXT: vpaddb %xmm8, %xmm8, %xmm81806; GFNIAVX1-NEXT: vpblendvb %xmm8, %xmm7, %xmm2, %xmm21807; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm6, %xmm2, %xmm71808; GFNIAVX1-NEXT: vpaddb %xmm8, %xmm8, %xmm81809; GFNIAVX1-NEXT: vpblendvb %xmm8, %xmm7, %xmm2, %xmm21810; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm4, %xmm1, %xmm41811; GFNIAVX1-NEXT: vpsllw $5, %xmm3, %xmm31812; GFNIAVX1-NEXT: vpblendvb %xmm3, %xmm4, %xmm1, %xmm11813; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm5, %xmm1, %xmm41814; GFNIAVX1-NEXT: vpaddb %xmm3, %xmm3, %xmm31815; GFNIAVX1-NEXT: vpblendvb %xmm3, %xmm4, %xmm1, %xmm11816; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm6, %xmm1, %xmm41817; GFNIAVX1-NEXT: vpaddb %xmm3, %xmm3, %xmm31818; GFNIAVX1-NEXT: vpblendvb %xmm3, %xmm4, %xmm1, %xmm11819; GFNIAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm11820; GFNIAVX1-NEXT: retq1821;1822; GFNIAVX2-LABEL: var_lshr_v64i8:1823; GFNIAVX2: # %bb.0:1824; 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]1825; GFNIAVX2-NEXT: vgf2p8affineqb $0, %ymm4, %ymm0, %ymm51826; GFNIAVX2-NEXT: vpsllw $5, %ymm2, %ymm21827; GFNIAVX2-NEXT: vpblendvb %ymm2, %ymm5, %ymm0, %ymm01828; GFNIAVX2-NEXT: vpbroadcastq {{.*#+}} ymm5 = [0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4]1829; GFNIAVX2-NEXT: vgf2p8affineqb $0, %ymm5, %ymm0, %ymm61830; GFNIAVX2-NEXT: vpaddb %ymm2, %ymm2, %ymm21831; GFNIAVX2-NEXT: vpblendvb %ymm2, %ymm6, %ymm0, %ymm01832; GFNIAVX2-NEXT: vpbroadcastq {{.*#+}} ymm6 = [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]1833; GFNIAVX2-NEXT: vgf2p8affineqb $0, %ymm6, %ymm0, %ymm71834; GFNIAVX2-NEXT: vpaddb %ymm2, %ymm2, %ymm21835; GFNIAVX2-NEXT: vpblendvb %ymm2, %ymm7, %ymm0, %ymm01836; GFNIAVX2-NEXT: vgf2p8affineqb $0, %ymm4, %ymm1, %ymm21837; GFNIAVX2-NEXT: vpsllw $5, %ymm3, %ymm31838; GFNIAVX2-NEXT: vpblendvb %ymm3, %ymm2, %ymm1, %ymm11839; GFNIAVX2-NEXT: vgf2p8affineqb $0, %ymm5, %ymm1, %ymm21840; GFNIAVX2-NEXT: vpaddb %ymm3, %ymm3, %ymm31841; GFNIAVX2-NEXT: vpblendvb %ymm3, %ymm2, %ymm1, %ymm11842; GFNIAVX2-NEXT: vgf2p8affineqb $0, %ymm6, %ymm1, %ymm21843; GFNIAVX2-NEXT: vpaddb %ymm3, %ymm3, %ymm31844; GFNIAVX2-NEXT: vpblendvb %ymm3, %ymm2, %ymm1, %ymm11845; GFNIAVX2-NEXT: retq1846;1847; GFNIAVX512VL-LABEL: var_lshr_v64i8:1848; GFNIAVX512VL: # %bb.0:1849; GFNIAVX512VL-NEXT: vextracti64x4 $1, %zmm0, %ymm21850; 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]1851; GFNIAVX512VL-NEXT: vgf2p8affineqb $0, %ymm3, %ymm2, %ymm41852; GFNIAVX512VL-NEXT: vextracti64x4 $1, %zmm1, %ymm51853; GFNIAVX512VL-NEXT: vpsllw $5, %ymm5, %ymm51854; GFNIAVX512VL-NEXT: vpblendvb %ymm5, %ymm4, %ymm2, %ymm21855; GFNIAVX512VL-NEXT: vpbroadcastq {{.*#+}} ymm4 = [0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4,0,0,128,64,32,16,8,4]1856; GFNIAVX512VL-NEXT: vgf2p8affineqb $0, %ymm4, %ymm2, %ymm61857; GFNIAVX512VL-NEXT: vpaddb %ymm5, %ymm5, %ymm51858; GFNIAVX512VL-NEXT: vpblendvb %ymm5, %ymm6, %ymm2, %ymm21859; GFNIAVX512VL-NEXT: vpbroadcastq {{.*#+}} ymm6 = [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]1860; GFNIAVX512VL-NEXT: vgf2p8affineqb $0, %ymm6, %ymm2, %ymm71861; GFNIAVX512VL-NEXT: vpaddb %ymm5, %ymm5, %ymm51862; GFNIAVX512VL-NEXT: vpblendvb %ymm5, %ymm7, %ymm2, %ymm21863; GFNIAVX512VL-NEXT: vgf2p8affineqb $0, %ymm3, %ymm0, %ymm31864; GFNIAVX512VL-NEXT: vpsllw $5, %ymm1, %ymm11865; GFNIAVX512VL-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm01866; GFNIAVX512VL-NEXT: vgf2p8affineqb $0, %ymm4, %ymm0, %ymm31867; GFNIAVX512VL-NEXT: vpaddb %ymm1, %ymm1, %ymm11868; GFNIAVX512VL-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm01869; GFNIAVX512VL-NEXT: vgf2p8affineqb $0, %ymm6, %ymm0, %ymm31870; GFNIAVX512VL-NEXT: vpaddb %ymm1, %ymm1, %ymm11871; GFNIAVX512VL-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm01872; GFNIAVX512VL-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm01873; GFNIAVX512VL-NEXT: retq1874;1875; GFNIAVX512BW-LABEL: var_lshr_v64i8:1876; GFNIAVX512BW: # %bb.0:1877; GFNIAVX512BW-NEXT: vpbroadcastw {{.*#+}} zmm2 = [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]1878; GFNIAVX512BW-NEXT: vpandq %zmm2, %zmm1, %zmm31879; GFNIAVX512BW-NEXT: vpandq %zmm2, %zmm0, %zmm21880; GFNIAVX512BW-NEXT: vpsrlvw %zmm3, %zmm2, %zmm21881; GFNIAVX512BW-NEXT: vpsrlw $8, %zmm1, %zmm11882; GFNIAVX512BW-NEXT: vpsrlvw %zmm1, %zmm0, %zmm01883; GFNIAVX512BW-NEXT: movabsq $6148914691236517205, %rax # imm = 0x55555555555555551884; GFNIAVX512BW-NEXT: kmovq %rax, %k11885; GFNIAVX512BW-NEXT: vmovdqu8 %zmm2, %zmm0 {%k1}1886; GFNIAVX512BW-NEXT: retq1887 %shift = lshr <64 x i8> %a, %b1888 ret <64 x i8> %shift1889}1890 1891define <64 x i8> @var_ashr_v64i8(<64 x i8> %a, <64 x i8> %b) nounwind {1892; GFNISSE-LABEL: var_ashr_v64i8:1893; GFNISSE: # %bb.0:1894; GFNISSE-NEXT: movdqa %xmm0, %xmm81895; GFNISSE-NEXT: psllw $5, %xmm41896; GFNISSE-NEXT: punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm4[8],xmm0[9],xmm4[9],xmm0[10],xmm4[10],xmm0[11],xmm4[11],xmm0[12],xmm4[12],xmm0[13],xmm4[13],xmm0[14],xmm4[14],xmm0[15],xmm4[15]1897; GFNISSE-NEXT: punpckhbw {{.*#+}} xmm9 = xmm9[8],xmm8[8],xmm9[9],xmm8[9],xmm9[10],xmm8[10],xmm9[11],xmm8[11],xmm9[12],xmm8[12],xmm9[13],xmm8[13],xmm9[14],xmm8[14],xmm9[15],xmm8[15]1898; GFNISSE-NEXT: movdqa %xmm9, %xmm101899; GFNISSE-NEXT: psraw $4, %xmm101900; GFNISSE-NEXT: pblendvb %xmm0, %xmm10, %xmm91901; GFNISSE-NEXT: movdqa %xmm9, %xmm101902; GFNISSE-NEXT: psraw $2, %xmm101903; GFNISSE-NEXT: paddw %xmm0, %xmm01904; GFNISSE-NEXT: pblendvb %xmm0, %xmm10, %xmm91905; GFNISSE-NEXT: movdqa %xmm9, %xmm101906; GFNISSE-NEXT: psraw $1, %xmm101907; GFNISSE-NEXT: paddw %xmm0, %xmm01908; GFNISSE-NEXT: pblendvb %xmm0, %xmm10, %xmm91909; GFNISSE-NEXT: psrlw $8, %xmm91910; GFNISSE-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7]1911; GFNISSE-NEXT: punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm8[0],xmm4[1],xmm8[1],xmm4[2],xmm8[2],xmm4[3],xmm8[3],xmm4[4],xmm8[4],xmm4[5],xmm8[5],xmm4[6],xmm8[6],xmm4[7],xmm8[7]1912; GFNISSE-NEXT: movdqa %xmm4, %xmm81913; GFNISSE-NEXT: psraw $4, %xmm81914; GFNISSE-NEXT: pblendvb %xmm0, %xmm8, %xmm41915; GFNISSE-NEXT: movdqa %xmm4, %xmm81916; GFNISSE-NEXT: psraw $2, %xmm81917; GFNISSE-NEXT: paddw %xmm0, %xmm01918; GFNISSE-NEXT: pblendvb %xmm0, %xmm8, %xmm41919; GFNISSE-NEXT: movdqa %xmm4, %xmm81920; GFNISSE-NEXT: psraw $1, %xmm81921; GFNISSE-NEXT: paddw %xmm0, %xmm01922; GFNISSE-NEXT: pblendvb %xmm0, %xmm8, %xmm41923; GFNISSE-NEXT: psrlw $8, %xmm41924; GFNISSE-NEXT: packuswb %xmm9, %xmm41925; GFNISSE-NEXT: psllw $5, %xmm51926; GFNISSE-NEXT: punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm5[8],xmm0[9],xmm5[9],xmm0[10],xmm5[10],xmm0[11],xmm5[11],xmm0[12],xmm5[12],xmm0[13],xmm5[13],xmm0[14],xmm5[14],xmm0[15],xmm5[15]1927; GFNISSE-NEXT: punpckhbw {{.*#+}} xmm8 = xmm8[8],xmm1[8],xmm8[9],xmm1[9],xmm8[10],xmm1[10],xmm8[11],xmm1[11],xmm8[12],xmm1[12],xmm8[13],xmm1[13],xmm8[14],xmm1[14],xmm8[15],xmm1[15]1928; GFNISSE-NEXT: movdqa %xmm8, %xmm91929; GFNISSE-NEXT: psraw $4, %xmm91930; GFNISSE-NEXT: pblendvb %xmm0, %xmm9, %xmm81931; GFNISSE-NEXT: movdqa %xmm8, %xmm91932; GFNISSE-NEXT: psraw $2, %xmm91933; GFNISSE-NEXT: paddw %xmm0, %xmm01934; GFNISSE-NEXT: pblendvb %xmm0, %xmm9, %xmm81935; GFNISSE-NEXT: movdqa %xmm8, %xmm91936; GFNISSE-NEXT: psraw $1, %xmm91937; GFNISSE-NEXT: paddw %xmm0, %xmm01938; GFNISSE-NEXT: pblendvb %xmm0, %xmm9, %xmm81939; GFNISSE-NEXT: psrlw $8, %xmm81940; GFNISSE-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1],xmm0[2],xmm5[2],xmm0[3],xmm5[3],xmm0[4],xmm5[4],xmm0[5],xmm5[5],xmm0[6],xmm5[6],xmm0[7],xmm5[7]1941; GFNISSE-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1942; GFNISSE-NEXT: movdqa %xmm1, %xmm51943; GFNISSE-NEXT: psraw $4, %xmm51944; GFNISSE-NEXT: pblendvb %xmm0, %xmm5, %xmm11945; GFNISSE-NEXT: movdqa %xmm1, %xmm51946; GFNISSE-NEXT: psraw $2, %xmm51947; GFNISSE-NEXT: paddw %xmm0, %xmm01948; GFNISSE-NEXT: pblendvb %xmm0, %xmm5, %xmm11949; GFNISSE-NEXT: movdqa %xmm1, %xmm51950; GFNISSE-NEXT: psraw $1, %xmm51951; GFNISSE-NEXT: paddw %xmm0, %xmm01952; GFNISSE-NEXT: pblendvb %xmm0, %xmm5, %xmm11953; GFNISSE-NEXT: psrlw $8, %xmm11954; GFNISSE-NEXT: packuswb %xmm8, %xmm11955; GFNISSE-NEXT: psllw $5, %xmm61956; GFNISSE-NEXT: punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm6[8],xmm0[9],xmm6[9],xmm0[10],xmm6[10],xmm0[11],xmm6[11],xmm0[12],xmm6[12],xmm0[13],xmm6[13],xmm0[14],xmm6[14],xmm0[15],xmm6[15]1957; 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]1958; GFNISSE-NEXT: movdqa %xmm5, %xmm81959; GFNISSE-NEXT: psraw $4, %xmm81960; GFNISSE-NEXT: pblendvb %xmm0, %xmm8, %xmm51961; GFNISSE-NEXT: movdqa %xmm5, %xmm81962; GFNISSE-NEXT: psraw $2, %xmm81963; GFNISSE-NEXT: paddw %xmm0, %xmm01964; GFNISSE-NEXT: pblendvb %xmm0, %xmm8, %xmm51965; GFNISSE-NEXT: movdqa %xmm5, %xmm81966; GFNISSE-NEXT: psraw $1, %xmm81967; GFNISSE-NEXT: paddw %xmm0, %xmm01968; GFNISSE-NEXT: pblendvb %xmm0, %xmm8, %xmm51969; GFNISSE-NEXT: psrlw $8, %xmm51970; GFNISSE-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm6[0],xmm0[1],xmm6[1],xmm0[2],xmm6[2],xmm0[3],xmm6[3],xmm0[4],xmm6[4],xmm0[5],xmm6[5],xmm0[6],xmm6[6],xmm0[7],xmm6[7]1971; GFNISSE-NEXT: punpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1972; GFNISSE-NEXT: movdqa %xmm2, %xmm61973; GFNISSE-NEXT: psraw $4, %xmm61974; GFNISSE-NEXT: pblendvb %xmm0, %xmm6, %xmm21975; GFNISSE-NEXT: movdqa %xmm2, %xmm61976; GFNISSE-NEXT: psraw $2, %xmm61977; GFNISSE-NEXT: paddw %xmm0, %xmm01978; GFNISSE-NEXT: pblendvb %xmm0, %xmm6, %xmm21979; GFNISSE-NEXT: movdqa %xmm2, %xmm61980; GFNISSE-NEXT: psraw $1, %xmm61981; GFNISSE-NEXT: paddw %xmm0, %xmm01982; GFNISSE-NEXT: pblendvb %xmm0, %xmm6, %xmm21983; GFNISSE-NEXT: psrlw $8, %xmm21984; GFNISSE-NEXT: packuswb %xmm5, %xmm21985; GFNISSE-NEXT: psllw $5, %xmm71986; GFNISSE-NEXT: punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm7[8],xmm0[9],xmm7[9],xmm0[10],xmm7[10],xmm0[11],xmm7[11],xmm0[12],xmm7[12],xmm0[13],xmm7[13],xmm0[14],xmm7[14],xmm0[15],xmm7[15]1987; 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]1988; GFNISSE-NEXT: movdqa %xmm5, %xmm61989; GFNISSE-NEXT: psraw $4, %xmm61990; GFNISSE-NEXT: pblendvb %xmm0, %xmm6, %xmm51991; GFNISSE-NEXT: movdqa %xmm5, %xmm61992; GFNISSE-NEXT: psraw $2, %xmm61993; GFNISSE-NEXT: paddw %xmm0, %xmm01994; GFNISSE-NEXT: pblendvb %xmm0, %xmm6, %xmm51995; GFNISSE-NEXT: movdqa %xmm5, %xmm61996; GFNISSE-NEXT: psraw $1, %xmm61997; GFNISSE-NEXT: paddw %xmm0, %xmm01998; GFNISSE-NEXT: pblendvb %xmm0, %xmm6, %xmm51999; GFNISSE-NEXT: psrlw $8, %xmm52000; GFNISSE-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm7[0],xmm0[1],xmm7[1],xmm0[2],xmm7[2],xmm0[3],xmm7[3],xmm0[4],xmm7[4],xmm0[5],xmm7[5],xmm0[6],xmm7[6],xmm0[7],xmm7[7]2001; GFNISSE-NEXT: punpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2002; GFNISSE-NEXT: movdqa %xmm3, %xmm62003; GFNISSE-NEXT: psraw $4, %xmm62004; GFNISSE-NEXT: pblendvb %xmm0, %xmm6, %xmm32005; GFNISSE-NEXT: movdqa %xmm3, %xmm62006; GFNISSE-NEXT: psraw $2, %xmm62007; GFNISSE-NEXT: paddw %xmm0, %xmm02008; GFNISSE-NEXT: pblendvb %xmm0, %xmm6, %xmm32009; GFNISSE-NEXT: movdqa %xmm3, %xmm62010; GFNISSE-NEXT: psraw $1, %xmm62011; GFNISSE-NEXT: paddw %xmm0, %xmm02012; GFNISSE-NEXT: pblendvb %xmm0, %xmm6, %xmm32013; GFNISSE-NEXT: psrlw $8, %xmm32014; GFNISSE-NEXT: packuswb %xmm5, %xmm32015; GFNISSE-NEXT: movdqa %xmm4, %xmm02016; GFNISSE-NEXT: retq2017;2018; GFNIAVX1-LABEL: var_ashr_v64i8:2019; GFNIAVX1: # %bb.0:2020; GFNIAVX1-NEXT: vextractf128 $1, %ymm2, %xmm42021; GFNIAVX1-NEXT: vpsllw $5, %xmm4, %xmm42022; GFNIAVX1-NEXT: vpunpckhbw {{.*#+}} xmm5 = xmm4[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2023; GFNIAVX1-NEXT: vextractf128 $1, %ymm0, %xmm62024; GFNIAVX1-NEXT: vpunpckhbw {{.*#+}} xmm7 = xmm6[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2025; GFNIAVX1-NEXT: vpsraw $4, %xmm7, %xmm82026; GFNIAVX1-NEXT: vpblendvb %xmm5, %xmm8, %xmm7, %xmm72027; GFNIAVX1-NEXT: vpsraw $2, %xmm7, %xmm82028; GFNIAVX1-NEXT: vpaddw %xmm5, %xmm5, %xmm92029; GFNIAVX1-NEXT: vpblendvb %xmm9, %xmm8, %xmm7, %xmm72030; GFNIAVX1-NEXT: vpsraw $1, %xmm7, %xmm82031; GFNIAVX1-NEXT: vpsllw $2, %xmm5, %xmm52032; GFNIAVX1-NEXT: vpblendvb %xmm5, %xmm8, %xmm7, %xmm52033; GFNIAVX1-NEXT: vpsrlw $8, %xmm5, %xmm52034; GFNIAVX1-NEXT: vpunpcklbw {{.*#+}} xmm4 = xmm4[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2035; GFNIAVX1-NEXT: vpunpcklbw {{.*#+}} xmm6 = xmm6[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2036; GFNIAVX1-NEXT: vpsraw $4, %xmm6, %xmm72037; GFNIAVX1-NEXT: vpblendvb %xmm4, %xmm7, %xmm6, %xmm62038; GFNIAVX1-NEXT: vpsraw $2, %xmm6, %xmm72039; GFNIAVX1-NEXT: vpaddw %xmm4, %xmm4, %xmm82040; GFNIAVX1-NEXT: vpblendvb %xmm8, %xmm7, %xmm6, %xmm62041; GFNIAVX1-NEXT: vpsraw $1, %xmm6, %xmm72042; GFNIAVX1-NEXT: vpsllw $2, %xmm4, %xmm42043; GFNIAVX1-NEXT: vpblendvb %xmm4, %xmm7, %xmm6, %xmm42044; GFNIAVX1-NEXT: vpsrlw $8, %xmm4, %xmm42045; GFNIAVX1-NEXT: vpackuswb %xmm5, %xmm4, %xmm42046; GFNIAVX1-NEXT: vpsllw $5, %xmm2, %xmm22047; GFNIAVX1-NEXT: vpunpckhbw {{.*#+}} xmm5 = xmm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2048; GFNIAVX1-NEXT: vpunpckhbw {{.*#+}} xmm6 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2049; GFNIAVX1-NEXT: vpsraw $4, %xmm6, %xmm72050; GFNIAVX1-NEXT: vpblendvb %xmm5, %xmm7, %xmm6, %xmm62051; GFNIAVX1-NEXT: vpsraw $2, %xmm6, %xmm72052; GFNIAVX1-NEXT: vpaddw %xmm5, %xmm5, %xmm82053; GFNIAVX1-NEXT: vpblendvb %xmm8, %xmm7, %xmm6, %xmm62054; GFNIAVX1-NEXT: vpsraw $1, %xmm6, %xmm72055; GFNIAVX1-NEXT: vpsllw $2, %xmm5, %xmm52056; GFNIAVX1-NEXT: vpblendvb %xmm5, %xmm7, %xmm6, %xmm52057; GFNIAVX1-NEXT: vpsrlw $8, %xmm5, %xmm52058; GFNIAVX1-NEXT: vpunpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2059; GFNIAVX1-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2060; GFNIAVX1-NEXT: vpsraw $4, %xmm0, %xmm62061; GFNIAVX1-NEXT: vpblendvb %xmm2, %xmm6, %xmm0, %xmm02062; GFNIAVX1-NEXT: vpsraw $2, %xmm0, %xmm62063; GFNIAVX1-NEXT: vpaddw %xmm2, %xmm2, %xmm72064; GFNIAVX1-NEXT: vpblendvb %xmm7, %xmm6, %xmm0, %xmm02065; GFNIAVX1-NEXT: vpsraw $1, %xmm0, %xmm62066; GFNIAVX1-NEXT: vpsllw $2, %xmm2, %xmm22067; GFNIAVX1-NEXT: vpblendvb %xmm2, %xmm6, %xmm0, %xmm02068; GFNIAVX1-NEXT: vpsrlw $8, %xmm0, %xmm02069; GFNIAVX1-NEXT: vpackuswb %xmm5, %xmm0, %xmm02070; GFNIAVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm02071; GFNIAVX1-NEXT: vextractf128 $1, %ymm3, %xmm22072; GFNIAVX1-NEXT: vpsllw $5, %xmm2, %xmm22073; GFNIAVX1-NEXT: vpunpckhbw {{.*#+}} xmm4 = xmm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2074; GFNIAVX1-NEXT: vextractf128 $1, %ymm1, %xmm52075; GFNIAVX1-NEXT: vpunpckhbw {{.*#+}} xmm6 = xmm5[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2076; GFNIAVX1-NEXT: vpsraw $4, %xmm6, %xmm72077; GFNIAVX1-NEXT: vpblendvb %xmm4, %xmm7, %xmm6, %xmm62078; GFNIAVX1-NEXT: vpsraw $2, %xmm6, %xmm72079; GFNIAVX1-NEXT: vpaddw %xmm4, %xmm4, %xmm82080; GFNIAVX1-NEXT: vpblendvb %xmm8, %xmm7, %xmm6, %xmm62081; GFNIAVX1-NEXT: vpsraw $1, %xmm6, %xmm72082; GFNIAVX1-NEXT: vpsllw $2, %xmm4, %xmm42083; GFNIAVX1-NEXT: vpblendvb %xmm4, %xmm7, %xmm6, %xmm42084; GFNIAVX1-NEXT: vpsrlw $8, %xmm4, %xmm42085; GFNIAVX1-NEXT: vpunpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2086; GFNIAVX1-NEXT: vpunpcklbw {{.*#+}} xmm5 = xmm5[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2087; GFNIAVX1-NEXT: vpsraw $4, %xmm5, %xmm62088; GFNIAVX1-NEXT: vpblendvb %xmm2, %xmm6, %xmm5, %xmm52089; GFNIAVX1-NEXT: vpsraw $2, %xmm5, %xmm62090; GFNIAVX1-NEXT: vpaddw %xmm2, %xmm2, %xmm72091; GFNIAVX1-NEXT: vpblendvb %xmm7, %xmm6, %xmm5, %xmm52092; GFNIAVX1-NEXT: vpsraw $1, %xmm5, %xmm62093; GFNIAVX1-NEXT: vpsllw $2, %xmm2, %xmm22094; GFNIAVX1-NEXT: vpblendvb %xmm2, %xmm6, %xmm5, %xmm22095; GFNIAVX1-NEXT: vpsrlw $8, %xmm2, %xmm22096; GFNIAVX1-NEXT: vpackuswb %xmm4, %xmm2, %xmm22097; GFNIAVX1-NEXT: vpsllw $5, %xmm3, %xmm32098; GFNIAVX1-NEXT: vpunpckhbw {{.*#+}} xmm4 = xmm3[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2099; GFNIAVX1-NEXT: vpunpckhbw {{.*#+}} xmm5 = xmm1[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2100; GFNIAVX1-NEXT: vpsraw $4, %xmm5, %xmm62101; GFNIAVX1-NEXT: vpblendvb %xmm4, %xmm6, %xmm5, %xmm52102; GFNIAVX1-NEXT: vpsraw $2, %xmm5, %xmm62103; GFNIAVX1-NEXT: vpaddw %xmm4, %xmm4, %xmm72104; GFNIAVX1-NEXT: vpblendvb %xmm7, %xmm6, %xmm5, %xmm52105; GFNIAVX1-NEXT: vpsraw $1, %xmm5, %xmm62106; GFNIAVX1-NEXT: vpsllw $2, %xmm4, %xmm42107; GFNIAVX1-NEXT: vpblendvb %xmm4, %xmm6, %xmm5, %xmm42108; GFNIAVX1-NEXT: vpsrlw $8, %xmm4, %xmm42109; GFNIAVX1-NEXT: vpunpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2110; GFNIAVX1-NEXT: vpunpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2111; GFNIAVX1-NEXT: vpsraw $4, %xmm1, %xmm52112; GFNIAVX1-NEXT: vpblendvb %xmm3, %xmm5, %xmm1, %xmm12113; GFNIAVX1-NEXT: vpsraw $2, %xmm1, %xmm52114; GFNIAVX1-NEXT: vpaddw %xmm3, %xmm3, %xmm62115; GFNIAVX1-NEXT: vpblendvb %xmm6, %xmm5, %xmm1, %xmm12116; GFNIAVX1-NEXT: vpsraw $1, %xmm1, %xmm52117; GFNIAVX1-NEXT: vpsllw $2, %xmm3, %xmm32118; GFNIAVX1-NEXT: vpblendvb %xmm3, %xmm5, %xmm1, %xmm12119; GFNIAVX1-NEXT: vpsrlw $8, %xmm1, %xmm12120; GFNIAVX1-NEXT: vpackuswb %xmm4, %xmm1, %xmm12121; GFNIAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm12122; GFNIAVX1-NEXT: retq2123;2124; GFNIAVX2-LABEL: var_ashr_v64i8:2125; GFNIAVX2: # %bb.0:2126; GFNIAVX2-NEXT: vpsllw $5, %ymm2, %ymm22127; GFNIAVX2-NEXT: vpunpckhbw {{.*#+}} ymm4 = 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]2128; GFNIAVX2-NEXT: vpunpckhbw {{.*#+}} ymm5 = 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]2129; GFNIAVX2-NEXT: vpsraw $4, %ymm5, %ymm62130; GFNIAVX2-NEXT: vpblendvb %ymm4, %ymm6, %ymm5, %ymm52131; GFNIAVX2-NEXT: vpsraw $2, %ymm5, %ymm62132; GFNIAVX2-NEXT: vpaddw %ymm4, %ymm4, %ymm72133; GFNIAVX2-NEXT: vpblendvb %ymm7, %ymm6, %ymm5, %ymm52134; GFNIAVX2-NEXT: vpsraw $1, %ymm5, %ymm62135; GFNIAVX2-NEXT: vpsllw $2, %ymm4, %ymm42136; GFNIAVX2-NEXT: vpblendvb %ymm4, %ymm6, %ymm5, %ymm42137; GFNIAVX2-NEXT: vpsrlw $8, %ymm4, %ymm42138; GFNIAVX2-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]2139; 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]2140; GFNIAVX2-NEXT: vpsraw $4, %ymm0, %ymm52141; GFNIAVX2-NEXT: vpblendvb %ymm2, %ymm5, %ymm0, %ymm02142; GFNIAVX2-NEXT: vpsraw $2, %ymm0, %ymm52143; GFNIAVX2-NEXT: vpaddw %ymm2, %ymm2, %ymm62144; GFNIAVX2-NEXT: vpblendvb %ymm6, %ymm5, %ymm0, %ymm02145; GFNIAVX2-NEXT: vpsraw $1, %ymm0, %ymm52146; GFNIAVX2-NEXT: vpsllw $2, %ymm2, %ymm22147; GFNIAVX2-NEXT: vpblendvb %ymm2, %ymm5, %ymm0, %ymm02148; GFNIAVX2-NEXT: vpsrlw $8, %ymm0, %ymm02149; GFNIAVX2-NEXT: vpackuswb %ymm4, %ymm0, %ymm02150; GFNIAVX2-NEXT: vpsllw $5, %ymm3, %ymm22151; GFNIAVX2-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]2152; GFNIAVX2-NEXT: vpunpckhbw {{.*#+}} ymm4 = 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]2153; GFNIAVX2-NEXT: vpsraw $4, %ymm4, %ymm52154; GFNIAVX2-NEXT: vpblendvb %ymm3, %ymm5, %ymm4, %ymm42155; GFNIAVX2-NEXT: vpsraw $2, %ymm4, %ymm52156; GFNIAVX2-NEXT: vpaddw %ymm3, %ymm3, %ymm62157; GFNIAVX2-NEXT: vpblendvb %ymm6, %ymm5, %ymm4, %ymm42158; GFNIAVX2-NEXT: vpsraw $1, %ymm4, %ymm52159; GFNIAVX2-NEXT: vpsllw $2, %ymm3, %ymm32160; GFNIAVX2-NEXT: vpblendvb %ymm3, %ymm5, %ymm4, %ymm32161; GFNIAVX2-NEXT: vpsrlw $8, %ymm3, %ymm32162; GFNIAVX2-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]2163; 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]2164; GFNIAVX2-NEXT: vpsraw $4, %ymm1, %ymm42165; GFNIAVX2-NEXT: vpblendvb %ymm2, %ymm4, %ymm1, %ymm12166; GFNIAVX2-NEXT: vpsraw $2, %ymm1, %ymm42167; GFNIAVX2-NEXT: vpaddw %ymm2, %ymm2, %ymm52168; GFNIAVX2-NEXT: vpblendvb %ymm5, %ymm4, %ymm1, %ymm12169; GFNIAVX2-NEXT: vpsraw $1, %ymm1, %ymm42170; GFNIAVX2-NEXT: vpsllw $2, %ymm2, %ymm22171; GFNIAVX2-NEXT: vpblendvb %ymm2, %ymm4, %ymm1, %ymm12172; GFNIAVX2-NEXT: vpsrlw $8, %ymm1, %ymm12173; GFNIAVX2-NEXT: vpackuswb %ymm3, %ymm1, %ymm12174; GFNIAVX2-NEXT: retq2175;2176; GFNIAVX512VL-LABEL: var_ashr_v64i8:2177; GFNIAVX512VL: # %bb.0:2178; GFNIAVX512VL-NEXT: vextracti64x4 $1, %zmm1, %ymm22179; GFNIAVX512VL-NEXT: vpsllw $5, %ymm2, %ymm22180; 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]2181; GFNIAVX512VL-NEXT: vextracti64x4 $1, %zmm0, %ymm42182; GFNIAVX512VL-NEXT: vpunpckhbw {{.*#+}} ymm5 = ymm4[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]2183; GFNIAVX512VL-NEXT: vpsraw $4, %ymm5, %ymm62184; GFNIAVX512VL-NEXT: vpblendvb %ymm3, %ymm6, %ymm5, %ymm52185; GFNIAVX512VL-NEXT: vpsraw $2, %ymm5, %ymm62186; GFNIAVX512VL-NEXT: vpaddw %ymm3, %ymm3, %ymm72187; GFNIAVX512VL-NEXT: vpblendvb %ymm7, %ymm6, %ymm5, %ymm52188; GFNIAVX512VL-NEXT: vpsraw $1, %ymm5, %ymm62189; GFNIAVX512VL-NEXT: vpsllw $2, %ymm3, %ymm32190; GFNIAVX512VL-NEXT: vpblendvb %ymm3, %ymm6, %ymm5, %ymm32191; GFNIAVX512VL-NEXT: vpsrlw $8, %ymm3, %ymm32192; 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]2193; GFNIAVX512VL-NEXT: vpunpcklbw {{.*#+}} ymm4 = ymm4[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]2194; GFNIAVX512VL-NEXT: vpsraw $4, %ymm4, %ymm52195; GFNIAVX512VL-NEXT: vpblendvb %ymm2, %ymm5, %ymm4, %ymm42196; GFNIAVX512VL-NEXT: vpsraw $2, %ymm4, %ymm52197; GFNIAVX512VL-NEXT: vpaddw %ymm2, %ymm2, %ymm62198; GFNIAVX512VL-NEXT: vpblendvb %ymm6, %ymm5, %ymm4, %ymm42199; GFNIAVX512VL-NEXT: vpsraw $1, %ymm4, %ymm52200; GFNIAVX512VL-NEXT: vpsllw $2, %ymm2, %ymm22201; GFNIAVX512VL-NEXT: vpblendvb %ymm2, %ymm5, %ymm4, %ymm22202; GFNIAVX512VL-NEXT: vpsrlw $8, %ymm2, %ymm22203; GFNIAVX512VL-NEXT: vpackuswb %ymm3, %ymm2, %ymm22204; GFNIAVX512VL-NEXT: vpsllw $5, %ymm1, %ymm12205; GFNIAVX512VL-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]2206; GFNIAVX512VL-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]2207; GFNIAVX512VL-NEXT: vpsraw $4, %ymm4, %ymm52208; GFNIAVX512VL-NEXT: vpblendvb %ymm3, %ymm5, %ymm4, %ymm42209; GFNIAVX512VL-NEXT: vpsraw $2, %ymm4, %ymm52210; GFNIAVX512VL-NEXT: vpaddw %ymm3, %ymm3, %ymm62211; GFNIAVX512VL-NEXT: vpblendvb %ymm6, %ymm5, %ymm4, %ymm42212; GFNIAVX512VL-NEXT: vpsraw $1, %ymm4, %ymm52213; GFNIAVX512VL-NEXT: vpsllw $2, %ymm3, %ymm32214; GFNIAVX512VL-NEXT: vpblendvb %ymm3, %ymm5, %ymm4, %ymm32215; GFNIAVX512VL-NEXT: vpsrlw $8, %ymm3, %ymm32216; 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]2217; 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]2218; GFNIAVX512VL-NEXT: vpsraw $4, %ymm0, %ymm42219; GFNIAVX512VL-NEXT: vpblendvb %ymm1, %ymm4, %ymm0, %ymm02220; GFNIAVX512VL-NEXT: vpsraw $2, %ymm0, %ymm42221; GFNIAVX512VL-NEXT: vpaddw %ymm1, %ymm1, %ymm52222; GFNIAVX512VL-NEXT: vpblendvb %ymm5, %ymm4, %ymm0, %ymm02223; GFNIAVX512VL-NEXT: vpsraw $1, %ymm0, %ymm42224; GFNIAVX512VL-NEXT: vpsllw $2, %ymm1, %ymm12225; GFNIAVX512VL-NEXT: vpblendvb %ymm1, %ymm4, %ymm0, %ymm02226; GFNIAVX512VL-NEXT: vpsrlw $8, %ymm0, %ymm02227; GFNIAVX512VL-NEXT: vpackuswb %ymm3, %ymm0, %ymm02228; GFNIAVX512VL-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm02229; GFNIAVX512VL-NEXT: retq2230;2231; GFNIAVX512BW-LABEL: var_ashr_v64i8:2232; GFNIAVX512BW: # %bb.0:2233; GFNIAVX512BW-NEXT: vpsrlw $8, %zmm1, %zmm22234; GFNIAVX512BW-NEXT: vpsravw %zmm2, %zmm0, %zmm22235; GFNIAVX512BW-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm1, %zmm12236; GFNIAVX512BW-NEXT: vpsllw $8, %zmm0, %zmm02237; GFNIAVX512BW-NEXT: vpsraw $8, %zmm0, %zmm02238; GFNIAVX512BW-NEXT: vpsravw %zmm1, %zmm0, %zmm02239; GFNIAVX512BW-NEXT: movabsq $6148914691236517205, %rax # imm = 0x55555555555555552240; GFNIAVX512BW-NEXT: kmovq %rax, %k12241; GFNIAVX512BW-NEXT: vmovdqu8 %zmm0, %zmm2 {%k1}2242; GFNIAVX512BW-NEXT: vmovdqa64 %zmm2, %zmm02243; GFNIAVX512BW-NEXT: retq2244 %shift = ashr <64 x i8> %a, %b2245 ret <64 x i8> %shift2246}2247 2248define <64 x i8> @splatvar_shl_v64i8(<64 x i8> %a, <64 x i8> %b) nounwind {2249; GFNISSE-LABEL: splatvar_shl_v64i8:2250; GFNISSE: # %bb.0:2251; GFNISSE-NEXT: pmovzxbq {{.*#+}} xmm4 = xmm4[0],zero,zero,zero,zero,zero,zero,zero,xmm4[1],zero,zero,zero,zero,zero,zero,zero2252; GFNISSE-NEXT: psllw %xmm4, %xmm02253; GFNISSE-NEXT: pcmpeqd %xmm5, %xmm52254; GFNISSE-NEXT: psllw %xmm4, %xmm52255; GFNISSE-NEXT: pxor %xmm6, %xmm62256; GFNISSE-NEXT: pshufb %xmm6, %xmm52257; GFNISSE-NEXT: pand %xmm5, %xmm02258; GFNISSE-NEXT: psllw %xmm4, %xmm12259; GFNISSE-NEXT: pand %xmm5, %xmm12260; GFNISSE-NEXT: psllw %xmm4, %xmm22261; GFNISSE-NEXT: pand %xmm5, %xmm22262; GFNISSE-NEXT: psllw %xmm4, %xmm32263; GFNISSE-NEXT: pand %xmm5, %xmm32264; GFNISSE-NEXT: retq2265;2266; GFNIAVX1-LABEL: splatvar_shl_v64i8:2267; GFNIAVX1: # %bb.0:2268; GFNIAVX1-NEXT: vextractf128 $1, %ymm0, %xmm32269; GFNIAVX1-NEXT: vpmovzxbq {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,zero,zero,zero,zero,xmm2[1],zero,zero,zero,zero,zero,zero,zero2270; GFNIAVX1-NEXT: vpsllw %xmm2, %xmm3, %xmm32271; GFNIAVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm42272; GFNIAVX1-NEXT: vpsllw %xmm2, %xmm4, %xmm42273; GFNIAVX1-NEXT: vpxor %xmm5, %xmm5, %xmm52274; GFNIAVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm42275; GFNIAVX1-NEXT: vpand %xmm4, %xmm3, %xmm32276; GFNIAVX1-NEXT: vpsllw %xmm2, %xmm0, %xmm02277; GFNIAVX1-NEXT: vpand %xmm4, %xmm0, %xmm02278; GFNIAVX1-NEXT: vinsertf128 $1, %xmm3, %ymm0, %ymm02279; GFNIAVX1-NEXT: vextractf128 $1, %ymm1, %xmm32280; GFNIAVX1-NEXT: vpsllw %xmm2, %xmm3, %xmm32281; GFNIAVX1-NEXT: vpand %xmm4, %xmm3, %xmm32282; GFNIAVX1-NEXT: vpsllw %xmm2, %xmm1, %xmm12283; GFNIAVX1-NEXT: vpand %xmm4, %xmm1, %xmm12284; GFNIAVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm12285; GFNIAVX1-NEXT: retq2286;2287; GFNIAVX2-LABEL: splatvar_shl_v64i8:2288; GFNIAVX2: # %bb.0:2289; GFNIAVX2-NEXT: vpmovzxbq {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,zero,zero,zero,zero,xmm2[1],zero,zero,zero,zero,zero,zero,zero2290; GFNIAVX2-NEXT: vpsllw %xmm2, %ymm0, %ymm02291; GFNIAVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm32292; GFNIAVX2-NEXT: vpsllw %xmm2, %xmm3, %xmm32293; GFNIAVX2-NEXT: vpbroadcastb %xmm3, %ymm32294; GFNIAVX2-NEXT: vpand %ymm3, %ymm0, %ymm02295; GFNIAVX2-NEXT: vpsllw %xmm2, %ymm1, %ymm12296; GFNIAVX2-NEXT: vpand %ymm3, %ymm1, %ymm12297; GFNIAVX2-NEXT: retq2298;2299; GFNIAVX512VL-LABEL: splatvar_shl_v64i8:2300; GFNIAVX512VL: # %bb.0:2301; GFNIAVX512VL-NEXT: vextracti64x4 $1, %zmm0, %ymm22302; GFNIAVX512VL-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero2303; GFNIAVX512VL-NEXT: vpsllw %xmm1, %ymm2, %ymm22304; GFNIAVX512VL-NEXT: vpsllw %xmm1, %ymm0, %ymm02305; GFNIAVX512VL-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm02306; GFNIAVX512VL-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm22307; GFNIAVX512VL-NEXT: vpsllw %xmm1, %xmm2, %xmm12308; GFNIAVX512VL-NEXT: vpbroadcastb %xmm1, %ymm12309; GFNIAVX512VL-NEXT: vinserti64x4 $1, %ymm1, %zmm1, %zmm12310; GFNIAVX512VL-NEXT: vpandq %zmm1, %zmm0, %zmm02311; GFNIAVX512VL-NEXT: retq2312;2313; GFNIAVX512BW-LABEL: splatvar_shl_v64i8:2314; GFNIAVX512BW: # %bb.0:2315; GFNIAVX512BW-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero2316; GFNIAVX512BW-NEXT: vpsllw %xmm1, %zmm0, %zmm02317; GFNIAVX512BW-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm22318; GFNIAVX512BW-NEXT: vpsllw %xmm1, %xmm2, %xmm12319; GFNIAVX512BW-NEXT: vpbroadcastb %xmm1, %zmm12320; GFNIAVX512BW-NEXT: vpandq %zmm1, %zmm0, %zmm02321; GFNIAVX512BW-NEXT: retq2322 %splat = shufflevector <64 x i8> %b, <64 x i8> undef, <64 x i32> zeroinitializer2323 %shift = shl <64 x i8> %a, %splat2324 ret <64 x i8> %shift2325}2326 2327define <64 x i8> @splatvar_lshr_v64i8(<64 x i8> %a, <64 x i8> %b) nounwind {2328; GFNISSE-LABEL: splatvar_lshr_v64i8:2329; GFNISSE: # %bb.0:2330; GFNISSE-NEXT: pmovzxbq {{.*#+}} xmm4 = xmm4[0],zero,zero,zero,zero,zero,zero,zero,xmm4[1],zero,zero,zero,zero,zero,zero,zero2331; GFNISSE-NEXT: psrlw %xmm4, %xmm02332; GFNISSE-NEXT: pcmpeqd %xmm5, %xmm52333; GFNISSE-NEXT: psrlw %xmm4, %xmm52334; GFNISSE-NEXT: pshufb {{.*#+}} xmm5 = xmm5[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]2335; GFNISSE-NEXT: pand %xmm5, %xmm02336; GFNISSE-NEXT: psrlw %xmm4, %xmm12337; GFNISSE-NEXT: pand %xmm5, %xmm12338; GFNISSE-NEXT: psrlw %xmm4, %xmm22339; GFNISSE-NEXT: pand %xmm5, %xmm22340; GFNISSE-NEXT: psrlw %xmm4, %xmm32341; GFNISSE-NEXT: pand %xmm5, %xmm32342; GFNISSE-NEXT: retq2343;2344; GFNIAVX1-LABEL: splatvar_lshr_v64i8:2345; GFNIAVX1: # %bb.0:2346; GFNIAVX1-NEXT: vextractf128 $1, %ymm0, %xmm32347; GFNIAVX1-NEXT: vpmovzxbq {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,zero,zero,zero,zero,xmm2[1],zero,zero,zero,zero,zero,zero,zero2348; GFNIAVX1-NEXT: vpsrlw %xmm2, %xmm3, %xmm32349; GFNIAVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm42350; GFNIAVX1-NEXT: vpsrlw %xmm2, %xmm4, %xmm42351; GFNIAVX1-NEXT: vpshufb {{.*#+}} xmm4 = xmm4[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]2352; GFNIAVX1-NEXT: vpand %xmm4, %xmm3, %xmm32353; GFNIAVX1-NEXT: vpsrlw %xmm2, %xmm0, %xmm02354; GFNIAVX1-NEXT: vpand %xmm4, %xmm0, %xmm02355; GFNIAVX1-NEXT: vinsertf128 $1, %xmm3, %ymm0, %ymm02356; GFNIAVX1-NEXT: vextractf128 $1, %ymm1, %xmm32357; GFNIAVX1-NEXT: vpsrlw %xmm2, %xmm3, %xmm32358; GFNIAVX1-NEXT: vpand %xmm4, %xmm3, %xmm32359; GFNIAVX1-NEXT: vpsrlw %xmm2, %xmm1, %xmm12360; GFNIAVX1-NEXT: vpand %xmm4, %xmm1, %xmm12361; GFNIAVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm12362; GFNIAVX1-NEXT: retq2363;2364; GFNIAVX2-LABEL: splatvar_lshr_v64i8:2365; GFNIAVX2: # %bb.0:2366; GFNIAVX2-NEXT: vpmovzxbq {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,zero,zero,zero,zero,xmm2[1],zero,zero,zero,zero,zero,zero,zero2367; GFNIAVX2-NEXT: vpsrlw %xmm2, %ymm0, %ymm02368; GFNIAVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm32369; GFNIAVX2-NEXT: vpsrlw %xmm2, %xmm3, %xmm32370; GFNIAVX2-NEXT: vpsrlw $8, %xmm3, %xmm32371; GFNIAVX2-NEXT: vpbroadcastb %xmm3, %ymm32372; GFNIAVX2-NEXT: vpand %ymm3, %ymm0, %ymm02373; GFNIAVX2-NEXT: vpsrlw %xmm2, %ymm1, %ymm12374; GFNIAVX2-NEXT: vpand %ymm3, %ymm1, %ymm12375; GFNIAVX2-NEXT: retq2376;2377; GFNIAVX512VL-LABEL: splatvar_lshr_v64i8:2378; GFNIAVX512VL: # %bb.0:2379; GFNIAVX512VL-NEXT: vextracti64x4 $1, %zmm0, %ymm22380; GFNIAVX512VL-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero2381; GFNIAVX512VL-NEXT: vpsrlw %xmm1, %ymm2, %ymm22382; GFNIAVX512VL-NEXT: vpsrlw %xmm1, %ymm0, %ymm02383; GFNIAVX512VL-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm02384; GFNIAVX512VL-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm22385; GFNIAVX512VL-NEXT: vpsrlw %xmm1, %xmm2, %xmm12386; GFNIAVX512VL-NEXT: vpsrlw $8, %xmm1, %xmm12387; GFNIAVX512VL-NEXT: vpbroadcastb %xmm1, %ymm12388; GFNIAVX512VL-NEXT: vinserti64x4 $1, %ymm1, %zmm1, %zmm12389; GFNIAVX512VL-NEXT: vpandq %zmm1, %zmm0, %zmm02390; GFNIAVX512VL-NEXT: retq2391;2392; GFNIAVX512BW-LABEL: splatvar_lshr_v64i8:2393; GFNIAVX512BW: # %bb.0:2394; GFNIAVX512BW-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero2395; GFNIAVX512BW-NEXT: vpsrlw %xmm1, %zmm0, %zmm02396; GFNIAVX512BW-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm22397; GFNIAVX512BW-NEXT: vpsrlw %xmm1, %xmm2, %xmm12398; GFNIAVX512BW-NEXT: vpsrlw $8, %xmm1, %xmm12399; GFNIAVX512BW-NEXT: vpbroadcastb %xmm1, %zmm12400; GFNIAVX512BW-NEXT: vpandq %zmm1, %zmm0, %zmm02401; GFNIAVX512BW-NEXT: retq2402 %splat = shufflevector <64 x i8> %b, <64 x i8> undef, <64 x i32> zeroinitializer2403 %shift = lshr <64 x i8> %a, %splat2404 ret <64 x i8> %shift2405}2406 2407define <64 x i8> @splatvar_ashr_v64i8(<64 x i8> %a, <64 x i8> %b) nounwind {2408; GFNISSE-LABEL: splatvar_ashr_v64i8:2409; GFNISSE: # %bb.0:2410; GFNISSE-NEXT: pmovzxbq {{.*#+}} xmm4 = xmm4[0],zero,zero,zero,zero,zero,zero,zero,xmm4[1],zero,zero,zero,zero,zero,zero,zero2411; GFNISSE-NEXT: psrlw %xmm4, %xmm02412; GFNISSE-NEXT: pcmpeqd %xmm5, %xmm52413; GFNISSE-NEXT: psrlw %xmm4, %xmm52414; GFNISSE-NEXT: pshufb {{.*#+}} xmm5 = xmm5[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]2415; GFNISSE-NEXT: pand %xmm5, %xmm02416; GFNISSE-NEXT: movdqa {{.*#+}} xmm6 = [32896,32896,32896,32896,32896,32896,32896,32896]2417; GFNISSE-NEXT: psrlw %xmm4, %xmm62418; GFNISSE-NEXT: pxor %xmm6, %xmm02419; GFNISSE-NEXT: psubb %xmm6, %xmm02420; GFNISSE-NEXT: psrlw %xmm4, %xmm12421; GFNISSE-NEXT: pand %xmm5, %xmm12422; GFNISSE-NEXT: pxor %xmm6, %xmm12423; GFNISSE-NEXT: psubb %xmm6, %xmm12424; GFNISSE-NEXT: psrlw %xmm4, %xmm22425; GFNISSE-NEXT: pand %xmm5, %xmm22426; GFNISSE-NEXT: pxor %xmm6, %xmm22427; GFNISSE-NEXT: psubb %xmm6, %xmm22428; GFNISSE-NEXT: psrlw %xmm4, %xmm32429; GFNISSE-NEXT: pand %xmm5, %xmm32430; GFNISSE-NEXT: pxor %xmm6, %xmm32431; GFNISSE-NEXT: psubb %xmm6, %xmm32432; GFNISSE-NEXT: retq2433;2434; GFNIAVX1-LABEL: splatvar_ashr_v64i8:2435; GFNIAVX1: # %bb.0:2436; GFNIAVX1-NEXT: vextractf128 $1, %ymm0, %xmm32437; GFNIAVX1-NEXT: vpmovzxbq {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,zero,zero,zero,zero,xmm2[1],zero,zero,zero,zero,zero,zero,zero2438; GFNIAVX1-NEXT: vpsrlw %xmm2, %xmm3, %xmm32439; GFNIAVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm42440; GFNIAVX1-NEXT: vpsrlw %xmm2, %xmm4, %xmm42441; GFNIAVX1-NEXT: vpshufb {{.*#+}} xmm4 = xmm4[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]2442; GFNIAVX1-NEXT: vpand %xmm4, %xmm3, %xmm32443; GFNIAVX1-NEXT: vbroadcastss {{.*#+}} xmm5 = [32896,32896,32896,32896,32896,32896,32896,32896]2444; GFNIAVX1-NEXT: vpsrlw %xmm2, %xmm5, %xmm52445; GFNIAVX1-NEXT: vpxor %xmm5, %xmm3, %xmm32446; GFNIAVX1-NEXT: vpsubb %xmm5, %xmm3, %xmm32447; GFNIAVX1-NEXT: vpsrlw %xmm2, %xmm0, %xmm02448; GFNIAVX1-NEXT: vpand %xmm4, %xmm0, %xmm02449; GFNIAVX1-NEXT: vpxor %xmm5, %xmm0, %xmm02450; GFNIAVX1-NEXT: vpsubb %xmm5, %xmm0, %xmm02451; GFNIAVX1-NEXT: vinsertf128 $1, %xmm3, %ymm0, %ymm02452; GFNIAVX1-NEXT: vextractf128 $1, %ymm1, %xmm32453; GFNIAVX1-NEXT: vpsrlw %xmm2, %xmm3, %xmm32454; GFNIAVX1-NEXT: vpand %xmm4, %xmm3, %xmm32455; GFNIAVX1-NEXT: vpxor %xmm5, %xmm3, %xmm32456; GFNIAVX1-NEXT: vpsubb %xmm5, %xmm3, %xmm32457; GFNIAVX1-NEXT: vpsrlw %xmm2, %xmm1, %xmm12458; GFNIAVX1-NEXT: vpand %xmm4, %xmm1, %xmm12459; GFNIAVX1-NEXT: vpxor %xmm5, %xmm1, %xmm12460; GFNIAVX1-NEXT: vpsubb %xmm5, %xmm1, %xmm12461; GFNIAVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm12462; GFNIAVX1-NEXT: retq2463;2464; GFNIAVX2-LABEL: splatvar_ashr_v64i8:2465; GFNIAVX2: # %bb.0:2466; GFNIAVX2-NEXT: vpmovzxbq {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,zero,zero,zero,zero,xmm2[1],zero,zero,zero,zero,zero,zero,zero2467; GFNIAVX2-NEXT: vpsrlw %xmm2, %ymm0, %ymm02468; GFNIAVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm32469; GFNIAVX2-NEXT: vpsrlw %xmm2, %xmm3, %xmm32470; GFNIAVX2-NEXT: vpsrlw $8, %xmm3, %xmm32471; GFNIAVX2-NEXT: vpbroadcastb %xmm3, %ymm32472; GFNIAVX2-NEXT: vpand %ymm3, %ymm0, %ymm02473; GFNIAVX2-NEXT: vpbroadcastb {{.*#+}} ymm4 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]2474; GFNIAVX2-NEXT: vpsrlw %xmm2, %ymm4, %ymm42475; GFNIAVX2-NEXT: vpxor %ymm4, %ymm0, %ymm02476; GFNIAVX2-NEXT: vpsubb %ymm4, %ymm0, %ymm02477; GFNIAVX2-NEXT: vpsrlw %xmm2, %ymm1, %ymm12478; GFNIAVX2-NEXT: vpand %ymm3, %ymm1, %ymm12479; GFNIAVX2-NEXT: vpxor %ymm4, %ymm1, %ymm12480; GFNIAVX2-NEXT: vpsubb %ymm4, %ymm1, %ymm12481; GFNIAVX2-NEXT: retq2482;2483; GFNIAVX512VL-LABEL: splatvar_ashr_v64i8:2484; GFNIAVX512VL: # %bb.0:2485; GFNIAVX512VL-NEXT: vextracti64x4 $1, %zmm0, %ymm22486; GFNIAVX512VL-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero2487; GFNIAVX512VL-NEXT: vpsrlw %xmm1, %ymm2, %ymm22488; GFNIAVX512VL-NEXT: vpbroadcastd {{.*#+}} ymm3 = [32896,32896,32896,32896,32896,32896,32896,32896,32896,32896,32896,32896,32896,32896,32896,32896]2489; GFNIAVX512VL-NEXT: vpsrlw %xmm1, %ymm3, %ymm32490; GFNIAVX512VL-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm42491; GFNIAVX512VL-NEXT: vpsrlw %xmm1, %xmm4, %xmm42492; GFNIAVX512VL-NEXT: vpsrlw $8, %xmm4, %xmm42493; GFNIAVX512VL-NEXT: vpbroadcastb %xmm4, %ymm42494; GFNIAVX512VL-NEXT: vpternlogq {{.*#+}} ymm2 = ymm3 ^ (ymm2 & ymm4)2495; GFNIAVX512VL-NEXT: vpsubb %ymm3, %ymm2, %ymm22496; GFNIAVX512VL-NEXT: vpsrlw %xmm1, %ymm0, %ymm02497; GFNIAVX512VL-NEXT: vpternlogq {{.*#+}} ymm0 = ymm3 ^ (ymm0 & ymm4)2498; GFNIAVX512VL-NEXT: vpsubb %ymm3, %ymm0, %ymm02499; GFNIAVX512VL-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm02500; GFNIAVX512VL-NEXT: retq2501;2502; GFNIAVX512BW-LABEL: splatvar_ashr_v64i8:2503; GFNIAVX512BW: # %bb.0:2504; GFNIAVX512BW-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero2505; GFNIAVX512BW-NEXT: vpsrlw %xmm1, %zmm0, %zmm02506; GFNIAVX512BW-NEXT: vpbroadcastb {{.*#+}} zmm2 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]2507; GFNIAVX512BW-NEXT: vpsrlw %xmm1, %zmm2, %zmm22508; GFNIAVX512BW-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm32509; GFNIAVX512BW-NEXT: vpsrlw %xmm1, %xmm3, %xmm12510; GFNIAVX512BW-NEXT: vpsrlw $8, %xmm1, %xmm12511; GFNIAVX512BW-NEXT: vpbroadcastb %xmm1, %zmm12512; GFNIAVX512BW-NEXT: vpternlogq {{.*#+}} zmm1 = zmm2 ^ (zmm1 & zmm0)2513; GFNIAVX512BW-NEXT: vpsubb %zmm2, %zmm1, %zmm02514; GFNIAVX512BW-NEXT: retq2515 %splat = shufflevector <64 x i8> %b, <64 x i8> undef, <64 x i32> zeroinitializer2516 %shift = ashr <64 x i8> %a, %splat2517 ret <64 x i8> %shift2518}2519 2520define <64 x i8> @constant_shl_v64i8(<64 x i8> %a) nounwind {2521; GFNISSE-LABEL: constant_shl_v64i8:2522; GFNISSE: # %bb.0:2523; GFNISSE-NEXT: movdqa {{.*#+}} xmm4 = [1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1]2524; GFNISSE-NEXT: movdqa %xmm0, %xmm62525; GFNISSE-NEXT: pmullw %xmm4, %xmm62526; GFNISSE-NEXT: pmovzxbw {{.*#+}} xmm5 = [255,255,255,255,255,255,255,255]2527; GFNISSE-NEXT: pand %xmm5, %xmm62528; GFNISSE-NEXT: movdqa {{.*#+}} xmm7 = [0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1]2529; GFNISSE-NEXT: pmaddubsw %xmm7, %xmm02530; GFNISSE-NEXT: psllw $8, %xmm02531; GFNISSE-NEXT: por %xmm6, %xmm02532; GFNISSE-NEXT: movdqa %xmm1, %xmm62533; GFNISSE-NEXT: pmullw %xmm4, %xmm62534; GFNISSE-NEXT: pand %xmm5, %xmm62535; GFNISSE-NEXT: pmaddubsw %xmm7, %xmm12536; GFNISSE-NEXT: psllw $8, %xmm12537; GFNISSE-NEXT: por %xmm6, %xmm12538; GFNISSE-NEXT: movdqa %xmm2, %xmm62539; GFNISSE-NEXT: pmullw %xmm4, %xmm62540; GFNISSE-NEXT: pand %xmm5, %xmm62541; GFNISSE-NEXT: pmaddubsw %xmm7, %xmm22542; GFNISSE-NEXT: psllw $8, %xmm22543; GFNISSE-NEXT: por %xmm6, %xmm22544; GFNISSE-NEXT: pmullw %xmm3, %xmm42545; GFNISSE-NEXT: pand %xmm5, %xmm42546; GFNISSE-NEXT: pmaddubsw %xmm7, %xmm32547; GFNISSE-NEXT: psllw $8, %xmm32548; GFNISSE-NEXT: por %xmm4, %xmm32549; GFNISSE-NEXT: retq2550;2551; GFNIAVX1-LABEL: constant_shl_v64i8:2552; GFNIAVX1: # %bb.0:2553; GFNIAVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1]2554; GFNIAVX1-NEXT: vpmaddubsw %xmm2, %xmm0, %xmm32555; GFNIAVX1-NEXT: vpsllw $8, %xmm3, %xmm32556; GFNIAVX1-NEXT: vextractf128 $1, %ymm0, %xmm42557; GFNIAVX1-NEXT: vpmaddubsw %xmm2, %xmm4, %xmm52558; GFNIAVX1-NEXT: vpsllw $8, %xmm5, %xmm52559; GFNIAVX1-NEXT: vinsertf128 $1, %xmm5, %ymm3, %ymm32560; GFNIAVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1]2561; GFNIAVX1-NEXT: vpmullw %xmm5, %xmm4, %xmm42562; GFNIAVX1-NEXT: vpmullw %xmm5, %xmm0, %xmm02563; GFNIAVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm02564; GFNIAVX1-NEXT: vbroadcastss {{.*#+}} ymm4 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0]2565; GFNIAVX1-NEXT: vandps %ymm4, %ymm0, %ymm02566; GFNIAVX1-NEXT: vorps %ymm3, %ymm0, %ymm02567; GFNIAVX1-NEXT: vpmaddubsw %xmm2, %xmm1, %xmm32568; GFNIAVX1-NEXT: vpsllw $8, %xmm3, %xmm32569; GFNIAVX1-NEXT: vextractf128 $1, %ymm1, %xmm62570; GFNIAVX1-NEXT: vpmaddubsw %xmm2, %xmm6, %xmm22571; GFNIAVX1-NEXT: vpsllw $8, %xmm2, %xmm22572; GFNIAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm22573; GFNIAVX1-NEXT: vpmullw %xmm5, %xmm6, %xmm32574; GFNIAVX1-NEXT: vpmullw %xmm5, %xmm1, %xmm12575; GFNIAVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm12576; GFNIAVX1-NEXT: vandps %ymm4, %ymm1, %ymm12577; GFNIAVX1-NEXT: vorps %ymm2, %ymm1, %ymm12578; GFNIAVX1-NEXT: retq2579;2580; GFNIAVX2-LABEL: constant_shl_v64i8:2581; GFNIAVX2: # %bb.0:2582; GFNIAVX2-NEXT: vbroadcasti128 {{.*#+}} ymm2 = [1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1,1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1]2583; GFNIAVX2-NEXT: # ymm2 = mem[0,1,0,1]2584; GFNIAVX2-NEXT: vpmullw %ymm2, %ymm0, %ymm32585; GFNIAVX2-NEXT: vpbroadcastw {{.*#+}} ymm4 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]2586; GFNIAVX2-NEXT: vpand %ymm4, %ymm3, %ymm32587; GFNIAVX2-NEXT: vbroadcasti128 {{.*#+}} ymm5 = [0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1,0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1]2588; GFNIAVX2-NEXT: # ymm5 = mem[0,1,0,1]2589; GFNIAVX2-NEXT: vpmaddubsw %ymm5, %ymm0, %ymm02590; GFNIAVX2-NEXT: vpsllw $8, %ymm0, %ymm02591; GFNIAVX2-NEXT: vpor %ymm0, %ymm3, %ymm02592; GFNIAVX2-NEXT: vpmullw %ymm2, %ymm1, %ymm22593; GFNIAVX2-NEXT: vpand %ymm4, %ymm2, %ymm22594; GFNIAVX2-NEXT: vpmaddubsw %ymm5, %ymm1, %ymm12595; GFNIAVX2-NEXT: vpsllw $8, %ymm1, %ymm12596; GFNIAVX2-NEXT: vpor %ymm1, %ymm2, %ymm12597; GFNIAVX2-NEXT: retq2598;2599; GFNIAVX512VL-LABEL: constant_shl_v64i8:2600; GFNIAVX512VL: # %bb.0:2601; GFNIAVX512VL-NEXT: vextracti64x4 $1, %zmm0, %ymm12602; GFNIAVX512VL-NEXT: vbroadcasti128 {{.*#+}} ymm2 = [1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1,1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1]2603; GFNIAVX512VL-NEXT: # ymm2 = mem[0,1,0,1]2604; GFNIAVX512VL-NEXT: vpmullw %ymm2, %ymm1, %ymm32605; GFNIAVX512VL-NEXT: vpmullw %ymm2, %ymm0, %ymm22606; GFNIAVX512VL-NEXT: vinserti64x4 $1, %ymm3, %zmm2, %zmm22607; GFNIAVX512VL-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1,0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1]2608; GFNIAVX512VL-NEXT: # ymm3 = mem[0,1,0,1]2609; GFNIAVX512VL-NEXT: vpmaddubsw %ymm3, %ymm0, %ymm02610; GFNIAVX512VL-NEXT: vpsllw $8, %ymm0, %ymm02611; GFNIAVX512VL-NEXT: vpmaddubsw %ymm3, %ymm1, %ymm12612; GFNIAVX512VL-NEXT: vpsllw $8, %ymm1, %ymm12613; GFNIAVX512VL-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm02614; GFNIAVX512VL-NEXT: vpternlogd {{.*#+}} zmm0 = zmm0 | (zmm2 & m32bcst)2615; GFNIAVX512VL-NEXT: retq2616;2617; GFNIAVX512BW-LABEL: constant_shl_v64i8:2618; GFNIAVX512BW: # %bb.0:2619; GFNIAVX512BW-NEXT: vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm1 # [1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1,1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1,1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1,1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1]2620; GFNIAVX512BW-NEXT: vpmaddubsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1,0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1,0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1,0,2,0,8,0,32,0,128,0,64,0,16,0,4,0,1]2621; GFNIAVX512BW-NEXT: vpsllw $8, %zmm0, %zmm02622; GFNIAVX512BW-NEXT: vpternlogd {{.*#+}} zmm0 = zmm0 | (zmm1 & m32bcst)2623; GFNIAVX512BW-NEXT: retq2624 %shift = shl <64 x i8> %a, <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>2625 ret <64 x i8> %shift2626}2627 2628define <64 x i8> @constant_lshr_v64i8(<64 x i8> %a) nounwind {2629; GFNISSE-LABEL: constant_lshr_v64i8:2630; GFNISSE: # %bb.0:2631; GFNISSE-NEXT: movdqa %xmm1, %xmm42632; GFNISSE-NEXT: movdqa %xmm0, %xmm12633; GFNISSE-NEXT: pxor %xmm6, %xmm62634; GFNISSE-NEXT: pmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero2635; GFNISSE-NEXT: punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm6[8],xmm1[9],xmm6[9],xmm1[10],xmm6[10],xmm1[11],xmm6[11],xmm1[12],xmm6[12],xmm1[13],xmm6[13],xmm1[14],xmm6[14],xmm1[15],xmm6[15]2636; GFNISSE-NEXT: movdqa {{.*#+}} xmm7 = [2,4,8,16,32,64,128,256]2637; GFNISSE-NEXT: pmullw %xmm7, %xmm12638; GFNISSE-NEXT: psrlw $8, %xmm12639; GFNISSE-NEXT: movdqa {{.*#+}} xmm8 = [256,128,64,32,16,8,4,2]2640; GFNISSE-NEXT: pmullw %xmm8, %xmm02641; GFNISSE-NEXT: psrlw $8, %xmm02642; GFNISSE-NEXT: packuswb %xmm1, %xmm02643; GFNISSE-NEXT: pmovzxbw {{.*#+}} xmm1 = xmm4[0],zero,xmm4[1],zero,xmm4[2],zero,xmm4[3],zero,xmm4[4],zero,xmm4[5],zero,xmm4[6],zero,xmm4[7],zero2644; GFNISSE-NEXT: punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm6[8],xmm4[9],xmm6[9],xmm4[10],xmm6[10],xmm4[11],xmm6[11],xmm4[12],xmm6[12],xmm4[13],xmm6[13],xmm4[14],xmm6[14],xmm4[15],xmm6[15]2645; GFNISSE-NEXT: pmullw %xmm7, %xmm42646; GFNISSE-NEXT: psrlw $8, %xmm42647; GFNISSE-NEXT: pmullw %xmm8, %xmm12648; GFNISSE-NEXT: psrlw $8, %xmm12649; GFNISSE-NEXT: packuswb %xmm4, %xmm12650; GFNISSE-NEXT: pmovzxbw {{.*#+}} xmm4 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero2651; GFNISSE-NEXT: punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm6[8],xmm2[9],xmm6[9],xmm2[10],xmm6[10],xmm2[11],xmm6[11],xmm2[12],xmm6[12],xmm2[13],xmm6[13],xmm2[14],xmm6[14],xmm2[15],xmm6[15]2652; GFNISSE-NEXT: pmullw %xmm7, %xmm22653; GFNISSE-NEXT: psrlw $8, %xmm22654; GFNISSE-NEXT: pmullw %xmm8, %xmm42655; GFNISSE-NEXT: psrlw $8, %xmm42656; GFNISSE-NEXT: packuswb %xmm2, %xmm42657; GFNISSE-NEXT: pmovzxbw {{.*#+}} xmm5 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero,xmm3[4],zero,xmm3[5],zero,xmm3[6],zero,xmm3[7],zero2658; GFNISSE-NEXT: punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm6[8],xmm3[9],xmm6[9],xmm3[10],xmm6[10],xmm3[11],xmm6[11],xmm3[12],xmm6[12],xmm3[13],xmm6[13],xmm3[14],xmm6[14],xmm3[15],xmm6[15]2659; GFNISSE-NEXT: pmullw %xmm7, %xmm32660; GFNISSE-NEXT: psrlw $8, %xmm32661; GFNISSE-NEXT: pmullw %xmm8, %xmm52662; GFNISSE-NEXT: psrlw $8, %xmm52663; GFNISSE-NEXT: packuswb %xmm3, %xmm52664; GFNISSE-NEXT: movdqa %xmm4, %xmm22665; GFNISSE-NEXT: movdqa %xmm5, %xmm32666; GFNISSE-NEXT: retq2667;2668; GFNIAVX1-LABEL: constant_lshr_v64i8:2669; GFNIAVX1: # %bb.0:2670; GFNIAVX1-NEXT: vextractf128 $1, %ymm0, %xmm22671; GFNIAVX1-NEXT: vpxor %xmm3, %xmm3, %xmm32672; GFNIAVX1-NEXT: vpunpckhbw {{.*#+}} xmm4 = xmm2[8],xmm3[8],xmm2[9],xmm3[9],xmm2[10],xmm3[10],xmm2[11],xmm3[11],xmm2[12],xmm3[12],xmm2[13],xmm3[13],xmm2[14],xmm3[14],xmm2[15],xmm3[15]2673; GFNIAVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [2,4,8,16,32,64,128,256]2674; GFNIAVX1-NEXT: vpmullw %xmm5, %xmm4, %xmm42675; GFNIAVX1-NEXT: vpsrlw $8, %xmm4, %xmm42676; GFNIAVX1-NEXT: vpmovzxbw {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero2677; GFNIAVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [256,128,64,32,16,8,4,2]2678; GFNIAVX1-NEXT: vpmullw %xmm6, %xmm2, %xmm22679; GFNIAVX1-NEXT: vpsrlw $8, %xmm2, %xmm22680; GFNIAVX1-NEXT: vpackuswb %xmm4, %xmm2, %xmm22681; GFNIAVX1-NEXT: vpunpckhbw {{.*#+}} xmm4 = xmm0[8],xmm3[8],xmm0[9],xmm3[9],xmm0[10],xmm3[10],xmm0[11],xmm3[11],xmm0[12],xmm3[12],xmm0[13],xmm3[13],xmm0[14],xmm3[14],xmm0[15],xmm3[15]2682; GFNIAVX1-NEXT: vpmullw %xmm5, %xmm4, %xmm42683; GFNIAVX1-NEXT: vpsrlw $8, %xmm4, %xmm42684; GFNIAVX1-NEXT: vpmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero2685; GFNIAVX1-NEXT: vpmullw %xmm6, %xmm0, %xmm02686; GFNIAVX1-NEXT: vpsrlw $8, %xmm0, %xmm02687; GFNIAVX1-NEXT: vpackuswb %xmm4, %xmm0, %xmm02688; GFNIAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm02689; GFNIAVX1-NEXT: vextractf128 $1, %ymm1, %xmm22690; GFNIAVX1-NEXT: vpunpckhbw {{.*#+}} xmm4 = xmm2[8],xmm3[8],xmm2[9],xmm3[9],xmm2[10],xmm3[10],xmm2[11],xmm3[11],xmm2[12],xmm3[12],xmm2[13],xmm3[13],xmm2[14],xmm3[14],xmm2[15],xmm3[15]2691; GFNIAVX1-NEXT: vpmullw %xmm5, %xmm4, %xmm42692; GFNIAVX1-NEXT: vpsrlw $8, %xmm4, %xmm42693; GFNIAVX1-NEXT: vpmovzxbw {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero2694; GFNIAVX1-NEXT: vpmullw %xmm6, %xmm2, %xmm22695; GFNIAVX1-NEXT: vpsrlw $8, %xmm2, %xmm22696; GFNIAVX1-NEXT: vpackuswb %xmm4, %xmm2, %xmm22697; GFNIAVX1-NEXT: vpunpckhbw {{.*#+}} xmm3 = xmm1[8],xmm3[8],xmm1[9],xmm3[9],xmm1[10],xmm3[10],xmm1[11],xmm3[11],xmm1[12],xmm3[12],xmm1[13],xmm3[13],xmm1[14],xmm3[14],xmm1[15],xmm3[15]2698; GFNIAVX1-NEXT: vpmullw %xmm5, %xmm3, %xmm32699; GFNIAVX1-NEXT: vpsrlw $8, %xmm3, %xmm32700; GFNIAVX1-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],zero2701; GFNIAVX1-NEXT: vpmullw %xmm6, %xmm1, %xmm12702; GFNIAVX1-NEXT: vpsrlw $8, %xmm1, %xmm12703; GFNIAVX1-NEXT: vpackuswb %xmm3, %xmm1, %xmm12704; GFNIAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm12705; GFNIAVX1-NEXT: retq2706;2707; GFNIAVX2-LABEL: constant_lshr_v64i8:2708; GFNIAVX2: # %bb.0:2709; GFNIAVX2-NEXT: vpxor %xmm2, %xmm2, %xmm22710; GFNIAVX2-NEXT: vpunpckhbw {{.*#+}} ymm3 = ymm0[8],ymm2[8],ymm0[9],ymm2[9],ymm0[10],ymm2[10],ymm0[11],ymm2[11],ymm0[12],ymm2[12],ymm0[13],ymm2[13],ymm0[14],ymm2[14],ymm0[15],ymm2[15],ymm0[24],ymm2[24],ymm0[25],ymm2[25],ymm0[26],ymm2[26],ymm0[27],ymm2[27],ymm0[28],ymm2[28],ymm0[29],ymm2[29],ymm0[30],ymm2[30],ymm0[31],ymm2[31]2711; GFNIAVX2-NEXT: vbroadcasti128 {{.*#+}} ymm4 = [2,4,8,16,32,64,128,256,2,4,8,16,32,64,128,256]2712; GFNIAVX2-NEXT: # ymm4 = mem[0,1,0,1]2713; GFNIAVX2-NEXT: vpmullw %ymm4, %ymm3, %ymm32714; GFNIAVX2-NEXT: vpsrlw $8, %ymm3, %ymm32715; GFNIAVX2-NEXT: vpunpcklbw {{.*#+}} ymm0 = ymm0[0],ymm2[0],ymm0[1],ymm2[1],ymm0[2],ymm2[2],ymm0[3],ymm2[3],ymm0[4],ymm2[4],ymm0[5],ymm2[5],ymm0[6],ymm2[6],ymm0[7],ymm2[7],ymm0[16],ymm2[16],ymm0[17],ymm2[17],ymm0[18],ymm2[18],ymm0[19],ymm2[19],ymm0[20],ymm2[20],ymm0[21],ymm2[21],ymm0[22],ymm2[22],ymm0[23],ymm2[23]2716; GFNIAVX2-NEXT: vbroadcasti128 {{.*#+}} ymm5 = [256,128,64,32,16,8,4,2,256,128,64,32,16,8,4,2]2717; GFNIAVX2-NEXT: # ymm5 = mem[0,1,0,1]2718; GFNIAVX2-NEXT: vpmullw %ymm5, %ymm0, %ymm02719; GFNIAVX2-NEXT: vpsrlw $8, %ymm0, %ymm02720; GFNIAVX2-NEXT: vpackuswb %ymm3, %ymm0, %ymm02721; GFNIAVX2-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]2722; GFNIAVX2-NEXT: vpmullw %ymm4, %ymm3, %ymm32723; GFNIAVX2-NEXT: vpsrlw $8, %ymm3, %ymm32724; GFNIAVX2-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]2725; GFNIAVX2-NEXT: vpmullw %ymm5, %ymm1, %ymm12726; GFNIAVX2-NEXT: vpsrlw $8, %ymm1, %ymm12727; GFNIAVX2-NEXT: vpackuswb %ymm3, %ymm1, %ymm12728; GFNIAVX2-NEXT: retq2729;2730; GFNIAVX512VL-LABEL: constant_lshr_v64i8:2731; GFNIAVX512VL: # %bb.0:2732; GFNIAVX512VL-NEXT: vextracti64x4 $1, %zmm0, %ymm12733; GFNIAVX512VL-NEXT: vpxor %xmm2, %xmm2, %xmm22734; GFNIAVX512VL-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]2735; GFNIAVX512VL-NEXT: vbroadcasti128 {{.*#+}} ymm4 = [2,4,8,16,32,64,128,256,2,4,8,16,32,64,128,256]2736; GFNIAVX512VL-NEXT: # ymm4 = mem[0,1,0,1]2737; GFNIAVX512VL-NEXT: vpmullw %ymm4, %ymm3, %ymm32738; GFNIAVX512VL-NEXT: vpsrlw $8, %ymm3, %ymm32739; GFNIAVX512VL-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]2740; GFNIAVX512VL-NEXT: vbroadcasti128 {{.*#+}} ymm5 = [256,128,64,32,16,8,4,2,256,128,64,32,16,8,4,2]2741; GFNIAVX512VL-NEXT: # ymm5 = mem[0,1,0,1]2742; GFNIAVX512VL-NEXT: vpmullw %ymm5, %ymm1, %ymm12743; GFNIAVX512VL-NEXT: vpsrlw $8, %ymm1, %ymm12744; GFNIAVX512VL-NEXT: vpackuswb %ymm3, %ymm1, %ymm12745; GFNIAVX512VL-NEXT: vpunpckhbw {{.*#+}} ymm3 = ymm0[8],ymm2[8],ymm0[9],ymm2[9],ymm0[10],ymm2[10],ymm0[11],ymm2[11],ymm0[12],ymm2[12],ymm0[13],ymm2[13],ymm0[14],ymm2[14],ymm0[15],ymm2[15],ymm0[24],ymm2[24],ymm0[25],ymm2[25],ymm0[26],ymm2[26],ymm0[27],ymm2[27],ymm0[28],ymm2[28],ymm0[29],ymm2[29],ymm0[30],ymm2[30],ymm0[31],ymm2[31]2746; GFNIAVX512VL-NEXT: vpmullw %ymm4, %ymm3, %ymm32747; GFNIAVX512VL-NEXT: vpsrlw $8, %ymm3, %ymm32748; GFNIAVX512VL-NEXT: vpunpcklbw {{.*#+}} ymm0 = ymm0[0],ymm2[0],ymm0[1],ymm2[1],ymm0[2],ymm2[2],ymm0[3],ymm2[3],ymm0[4],ymm2[4],ymm0[5],ymm2[5],ymm0[6],ymm2[6],ymm0[7],ymm2[7],ymm0[16],ymm2[16],ymm0[17],ymm2[17],ymm0[18],ymm2[18],ymm0[19],ymm2[19],ymm0[20],ymm2[20],ymm0[21],ymm2[21],ymm0[22],ymm2[22],ymm0[23],ymm2[23]2749; GFNIAVX512VL-NEXT: vpmullw %ymm5, %ymm0, %ymm02750; GFNIAVX512VL-NEXT: vpsrlw $8, %ymm0, %ymm02751; GFNIAVX512VL-NEXT: vpackuswb %ymm3, %ymm0, %ymm02752; GFNIAVX512VL-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm02753; GFNIAVX512VL-NEXT: retq2754;2755; GFNIAVX512BW-LABEL: constant_lshr_v64i8:2756; GFNIAVX512BW: # %bb.0:2757; GFNIAVX512BW-NEXT: vpxor %xmm1, %xmm1, %xmm12758; GFNIAVX512BW-NEXT: vpunpckhbw {{.*#+}} zmm2 = zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[12],zmm1[12],zmm0[13],zmm1[13],zmm0[14],zmm1[14],zmm0[15],zmm1[15],zmm0[24],zmm1[24],zmm0[25],zmm1[25],zmm0[26],zmm1[26],zmm0[27],zmm1[27],zmm0[28],zmm1[28],zmm0[29],zmm1[29],zmm0[30],zmm1[30],zmm0[31],zmm1[31],zmm0[40],zmm1[40],zmm0[41],zmm1[41],zmm0[42],zmm1[42],zmm0[43],zmm1[43],zmm0[44],zmm1[44],zmm0[45],zmm1[45],zmm0[46],zmm1[46],zmm0[47],zmm1[47],zmm0[56],zmm1[56],zmm0[57],zmm1[57],zmm0[58],zmm1[58],zmm0[59],zmm1[59],zmm0[60],zmm1[60],zmm0[61],zmm1[61],zmm0[62],zmm1[62],zmm0[63],zmm1[63]2759; GFNIAVX512BW-NEXT: vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm2, %zmm22760; GFNIAVX512BW-NEXT: vpsrlw $8, %zmm2, %zmm22761; GFNIAVX512BW-NEXT: vpunpcklbw {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[16],zmm1[16],zmm0[17],zmm1[17],zmm0[18],zmm1[18],zmm0[19],zmm1[19],zmm0[20],zmm1[20],zmm0[21],zmm1[21],zmm0[22],zmm1[22],zmm0[23],zmm1[23],zmm0[32],zmm1[32],zmm0[33],zmm1[33],zmm0[34],zmm1[34],zmm0[35],zmm1[35],zmm0[36],zmm1[36],zmm0[37],zmm1[37],zmm0[38],zmm1[38],zmm0[39],zmm1[39],zmm0[48],zmm1[48],zmm0[49],zmm1[49],zmm0[50],zmm1[50],zmm0[51],zmm1[51],zmm0[52],zmm1[52],zmm0[53],zmm1[53],zmm0[54],zmm1[54],zmm0[55],zmm1[55]2762; GFNIAVX512BW-NEXT: vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm02763; GFNIAVX512BW-NEXT: vpsrlw $8, %zmm0, %zmm02764; GFNIAVX512BW-NEXT: vpackuswb %zmm2, %zmm0, %zmm02765; GFNIAVX512BW-NEXT: retq2766 %shift = lshr <64 x i8> %a, <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>2767 ret <64 x i8> %shift2768}2769 2770define <64 x i8> @constant_ashr_v64i8(<64 x i8> %a) nounwind {2771; GFNISSE-LABEL: constant_ashr_v64i8:2772; GFNISSE: # %bb.0:2773; GFNISSE-NEXT: movdqa %xmm0, %xmm62774; 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]2775; GFNISSE-NEXT: psraw $8, %xmm62776; GFNISSE-NEXT: movdqa {{.*#+}} xmm4 = [2,4,8,16,32,64,128,256]2777; GFNISSE-NEXT: pmullw %xmm4, %xmm62778; GFNISSE-NEXT: psrlw $8, %xmm62779; GFNISSE-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2780; GFNISSE-NEXT: psraw $8, %xmm02781; GFNISSE-NEXT: movdqa {{.*#+}} xmm5 = [256,128,64,32,16,8,4,2]2782; GFNISSE-NEXT: pmullw %xmm5, %xmm02783; GFNISSE-NEXT: psrlw $8, %xmm02784; GFNISSE-NEXT: packuswb %xmm6, %xmm02785; GFNISSE-NEXT: movdqa %xmm1, %xmm62786; 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]2787; GFNISSE-NEXT: psraw $8, %xmm62788; GFNISSE-NEXT: pmullw %xmm4, %xmm62789; GFNISSE-NEXT: psrlw $8, %xmm62790; GFNISSE-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2791; GFNISSE-NEXT: psraw $8, %xmm12792; GFNISSE-NEXT: pmullw %xmm5, %xmm12793; GFNISSE-NEXT: psrlw $8, %xmm12794; GFNISSE-NEXT: packuswb %xmm6, %xmm12795; GFNISSE-NEXT: movdqa %xmm2, %xmm62796; 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]2797; GFNISSE-NEXT: psraw $8, %xmm62798; GFNISSE-NEXT: pmullw %xmm4, %xmm62799; GFNISSE-NEXT: psrlw $8, %xmm62800; GFNISSE-NEXT: punpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2801; GFNISSE-NEXT: psraw $8, %xmm22802; GFNISSE-NEXT: pmullw %xmm5, %xmm22803; GFNISSE-NEXT: psrlw $8, %xmm22804; GFNISSE-NEXT: packuswb %xmm6, %xmm22805; GFNISSE-NEXT: movdqa %xmm3, %xmm62806; 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]2807; GFNISSE-NEXT: psraw $8, %xmm62808; GFNISSE-NEXT: pmullw %xmm4, %xmm62809; GFNISSE-NEXT: psrlw $8, %xmm62810; GFNISSE-NEXT: punpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2811; GFNISSE-NEXT: psraw $8, %xmm32812; GFNISSE-NEXT: pmullw %xmm5, %xmm32813; GFNISSE-NEXT: psrlw $8, %xmm32814; GFNISSE-NEXT: packuswb %xmm6, %xmm32815; GFNISSE-NEXT: retq2816;2817; GFNIAVX1-LABEL: constant_ashr_v64i8:2818; GFNIAVX1: # %bb.0:2819; GFNIAVX1-NEXT: vextractf128 $1, %ymm0, %xmm32820; GFNIAVX1-NEXT: vpunpckhbw {{.*#+}} xmm2 = xmm3[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2821; GFNIAVX1-NEXT: vpsraw $8, %xmm2, %xmm42822; GFNIAVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [2,4,8,16,32,64,128,256]2823; GFNIAVX1-NEXT: vpmullw %xmm2, %xmm4, %xmm42824; GFNIAVX1-NEXT: vpsrlw $8, %xmm4, %xmm42825; GFNIAVX1-NEXT: vpunpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2826; GFNIAVX1-NEXT: vpsraw $8, %xmm3, %xmm52827; GFNIAVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [256,128,64,32,16,8,4,2]2828; GFNIAVX1-NEXT: vpmullw %xmm3, %xmm5, %xmm52829; GFNIAVX1-NEXT: vpsrlw $8, %xmm5, %xmm52830; GFNIAVX1-NEXT: vpackuswb %xmm4, %xmm5, %xmm42831; GFNIAVX1-NEXT: vpunpckhbw {{.*#+}} xmm5 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2832; GFNIAVX1-NEXT: vpsraw $8, %xmm5, %xmm52833; GFNIAVX1-NEXT: vpmullw %xmm2, %xmm5, %xmm52834; GFNIAVX1-NEXT: vpsrlw $8, %xmm5, %xmm52835; GFNIAVX1-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2836; GFNIAVX1-NEXT: vpsraw $8, %xmm0, %xmm02837; GFNIAVX1-NEXT: vpmullw %xmm3, %xmm0, %xmm02838; GFNIAVX1-NEXT: vpsrlw $8, %xmm0, %xmm02839; GFNIAVX1-NEXT: vpackuswb %xmm5, %xmm0, %xmm02840; GFNIAVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm02841; GFNIAVX1-NEXT: vextractf128 $1, %ymm1, %xmm42842; GFNIAVX1-NEXT: vpunpckhbw {{.*#+}} xmm5 = xmm4[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2843; GFNIAVX1-NEXT: vpsraw $8, %xmm5, %xmm52844; GFNIAVX1-NEXT: vpmullw %xmm2, %xmm5, %xmm52845; GFNIAVX1-NEXT: vpsrlw $8, %xmm5, %xmm52846; GFNIAVX1-NEXT: vpunpcklbw {{.*#+}} xmm4 = xmm4[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2847; GFNIAVX1-NEXT: vpsraw $8, %xmm4, %xmm42848; GFNIAVX1-NEXT: vpmullw %xmm3, %xmm4, %xmm42849; GFNIAVX1-NEXT: vpsrlw $8, %xmm4, %xmm42850; GFNIAVX1-NEXT: vpackuswb %xmm5, %xmm4, %xmm42851; GFNIAVX1-NEXT: vpunpckhbw {{.*#+}} xmm5 = xmm1[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2852; GFNIAVX1-NEXT: vpsraw $8, %xmm5, %xmm52853; GFNIAVX1-NEXT: vpmullw %xmm2, %xmm5, %xmm22854; GFNIAVX1-NEXT: vpsrlw $8, %xmm2, %xmm22855; GFNIAVX1-NEXT: vpunpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2856; GFNIAVX1-NEXT: vpsraw $8, %xmm1, %xmm12857; GFNIAVX1-NEXT: vpmullw %xmm3, %xmm1, %xmm12858; GFNIAVX1-NEXT: vpsrlw $8, %xmm1, %xmm12859; GFNIAVX1-NEXT: vpackuswb %xmm2, %xmm1, %xmm12860; GFNIAVX1-NEXT: vinsertf128 $1, %xmm4, %ymm1, %ymm12861; GFNIAVX1-NEXT: retq2862;2863; GFNIAVX2-LABEL: constant_ashr_v64i8:2864; GFNIAVX2: # %bb.0:2865; 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]2866; GFNIAVX2-NEXT: vpsraw $8, %ymm2, %ymm22867; GFNIAVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [2,4,8,16,32,64,128,256,2,4,8,16,32,64,128,256]2868; GFNIAVX2-NEXT: # ymm3 = mem[0,1,0,1]2869; GFNIAVX2-NEXT: vpmullw %ymm3, %ymm2, %ymm22870; GFNIAVX2-NEXT: vpsrlw $8, %ymm2, %ymm22871; 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]2872; GFNIAVX2-NEXT: vpsraw $8, %ymm0, %ymm02873; GFNIAVX2-NEXT: vbroadcasti128 {{.*#+}} ymm4 = [256,128,64,32,16,8,4,2,256,128,64,32,16,8,4,2]2874; GFNIAVX2-NEXT: # ymm4 = mem[0,1,0,1]2875; GFNIAVX2-NEXT: vpmullw %ymm4, %ymm0, %ymm02876; GFNIAVX2-NEXT: vpsrlw $8, %ymm0, %ymm02877; GFNIAVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm02878; 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]2879; GFNIAVX2-NEXT: vpsraw $8, %ymm2, %ymm22880; GFNIAVX2-NEXT: vpmullw %ymm3, %ymm2, %ymm22881; GFNIAVX2-NEXT: vpsrlw $8, %ymm2, %ymm22882; 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]2883; GFNIAVX2-NEXT: vpsraw $8, %ymm1, %ymm12884; GFNIAVX2-NEXT: vpmullw %ymm4, %ymm1, %ymm12885; GFNIAVX2-NEXT: vpsrlw $8, %ymm1, %ymm12886; GFNIAVX2-NEXT: vpackuswb %ymm2, %ymm1, %ymm12887; GFNIAVX2-NEXT: retq2888;2889; GFNIAVX512VL-LABEL: constant_ashr_v64i8:2890; GFNIAVX512VL: # %bb.0:2891; GFNIAVX512VL-NEXT: vextracti64x4 $1, %zmm0, %ymm12892; 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]2893; GFNIAVX512VL-NEXT: vpsraw $8, %ymm2, %ymm22894; GFNIAVX512VL-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [2,4,8,16,32,64,128,256,2,4,8,16,32,64,128,256]2895; GFNIAVX512VL-NEXT: # ymm3 = mem[0,1,0,1]2896; GFNIAVX512VL-NEXT: vpmullw %ymm3, %ymm2, %ymm22897; GFNIAVX512VL-NEXT: vpsrlw $8, %ymm2, %ymm22898; 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]2899; GFNIAVX512VL-NEXT: vpsraw $8, %ymm1, %ymm12900; GFNIAVX512VL-NEXT: vbroadcasti128 {{.*#+}} ymm4 = [256,128,64,32,16,8,4,2,256,128,64,32,16,8,4,2]2901; GFNIAVX512VL-NEXT: # ymm4 = mem[0,1,0,1]2902; GFNIAVX512VL-NEXT: vpmullw %ymm4, %ymm1, %ymm12903; GFNIAVX512VL-NEXT: vpsrlw $8, %ymm1, %ymm12904; GFNIAVX512VL-NEXT: vpackuswb %ymm2, %ymm1, %ymm12905; 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]2906; GFNIAVX512VL-NEXT: vpsraw $8, %ymm2, %ymm22907; GFNIAVX512VL-NEXT: vpmullw %ymm3, %ymm2, %ymm22908; GFNIAVX512VL-NEXT: vpsrlw $8, %ymm2, %ymm22909; 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]2910; GFNIAVX512VL-NEXT: vpsraw $8, %ymm0, %ymm02911; GFNIAVX512VL-NEXT: vpmullw %ymm4, %ymm0, %ymm02912; GFNIAVX512VL-NEXT: vpsrlw $8, %ymm0, %ymm02913; GFNIAVX512VL-NEXT: vpackuswb %ymm2, %ymm0, %ymm02914; GFNIAVX512VL-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm02915; GFNIAVX512VL-NEXT: retq2916;2917; GFNIAVX512BW-LABEL: constant_ashr_v64i8:2918; GFNIAVX512BW: # %bb.0:2919; 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]2920; GFNIAVX512BW-NEXT: vpsraw $8, %zmm1, %zmm12921; GFNIAVX512BW-NEXT: vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm12922; GFNIAVX512BW-NEXT: vpsrlw $8, %zmm1, %zmm12923; 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]2924; GFNIAVX512BW-NEXT: vpsraw $8, %zmm0, %zmm02925; GFNIAVX512BW-NEXT: vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm02926; GFNIAVX512BW-NEXT: vpsrlw $8, %zmm0, %zmm02927; GFNIAVX512BW-NEXT: vpackuswb %zmm1, %zmm0, %zmm02928; GFNIAVX512BW-NEXT: retq2929 %shift = ashr <64 x i8> %a, <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>2930 ret <64 x i8> %shift2931}2932 2933define <64 x i8> @splatconstant_shl_v64i8(<64 x i8> %a) nounwind {2934; GFNISSE-LABEL: splatconstant_shl_v64i8:2935; GFNISSE: # %bb.0:2936; GFNISSE-NEXT: pmovsxdq {{.*#+}} xmm4 = [66052,66052]2937; GFNISSE-NEXT: gf2p8affineqb $0, %xmm4, %xmm02938; GFNISSE-NEXT: gf2p8affineqb $0, %xmm4, %xmm12939; GFNISSE-NEXT: gf2p8affineqb $0, %xmm4, %xmm22940; GFNISSE-NEXT: gf2p8affineqb $0, %xmm4, %xmm32941; GFNISSE-NEXT: retq2942;2943; GFNIAVX1-LABEL: splatconstant_shl_v64i8:2944; GFNIAVX1: # %bb.0:2945; GFNIAVX1-NEXT: vbroadcastsd {{.*#+}} ymm2 = [4,2,1,0,0,0,0,0,4,2,1,0,0,0,0,0,4,2,1,0,0,0,0,0,4,2,1,0,0,0,0,0]2946; GFNIAVX1-NEXT: vgf2p8affineqb $0, %ymm2, %ymm0, %ymm02947; GFNIAVX1-NEXT: vgf2p8affineqb $0, %ymm2, %ymm1, %ymm12948; GFNIAVX1-NEXT: retq2949;2950; GFNIAVX2-LABEL: splatconstant_shl_v64i8:2951; GFNIAVX2: # %bb.0:2952; GFNIAVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [4,2,1,0,0,0,0,0,4,2,1,0,0,0,0,0,4,2,1,0,0,0,0,0,4,2,1,0,0,0,0,0]2953; GFNIAVX2-NEXT: vgf2p8affineqb $0, %ymm2, %ymm0, %ymm02954; GFNIAVX2-NEXT: vgf2p8affineqb $0, %ymm2, %ymm1, %ymm12955; GFNIAVX2-NEXT: retq2956;2957; GFNIAVX512-LABEL: splatconstant_shl_v64i8:2958; GFNIAVX512: # %bb.0:2959; GFNIAVX512-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm02960; GFNIAVX512-NEXT: retq2961 %shift = shl <64 x i8> %a, <i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5>2962 ret <64 x i8> %shift2963}2964 2965define <64 x i8> @splatconstant_lshr_v64i8(<64 x i8> %a) nounwind {2966; GFNISSE-LABEL: splatconstant_lshr_v64i8:2967; GFNISSE: # %bb.0:2968; GFNISSE-NEXT: movdqa {{.*#+}} xmm4 = [0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,128]2969; GFNISSE-NEXT: gf2p8affineqb $0, %xmm4, %xmm02970; GFNISSE-NEXT: gf2p8affineqb $0, %xmm4, %xmm12971; GFNISSE-NEXT: gf2p8affineqb $0, %xmm4, %xmm22972; GFNISSE-NEXT: gf2p8affineqb $0, %xmm4, %xmm32973; GFNISSE-NEXT: retq2974;2975; GFNIAVX1-LABEL: splatconstant_lshr_v64i8:2976; GFNIAVX1: # %bb.0:2977; GFNIAVX1-NEXT: vbroadcastsd {{.*#+}} ymm2 = [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]2978; GFNIAVX1-NEXT: vgf2p8affineqb $0, %ymm2, %ymm0, %ymm02979; GFNIAVX1-NEXT: vgf2p8affineqb $0, %ymm2, %ymm1, %ymm12980; GFNIAVX1-NEXT: retq2981;2982; GFNIAVX2-LABEL: splatconstant_lshr_v64i8:2983; GFNIAVX2: # %bb.0:2984; GFNIAVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [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]2985; GFNIAVX2-NEXT: vgf2p8affineqb $0, %ymm2, %ymm0, %ymm02986; GFNIAVX2-NEXT: vgf2p8affineqb $0, %ymm2, %ymm1, %ymm12987; GFNIAVX2-NEXT: retq2988;2989; GFNIAVX512-LABEL: splatconstant_lshr_v64i8:2990; GFNIAVX512: # %bb.0:2991; GFNIAVX512-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm02992; GFNIAVX512-NEXT: retq2993 %shift = lshr <64 x i8> %a, <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, 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, 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, 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>2994 ret <64 x i8> %shift2995}2996 2997define <64 x i8> @splatconstant_ashr_v64i8(<64 x i8> %a) nounwind {2998; GFNISSE-LABEL: splatconstant_ashr_v64i8:2999; GFNISSE: # %bb.0:3000; GFNISSE-NEXT: movdqa {{.*#+}} xmm4 = [128,128,64,32,16,8,4,2,128,128,64,32,16,8,4,2]3001; GFNISSE-NEXT: gf2p8affineqb $0, %xmm4, %xmm03002; GFNISSE-NEXT: gf2p8affineqb $0, %xmm4, %xmm13003; GFNISSE-NEXT: gf2p8affineqb $0, %xmm4, %xmm23004; GFNISSE-NEXT: gf2p8affineqb $0, %xmm4, %xmm33005; GFNISSE-NEXT: retq3006;3007; GFNIAVX1-LABEL: splatconstant_ashr_v64i8:3008; GFNIAVX1: # %bb.0:3009; GFNIAVX1-NEXT: vbroadcastsd {{.*#+}} ymm2 = [128,128,64,32,16,8,4,2,128,128,64,32,16,8,4,2,128,128,64,32,16,8,4,2,128,128,64,32,16,8,4,2]3010; GFNIAVX1-NEXT: vgf2p8affineqb $0, %ymm2, %ymm0, %ymm03011; GFNIAVX1-NEXT: vgf2p8affineqb $0, %ymm2, %ymm1, %ymm13012; GFNIAVX1-NEXT: retq3013;3014; GFNIAVX2-LABEL: splatconstant_ashr_v64i8:3015; GFNIAVX2: # %bb.0:3016; GFNIAVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [128,128,64,32,16,8,4,2,128,128,64,32,16,8,4,2,128,128,64,32,16,8,4,2,128,128,64,32,16,8,4,2]3017; GFNIAVX2-NEXT: vgf2p8affineqb $0, %ymm2, %ymm0, %ymm03018; GFNIAVX2-NEXT: vgf2p8affineqb $0, %ymm2, %ymm1, %ymm13019; GFNIAVX2-NEXT: retq3020;3021; GFNIAVX512-LABEL: splatconstant_ashr_v64i8:3022; GFNIAVX512: # %bb.0:3023; GFNIAVX512-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm03024; GFNIAVX512-NEXT: retq3025 %shift = ashr <64 x i8> %a, <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>3026 ret <64 x i8> %shift3027}3028;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:3029; GFNIAVX: {{.*}}3030