brintos

brintos / llvm-project-archived public Read only

0
0
Text · 28.0 KiB · f424483 Raw
591 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 8define <16 x i8> @testv16i8(<16 x i8> %in) nounwind {9; GFNISSE-LABEL: testv16i8:10; GFNISSE:       # %bb.0:11; GFNISSE-NEXT:    pcmpeqd %xmm1, %xmm112; GFNISSE-NEXT:    paddb %xmm0, %xmm113; GFNISSE-NEXT:    pandn %xmm1, %xmm014; GFNISSE-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]15; GFNISSE-NEXT:    pand %xmm0, %xmm216; GFNISSE-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]17; GFNISSE-NEXT:    movdqa %xmm1, %xmm318; GFNISSE-NEXT:    pshufb %xmm2, %xmm319; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm020; GFNISSE-NEXT:    pshufb %xmm0, %xmm121; GFNISSE-NEXT:    paddb %xmm3, %xmm122; GFNISSE-NEXT:    movdqa %xmm1, %xmm023; GFNISSE-NEXT:    retq24;25; GFNIAVX1OR2-LABEL: testv16i8:26; GFNIAVX1OR2:       # %bb.0:27; GFNIAVX1OR2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm128; GFNIAVX1OR2-NEXT:    vpaddb %xmm1, %xmm0, %xmm129; GFNIAVX1OR2-NEXT:    vpandn %xmm1, %xmm0, %xmm030; GFNIAVX1OR2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm131; GFNIAVX1OR2-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]32; GFNIAVX1OR2-NEXT:    vpshufb %xmm1, %xmm2, %xmm133; GFNIAVX1OR2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm034; GFNIAVX1OR2-NEXT:    vpshufb %xmm0, %xmm2, %xmm035; GFNIAVX1OR2-NEXT:    vpaddb %xmm1, %xmm0, %xmm036; GFNIAVX1OR2-NEXT:    retq37;38; GFNIAVX512-LABEL: testv16i8:39; GFNIAVX512:       # %bb.0:40; GFNIAVX512-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm141; GFNIAVX512-NEXT:    vpaddb %xmm1, %xmm0, %xmm142; GFNIAVX512-NEXT:    vpandn %xmm1, %xmm0, %xmm043; GFNIAVX512-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm144; GFNIAVX512-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]45; GFNIAVX512-NEXT:    vpshufb %xmm1, %xmm2, %xmm146; GFNIAVX512-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm047; GFNIAVX512-NEXT:    vpshufb %xmm0, %xmm2, %xmm048; GFNIAVX512-NEXT:    vpaddb %xmm1, %xmm0, %xmm049; GFNIAVX512-NEXT:    retq50  %out = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %in, i1 0)51  ret <16 x i8> %out52}53 54define <16 x i8> @testv16i8u(<16 x i8> %in) nounwind {55; GFNISSE-LABEL: testv16i8u:56; GFNISSE:       # %bb.0:57; GFNISSE-NEXT:    pcmpeqd %xmm1, %xmm158; GFNISSE-NEXT:    paddb %xmm0, %xmm159; GFNISSE-NEXT:    pandn %xmm1, %xmm060; GFNISSE-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]61; GFNISSE-NEXT:    pand %xmm0, %xmm262; GFNISSE-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]63; GFNISSE-NEXT:    movdqa %xmm1, %xmm364; GFNISSE-NEXT:    pshufb %xmm2, %xmm365; GFNISSE-NEXT:    gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm066; GFNISSE-NEXT:    pshufb %xmm0, %xmm167; GFNISSE-NEXT:    paddb %xmm3, %xmm168; GFNISSE-NEXT:    movdqa %xmm1, %xmm069; GFNISSE-NEXT:    retq70;71; GFNIAVX1OR2-LABEL: testv16i8u:72; GFNIAVX1OR2:       # %bb.0:73; GFNIAVX1OR2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm174; GFNIAVX1OR2-NEXT:    vpaddb %xmm1, %xmm0, %xmm175; GFNIAVX1OR2-NEXT:    vpandn %xmm1, %xmm0, %xmm076; GFNIAVX1OR2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm177; GFNIAVX1OR2-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]78; GFNIAVX1OR2-NEXT:    vpshufb %xmm1, %xmm2, %xmm179; GFNIAVX1OR2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm080; GFNIAVX1OR2-NEXT:    vpshufb %xmm0, %xmm2, %xmm081; GFNIAVX1OR2-NEXT:    vpaddb %xmm1, %xmm0, %xmm082; GFNIAVX1OR2-NEXT:    retq83;84; GFNIAVX512-LABEL: testv16i8u:85; GFNIAVX512:       # %bb.0:86; GFNIAVX512-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm187; GFNIAVX512-NEXT:    vpaddb %xmm1, %xmm0, %xmm188; GFNIAVX512-NEXT:    vpandn %xmm1, %xmm0, %xmm089; GFNIAVX512-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm190; GFNIAVX512-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]91; GFNIAVX512-NEXT:    vpshufb %xmm1, %xmm2, %xmm192; GFNIAVX512-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm093; GFNIAVX512-NEXT:    vpshufb %xmm0, %xmm2, %xmm094; GFNIAVX512-NEXT:    vpaddb %xmm1, %xmm0, %xmm095; GFNIAVX512-NEXT:    retq96  %out = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %in, i1 -1)97  ret <16 x i8> %out98}99 100define <32 x i8> @testv32i8(<32 x i8> %in) nounwind {101; GFNISSE-LABEL: testv32i8:102; GFNISSE:       # %bb.0:103; GFNISSE-NEXT:    pcmpeqd %xmm4, %xmm4104; GFNISSE-NEXT:    movdqa %xmm0, %xmm2105; GFNISSE-NEXT:    paddb %xmm4, %xmm2106; GFNISSE-NEXT:    pandn %xmm2, %xmm0107; GFNISSE-NEXT:    movdqa {{.*#+}} xmm5 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]108; GFNISSE-NEXT:    movdqa %xmm0, %xmm3109; GFNISSE-NEXT:    pand %xmm5, %xmm3110; GFNISSE-NEXT:    movdqa {{.*#+}} xmm2 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]111; GFNISSE-NEXT:    movdqa %xmm2, %xmm6112; GFNISSE-NEXT:    pshufb %xmm3, %xmm6113; GFNISSE-NEXT:    movdqa {{.*#+}} xmm7 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]114; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm7, %xmm0115; GFNISSE-NEXT:    movdqa %xmm2, %xmm3116; GFNISSE-NEXT:    pshufb %xmm0, %xmm3117; GFNISSE-NEXT:    paddb %xmm6, %xmm3118; GFNISSE-NEXT:    paddb %xmm1, %xmm4119; GFNISSE-NEXT:    pandn %xmm4, %xmm1120; GFNISSE-NEXT:    pand %xmm1, %xmm5121; GFNISSE-NEXT:    movdqa %xmm2, %xmm0122; GFNISSE-NEXT:    pshufb %xmm5, %xmm0123; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm7, %xmm1124; GFNISSE-NEXT:    pshufb %xmm1, %xmm2125; GFNISSE-NEXT:    paddb %xmm0, %xmm2126; GFNISSE-NEXT:    movdqa %xmm3, %xmm0127; GFNISSE-NEXT:    movdqa %xmm2, %xmm1128; GFNISSE-NEXT:    retq129;130; GFNIAVX1-LABEL: testv32i8:131; GFNIAVX1:       # %bb.0:132; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1133; GFNIAVX1-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2134; GFNIAVX1-NEXT:    vpaddb %xmm2, %xmm1, %xmm3135; GFNIAVX1-NEXT:    vpandn %xmm3, %xmm1, %xmm1136; GFNIAVX1-NEXT:    vbroadcastss {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]137; GFNIAVX1-NEXT:    vpand %xmm3, %xmm1, %xmm4138; GFNIAVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]139; GFNIAVX1-NEXT:    vpshufb %xmm4, %xmm5, %xmm4140; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm6 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]141; GFNIAVX1-NEXT:    # xmm6 = mem[0,0]142; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm6, %xmm1, %xmm1143; GFNIAVX1-NEXT:    vpshufb %xmm1, %xmm5, %xmm1144; GFNIAVX1-NEXT:    vpaddb %xmm4, %xmm1, %xmm1145; GFNIAVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm2146; GFNIAVX1-NEXT:    vpandn %xmm2, %xmm0, %xmm0147; GFNIAVX1-NEXT:    vpand %xmm3, %xmm0, %xmm2148; GFNIAVX1-NEXT:    vpshufb %xmm2, %xmm5, %xmm2149; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm6, %xmm0, %xmm0150; GFNIAVX1-NEXT:    vpshufb %xmm0, %xmm5, %xmm0151; GFNIAVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0152; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0153; GFNIAVX1-NEXT:    retq154;155; GFNIAVX2-LABEL: testv32i8:156; GFNIAVX2:       # %bb.0:157; GFNIAVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1158; GFNIAVX2-NEXT:    vpaddb %ymm1, %ymm0, %ymm1159; GFNIAVX2-NEXT:    vpandn %ymm1, %ymm0, %ymm0160; GFNIAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1161; GFNIAVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm2 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]162; GFNIAVX2-NEXT:    # ymm2 = mem[0,1,0,1]163; GFNIAVX2-NEXT:    vpshufb %ymm1, %ymm2, %ymm1164; GFNIAVX2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0165; GFNIAVX2-NEXT:    vpshufb %ymm0, %ymm2, %ymm0166; GFNIAVX2-NEXT:    vpaddb %ymm1, %ymm0, %ymm0167; GFNIAVX2-NEXT:    retq168;169; GFNIAVX512-LABEL: testv32i8:170; GFNIAVX512:       # %bb.0:171; GFNIAVX512-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1172; GFNIAVX512-NEXT:    vpaddb %ymm1, %ymm0, %ymm1173; GFNIAVX512-NEXT:    vpandn %ymm1, %ymm0, %ymm0174; GFNIAVX512-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm1175; GFNIAVX512-NEXT:    vbroadcasti128 {{.*#+}} ymm2 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]176; GFNIAVX512-NEXT:    # ymm2 = mem[0,1,0,1]177; GFNIAVX512-NEXT:    vpshufb %ymm1, %ymm2, %ymm1178; GFNIAVX512-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm0179; GFNIAVX512-NEXT:    vpshufb %ymm0, %ymm2, %ymm0180; GFNIAVX512-NEXT:    vpaddb %ymm1, %ymm0, %ymm0181; GFNIAVX512-NEXT:    retq182  %out = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %in, i1 0)183  ret <32 x i8> %out184}185 186define <32 x i8> @testv32i8u(<32 x i8> %in) nounwind {187; GFNISSE-LABEL: testv32i8u:188; GFNISSE:       # %bb.0:189; GFNISSE-NEXT:    pcmpeqd %xmm4, %xmm4190; GFNISSE-NEXT:    movdqa %xmm0, %xmm2191; GFNISSE-NEXT:    paddb %xmm4, %xmm2192; GFNISSE-NEXT:    pandn %xmm2, %xmm0193; GFNISSE-NEXT:    movdqa {{.*#+}} xmm5 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]194; GFNISSE-NEXT:    movdqa %xmm0, %xmm3195; GFNISSE-NEXT:    pand %xmm5, %xmm3196; GFNISSE-NEXT:    movdqa {{.*#+}} xmm2 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]197; GFNISSE-NEXT:    movdqa %xmm2, %xmm6198; GFNISSE-NEXT:    pshufb %xmm3, %xmm6199; GFNISSE-NEXT:    movdqa {{.*#+}} xmm7 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]200; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm7, %xmm0201; GFNISSE-NEXT:    movdqa %xmm2, %xmm3202; GFNISSE-NEXT:    pshufb %xmm0, %xmm3203; GFNISSE-NEXT:    paddb %xmm6, %xmm3204; GFNISSE-NEXT:    paddb %xmm1, %xmm4205; GFNISSE-NEXT:    pandn %xmm4, %xmm1206; GFNISSE-NEXT:    pand %xmm1, %xmm5207; GFNISSE-NEXT:    movdqa %xmm2, %xmm0208; GFNISSE-NEXT:    pshufb %xmm5, %xmm0209; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm7, %xmm1210; GFNISSE-NEXT:    pshufb %xmm1, %xmm2211; GFNISSE-NEXT:    paddb %xmm0, %xmm2212; GFNISSE-NEXT:    movdqa %xmm3, %xmm0213; GFNISSE-NEXT:    movdqa %xmm2, %xmm1214; GFNISSE-NEXT:    retq215;216; GFNIAVX1-LABEL: testv32i8u:217; GFNIAVX1:       # %bb.0:218; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1219; GFNIAVX1-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2220; GFNIAVX1-NEXT:    vpaddb %xmm2, %xmm1, %xmm3221; GFNIAVX1-NEXT:    vpandn %xmm3, %xmm1, %xmm1222; GFNIAVX1-NEXT:    vbroadcastss {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]223; GFNIAVX1-NEXT:    vpand %xmm3, %xmm1, %xmm4224; GFNIAVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]225; GFNIAVX1-NEXT:    vpshufb %xmm4, %xmm5, %xmm4226; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm6 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]227; GFNIAVX1-NEXT:    # xmm6 = mem[0,0]228; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm6, %xmm1, %xmm1229; GFNIAVX1-NEXT:    vpshufb %xmm1, %xmm5, %xmm1230; GFNIAVX1-NEXT:    vpaddb %xmm4, %xmm1, %xmm1231; GFNIAVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm2232; GFNIAVX1-NEXT:    vpandn %xmm2, %xmm0, %xmm0233; GFNIAVX1-NEXT:    vpand %xmm3, %xmm0, %xmm2234; GFNIAVX1-NEXT:    vpshufb %xmm2, %xmm5, %xmm2235; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm6, %xmm0, %xmm0236; GFNIAVX1-NEXT:    vpshufb %xmm0, %xmm5, %xmm0237; GFNIAVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0238; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0239; GFNIAVX1-NEXT:    retq240;241; GFNIAVX2-LABEL: testv32i8u:242; GFNIAVX2:       # %bb.0:243; GFNIAVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1244; GFNIAVX2-NEXT:    vpaddb %ymm1, %ymm0, %ymm1245; GFNIAVX2-NEXT:    vpandn %ymm1, %ymm0, %ymm0246; GFNIAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1247; GFNIAVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm2 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]248; GFNIAVX2-NEXT:    # ymm2 = mem[0,1,0,1]249; GFNIAVX2-NEXT:    vpshufb %ymm1, %ymm2, %ymm1250; GFNIAVX2-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0251; GFNIAVX2-NEXT:    vpshufb %ymm0, %ymm2, %ymm0252; GFNIAVX2-NEXT:    vpaddb %ymm1, %ymm0, %ymm0253; GFNIAVX2-NEXT:    retq254;255; GFNIAVX512-LABEL: testv32i8u:256; GFNIAVX512:       # %bb.0:257; GFNIAVX512-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1258; GFNIAVX512-NEXT:    vpaddb %ymm1, %ymm0, %ymm1259; GFNIAVX512-NEXT:    vpandn %ymm1, %ymm0, %ymm0260; GFNIAVX512-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm1261; GFNIAVX512-NEXT:    vbroadcasti128 {{.*#+}} ymm2 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]262; GFNIAVX512-NEXT:    # ymm2 = mem[0,1,0,1]263; GFNIAVX512-NEXT:    vpshufb %ymm1, %ymm2, %ymm1264; GFNIAVX512-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm0265; GFNIAVX512-NEXT:    vpshufb %ymm0, %ymm2, %ymm0266; GFNIAVX512-NEXT:    vpaddb %ymm1, %ymm0, %ymm0267; GFNIAVX512-NEXT:    retq268  %out = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %in, i1 -1)269  ret <32 x i8> %out270}271 272define <64 x i8> @testv64i8(<64 x i8> %in) nounwind {273; GFNISSE-LABEL: testv64i8:274; GFNISSE:       # %bb.0:275; GFNISSE-NEXT:    movdqa %xmm1, %xmm5276; GFNISSE-NEXT:    movdqa %xmm0, %xmm1277; GFNISSE-NEXT:    pcmpeqd %xmm6, %xmm6278; GFNISSE-NEXT:    paddb %xmm6, %xmm0279; GFNISSE-NEXT:    pandn %xmm0, %xmm1280; GFNISSE-NEXT:    movdqa {{.*#+}} xmm7 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]281; GFNISSE-NEXT:    movdqa %xmm1, %xmm0282; GFNISSE-NEXT:    pand %xmm7, %xmm0283; GFNISSE-NEXT:    movdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]284; GFNISSE-NEXT:    movdqa %xmm4, %xmm9285; GFNISSE-NEXT:    pshufb %xmm0, %xmm9286; GFNISSE-NEXT:    movdqa {{.*#+}} xmm8 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]287; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm8, %xmm1288; GFNISSE-NEXT:    movdqa %xmm4, %xmm0289; GFNISSE-NEXT:    pshufb %xmm1, %xmm0290; GFNISSE-NEXT:    paddb %xmm9, %xmm0291; GFNISSE-NEXT:    movdqa %xmm5, %xmm1292; GFNISSE-NEXT:    paddb %xmm6, %xmm1293; GFNISSE-NEXT:    pandn %xmm1, %xmm5294; GFNISSE-NEXT:    movdqa %xmm5, %xmm1295; GFNISSE-NEXT:    pand %xmm7, %xmm1296; GFNISSE-NEXT:    movdqa %xmm4, %xmm9297; GFNISSE-NEXT:    pshufb %xmm1, %xmm9298; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm8, %xmm5299; GFNISSE-NEXT:    movdqa %xmm4, %xmm1300; GFNISSE-NEXT:    pshufb %xmm5, %xmm1301; GFNISSE-NEXT:    paddb %xmm9, %xmm1302; GFNISSE-NEXT:    movdqa %xmm2, %xmm5303; GFNISSE-NEXT:    paddb %xmm6, %xmm5304; GFNISSE-NEXT:    pandn %xmm5, %xmm2305; GFNISSE-NEXT:    movdqa %xmm2, %xmm5306; GFNISSE-NEXT:    pand %xmm7, %xmm5307; GFNISSE-NEXT:    movdqa %xmm4, %xmm9308; GFNISSE-NEXT:    pshufb %xmm5, %xmm9309; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm8, %xmm2310; GFNISSE-NEXT:    movdqa %xmm4, %xmm5311; GFNISSE-NEXT:    pshufb %xmm2, %xmm5312; GFNISSE-NEXT:    paddb %xmm9, %xmm5313; GFNISSE-NEXT:    paddb %xmm3, %xmm6314; GFNISSE-NEXT:    pandn %xmm6, %xmm3315; GFNISSE-NEXT:    pand %xmm3, %xmm7316; GFNISSE-NEXT:    movdqa %xmm4, %xmm2317; GFNISSE-NEXT:    pshufb %xmm7, %xmm2318; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm8, %xmm3319; GFNISSE-NEXT:    pshufb %xmm3, %xmm4320; GFNISSE-NEXT:    paddb %xmm2, %xmm4321; GFNISSE-NEXT:    movdqa %xmm5, %xmm2322; GFNISSE-NEXT:    movdqa %xmm4, %xmm3323; GFNISSE-NEXT:    retq324;325; GFNIAVX1-LABEL: testv64i8:326; GFNIAVX1:       # %bb.0:327; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2328; GFNIAVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3329; GFNIAVX1-NEXT:    vpaddb %xmm3, %xmm2, %xmm4330; GFNIAVX1-NEXT:    vpandn %xmm4, %xmm2, %xmm2331; GFNIAVX1-NEXT:    vbroadcastss {{.*#+}} xmm4 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]332; GFNIAVX1-NEXT:    vpand %xmm4, %xmm2, %xmm5333; GFNIAVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]334; GFNIAVX1-NEXT:    vpshufb %xmm5, %xmm6, %xmm5335; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm7 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]336; GFNIAVX1-NEXT:    # xmm7 = mem[0,0]337; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm7, %xmm2, %xmm2338; GFNIAVX1-NEXT:    vpshufb %xmm2, %xmm6, %xmm2339; GFNIAVX1-NEXT:    vpaddb %xmm5, %xmm2, %xmm2340; GFNIAVX1-NEXT:    vpaddb %xmm3, %xmm0, %xmm5341; GFNIAVX1-NEXT:    vpandn %xmm5, %xmm0, %xmm0342; GFNIAVX1-NEXT:    vpand %xmm4, %xmm0, %xmm5343; GFNIAVX1-NEXT:    vpshufb %xmm5, %xmm6, %xmm5344; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm7, %xmm0, %xmm0345; GFNIAVX1-NEXT:    vpshufb %xmm0, %xmm6, %xmm0346; GFNIAVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0347; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0348; GFNIAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2349; GFNIAVX1-NEXT:    vpaddb %xmm3, %xmm2, %xmm5350; GFNIAVX1-NEXT:    vpandn %xmm5, %xmm2, %xmm2351; GFNIAVX1-NEXT:    vpand %xmm4, %xmm2, %xmm5352; GFNIAVX1-NEXT:    vpshufb %xmm5, %xmm6, %xmm5353; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm7, %xmm2, %xmm2354; GFNIAVX1-NEXT:    vpshufb %xmm2, %xmm6, %xmm2355; GFNIAVX1-NEXT:    vpaddb %xmm5, %xmm2, %xmm2356; GFNIAVX1-NEXT:    vpaddb %xmm3, %xmm1, %xmm3357; GFNIAVX1-NEXT:    vpandn %xmm3, %xmm1, %xmm1358; GFNIAVX1-NEXT:    vpand %xmm4, %xmm1, %xmm3359; GFNIAVX1-NEXT:    vpshufb %xmm3, %xmm6, %xmm3360; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm7, %xmm1, %xmm1361; GFNIAVX1-NEXT:    vpshufb %xmm1, %xmm6, %xmm1362; GFNIAVX1-NEXT:    vpaddb %xmm3, %xmm1, %xmm1363; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1364; GFNIAVX1-NEXT:    retq365;366; GFNIAVX2-LABEL: testv64i8:367; GFNIAVX2:       # %bb.0:368; GFNIAVX2-NEXT:    vpcmpeqd %ymm2, %ymm2, %ymm2369; GFNIAVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm3370; GFNIAVX2-NEXT:    vpandn %ymm3, %ymm0, %ymm0371; GFNIAVX2-NEXT:    vpbroadcastb {{.*#+}} ymm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]372; GFNIAVX2-NEXT:    vpand %ymm3, %ymm0, %ymm4373; GFNIAVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm5 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]374; GFNIAVX2-NEXT:    # ymm5 = mem[0,1,0,1]375; GFNIAVX2-NEXT:    vpshufb %ymm4, %ymm5, %ymm4376; GFNIAVX2-NEXT:    vpbroadcastq {{.*#+}} ymm6 = [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]377; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm6, %ymm0, %ymm0378; GFNIAVX2-NEXT:    vpshufb %ymm0, %ymm5, %ymm0379; GFNIAVX2-NEXT:    vpaddb %ymm4, %ymm0, %ymm0380; GFNIAVX2-NEXT:    vpaddb %ymm2, %ymm1, %ymm2381; GFNIAVX2-NEXT:    vpandn %ymm2, %ymm1, %ymm1382; GFNIAVX2-NEXT:    vpand %ymm3, %ymm1, %ymm2383; GFNIAVX2-NEXT:    vpshufb %ymm2, %ymm5, %ymm2384; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm6, %ymm1, %ymm1385; GFNIAVX2-NEXT:    vpshufb %ymm1, %ymm5, %ymm1386; GFNIAVX2-NEXT:    vpaddb %ymm2, %ymm1, %ymm1387; GFNIAVX2-NEXT:    retq388;389; GFNIAVX512VL-LABEL: testv64i8:390; GFNIAVX512VL:       # %bb.0:391; GFNIAVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm1392; GFNIAVX512VL-NEXT:    vpcmpeqd %ymm2, %ymm2, %ymm2393; GFNIAVX512VL-NEXT:    vpaddb %ymm2, %ymm1, %ymm3394; GFNIAVX512VL-NEXT:    vpandn %ymm3, %ymm1, %ymm1395; GFNIAVX512VL-NEXT:    vpbroadcastd {{.*#+}} ymm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]396; GFNIAVX512VL-NEXT:    vpand %ymm3, %ymm1, %ymm4397; GFNIAVX512VL-NEXT:    vbroadcasti128 {{.*#+}} ymm5 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]398; GFNIAVX512VL-NEXT:    # ymm5 = mem[0,1,0,1]399; GFNIAVX512VL-NEXT:    vpshufb %ymm4, %ymm5, %ymm4400; GFNIAVX512VL-NEXT:    vpbroadcastq {{.*#+}} ymm6 = [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]401; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm6, %ymm1, %ymm1402; GFNIAVX512VL-NEXT:    vpshufb %ymm1, %ymm5, %ymm1403; GFNIAVX512VL-NEXT:    vpaddb %ymm4, %ymm1, %ymm1404; GFNIAVX512VL-NEXT:    vpaddb %ymm2, %ymm0, %ymm2405; GFNIAVX512VL-NEXT:    vpandn %ymm2, %ymm0, %ymm0406; GFNIAVX512VL-NEXT:    vpand %ymm3, %ymm0, %ymm2407; GFNIAVX512VL-NEXT:    vpshufb %ymm2, %ymm5, %ymm2408; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm6, %ymm0, %ymm0409; GFNIAVX512VL-NEXT:    vpshufb %ymm0, %ymm5, %ymm0410; GFNIAVX512VL-NEXT:    vpaddb %ymm2, %ymm0, %ymm0411; GFNIAVX512VL-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0412; GFNIAVX512VL-NEXT:    retq413;414; GFNIAVX512BW-LABEL: testv64i8:415; GFNIAVX512BW:       # %bb.0:416; GFNIAVX512BW-NEXT:    vpternlogd {{.*#+}} zmm1 = -1417; GFNIAVX512BW-NEXT:    vpaddb %zmm1, %zmm0, %zmm1418; GFNIAVX512BW-NEXT:    vpandnq %zmm1, %zmm0, %zmm0419; GFNIAVX512BW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm1420; GFNIAVX512BW-NEXT:    vbroadcasti32x4 {{.*#+}} zmm2 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]421; GFNIAVX512BW-NEXT:    # zmm2 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]422; GFNIAVX512BW-NEXT:    vpshufb %zmm1, %zmm2, %zmm1423; GFNIAVX512BW-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0424; GFNIAVX512BW-NEXT:    vpshufb %zmm0, %zmm2, %zmm0425; GFNIAVX512BW-NEXT:    vpaddb %zmm1, %zmm0, %zmm0426; GFNIAVX512BW-NEXT:    retq427  %out = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %in, i1 0)428  ret <64 x i8> %out429}430 431define <64 x i8> @testv64i8u(<64 x i8> %in) nounwind {432; GFNISSE-LABEL: testv64i8u:433; GFNISSE:       # %bb.0:434; GFNISSE-NEXT:    movdqa %xmm1, %xmm5435; GFNISSE-NEXT:    movdqa %xmm0, %xmm1436; GFNISSE-NEXT:    pcmpeqd %xmm6, %xmm6437; GFNISSE-NEXT:    paddb %xmm6, %xmm0438; GFNISSE-NEXT:    pandn %xmm0, %xmm1439; GFNISSE-NEXT:    movdqa {{.*#+}} xmm7 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]440; GFNISSE-NEXT:    movdqa %xmm1, %xmm0441; GFNISSE-NEXT:    pand %xmm7, %xmm0442; GFNISSE-NEXT:    movdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]443; GFNISSE-NEXT:    movdqa %xmm4, %xmm9444; GFNISSE-NEXT:    pshufb %xmm0, %xmm9445; GFNISSE-NEXT:    movdqa {{.*#+}} xmm8 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]446; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm8, %xmm1447; GFNISSE-NEXT:    movdqa %xmm4, %xmm0448; GFNISSE-NEXT:    pshufb %xmm1, %xmm0449; GFNISSE-NEXT:    paddb %xmm9, %xmm0450; GFNISSE-NEXT:    movdqa %xmm5, %xmm1451; GFNISSE-NEXT:    paddb %xmm6, %xmm1452; GFNISSE-NEXT:    pandn %xmm1, %xmm5453; GFNISSE-NEXT:    movdqa %xmm5, %xmm1454; GFNISSE-NEXT:    pand %xmm7, %xmm1455; GFNISSE-NEXT:    movdqa %xmm4, %xmm9456; GFNISSE-NEXT:    pshufb %xmm1, %xmm9457; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm8, %xmm5458; GFNISSE-NEXT:    movdqa %xmm4, %xmm1459; GFNISSE-NEXT:    pshufb %xmm5, %xmm1460; GFNISSE-NEXT:    paddb %xmm9, %xmm1461; GFNISSE-NEXT:    movdqa %xmm2, %xmm5462; GFNISSE-NEXT:    paddb %xmm6, %xmm5463; GFNISSE-NEXT:    pandn %xmm5, %xmm2464; GFNISSE-NEXT:    movdqa %xmm2, %xmm5465; GFNISSE-NEXT:    pand %xmm7, %xmm5466; GFNISSE-NEXT:    movdqa %xmm4, %xmm9467; GFNISSE-NEXT:    pshufb %xmm5, %xmm9468; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm8, %xmm2469; GFNISSE-NEXT:    movdqa %xmm4, %xmm5470; GFNISSE-NEXT:    pshufb %xmm2, %xmm5471; GFNISSE-NEXT:    paddb %xmm9, %xmm5472; GFNISSE-NEXT:    paddb %xmm3, %xmm6473; GFNISSE-NEXT:    pandn %xmm6, %xmm3474; GFNISSE-NEXT:    pand %xmm3, %xmm7475; GFNISSE-NEXT:    movdqa %xmm4, %xmm2476; GFNISSE-NEXT:    pshufb %xmm7, %xmm2477; GFNISSE-NEXT:    gf2p8affineqb $0, %xmm8, %xmm3478; GFNISSE-NEXT:    pshufb %xmm3, %xmm4479; GFNISSE-NEXT:    paddb %xmm2, %xmm4480; GFNISSE-NEXT:    movdqa %xmm5, %xmm2481; GFNISSE-NEXT:    movdqa %xmm4, %xmm3482; GFNISSE-NEXT:    retq483;484; GFNIAVX1-LABEL: testv64i8u:485; GFNIAVX1:       # %bb.0:486; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2487; GFNIAVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3488; GFNIAVX1-NEXT:    vpaddb %xmm3, %xmm2, %xmm4489; GFNIAVX1-NEXT:    vpandn %xmm4, %xmm2, %xmm2490; GFNIAVX1-NEXT:    vbroadcastss {{.*#+}} xmm4 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]491; GFNIAVX1-NEXT:    vpand %xmm4, %xmm2, %xmm5492; GFNIAVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]493; GFNIAVX1-NEXT:    vpshufb %xmm5, %xmm6, %xmm5494; GFNIAVX1-NEXT:    vmovddup {{.*#+}} xmm7 = [0,0,0,0,128,64,32,16,0,0,0,0,128,64,32,16]495; GFNIAVX1-NEXT:    # xmm7 = mem[0,0]496; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm7, %xmm2, %xmm2497; GFNIAVX1-NEXT:    vpshufb %xmm2, %xmm6, %xmm2498; GFNIAVX1-NEXT:    vpaddb %xmm5, %xmm2, %xmm2499; GFNIAVX1-NEXT:    vpaddb %xmm3, %xmm0, %xmm5500; GFNIAVX1-NEXT:    vpandn %xmm5, %xmm0, %xmm0501; GFNIAVX1-NEXT:    vpand %xmm4, %xmm0, %xmm5502; GFNIAVX1-NEXT:    vpshufb %xmm5, %xmm6, %xmm5503; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm7, %xmm0, %xmm0504; GFNIAVX1-NEXT:    vpshufb %xmm0, %xmm6, %xmm0505; GFNIAVX1-NEXT:    vpaddb %xmm5, %xmm0, %xmm0506; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0507; GFNIAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2508; GFNIAVX1-NEXT:    vpaddb %xmm3, %xmm2, %xmm5509; GFNIAVX1-NEXT:    vpandn %xmm5, %xmm2, %xmm2510; GFNIAVX1-NEXT:    vpand %xmm4, %xmm2, %xmm5511; GFNIAVX1-NEXT:    vpshufb %xmm5, %xmm6, %xmm5512; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm7, %xmm2, %xmm2513; GFNIAVX1-NEXT:    vpshufb %xmm2, %xmm6, %xmm2514; GFNIAVX1-NEXT:    vpaddb %xmm5, %xmm2, %xmm2515; GFNIAVX1-NEXT:    vpaddb %xmm3, %xmm1, %xmm3516; GFNIAVX1-NEXT:    vpandn %xmm3, %xmm1, %xmm1517; GFNIAVX1-NEXT:    vpand %xmm4, %xmm1, %xmm3518; GFNIAVX1-NEXT:    vpshufb %xmm3, %xmm6, %xmm3519; GFNIAVX1-NEXT:    vgf2p8affineqb $0, %xmm7, %xmm1, %xmm1520; GFNIAVX1-NEXT:    vpshufb %xmm1, %xmm6, %xmm1521; GFNIAVX1-NEXT:    vpaddb %xmm3, %xmm1, %xmm1522; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1523; GFNIAVX1-NEXT:    retq524;525; GFNIAVX2-LABEL: testv64i8u:526; GFNIAVX2:       # %bb.0:527; GFNIAVX2-NEXT:    vpcmpeqd %ymm2, %ymm2, %ymm2528; GFNIAVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm3529; GFNIAVX2-NEXT:    vpandn %ymm3, %ymm0, %ymm0530; GFNIAVX2-NEXT:    vpbroadcastb {{.*#+}} ymm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]531; GFNIAVX2-NEXT:    vpand %ymm3, %ymm0, %ymm4532; GFNIAVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm5 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]533; GFNIAVX2-NEXT:    # ymm5 = mem[0,1,0,1]534; GFNIAVX2-NEXT:    vpshufb %ymm4, %ymm5, %ymm4535; GFNIAVX2-NEXT:    vpbroadcastq {{.*#+}} ymm6 = [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]536; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm6, %ymm0, %ymm0537; GFNIAVX2-NEXT:    vpshufb %ymm0, %ymm5, %ymm0538; GFNIAVX2-NEXT:    vpaddb %ymm4, %ymm0, %ymm0539; GFNIAVX2-NEXT:    vpaddb %ymm2, %ymm1, %ymm2540; GFNIAVX2-NEXT:    vpandn %ymm2, %ymm1, %ymm1541; GFNIAVX2-NEXT:    vpand %ymm3, %ymm1, %ymm2542; GFNIAVX2-NEXT:    vpshufb %ymm2, %ymm5, %ymm2543; GFNIAVX2-NEXT:    vgf2p8affineqb $0, %ymm6, %ymm1, %ymm1544; GFNIAVX2-NEXT:    vpshufb %ymm1, %ymm5, %ymm1545; GFNIAVX2-NEXT:    vpaddb %ymm2, %ymm1, %ymm1546; GFNIAVX2-NEXT:    retq547;548; GFNIAVX512VL-LABEL: testv64i8u:549; GFNIAVX512VL:       # %bb.0:550; GFNIAVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm1551; GFNIAVX512VL-NEXT:    vpcmpeqd %ymm2, %ymm2, %ymm2552; GFNIAVX512VL-NEXT:    vpaddb %ymm2, %ymm1, %ymm3553; GFNIAVX512VL-NEXT:    vpandn %ymm3, %ymm1, %ymm1554; GFNIAVX512VL-NEXT:    vpbroadcastd {{.*#+}} ymm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]555; GFNIAVX512VL-NEXT:    vpand %ymm3, %ymm1, %ymm4556; GFNIAVX512VL-NEXT:    vbroadcasti128 {{.*#+}} ymm5 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]557; GFNIAVX512VL-NEXT:    # ymm5 = mem[0,1,0,1]558; GFNIAVX512VL-NEXT:    vpshufb %ymm4, %ymm5, %ymm4559; GFNIAVX512VL-NEXT:    vpbroadcastq {{.*#+}} ymm6 = [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]560; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm6, %ymm1, %ymm1561; GFNIAVX512VL-NEXT:    vpshufb %ymm1, %ymm5, %ymm1562; GFNIAVX512VL-NEXT:    vpaddb %ymm4, %ymm1, %ymm1563; GFNIAVX512VL-NEXT:    vpaddb %ymm2, %ymm0, %ymm2564; GFNIAVX512VL-NEXT:    vpandn %ymm2, %ymm0, %ymm0565; GFNIAVX512VL-NEXT:    vpand %ymm3, %ymm0, %ymm2566; GFNIAVX512VL-NEXT:    vpshufb %ymm2, %ymm5, %ymm2567; GFNIAVX512VL-NEXT:    vgf2p8affineqb $0, %ymm6, %ymm0, %ymm0568; GFNIAVX512VL-NEXT:    vpshufb %ymm0, %ymm5, %ymm0569; GFNIAVX512VL-NEXT:    vpaddb %ymm2, %ymm0, %ymm0570; GFNIAVX512VL-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0571; GFNIAVX512VL-NEXT:    retq572;573; GFNIAVX512BW-LABEL: testv64i8u:574; GFNIAVX512BW:       # %bb.0:575; GFNIAVX512BW-NEXT:    vpternlogd {{.*#+}} zmm1 = -1576; GFNIAVX512BW-NEXT:    vpaddb %zmm1, %zmm0, %zmm1577; GFNIAVX512BW-NEXT:    vpandnq %zmm1, %zmm0, %zmm0578; GFNIAVX512BW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm1579; GFNIAVX512BW-NEXT:    vbroadcasti32x4 {{.*#+}} zmm2 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]580; GFNIAVX512BW-NEXT:    # zmm2 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]581; GFNIAVX512BW-NEXT:    vpshufb %zmm1, %zmm2, %zmm1582; GFNIAVX512BW-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0583; GFNIAVX512BW-NEXT:    vpshufb %zmm0, %zmm2, %zmm0584; GFNIAVX512BW-NEXT:    vpaddb %zmm1, %zmm0, %zmm0585; GFNIAVX512BW-NEXT:    retq586  %out = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %in, i1 -1)587  ret <64 x i8> %out588}589;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:590; GFNIAVX: {{.*}}591