371 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: gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm012; GFNISSE-NEXT: pxor %xmm1, %xmm113; GFNISSE-NEXT: psubb %xmm0, %xmm114; GFNISSE-NEXT: pand %xmm1, %xmm015; GFNISSE-NEXT: gf2p8affineqb $8, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm016; GFNISSE-NEXT: retq17;18; GFNIAVX1OR2-LABEL: testv16i8:19; GFNIAVX1OR2: # %bb.0:20; GFNIAVX1OR2-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm021; GFNIAVX1OR2-NEXT: vpxor %xmm1, %xmm1, %xmm122; GFNIAVX1OR2-NEXT: vpsubb %xmm0, %xmm1, %xmm123; GFNIAVX1OR2-NEXT: vpand %xmm1, %xmm0, %xmm024; GFNIAVX1OR2-NEXT: vgf2p8affineqb $8, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm025; GFNIAVX1OR2-NEXT: retq26;27; GFNIAVX512-LABEL: testv16i8:28; GFNIAVX512: # %bb.0:29; GFNIAVX512-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm030; GFNIAVX512-NEXT: vpxor %xmm1, %xmm1, %xmm131; GFNIAVX512-NEXT: vpsubb %xmm0, %xmm1, %xmm132; GFNIAVX512-NEXT: vpand %xmm1, %xmm0, %xmm033; GFNIAVX512-NEXT: vgf2p8affineqb $8, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm034; GFNIAVX512-NEXT: retq35 %out = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %in, i1 0)36 ret <16 x i8> %out37}38 39define <16 x i8> @testv16i8u(<16 x i8> %in) nounwind {40; GFNISSE-LABEL: testv16i8u:41; GFNISSE: # %bb.0:42; GFNISSE-NEXT: gf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm043; GFNISSE-NEXT: pxor %xmm1, %xmm144; GFNISSE-NEXT: psubb %xmm0, %xmm145; GFNISSE-NEXT: pand %xmm1, %xmm046; GFNISSE-NEXT: gf2p8affineqb $8, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm047; GFNISSE-NEXT: retq48;49; GFNIAVX1OR2-LABEL: testv16i8u:50; GFNIAVX1OR2: # %bb.0:51; GFNIAVX1OR2-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm052; GFNIAVX1OR2-NEXT: vpxor %xmm1, %xmm1, %xmm153; GFNIAVX1OR2-NEXT: vpsubb %xmm0, %xmm1, %xmm154; GFNIAVX1OR2-NEXT: vpand %xmm1, %xmm0, %xmm055; GFNIAVX1OR2-NEXT: vgf2p8affineqb $8, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm056; GFNIAVX1OR2-NEXT: retq57;58; GFNIAVX512-LABEL: testv16i8u:59; GFNIAVX512: # %bb.0:60; GFNIAVX512-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm061; GFNIAVX512-NEXT: vpxor %xmm1, %xmm1, %xmm162; GFNIAVX512-NEXT: vpsubb %xmm0, %xmm1, %xmm163; GFNIAVX512-NEXT: vpand %xmm1, %xmm0, %xmm064; GFNIAVX512-NEXT: vgf2p8affineqb $8, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm065; GFNIAVX512-NEXT: retq66 %out = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %in, i1 -1)67 ret <16 x i8> %out68}69 70define <32 x i8> @testv32i8(<32 x i8> %in) nounwind {71; GFNISSE-LABEL: testv32i8:72; GFNISSE: # %bb.0:73; GFNISSE-NEXT: movdqa {{.*#+}} xmm2 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]74; GFNISSE-NEXT: gf2p8affineqb $0, %xmm2, %xmm075; GFNISSE-NEXT: pxor %xmm3, %xmm376; GFNISSE-NEXT: pxor %xmm4, %xmm477; GFNISSE-NEXT: psubb %xmm0, %xmm478; GFNISSE-NEXT: pand %xmm4, %xmm079; GFNISSE-NEXT: movdqa {{.*#+}} xmm4 = [12307476859704049664,12307476859704049664]80; GFNISSE-NEXT: gf2p8affineqb $8, %xmm4, %xmm081; GFNISSE-NEXT: gf2p8affineqb $0, %xmm2, %xmm182; GFNISSE-NEXT: psubb %xmm1, %xmm383; GFNISSE-NEXT: pand %xmm3, %xmm184; GFNISSE-NEXT: gf2p8affineqb $8, %xmm4, %xmm185; GFNISSE-NEXT: retq86;87; GFNIAVX1-LABEL: testv32i8:88; GFNIAVX1: # %bb.0:89; GFNIAVX1-NEXT: vextractf128 $1, %ymm0, %xmm190; GFNIAVX1-NEXT: vmovddup {{.*#+}} xmm2 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]91; GFNIAVX1-NEXT: # xmm2 = mem[0,0]92; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm2, %xmm1, %xmm193; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm2, %xmm0, %xmm094; GFNIAVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm295; GFNIAVX1-NEXT: vpxor %xmm3, %xmm3, %xmm396; GFNIAVX1-NEXT: vpsubb %xmm1, %xmm3, %xmm197; GFNIAVX1-NEXT: vpsubb %xmm0, %xmm3, %xmm098; GFNIAVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm099; GFNIAVX1-NEXT: vandps %ymm0, %ymm2, %ymm0100; GFNIAVX1-NEXT: vgf2p8affineqb $8, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0101; GFNIAVX1-NEXT: retq102;103; GFNIAVX2-LABEL: testv32i8:104; GFNIAVX2: # %bb.0:105; GFNIAVX2-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0106; GFNIAVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1107; GFNIAVX2-NEXT: vpsubb %ymm0, %ymm1, %ymm1108; GFNIAVX2-NEXT: vpand %ymm1, %ymm0, %ymm0109; GFNIAVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [12307476859704049664,12307476859704049664,12307476859704049664,12307476859704049664]110; GFNIAVX2-NEXT: vgf2p8affineqb $8, %ymm1, %ymm0, %ymm0111; GFNIAVX2-NEXT: retq112;113; GFNIAVX512-LABEL: testv32i8:114; GFNIAVX512: # %bb.0:115; GFNIAVX512-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm0116; GFNIAVX512-NEXT: vpxor %xmm1, %xmm1, %xmm1117; GFNIAVX512-NEXT: vpsubb %ymm0, %ymm1, %ymm1118; GFNIAVX512-NEXT: vpand %ymm1, %ymm0, %ymm0119; GFNIAVX512-NEXT: vgf2p8affineqb $8, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm0120; GFNIAVX512-NEXT: retq121 %out = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %in, i1 0)122 ret <32 x i8> %out123}124 125define <32 x i8> @testv32i8u(<32 x i8> %in) nounwind {126; GFNISSE-LABEL: testv32i8u:127; GFNISSE: # %bb.0:128; GFNISSE-NEXT: movdqa {{.*#+}} xmm2 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]129; GFNISSE-NEXT: gf2p8affineqb $0, %xmm2, %xmm0130; GFNISSE-NEXT: pxor %xmm3, %xmm3131; GFNISSE-NEXT: pxor %xmm4, %xmm4132; GFNISSE-NEXT: psubb %xmm0, %xmm4133; GFNISSE-NEXT: pand %xmm4, %xmm0134; GFNISSE-NEXT: movdqa {{.*#+}} xmm4 = [12307476859704049664,12307476859704049664]135; GFNISSE-NEXT: gf2p8affineqb $8, %xmm4, %xmm0136; GFNISSE-NEXT: gf2p8affineqb $0, %xmm2, %xmm1137; GFNISSE-NEXT: psubb %xmm1, %xmm3138; GFNISSE-NEXT: pand %xmm3, %xmm1139; GFNISSE-NEXT: gf2p8affineqb $8, %xmm4, %xmm1140; GFNISSE-NEXT: retq141;142; GFNIAVX1-LABEL: testv32i8u:143; GFNIAVX1: # %bb.0:144; GFNIAVX1-NEXT: vextractf128 $1, %ymm0, %xmm1145; GFNIAVX1-NEXT: vmovddup {{.*#+}} xmm2 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]146; GFNIAVX1-NEXT: # xmm2 = mem[0,0]147; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm2, %xmm1, %xmm1148; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm2, %xmm0, %xmm0149; GFNIAVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm2150; GFNIAVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3151; GFNIAVX1-NEXT: vpsubb %xmm1, %xmm3, %xmm1152; GFNIAVX1-NEXT: vpsubb %xmm0, %xmm3, %xmm0153; GFNIAVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0154; GFNIAVX1-NEXT: vandps %ymm0, %ymm2, %ymm0155; GFNIAVX1-NEXT: vgf2p8affineqb $8, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0156; GFNIAVX1-NEXT: retq157;158; GFNIAVX2-LABEL: testv32i8u:159; GFNIAVX2: # %bb.0:160; GFNIAVX2-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0161; GFNIAVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1162; GFNIAVX2-NEXT: vpsubb %ymm0, %ymm1, %ymm1163; GFNIAVX2-NEXT: vpand %ymm1, %ymm0, %ymm0164; GFNIAVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [12307476859704049664,12307476859704049664,12307476859704049664,12307476859704049664]165; GFNIAVX2-NEXT: vgf2p8affineqb $8, %ymm1, %ymm0, %ymm0166; GFNIAVX2-NEXT: retq167;168; GFNIAVX512-LABEL: testv32i8u:169; GFNIAVX512: # %bb.0:170; GFNIAVX512-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm0171; GFNIAVX512-NEXT: vpxor %xmm1, %xmm1, %xmm1172; GFNIAVX512-NEXT: vpsubb %ymm0, %ymm1, %ymm1173; GFNIAVX512-NEXT: vpand %ymm1, %ymm0, %ymm0174; GFNIAVX512-NEXT: vgf2p8affineqb $8, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm0175; GFNIAVX512-NEXT: retq176 %out = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %in, i1 -1)177 ret <32 x i8> %out178}179 180define <64 x i8> @testv64i8(<64 x i8> %in) nounwind {181; GFNISSE-LABEL: testv64i8:182; GFNISSE: # %bb.0:183; GFNISSE-NEXT: movdqa {{.*#+}} xmm4 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]184; GFNISSE-NEXT: gf2p8affineqb $0, %xmm4, %xmm0185; GFNISSE-NEXT: pxor %xmm5, %xmm5186; GFNISSE-NEXT: pxor %xmm6, %xmm6187; GFNISSE-NEXT: psubb %xmm0, %xmm6188; GFNISSE-NEXT: pand %xmm6, %xmm0189; GFNISSE-NEXT: movdqa {{.*#+}} xmm6 = [12307476859704049664,12307476859704049664]190; GFNISSE-NEXT: gf2p8affineqb $8, %xmm6, %xmm0191; GFNISSE-NEXT: gf2p8affineqb $0, %xmm4, %xmm1192; GFNISSE-NEXT: pxor %xmm7, %xmm7193; GFNISSE-NEXT: psubb %xmm1, %xmm7194; GFNISSE-NEXT: pand %xmm7, %xmm1195; GFNISSE-NEXT: gf2p8affineqb $8, %xmm6, %xmm1196; GFNISSE-NEXT: gf2p8affineqb $0, %xmm4, %xmm2197; GFNISSE-NEXT: pxor %xmm7, %xmm7198; GFNISSE-NEXT: psubb %xmm2, %xmm7199; GFNISSE-NEXT: pand %xmm7, %xmm2200; GFNISSE-NEXT: gf2p8affineqb $8, %xmm6, %xmm2201; GFNISSE-NEXT: gf2p8affineqb $0, %xmm4, %xmm3202; GFNISSE-NEXT: psubb %xmm3, %xmm5203; GFNISSE-NEXT: pand %xmm5, %xmm3204; GFNISSE-NEXT: gf2p8affineqb $8, %xmm6, %xmm3205; GFNISSE-NEXT: retq206;207; GFNIAVX1-LABEL: testv64i8:208; GFNIAVX1: # %bb.0:209; GFNIAVX1-NEXT: vextractf128 $1, %ymm0, %xmm2210; GFNIAVX1-NEXT: vmovddup {{.*#+}} xmm3 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]211; GFNIAVX1-NEXT: # xmm3 = mem[0,0]212; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm3, %xmm2, %xmm2213; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm3, %xmm0, %xmm0214; GFNIAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm4215; GFNIAVX1-NEXT: vpxor %xmm5, %xmm5, %xmm5216; GFNIAVX1-NEXT: vpsubb %xmm2, %xmm5, %xmm2217; GFNIAVX1-NEXT: vpsubb %xmm0, %xmm5, %xmm0218; GFNIAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0219; GFNIAVX1-NEXT: vandps %ymm0, %ymm4, %ymm0220; GFNIAVX1-NEXT: vbroadcastsd {{.*#+}} ymm2 = [12307476859704049664,12307476859704049664,12307476859704049664,12307476859704049664]221; GFNIAVX1-NEXT: vgf2p8affineqb $8, %ymm2, %ymm0, %ymm0222; GFNIAVX1-NEXT: vextractf128 $1, %ymm1, %xmm4223; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm3, %xmm4, %xmm4224; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm3, %xmm1, %xmm1225; GFNIAVX1-NEXT: vinsertf128 $1, %xmm4, %ymm1, %ymm3226; GFNIAVX1-NEXT: vpsubb %xmm4, %xmm5, %xmm4227; GFNIAVX1-NEXT: vpsubb %xmm1, %xmm5, %xmm1228; GFNIAVX1-NEXT: vinsertf128 $1, %xmm4, %ymm1, %ymm1229; GFNIAVX1-NEXT: vandps %ymm1, %ymm3, %ymm1230; GFNIAVX1-NEXT: vgf2p8affineqb $8, %ymm2, %ymm1, %ymm1231; GFNIAVX1-NEXT: retq232;233; GFNIAVX2-LABEL: testv64i8:234; GFNIAVX2: # %bb.0:235; GFNIAVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]236; GFNIAVX2-NEXT: vgf2p8affineqb $0, %ymm2, %ymm0, %ymm0237; GFNIAVX2-NEXT: vpxor %xmm3, %xmm3, %xmm3238; GFNIAVX2-NEXT: vpsubb %ymm0, %ymm3, %ymm4239; GFNIAVX2-NEXT: vpand %ymm4, %ymm0, %ymm0240; GFNIAVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [12307476859704049664,12307476859704049664,12307476859704049664,12307476859704049664]241; GFNIAVX2-NEXT: vgf2p8affineqb $8, %ymm4, %ymm0, %ymm0242; GFNIAVX2-NEXT: vgf2p8affineqb $0, %ymm2, %ymm1, %ymm1243; GFNIAVX2-NEXT: vpsubb %ymm1, %ymm3, %ymm2244; GFNIAVX2-NEXT: vpand %ymm2, %ymm1, %ymm1245; GFNIAVX2-NEXT: vgf2p8affineqb $8, %ymm4, %ymm1, %ymm1246; GFNIAVX2-NEXT: retq247;248; GFNIAVX512VL-LABEL: testv64i8:249; GFNIAVX512VL: # %bb.0:250; GFNIAVX512VL-NEXT: vextracti64x4 $1, %zmm0, %ymm1251; GFNIAVX512VL-NEXT: vpbroadcastq {{.*#+}} ymm2 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]252; GFNIAVX512VL-NEXT: vgf2p8affineqb $0, %ymm2, %ymm1, %ymm1253; GFNIAVX512VL-NEXT: vgf2p8affineqb $0, %ymm2, %ymm0, %ymm0254; GFNIAVX512VL-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm2255; GFNIAVX512VL-NEXT: vpxor %xmm3, %xmm3, %xmm3256; GFNIAVX512VL-NEXT: vpsubb %ymm1, %ymm3, %ymm1257; GFNIAVX512VL-NEXT: vpsubb %ymm0, %ymm3, %ymm0258; GFNIAVX512VL-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0259; GFNIAVX512VL-NEXT: vpandq %zmm0, %zmm2, %zmm0260; GFNIAVX512VL-NEXT: vgf2p8affineqb $8, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0261; GFNIAVX512VL-NEXT: retq262;263; GFNIAVX512BW-LABEL: testv64i8:264; GFNIAVX512BW: # %bb.0:265; GFNIAVX512BW-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0266; GFNIAVX512BW-NEXT: vpxor %xmm1, %xmm1, %xmm1267; GFNIAVX512BW-NEXT: vpsubb %zmm0, %zmm1, %zmm1268; GFNIAVX512BW-NEXT: vpandq %zmm1, %zmm0, %zmm0269; GFNIAVX512BW-NEXT: vgf2p8affineqb $8, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0270; GFNIAVX512BW-NEXT: retq271 %out = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %in, i1 0)272 ret <64 x i8> %out273}274 275define <64 x i8> @testv64i8u(<64 x i8> %in) nounwind {276; GFNISSE-LABEL: testv64i8u:277; GFNISSE: # %bb.0:278; GFNISSE-NEXT: movdqa {{.*#+}} xmm4 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]279; GFNISSE-NEXT: gf2p8affineqb $0, %xmm4, %xmm0280; GFNISSE-NEXT: pxor %xmm5, %xmm5281; GFNISSE-NEXT: pxor %xmm6, %xmm6282; GFNISSE-NEXT: psubb %xmm0, %xmm6283; GFNISSE-NEXT: pand %xmm6, %xmm0284; GFNISSE-NEXT: movdqa {{.*#+}} xmm6 = [12307476859704049664,12307476859704049664]285; GFNISSE-NEXT: gf2p8affineqb $8, %xmm6, %xmm0286; GFNISSE-NEXT: gf2p8affineqb $0, %xmm4, %xmm1287; GFNISSE-NEXT: pxor %xmm7, %xmm7288; GFNISSE-NEXT: psubb %xmm1, %xmm7289; GFNISSE-NEXT: pand %xmm7, %xmm1290; GFNISSE-NEXT: gf2p8affineqb $8, %xmm6, %xmm1291; GFNISSE-NEXT: gf2p8affineqb $0, %xmm4, %xmm2292; GFNISSE-NEXT: pxor %xmm7, %xmm7293; GFNISSE-NEXT: psubb %xmm2, %xmm7294; GFNISSE-NEXT: pand %xmm7, %xmm2295; GFNISSE-NEXT: gf2p8affineqb $8, %xmm6, %xmm2296; GFNISSE-NEXT: gf2p8affineqb $0, %xmm4, %xmm3297; GFNISSE-NEXT: psubb %xmm3, %xmm5298; GFNISSE-NEXT: pand %xmm5, %xmm3299; GFNISSE-NEXT: gf2p8affineqb $8, %xmm6, %xmm3300; GFNISSE-NEXT: retq301;302; GFNIAVX1-LABEL: testv64i8u:303; GFNIAVX1: # %bb.0:304; GFNIAVX1-NEXT: vextractf128 $1, %ymm0, %xmm2305; GFNIAVX1-NEXT: vmovddup {{.*#+}} xmm3 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]306; GFNIAVX1-NEXT: # xmm3 = mem[0,0]307; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm3, %xmm2, %xmm2308; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm3, %xmm0, %xmm0309; GFNIAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm4310; GFNIAVX1-NEXT: vpxor %xmm5, %xmm5, %xmm5311; GFNIAVX1-NEXT: vpsubb %xmm2, %xmm5, %xmm2312; GFNIAVX1-NEXT: vpsubb %xmm0, %xmm5, %xmm0313; GFNIAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0314; GFNIAVX1-NEXT: vandps %ymm0, %ymm4, %ymm0315; GFNIAVX1-NEXT: vbroadcastsd {{.*#+}} ymm2 = [12307476859704049664,12307476859704049664,12307476859704049664,12307476859704049664]316; GFNIAVX1-NEXT: vgf2p8affineqb $8, %ymm2, %ymm0, %ymm0317; GFNIAVX1-NEXT: vextractf128 $1, %ymm1, %xmm4318; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm3, %xmm4, %xmm4319; GFNIAVX1-NEXT: vgf2p8affineqb $0, %xmm3, %xmm1, %xmm1320; GFNIAVX1-NEXT: vinsertf128 $1, %xmm4, %ymm1, %ymm3321; GFNIAVX1-NEXT: vpsubb %xmm4, %xmm5, %xmm4322; GFNIAVX1-NEXT: vpsubb %xmm1, %xmm5, %xmm1323; GFNIAVX1-NEXT: vinsertf128 $1, %xmm4, %ymm1, %ymm1324; GFNIAVX1-NEXT: vandps %ymm1, %ymm3, %ymm1325; GFNIAVX1-NEXT: vgf2p8affineqb $8, %ymm2, %ymm1, %ymm1326; GFNIAVX1-NEXT: retq327;328; GFNIAVX2-LABEL: testv64i8u:329; GFNIAVX2: # %bb.0:330; GFNIAVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]331; GFNIAVX2-NEXT: vgf2p8affineqb $0, %ymm2, %ymm0, %ymm0332; GFNIAVX2-NEXT: vpxor %xmm3, %xmm3, %xmm3333; GFNIAVX2-NEXT: vpsubb %ymm0, %ymm3, %ymm4334; GFNIAVX2-NEXT: vpand %ymm4, %ymm0, %ymm0335; GFNIAVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [12307476859704049664,12307476859704049664,12307476859704049664,12307476859704049664]336; GFNIAVX2-NEXT: vgf2p8affineqb $8, %ymm4, %ymm0, %ymm0337; GFNIAVX2-NEXT: vgf2p8affineqb $0, %ymm2, %ymm1, %ymm1338; GFNIAVX2-NEXT: vpsubb %ymm1, %ymm3, %ymm2339; GFNIAVX2-NEXT: vpand %ymm2, %ymm1, %ymm1340; GFNIAVX2-NEXT: vgf2p8affineqb $8, %ymm4, %ymm1, %ymm1341; GFNIAVX2-NEXT: retq342;343; GFNIAVX512VL-LABEL: testv64i8u:344; GFNIAVX512VL: # %bb.0:345; GFNIAVX512VL-NEXT: vextracti64x4 $1, %zmm0, %ymm1346; GFNIAVX512VL-NEXT: vpbroadcastq {{.*#+}} ymm2 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]347; GFNIAVX512VL-NEXT: vgf2p8affineqb $0, %ymm2, %ymm1, %ymm1348; GFNIAVX512VL-NEXT: vgf2p8affineqb $0, %ymm2, %ymm0, %ymm0349; GFNIAVX512VL-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm2350; GFNIAVX512VL-NEXT: vpxor %xmm3, %xmm3, %xmm3351; GFNIAVX512VL-NEXT: vpsubb %ymm1, %ymm3, %ymm1352; GFNIAVX512VL-NEXT: vpsubb %ymm0, %ymm3, %ymm0353; GFNIAVX512VL-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0354; GFNIAVX512VL-NEXT: vpandq %zmm0, %zmm2, %zmm0355; GFNIAVX512VL-NEXT: vgf2p8affineqb $8, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0356; GFNIAVX512VL-NEXT: retq357;358; GFNIAVX512BW-LABEL: testv64i8u:359; GFNIAVX512BW: # %bb.0:360; GFNIAVX512BW-NEXT: vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0361; GFNIAVX512BW-NEXT: vpxor %xmm1, %xmm1, %xmm1362; GFNIAVX512BW-NEXT: vpsubb %zmm0, %zmm1, %zmm1363; GFNIAVX512BW-NEXT: vpandq %zmm1, %zmm0, %zmm0364; GFNIAVX512BW-NEXT: vgf2p8affineqb $8, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0365; GFNIAVX512BW-NEXT: retq366 %out = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %in, i1 -1)367 ret <64 x i8> %out368}369;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:370; GFNIAVX: {{.*}}371