19637 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX13; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=AVX24; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vpopcntdq | FileCheck %s --check-prefix=AVX512VPOPCNTDQ5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vpopcntdq,+avx512vl | FileCheck %s --check-prefix=AVX512VPOPCNTDQVL6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bitalg | FileCheck %s --check-prefix=BITALG_NOVLX7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bitalg,+avx512vl | FileCheck %s --check-prefix=BITALG8 9 10define <32 x i8> @ugt_1_v32i8(<32 x i8> %0) {11; AVX1-LABEL: ugt_1_v32i8:12; AVX1: # %bb.0:13; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm114; AVX1-NEXT: vpaddb %xmm1, %xmm0, %xmm215; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm316; AVX1-NEXT: vpaddb %xmm1, %xmm3, %xmm417; AVX1-NEXT: vpand %xmm4, %xmm3, %xmm318; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm419; AVX1-NEXT: vpcmpeqb %xmm4, %xmm3, %xmm320; AVX1-NEXT: vpxor %xmm1, %xmm3, %xmm321; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm022; AVX1-NEXT: vpcmpeqb %xmm4, %xmm0, %xmm023; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm024; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm0, %ymm025; AVX1-NEXT: retq26;27; AVX2-LABEL: ugt_1_v32i8:28; AVX2: # %bb.0:29; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm130; AVX2-NEXT: vpaddb %ymm1, %ymm0, %ymm231; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm032; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm233; AVX2-NEXT: vpcmpeqb %ymm2, %ymm0, %ymm034; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm035; AVX2-NEXT: retq36;37; AVX512VPOPCNTDQ-LABEL: ugt_1_v32i8:38; AVX512VPOPCNTDQ: # %bb.0:39; AVX512VPOPCNTDQ-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm140; AVX512VPOPCNTDQ-NEXT: vpaddb %ymm1, %ymm0, %ymm141; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm042; AVX512VPOPCNTDQ-NEXT: vpxor %xmm1, %xmm1, %xmm143; AVX512VPOPCNTDQ-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm044; AVX512VPOPCNTDQ-NEXT: vpternlogq {{.*#+}} zmm0 = ~zmm045; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm046; AVX512VPOPCNTDQ-NEXT: retq47;48; AVX512VPOPCNTDQVL-LABEL: ugt_1_v32i8:49; AVX512VPOPCNTDQVL: # %bb.0:50; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm151; AVX512VPOPCNTDQVL-NEXT: vpaddb %ymm1, %ymm0, %ymm152; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm053; AVX512VPOPCNTDQVL-NEXT: vpxor %xmm1, %xmm1, %xmm154; AVX512VPOPCNTDQVL-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm055; AVX512VPOPCNTDQVL-NEXT: vpternlogq {{.*#+}} ymm0 = ~ymm056; AVX512VPOPCNTDQVL-NEXT: retq57;58; BITALG_NOVLX-LABEL: ugt_1_v32i8:59; BITALG_NOVLX: # %bb.0:60; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm061; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm062; BITALG_NOVLX-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm063; BITALG_NOVLX-NEXT: retq64;65; BITALG-LABEL: ugt_1_v32i8:66; BITALG: # %bb.0:67; BITALG-NEXT: vpopcntb %ymm0, %ymm068; BITALG-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm069; BITALG-NEXT: retq70 %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0)71 %3 = icmp ugt <32 x i8> %2, <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>72 %4 = sext <32 x i1> %3 to <32 x i8>73 ret <32 x i8> %474}75 76define <32 x i8> @ult_2_v32i8(<32 x i8> %0) {77; AVX1-LABEL: ult_2_v32i8:78; AVX1: # %bb.0:79; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm180; AVX1-NEXT: vpaddb %xmm1, %xmm0, %xmm281; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm382; AVX1-NEXT: vpaddb %xmm1, %xmm3, %xmm183; AVX1-NEXT: vpand %xmm1, %xmm3, %xmm184; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm385; AVX1-NEXT: vpcmpeqb %xmm3, %xmm1, %xmm186; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm087; AVX1-NEXT: vpcmpeqb %xmm3, %xmm0, %xmm088; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm089; AVX1-NEXT: retq90;91; AVX2-LABEL: ult_2_v32i8:92; AVX2: # %bb.0:93; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm194; AVX2-NEXT: vpaddb %ymm1, %ymm0, %ymm195; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm096; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm197; AVX2-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm098; AVX2-NEXT: retq99;100; AVX512VPOPCNTDQ-LABEL: ult_2_v32i8:101; AVX512VPOPCNTDQ: # %bb.0:102; AVX512VPOPCNTDQ-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1103; AVX512VPOPCNTDQ-NEXT: vpaddb %ymm1, %ymm0, %ymm1104; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm0105; AVX512VPOPCNTDQ-NEXT: vpxor %xmm1, %xmm1, %xmm1106; AVX512VPOPCNTDQ-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0107; AVX512VPOPCNTDQ-NEXT: retq108;109; AVX512VPOPCNTDQVL-LABEL: ult_2_v32i8:110; AVX512VPOPCNTDQVL: # %bb.0:111; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1112; AVX512VPOPCNTDQVL-NEXT: vpaddb %ymm1, %ymm0, %ymm1113; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm0114; AVX512VPOPCNTDQVL-NEXT: vpxor %xmm1, %xmm1, %xmm1115; AVX512VPOPCNTDQVL-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0116; AVX512VPOPCNTDQVL-NEXT: retq117;118; BITALG_NOVLX-LABEL: ult_2_v32i8:119; BITALG_NOVLX: # %bb.0:120; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0121; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0122; BITALG_NOVLX-NEXT: vpbroadcastb {{.*#+}} ymm1 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]123; BITALG_NOVLX-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0124; BITALG_NOVLX-NEXT: retq125;126; BITALG-LABEL: ult_2_v32i8:127; BITALG: # %bb.0:128; BITALG-NEXT: vpopcntb %ymm0, %ymm0129; BITALG-NEXT: vpbroadcastb {{.*#+}} ymm1 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]130; BITALG-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0131; BITALG-NEXT: retq132 %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0)133 %3 = icmp ult <32 x i8> %2, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>134 %4 = sext <32 x i1> %3 to <32 x i8>135 ret <32 x i8> %4136}137 138define <32 x i8> @ugt_2_v32i8(<32 x i8> %0) {139; AVX1-LABEL: ugt_2_v32i8:140; AVX1: # %bb.0:141; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]142; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2143; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]144; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2145; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4146; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4147; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4148; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2149; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0150; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4151; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4152; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0153; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0154; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0155; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0156; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]157; AVX1-NEXT: vpcmpgtb %xmm1, %xmm0, %xmm0158; AVX1-NEXT: vpcmpgtb %xmm1, %xmm2, %xmm1159; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0160; AVX1-NEXT: retq161;162; AVX2-LABEL: ugt_2_v32i8:163; AVX2: # %bb.0:164; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]165; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2166; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]167; AVX2-NEXT: # ymm3 = mem[0,1,0,1]168; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2169; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0170; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0171; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0172; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0173; AVX2-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0174; AVX2-NEXT: retq175;176; AVX512VPOPCNTDQ-LABEL: ugt_2_v32i8:177; AVX512VPOPCNTDQ: # %bb.0:178; AVX512VPOPCNTDQ-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]179; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm2180; AVX512VPOPCNTDQ-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]181; AVX512VPOPCNTDQ-NEXT: # ymm3 = mem[0,1,0,1]182; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm2, %ymm3, %ymm2183; AVX512VPOPCNTDQ-NEXT: vpsrlw $4, %ymm0, %ymm0184; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm0185; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm0, %ymm3, %ymm0186; AVX512VPOPCNTDQ-NEXT: vpaddb %ymm2, %ymm0, %ymm0187; AVX512VPOPCNTDQ-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0188; AVX512VPOPCNTDQ-NEXT: retq189;190; AVX512VPOPCNTDQVL-LABEL: ugt_2_v32i8:191; AVX512VPOPCNTDQVL: # %bb.0:192; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [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]193; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm2194; AVX512VPOPCNTDQVL-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]195; AVX512VPOPCNTDQVL-NEXT: # ymm3 = mem[0,1,0,1]196; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm2, %ymm3, %ymm2197; AVX512VPOPCNTDQVL-NEXT: vpsrlw $4, %ymm0, %ymm0198; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm0199; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm0, %ymm3, %ymm0200; AVX512VPOPCNTDQVL-NEXT: vpaddb %ymm2, %ymm0, %ymm0201; AVX512VPOPCNTDQVL-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0202; AVX512VPOPCNTDQVL-NEXT: retq203;204; BITALG_NOVLX-LABEL: ugt_2_v32i8:205; BITALG_NOVLX: # %bb.0:206; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0207; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0208; BITALG_NOVLX-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0209; BITALG_NOVLX-NEXT: retq210;211; BITALG-LABEL: ugt_2_v32i8:212; BITALG: # %bb.0:213; BITALG-NEXT: vpopcntb %ymm0, %ymm0214; BITALG-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0215; BITALG-NEXT: retq216 %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0)217 %3 = icmp ugt <32 x i8> %2, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>218 %4 = sext <32 x i1> %3 to <32 x i8>219 ret <32 x i8> %4220}221 222define <32 x i8> @ult_3_v32i8(<32 x i8> %0) {223; AVX1-LABEL: ult_3_v32i8:224; AVX1: # %bb.0:225; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]226; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2227; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]228; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2229; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4230; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4231; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4232; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2233; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0234; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4235; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4236; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0237; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0238; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0239; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0240; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]241; AVX1-NEXT: vpcmpgtb %xmm0, %xmm1, %xmm0242; AVX1-NEXT: vpcmpgtb %xmm2, %xmm1, %xmm1243; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0244; AVX1-NEXT: retq245;246; AVX2-LABEL: ult_3_v32i8:247; AVX2: # %bb.0:248; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]249; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2250; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]251; AVX2-NEXT: # ymm3 = mem[0,1,0,1]252; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2253; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0254; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0255; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0256; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0257; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]258; AVX2-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0259; AVX2-NEXT: retq260;261; AVX512VPOPCNTDQ-LABEL: ult_3_v32i8:262; AVX512VPOPCNTDQ: # %bb.0:263; AVX512VPOPCNTDQ-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]264; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm2265; AVX512VPOPCNTDQ-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]266; AVX512VPOPCNTDQ-NEXT: # ymm3 = mem[0,1,0,1]267; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm2, %ymm3, %ymm2268; AVX512VPOPCNTDQ-NEXT: vpsrlw $4, %ymm0, %ymm0269; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm0270; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm0, %ymm3, %ymm0271; AVX512VPOPCNTDQ-NEXT: vpaddb %ymm2, %ymm0, %ymm0272; AVX512VPOPCNTDQ-NEXT: vpbroadcastb {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]273; AVX512VPOPCNTDQ-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0274; AVX512VPOPCNTDQ-NEXT: retq275;276; AVX512VPOPCNTDQVL-LABEL: ult_3_v32i8:277; AVX512VPOPCNTDQVL: # %bb.0:278; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [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]279; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm2280; AVX512VPOPCNTDQVL-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]281; AVX512VPOPCNTDQVL-NEXT: # ymm3 = mem[0,1,0,1]282; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm2, %ymm3, %ymm2283; AVX512VPOPCNTDQVL-NEXT: vpsrlw $4, %ymm0, %ymm0284; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm0285; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm0, %ymm3, %ymm0286; AVX512VPOPCNTDQVL-NEXT: vpaddb %ymm2, %ymm0, %ymm0287; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]288; AVX512VPOPCNTDQVL-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0289; AVX512VPOPCNTDQVL-NEXT: retq290;291; BITALG_NOVLX-LABEL: ult_3_v32i8:292; BITALG_NOVLX: # %bb.0:293; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0294; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0295; BITALG_NOVLX-NEXT: vpbroadcastb {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]296; BITALG_NOVLX-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0297; BITALG_NOVLX-NEXT: retq298;299; BITALG-LABEL: ult_3_v32i8:300; BITALG: # %bb.0:301; BITALG-NEXT: vpopcntb %ymm0, %ymm0302; BITALG-NEXT: vpbroadcastb {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]303; BITALG-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0304; BITALG-NEXT: retq305 %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0)306 %3 = icmp ult <32 x i8> %2, <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, 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>307 %4 = sext <32 x i1> %3 to <32 x i8>308 ret <32 x i8> %4309}310 311define <32 x i8> @ugt_3_v32i8(<32 x i8> %0) {312; AVX1-LABEL: ugt_3_v32i8:313; AVX1: # %bb.0:314; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]315; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2316; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]317; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2318; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4319; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4320; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4321; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2322; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0323; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4324; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4325; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0326; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0327; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0328; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0329; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]330; AVX1-NEXT: vpcmpgtb %xmm1, %xmm0, %xmm0331; AVX1-NEXT: vpcmpgtb %xmm1, %xmm2, %xmm1332; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0333; AVX1-NEXT: retq334;335; AVX2-LABEL: ugt_3_v32i8:336; AVX2: # %bb.0:337; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]338; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2339; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]340; AVX2-NEXT: # ymm3 = mem[0,1,0,1]341; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2342; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0343; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0344; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0345; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0346; AVX2-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0347; AVX2-NEXT: retq348;349; AVX512VPOPCNTDQ-LABEL: ugt_3_v32i8:350; AVX512VPOPCNTDQ: # %bb.0:351; AVX512VPOPCNTDQ-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]352; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm2353; AVX512VPOPCNTDQ-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]354; AVX512VPOPCNTDQ-NEXT: # ymm3 = mem[0,1,0,1]355; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm2, %ymm3, %ymm2356; AVX512VPOPCNTDQ-NEXT: vpsrlw $4, %ymm0, %ymm0357; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm0358; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm0, %ymm3, %ymm0359; AVX512VPOPCNTDQ-NEXT: vpaddb %ymm2, %ymm0, %ymm0360; AVX512VPOPCNTDQ-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0361; AVX512VPOPCNTDQ-NEXT: retq362;363; AVX512VPOPCNTDQVL-LABEL: ugt_3_v32i8:364; AVX512VPOPCNTDQVL: # %bb.0:365; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [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]366; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm2367; AVX512VPOPCNTDQVL-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]368; AVX512VPOPCNTDQVL-NEXT: # ymm3 = mem[0,1,0,1]369; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm2, %ymm3, %ymm2370; AVX512VPOPCNTDQVL-NEXT: vpsrlw $4, %ymm0, %ymm0371; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm0372; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm0, %ymm3, %ymm0373; AVX512VPOPCNTDQVL-NEXT: vpaddb %ymm2, %ymm0, %ymm0374; AVX512VPOPCNTDQVL-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0375; AVX512VPOPCNTDQVL-NEXT: retq376;377; BITALG_NOVLX-LABEL: ugt_3_v32i8:378; BITALG_NOVLX: # %bb.0:379; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0380; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0381; BITALG_NOVLX-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0382; BITALG_NOVLX-NEXT: retq383;384; BITALG-LABEL: ugt_3_v32i8:385; BITALG: # %bb.0:386; BITALG-NEXT: vpopcntb %ymm0, %ymm0387; BITALG-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0388; BITALG-NEXT: retq389 %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0)390 %3 = icmp ugt <32 x i8> %2, <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, 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>391 %4 = sext <32 x i1> %3 to <32 x i8>392 ret <32 x i8> %4393}394 395define <32 x i8> @ult_4_v32i8(<32 x i8> %0) {396; AVX1-LABEL: ult_4_v32i8:397; AVX1: # %bb.0:398; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]399; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2400; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]401; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2402; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4403; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4404; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4405; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2406; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0407; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4408; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4409; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0410; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0411; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0412; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0413; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]414; AVX1-NEXT: vpcmpgtb %xmm0, %xmm1, %xmm0415; AVX1-NEXT: vpcmpgtb %xmm2, %xmm1, %xmm1416; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0417; AVX1-NEXT: retq418;419; AVX2-LABEL: ult_4_v32i8:420; AVX2: # %bb.0:421; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]422; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2423; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]424; AVX2-NEXT: # ymm3 = mem[0,1,0,1]425; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2426; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0427; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0428; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0429; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0430; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]431; AVX2-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0432; AVX2-NEXT: retq433;434; AVX512VPOPCNTDQ-LABEL: ult_4_v32i8:435; AVX512VPOPCNTDQ: # %bb.0:436; AVX512VPOPCNTDQ-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]437; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm2438; AVX512VPOPCNTDQ-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]439; AVX512VPOPCNTDQ-NEXT: # ymm3 = mem[0,1,0,1]440; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm2, %ymm3, %ymm2441; AVX512VPOPCNTDQ-NEXT: vpsrlw $4, %ymm0, %ymm0442; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm0443; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm0, %ymm3, %ymm0444; AVX512VPOPCNTDQ-NEXT: vpaddb %ymm2, %ymm0, %ymm0445; AVX512VPOPCNTDQ-NEXT: vpbroadcastb {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]446; AVX512VPOPCNTDQ-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0447; AVX512VPOPCNTDQ-NEXT: retq448;449; AVX512VPOPCNTDQVL-LABEL: ult_4_v32i8:450; AVX512VPOPCNTDQVL: # %bb.0:451; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [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]452; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm2453; AVX512VPOPCNTDQVL-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]454; AVX512VPOPCNTDQVL-NEXT: # ymm3 = mem[0,1,0,1]455; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm2, %ymm3, %ymm2456; AVX512VPOPCNTDQVL-NEXT: vpsrlw $4, %ymm0, %ymm0457; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm0458; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm0, %ymm3, %ymm0459; AVX512VPOPCNTDQVL-NEXT: vpaddb %ymm2, %ymm0, %ymm0460; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]461; AVX512VPOPCNTDQVL-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0462; AVX512VPOPCNTDQVL-NEXT: retq463;464; BITALG_NOVLX-LABEL: ult_4_v32i8:465; BITALG_NOVLX: # %bb.0:466; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0467; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0468; BITALG_NOVLX-NEXT: vpbroadcastb {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]469; BITALG_NOVLX-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0470; BITALG_NOVLX-NEXT: retq471;472; BITALG-LABEL: ult_4_v32i8:473; BITALG: # %bb.0:474; BITALG-NEXT: vpopcntb %ymm0, %ymm0475; BITALG-NEXT: vpbroadcastb {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]476; BITALG-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0477; BITALG-NEXT: retq478 %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0)479 %3 = icmp ult <32 x i8> %2, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>480 %4 = sext <32 x i1> %3 to <32 x i8>481 ret <32 x i8> %4482}483 484define <32 x i8> @ugt_4_v32i8(<32 x i8> %0) {485; AVX1-LABEL: ugt_4_v32i8:486; AVX1: # %bb.0:487; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]488; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2489; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]490; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2491; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4492; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4493; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4494; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2495; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0496; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4497; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4498; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0499; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0500; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0501; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0502; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]503; AVX1-NEXT: vpcmpgtb %xmm1, %xmm0, %xmm0504; AVX1-NEXT: vpcmpgtb %xmm1, %xmm2, %xmm1505; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0506; AVX1-NEXT: retq507;508; AVX2-LABEL: ugt_4_v32i8:509; AVX2: # %bb.0:510; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]511; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2512; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]513; AVX2-NEXT: # ymm3 = mem[0,1,0,1]514; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2515; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0516; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0517; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0518; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0519; AVX2-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0520; AVX2-NEXT: retq521;522; AVX512VPOPCNTDQ-LABEL: ugt_4_v32i8:523; AVX512VPOPCNTDQ: # %bb.0:524; AVX512VPOPCNTDQ-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]525; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm2526; AVX512VPOPCNTDQ-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]527; AVX512VPOPCNTDQ-NEXT: # ymm3 = mem[0,1,0,1]528; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm2, %ymm3, %ymm2529; AVX512VPOPCNTDQ-NEXT: vpsrlw $4, %ymm0, %ymm0530; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm0531; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm0, %ymm3, %ymm0532; AVX512VPOPCNTDQ-NEXT: vpaddb %ymm2, %ymm0, %ymm0533; AVX512VPOPCNTDQ-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0534; AVX512VPOPCNTDQ-NEXT: retq535;536; AVX512VPOPCNTDQVL-LABEL: ugt_4_v32i8:537; AVX512VPOPCNTDQVL: # %bb.0:538; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [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]539; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm2540; AVX512VPOPCNTDQVL-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]541; AVX512VPOPCNTDQVL-NEXT: # ymm3 = mem[0,1,0,1]542; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm2, %ymm3, %ymm2543; AVX512VPOPCNTDQVL-NEXT: vpsrlw $4, %ymm0, %ymm0544; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm0545; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm0, %ymm3, %ymm0546; AVX512VPOPCNTDQVL-NEXT: vpaddb %ymm2, %ymm0, %ymm0547; AVX512VPOPCNTDQVL-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0548; AVX512VPOPCNTDQVL-NEXT: retq549;550; BITALG_NOVLX-LABEL: ugt_4_v32i8:551; BITALG_NOVLX: # %bb.0:552; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0553; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0554; BITALG_NOVLX-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0555; BITALG_NOVLX-NEXT: retq556;557; BITALG-LABEL: ugt_4_v32i8:558; BITALG: # %bb.0:559; BITALG-NEXT: vpopcntb %ymm0, %ymm0560; BITALG-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0561; BITALG-NEXT: retq562 %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0)563 %3 = icmp ugt <32 x i8> %2, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>564 %4 = sext <32 x i1> %3 to <32 x i8>565 ret <32 x i8> %4566}567 568define <32 x i8> @ult_5_v32i8(<32 x i8> %0) {569; AVX1-LABEL: ult_5_v32i8:570; AVX1: # %bb.0:571; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]572; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2573; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]574; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2575; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4576; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4577; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4578; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2579; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0580; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4581; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4582; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0583; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0584; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0585; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0586; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]587; AVX1-NEXT: vpcmpgtb %xmm0, %xmm1, %xmm0588; AVX1-NEXT: vpcmpgtb %xmm2, %xmm1, %xmm1589; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0590; AVX1-NEXT: retq591;592; AVX2-LABEL: ult_5_v32i8:593; AVX2: # %bb.0:594; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]595; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2596; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]597; AVX2-NEXT: # ymm3 = mem[0,1,0,1]598; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2599; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0600; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0601; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0602; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0603; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]604; AVX2-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0605; AVX2-NEXT: retq606;607; AVX512VPOPCNTDQ-LABEL: ult_5_v32i8:608; AVX512VPOPCNTDQ: # %bb.0:609; AVX512VPOPCNTDQ-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]610; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm2611; AVX512VPOPCNTDQ-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]612; AVX512VPOPCNTDQ-NEXT: # ymm3 = mem[0,1,0,1]613; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm2, %ymm3, %ymm2614; AVX512VPOPCNTDQ-NEXT: vpsrlw $4, %ymm0, %ymm0615; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm0616; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm0, %ymm3, %ymm0617; AVX512VPOPCNTDQ-NEXT: vpaddb %ymm2, %ymm0, %ymm0618; AVX512VPOPCNTDQ-NEXT: vpbroadcastb {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]619; AVX512VPOPCNTDQ-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0620; AVX512VPOPCNTDQ-NEXT: retq621;622; AVX512VPOPCNTDQVL-LABEL: ult_5_v32i8:623; AVX512VPOPCNTDQVL: # %bb.0:624; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [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]625; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm2626; AVX512VPOPCNTDQVL-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]627; AVX512VPOPCNTDQVL-NEXT: # ymm3 = mem[0,1,0,1]628; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm2, %ymm3, %ymm2629; AVX512VPOPCNTDQVL-NEXT: vpsrlw $4, %ymm0, %ymm0630; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm0631; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm0, %ymm3, %ymm0632; AVX512VPOPCNTDQVL-NEXT: vpaddb %ymm2, %ymm0, %ymm0633; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]634; AVX512VPOPCNTDQVL-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0635; AVX512VPOPCNTDQVL-NEXT: retq636;637; BITALG_NOVLX-LABEL: ult_5_v32i8:638; BITALG_NOVLX: # %bb.0:639; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0640; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0641; BITALG_NOVLX-NEXT: vpbroadcastb {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]642; BITALG_NOVLX-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0643; BITALG_NOVLX-NEXT: retq644;645; BITALG-LABEL: ult_5_v32i8:646; BITALG: # %bb.0:647; BITALG-NEXT: vpopcntb %ymm0, %ymm0648; BITALG-NEXT: vpbroadcastb {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]649; BITALG-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0650; BITALG-NEXT: retq651 %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0)652 %3 = icmp ult <32 x i8> %2, <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>653 %4 = sext <32 x i1> %3 to <32 x i8>654 ret <32 x i8> %4655}656 657define <32 x i8> @ugt_5_v32i8(<32 x i8> %0) {658; AVX1-LABEL: ugt_5_v32i8:659; AVX1: # %bb.0:660; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]661; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2662; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]663; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2664; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4665; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4666; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4667; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2668; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0669; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4670; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4671; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0672; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0673; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0674; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0675; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]676; AVX1-NEXT: vpcmpgtb %xmm1, %xmm0, %xmm0677; AVX1-NEXT: vpcmpgtb %xmm1, %xmm2, %xmm1678; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0679; AVX1-NEXT: retq680;681; AVX2-LABEL: ugt_5_v32i8:682; AVX2: # %bb.0:683; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]684; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2685; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]686; AVX2-NEXT: # ymm3 = mem[0,1,0,1]687; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2688; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0689; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0690; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0691; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0692; AVX2-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0693; AVX2-NEXT: retq694;695; AVX512VPOPCNTDQ-LABEL: ugt_5_v32i8:696; AVX512VPOPCNTDQ: # %bb.0:697; AVX512VPOPCNTDQ-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]698; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm2699; AVX512VPOPCNTDQ-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]700; AVX512VPOPCNTDQ-NEXT: # ymm3 = mem[0,1,0,1]701; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm2, %ymm3, %ymm2702; AVX512VPOPCNTDQ-NEXT: vpsrlw $4, %ymm0, %ymm0703; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm0704; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm0, %ymm3, %ymm0705; AVX512VPOPCNTDQ-NEXT: vpaddb %ymm2, %ymm0, %ymm0706; AVX512VPOPCNTDQ-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0707; AVX512VPOPCNTDQ-NEXT: retq708;709; AVX512VPOPCNTDQVL-LABEL: ugt_5_v32i8:710; AVX512VPOPCNTDQVL: # %bb.0:711; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [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]712; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm2713; AVX512VPOPCNTDQVL-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]714; AVX512VPOPCNTDQVL-NEXT: # ymm3 = mem[0,1,0,1]715; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm2, %ymm3, %ymm2716; AVX512VPOPCNTDQVL-NEXT: vpsrlw $4, %ymm0, %ymm0717; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm0718; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm0, %ymm3, %ymm0719; AVX512VPOPCNTDQVL-NEXT: vpaddb %ymm2, %ymm0, %ymm0720; AVX512VPOPCNTDQVL-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0721; AVX512VPOPCNTDQVL-NEXT: retq722;723; BITALG_NOVLX-LABEL: ugt_5_v32i8:724; BITALG_NOVLX: # %bb.0:725; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0726; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0727; BITALG_NOVLX-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0728; BITALG_NOVLX-NEXT: retq729;730; BITALG-LABEL: ugt_5_v32i8:731; BITALG: # %bb.0:732; BITALG-NEXT: vpopcntb %ymm0, %ymm0733; BITALG-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0734; BITALG-NEXT: retq735 %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0)736 %3 = icmp ugt <32 x i8> %2, <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>737 %4 = sext <32 x i1> %3 to <32 x i8>738 ret <32 x i8> %4739}740 741define <32 x i8> @ult_6_v32i8(<32 x i8> %0) {742; AVX1-LABEL: ult_6_v32i8:743; AVX1: # %bb.0:744; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]745; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2746; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]747; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2748; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4749; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4750; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4751; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2752; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0753; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4754; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4755; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0756; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0757; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0758; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0759; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]760; AVX1-NEXT: vpcmpgtb %xmm0, %xmm1, %xmm0761; AVX1-NEXT: vpcmpgtb %xmm2, %xmm1, %xmm1762; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0763; AVX1-NEXT: retq764;765; AVX2-LABEL: ult_6_v32i8:766; AVX2: # %bb.0:767; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]768; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2769; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]770; AVX2-NEXT: # ymm3 = mem[0,1,0,1]771; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2772; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0773; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0774; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0775; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0776; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]777; AVX2-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0778; AVX2-NEXT: retq779;780; AVX512VPOPCNTDQ-LABEL: ult_6_v32i8:781; AVX512VPOPCNTDQ: # %bb.0:782; AVX512VPOPCNTDQ-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]783; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm2784; AVX512VPOPCNTDQ-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]785; AVX512VPOPCNTDQ-NEXT: # ymm3 = mem[0,1,0,1]786; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm2, %ymm3, %ymm2787; AVX512VPOPCNTDQ-NEXT: vpsrlw $4, %ymm0, %ymm0788; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm0789; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm0, %ymm3, %ymm0790; AVX512VPOPCNTDQ-NEXT: vpaddb %ymm2, %ymm0, %ymm0791; AVX512VPOPCNTDQ-NEXT: vpbroadcastb {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]792; AVX512VPOPCNTDQ-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0793; AVX512VPOPCNTDQ-NEXT: retq794;795; AVX512VPOPCNTDQVL-LABEL: ult_6_v32i8:796; AVX512VPOPCNTDQVL: # %bb.0:797; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [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]798; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm2799; AVX512VPOPCNTDQVL-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]800; AVX512VPOPCNTDQVL-NEXT: # ymm3 = mem[0,1,0,1]801; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm2, %ymm3, %ymm2802; AVX512VPOPCNTDQVL-NEXT: vpsrlw $4, %ymm0, %ymm0803; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm0804; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm0, %ymm3, %ymm0805; AVX512VPOPCNTDQVL-NEXT: vpaddb %ymm2, %ymm0, %ymm0806; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]807; AVX512VPOPCNTDQVL-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0808; AVX512VPOPCNTDQVL-NEXT: retq809;810; BITALG_NOVLX-LABEL: ult_6_v32i8:811; BITALG_NOVLX: # %bb.0:812; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0813; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0814; BITALG_NOVLX-NEXT: vpbroadcastb {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]815; BITALG_NOVLX-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0816; BITALG_NOVLX-NEXT: retq817;818; BITALG-LABEL: ult_6_v32i8:819; BITALG: # %bb.0:820; BITALG-NEXT: vpopcntb %ymm0, %ymm0821; BITALG-NEXT: vpbroadcastb {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]822; BITALG-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0823; BITALG-NEXT: retq824 %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0)825 %3 = icmp ult <32 x i8> %2, <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>826 %4 = sext <32 x i1> %3 to <32 x i8>827 ret <32 x i8> %4828}829 830define <32 x i8> @ugt_6_v32i8(<32 x i8> %0) {831; AVX1-LABEL: ugt_6_v32i8:832; AVX1: # %bb.0:833; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]834; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2835; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]836; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2837; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4838; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4839; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4840; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2841; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0842; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4843; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4844; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0845; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0846; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0847; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0848; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]849; AVX1-NEXT: vpcmpgtb %xmm1, %xmm0, %xmm0850; AVX1-NEXT: vpcmpgtb %xmm1, %xmm2, %xmm1851; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0852; AVX1-NEXT: retq853;854; AVX2-LABEL: ugt_6_v32i8:855; AVX2: # %bb.0:856; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]857; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2858; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]859; AVX2-NEXT: # ymm3 = mem[0,1,0,1]860; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2861; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0862; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0863; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0864; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0865; AVX2-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0866; AVX2-NEXT: retq867;868; AVX512VPOPCNTDQ-LABEL: ugt_6_v32i8:869; AVX512VPOPCNTDQ: # %bb.0:870; AVX512VPOPCNTDQ-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]871; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm2872; AVX512VPOPCNTDQ-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]873; AVX512VPOPCNTDQ-NEXT: # ymm3 = mem[0,1,0,1]874; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm2, %ymm3, %ymm2875; AVX512VPOPCNTDQ-NEXT: vpsrlw $4, %ymm0, %ymm0876; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm0877; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm0, %ymm3, %ymm0878; AVX512VPOPCNTDQ-NEXT: vpaddb %ymm2, %ymm0, %ymm0879; AVX512VPOPCNTDQ-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0880; AVX512VPOPCNTDQ-NEXT: retq881;882; AVX512VPOPCNTDQVL-LABEL: ugt_6_v32i8:883; AVX512VPOPCNTDQVL: # %bb.0:884; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [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]885; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm2886; AVX512VPOPCNTDQVL-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]887; AVX512VPOPCNTDQVL-NEXT: # ymm3 = mem[0,1,0,1]888; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm2, %ymm3, %ymm2889; AVX512VPOPCNTDQVL-NEXT: vpsrlw $4, %ymm0, %ymm0890; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm0891; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm0, %ymm3, %ymm0892; AVX512VPOPCNTDQVL-NEXT: vpaddb %ymm2, %ymm0, %ymm0893; AVX512VPOPCNTDQVL-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0894; AVX512VPOPCNTDQVL-NEXT: retq895;896; BITALG_NOVLX-LABEL: ugt_6_v32i8:897; BITALG_NOVLX: # %bb.0:898; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0899; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0900; BITALG_NOVLX-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0901; BITALG_NOVLX-NEXT: retq902;903; BITALG-LABEL: ugt_6_v32i8:904; BITALG: # %bb.0:905; BITALG-NEXT: vpopcntb %ymm0, %ymm0906; BITALG-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0907; BITALG-NEXT: retq908 %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0)909 %3 = icmp ugt <32 x i8> %2, <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>910 %4 = sext <32 x i1> %3 to <32 x i8>911 ret <32 x i8> %4912}913 914define <32 x i8> @ult_7_v32i8(<32 x i8> %0) {915; AVX1-LABEL: ult_7_v32i8:916; AVX1: # %bb.0:917; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]918; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2919; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]920; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2921; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4922; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4923; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4924; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2925; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0926; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4927; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4928; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0929; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0930; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0931; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0932; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]933; AVX1-NEXT: vpcmpgtb %xmm0, %xmm1, %xmm0934; AVX1-NEXT: vpcmpgtb %xmm2, %xmm1, %xmm1935; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0936; AVX1-NEXT: retq937;938; AVX2-LABEL: ult_7_v32i8:939; AVX2: # %bb.0:940; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]941; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2942; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]943; AVX2-NEXT: # ymm3 = mem[0,1,0,1]944; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2945; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0946; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0947; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0948; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0949; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]950; AVX2-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0951; AVX2-NEXT: retq952;953; AVX512VPOPCNTDQ-LABEL: ult_7_v32i8:954; AVX512VPOPCNTDQ: # %bb.0:955; AVX512VPOPCNTDQ-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]956; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm2957; AVX512VPOPCNTDQ-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]958; AVX512VPOPCNTDQ-NEXT: # ymm3 = mem[0,1,0,1]959; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm2, %ymm3, %ymm2960; AVX512VPOPCNTDQ-NEXT: vpsrlw $4, %ymm0, %ymm0961; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm0962; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm0, %ymm3, %ymm0963; AVX512VPOPCNTDQ-NEXT: vpaddb %ymm2, %ymm0, %ymm0964; AVX512VPOPCNTDQ-NEXT: vpbroadcastb {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]965; AVX512VPOPCNTDQ-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0966; AVX512VPOPCNTDQ-NEXT: retq967;968; AVX512VPOPCNTDQVL-LABEL: ult_7_v32i8:969; AVX512VPOPCNTDQVL: # %bb.0:970; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [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]971; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm2972; AVX512VPOPCNTDQVL-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]973; AVX512VPOPCNTDQVL-NEXT: # ymm3 = mem[0,1,0,1]974; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm2, %ymm3, %ymm2975; AVX512VPOPCNTDQVL-NEXT: vpsrlw $4, %ymm0, %ymm0976; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm0977; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm0, %ymm3, %ymm0978; AVX512VPOPCNTDQVL-NEXT: vpaddb %ymm2, %ymm0, %ymm0979; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]980; AVX512VPOPCNTDQVL-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0981; AVX512VPOPCNTDQVL-NEXT: retq982;983; BITALG_NOVLX-LABEL: ult_7_v32i8:984; BITALG_NOVLX: # %bb.0:985; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0986; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0987; BITALG_NOVLX-NEXT: vpbroadcastb {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]988; BITALG_NOVLX-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0989; BITALG_NOVLX-NEXT: retq990;991; BITALG-LABEL: ult_7_v32i8:992; BITALG: # %bb.0:993; BITALG-NEXT: vpopcntb %ymm0, %ymm0994; BITALG-NEXT: vpbroadcastb {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]995; BITALG-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0996; BITALG-NEXT: retq997 %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0)998 %3 = icmp ult <32 x i8> %2, <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>999 %4 = sext <32 x i1> %3 to <32 x i8>1000 ret <32 x i8> %41001}1002 1003define <16 x i16> @ugt_1_v16i16(<16 x i16> %0) {1004; AVX1-LABEL: ugt_1_v16i16:1005; AVX1: # %bb.0:1006; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm11007; AVX1-NEXT: vpaddw %xmm1, %xmm0, %xmm21008; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm31009; AVX1-NEXT: vpaddw %xmm1, %xmm3, %xmm41010; AVX1-NEXT: vpand %xmm4, %xmm3, %xmm31011; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm41012; AVX1-NEXT: vpcmpeqw %xmm4, %xmm3, %xmm31013; AVX1-NEXT: vpxor %xmm1, %xmm3, %xmm31014; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm01015; AVX1-NEXT: vpcmpeqw %xmm4, %xmm0, %xmm01016; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm01017; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm0, %ymm01018; AVX1-NEXT: retq1019;1020; AVX2-LABEL: ugt_1_v16i16:1021; AVX2: # %bb.0:1022; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm11023; AVX2-NEXT: vpaddw %ymm1, %ymm0, %ymm21024; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm01025; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm21026; AVX2-NEXT: vpcmpeqw %ymm2, %ymm0, %ymm01027; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm01028; AVX2-NEXT: retq1029;1030; AVX512VPOPCNTDQ-LABEL: ugt_1_v16i16:1031; AVX512VPOPCNTDQ: # %bb.0:1032; AVX512VPOPCNTDQ-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm11033; AVX512VPOPCNTDQ-NEXT: vpaddw %ymm1, %ymm0, %ymm11034; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm01035; AVX512VPOPCNTDQ-NEXT: vpxor %xmm1, %xmm1, %xmm11036; AVX512VPOPCNTDQ-NEXT: vpcmpeqw %ymm1, %ymm0, %ymm01037; AVX512VPOPCNTDQ-NEXT: vpternlogq {{.*#+}} zmm0 = ~zmm01038; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm01039; AVX512VPOPCNTDQ-NEXT: retq1040;1041; AVX512VPOPCNTDQVL-LABEL: ugt_1_v16i16:1042; AVX512VPOPCNTDQVL: # %bb.0:1043; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm11044; AVX512VPOPCNTDQVL-NEXT: vpaddw %ymm1, %ymm0, %ymm11045; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm01046; AVX512VPOPCNTDQVL-NEXT: vpxor %xmm1, %xmm1, %xmm11047; AVX512VPOPCNTDQVL-NEXT: vpcmpeqw %ymm1, %ymm0, %ymm01048; AVX512VPOPCNTDQVL-NEXT: vpternlogq {{.*#+}} ymm0 = ~ymm01049; AVX512VPOPCNTDQVL-NEXT: retq1050;1051; BITALG_NOVLX-LABEL: ugt_1_v16i16:1052; BITALG_NOVLX: # %bb.0:1053; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm01054; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm01055; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01056; BITALG_NOVLX-NEXT: retq1057;1058; BITALG-LABEL: ugt_1_v16i16:1059; BITALG: # %bb.0:1060; BITALG-NEXT: vpopcntw %ymm0, %ymm01061; BITALG-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01062; BITALG-NEXT: retq1063 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)1064 %3 = icmp ugt <16 x i16> %2, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>1065 %4 = sext <16 x i1> %3 to <16 x i16>1066 ret <16 x i16> %41067}1068 1069define <16 x i16> @ult_2_v16i16(<16 x i16> %0) {1070; AVX1-LABEL: ult_2_v16i16:1071; AVX1: # %bb.0:1072; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm11073; AVX1-NEXT: vpaddw %xmm1, %xmm0, %xmm21074; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm31075; AVX1-NEXT: vpaddw %xmm1, %xmm3, %xmm11076; AVX1-NEXT: vpand %xmm1, %xmm3, %xmm11077; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm31078; AVX1-NEXT: vpcmpeqw %xmm3, %xmm1, %xmm11079; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm01080; AVX1-NEXT: vpcmpeqw %xmm3, %xmm0, %xmm01081; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm01082; AVX1-NEXT: retq1083;1084; AVX2-LABEL: ult_2_v16i16:1085; AVX2: # %bb.0:1086; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm11087; AVX2-NEXT: vpaddw %ymm1, %ymm0, %ymm11088; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm01089; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm11090; AVX2-NEXT: vpcmpeqw %ymm1, %ymm0, %ymm01091; AVX2-NEXT: retq1092;1093; AVX512VPOPCNTDQ-LABEL: ult_2_v16i16:1094; AVX512VPOPCNTDQ: # %bb.0:1095; AVX512VPOPCNTDQ-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm11096; AVX512VPOPCNTDQ-NEXT: vpaddw %ymm1, %ymm0, %ymm11097; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm01098; AVX512VPOPCNTDQ-NEXT: vpxor %xmm1, %xmm1, %xmm11099; AVX512VPOPCNTDQ-NEXT: vpcmpeqw %ymm1, %ymm0, %ymm01100; AVX512VPOPCNTDQ-NEXT: retq1101;1102; AVX512VPOPCNTDQVL-LABEL: ult_2_v16i16:1103; AVX512VPOPCNTDQVL: # %bb.0:1104; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm11105; AVX512VPOPCNTDQVL-NEXT: vpaddw %ymm1, %ymm0, %ymm11106; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm01107; AVX512VPOPCNTDQVL-NEXT: vpxor %xmm1, %xmm1, %xmm11108; AVX512VPOPCNTDQVL-NEXT: vpcmpeqw %ymm1, %ymm0, %ymm01109; AVX512VPOPCNTDQVL-NEXT: retq1110;1111; BITALG_NOVLX-LABEL: ult_2_v16i16:1112; BITALG_NOVLX: # %bb.0:1113; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm01114; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm01115; BITALG_NOVLX-NEXT: vpbroadcastw {{.*#+}} ymm1 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]1116; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01117; BITALG_NOVLX-NEXT: retq1118;1119; BITALG-LABEL: ult_2_v16i16:1120; BITALG: # %bb.0:1121; BITALG-NEXT: vpopcntw %ymm0, %ymm01122; BITALG-NEXT: vpbroadcastw {{.*#+}} ymm1 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]1123; BITALG-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01124; BITALG-NEXT: retq1125 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)1126 %3 = icmp ult <16 x i16> %2, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>1127 %4 = sext <16 x i1> %3 to <16 x i16>1128 ret <16 x i16> %41129}1130 1131define <16 x i16> @ugt_2_v16i16(<16 x i16> %0) {1132; AVX1-LABEL: ugt_2_v16i16:1133; AVX1: # %bb.0:1134; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]1135; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm21136; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]1137; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm21138; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm41139; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm41140; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm41141; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm21142; AVX1-NEXT: vpsllw $8, %xmm2, %xmm41143; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm21144; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm21145; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm01146; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm41147; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm41148; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm01149; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm01150; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm01151; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm01152; AVX1-NEXT: vpsllw $8, %xmm0, %xmm11153; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm01154; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm01155; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [2,2,2,2,2,2,2,2]1156; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm01157; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm11158; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm01159; AVX1-NEXT: retq1160;1161; AVX2-LABEL: ugt_2_v16i16:1162; AVX2: # %bb.0:1163; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]1164; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm21165; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]1166; AVX2-NEXT: # ymm3 = mem[0,1,0,1]1167; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm21168; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm01169; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm01170; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm01171; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm01172; AVX2-NEXT: vpsllw $8, %ymm0, %ymm11173; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm01174; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm01175; AVX2-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01176; AVX2-NEXT: retq1177;1178; AVX512VPOPCNTDQ-LABEL: ugt_2_v16i16:1179; AVX512VPOPCNTDQ: # %bb.0:1180; AVX512VPOPCNTDQ-NEXT: vpmovzxwd {{.*#+}} 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],zero1181; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm01182; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm01183; AVX512VPOPCNTDQ-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01184; AVX512VPOPCNTDQ-NEXT: retq1185;1186; AVX512VPOPCNTDQVL-LABEL: ugt_2_v16i16:1187; AVX512VPOPCNTDQVL: # %bb.0:1188; AVX512VPOPCNTDQVL-NEXT: vpmovzxwd {{.*#+}} 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],zero1189; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm01190; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm01191; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01192; AVX512VPOPCNTDQVL-NEXT: retq1193;1194; BITALG_NOVLX-LABEL: ugt_2_v16i16:1195; BITALG_NOVLX: # %bb.0:1196; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm01197; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm01198; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01199; BITALG_NOVLX-NEXT: retq1200;1201; BITALG-LABEL: ugt_2_v16i16:1202; BITALG: # %bb.0:1203; BITALG-NEXT: vpopcntw %ymm0, %ymm01204; BITALG-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01205; BITALG-NEXT: retq1206 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)1207 %3 = icmp ugt <16 x i16> %2, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>1208 %4 = sext <16 x i1> %3 to <16 x i16>1209 ret <16 x i16> %41210}1211 1212define <16 x i16> @ult_3_v16i16(<16 x i16> %0) {1213; AVX1-LABEL: ult_3_v16i16:1214; AVX1: # %bb.0:1215; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]1216; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm21217; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]1218; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm21219; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm41220; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm41221; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm41222; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm21223; AVX1-NEXT: vpsllw $8, %xmm2, %xmm41224; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm21225; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm21226; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm01227; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm41228; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm41229; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm01230; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm01231; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm01232; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm01233; AVX1-NEXT: vpsllw $8, %xmm0, %xmm11234; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm01235; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm01236; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [3,3,3,3,3,3,3,3]1237; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm01238; AVX1-NEXT: vpcmpgtw %xmm2, %xmm1, %xmm11239; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm01240; AVX1-NEXT: retq1241;1242; AVX2-LABEL: ult_3_v16i16:1243; AVX2: # %bb.0:1244; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]1245; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm21246; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]1247; AVX2-NEXT: # ymm3 = mem[0,1,0,1]1248; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm21249; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm01250; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm01251; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm01252; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm01253; AVX2-NEXT: vpsllw $8, %ymm0, %ymm11254; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm01255; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm01256; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]1257; AVX2-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01258; AVX2-NEXT: retq1259;1260; AVX512VPOPCNTDQ-LABEL: ult_3_v16i16:1261; AVX512VPOPCNTDQ: # %bb.0:1262; AVX512VPOPCNTDQ-NEXT: vpmovzxwd {{.*#+}} 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],zero1263; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm01264; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm01265; AVX512VPOPCNTDQ-NEXT: vpbroadcastw {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]1266; AVX512VPOPCNTDQ-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01267; AVX512VPOPCNTDQ-NEXT: retq1268;1269; AVX512VPOPCNTDQVL-LABEL: ult_3_v16i16:1270; AVX512VPOPCNTDQVL: # %bb.0:1271; AVX512VPOPCNTDQVL-NEXT: vpmovzxwd {{.*#+}} 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],zero1272; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm01273; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm01274; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]1275; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01276; AVX512VPOPCNTDQVL-NEXT: retq1277;1278; BITALG_NOVLX-LABEL: ult_3_v16i16:1279; BITALG_NOVLX: # %bb.0:1280; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm01281; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm01282; BITALG_NOVLX-NEXT: vpbroadcastw {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]1283; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01284; BITALG_NOVLX-NEXT: retq1285;1286; BITALG-LABEL: ult_3_v16i16:1287; BITALG: # %bb.0:1288; BITALG-NEXT: vpopcntw %ymm0, %ymm01289; BITALG-NEXT: vpbroadcastw {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]1290; BITALG-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01291; BITALG-NEXT: retq1292 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)1293 %3 = icmp ult <16 x i16> %2, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>1294 %4 = sext <16 x i1> %3 to <16 x i16>1295 ret <16 x i16> %41296}1297 1298define <16 x i16> @ugt_3_v16i16(<16 x i16> %0) {1299; AVX1-LABEL: ugt_3_v16i16:1300; AVX1: # %bb.0:1301; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]1302; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm21303; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]1304; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm21305; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm41306; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm41307; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm41308; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm21309; AVX1-NEXT: vpsllw $8, %xmm2, %xmm41310; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm21311; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm21312; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm01313; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm41314; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm41315; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm01316; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm01317; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm01318; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm01319; AVX1-NEXT: vpsllw $8, %xmm0, %xmm11320; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm01321; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm01322; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [3,3,3,3,3,3,3,3]1323; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm01324; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm11325; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm01326; AVX1-NEXT: retq1327;1328; AVX2-LABEL: ugt_3_v16i16:1329; AVX2: # %bb.0:1330; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]1331; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm21332; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]1333; AVX2-NEXT: # ymm3 = mem[0,1,0,1]1334; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm21335; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm01336; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm01337; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm01338; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm01339; AVX2-NEXT: vpsllw $8, %ymm0, %ymm11340; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm01341; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm01342; AVX2-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01343; AVX2-NEXT: retq1344;1345; AVX512VPOPCNTDQ-LABEL: ugt_3_v16i16:1346; AVX512VPOPCNTDQ: # %bb.0:1347; AVX512VPOPCNTDQ-NEXT: vpmovzxwd {{.*#+}} 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],zero1348; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm01349; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm01350; AVX512VPOPCNTDQ-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01351; AVX512VPOPCNTDQ-NEXT: retq1352;1353; AVX512VPOPCNTDQVL-LABEL: ugt_3_v16i16:1354; AVX512VPOPCNTDQVL: # %bb.0:1355; AVX512VPOPCNTDQVL-NEXT: vpmovzxwd {{.*#+}} 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],zero1356; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm01357; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm01358; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01359; AVX512VPOPCNTDQVL-NEXT: retq1360;1361; BITALG_NOVLX-LABEL: ugt_3_v16i16:1362; BITALG_NOVLX: # %bb.0:1363; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm01364; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm01365; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01366; BITALG_NOVLX-NEXT: retq1367;1368; BITALG-LABEL: ugt_3_v16i16:1369; BITALG: # %bb.0:1370; BITALG-NEXT: vpopcntw %ymm0, %ymm01371; BITALG-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01372; BITALG-NEXT: retq1373 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)1374 %3 = icmp ugt <16 x i16> %2, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>1375 %4 = sext <16 x i1> %3 to <16 x i16>1376 ret <16 x i16> %41377}1378 1379define <16 x i16> @ult_4_v16i16(<16 x i16> %0) {1380; AVX1-LABEL: ult_4_v16i16:1381; AVX1: # %bb.0:1382; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]1383; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm21384; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]1385; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm21386; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm41387; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm41388; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm41389; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm21390; AVX1-NEXT: vpsllw $8, %xmm2, %xmm41391; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm21392; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm21393; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm01394; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm41395; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm41396; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm01397; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm01398; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm01399; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm01400; AVX1-NEXT: vpsllw $8, %xmm0, %xmm11401; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm01402; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm01403; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4]1404; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm01405; AVX1-NEXT: vpcmpgtw %xmm2, %xmm1, %xmm11406; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm01407; AVX1-NEXT: retq1408;1409; AVX2-LABEL: ult_4_v16i16:1410; AVX2: # %bb.0:1411; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]1412; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm21413; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]1414; AVX2-NEXT: # ymm3 = mem[0,1,0,1]1415; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm21416; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm01417; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm01418; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm01419; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm01420; AVX2-NEXT: vpsllw $8, %ymm0, %ymm11421; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm01422; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm01423; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]1424; AVX2-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01425; AVX2-NEXT: retq1426;1427; AVX512VPOPCNTDQ-LABEL: ult_4_v16i16:1428; AVX512VPOPCNTDQ: # %bb.0:1429; AVX512VPOPCNTDQ-NEXT: vpmovzxwd {{.*#+}} 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],zero1430; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm01431; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm01432; AVX512VPOPCNTDQ-NEXT: vpbroadcastw {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]1433; AVX512VPOPCNTDQ-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01434; AVX512VPOPCNTDQ-NEXT: retq1435;1436; AVX512VPOPCNTDQVL-LABEL: ult_4_v16i16:1437; AVX512VPOPCNTDQVL: # %bb.0:1438; AVX512VPOPCNTDQVL-NEXT: vpmovzxwd {{.*#+}} 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],zero1439; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm01440; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm01441; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]1442; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01443; AVX512VPOPCNTDQVL-NEXT: retq1444;1445; BITALG_NOVLX-LABEL: ult_4_v16i16:1446; BITALG_NOVLX: # %bb.0:1447; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm01448; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm01449; BITALG_NOVLX-NEXT: vpbroadcastw {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]1450; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01451; BITALG_NOVLX-NEXT: retq1452;1453; BITALG-LABEL: ult_4_v16i16:1454; BITALG: # %bb.0:1455; BITALG-NEXT: vpopcntw %ymm0, %ymm01456; BITALG-NEXT: vpbroadcastw {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]1457; BITALG-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01458; BITALG-NEXT: retq1459 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)1460 %3 = icmp ult <16 x i16> %2, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>1461 %4 = sext <16 x i1> %3 to <16 x i16>1462 ret <16 x i16> %41463}1464 1465define <16 x i16> @ugt_4_v16i16(<16 x i16> %0) {1466; AVX1-LABEL: ugt_4_v16i16:1467; AVX1: # %bb.0:1468; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]1469; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm21470; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]1471; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm21472; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm41473; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm41474; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm41475; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm21476; AVX1-NEXT: vpsllw $8, %xmm2, %xmm41477; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm21478; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm21479; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm01480; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm41481; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm41482; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm01483; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm01484; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm01485; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm01486; AVX1-NEXT: vpsllw $8, %xmm0, %xmm11487; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm01488; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm01489; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4]1490; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm01491; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm11492; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm01493; AVX1-NEXT: retq1494;1495; AVX2-LABEL: ugt_4_v16i16:1496; AVX2: # %bb.0:1497; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]1498; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm21499; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]1500; AVX2-NEXT: # ymm3 = mem[0,1,0,1]1501; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm21502; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm01503; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm01504; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm01505; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm01506; AVX2-NEXT: vpsllw $8, %ymm0, %ymm11507; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm01508; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm01509; AVX2-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01510; AVX2-NEXT: retq1511;1512; AVX512VPOPCNTDQ-LABEL: ugt_4_v16i16:1513; AVX512VPOPCNTDQ: # %bb.0:1514; AVX512VPOPCNTDQ-NEXT: vpmovzxwd {{.*#+}} 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],zero1515; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm01516; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm01517; AVX512VPOPCNTDQ-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01518; AVX512VPOPCNTDQ-NEXT: retq1519;1520; AVX512VPOPCNTDQVL-LABEL: ugt_4_v16i16:1521; AVX512VPOPCNTDQVL: # %bb.0:1522; AVX512VPOPCNTDQVL-NEXT: vpmovzxwd {{.*#+}} 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],zero1523; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm01524; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm01525; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01526; AVX512VPOPCNTDQVL-NEXT: retq1527;1528; BITALG_NOVLX-LABEL: ugt_4_v16i16:1529; BITALG_NOVLX: # %bb.0:1530; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm01531; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm01532; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01533; BITALG_NOVLX-NEXT: retq1534;1535; BITALG-LABEL: ugt_4_v16i16:1536; BITALG: # %bb.0:1537; BITALG-NEXT: vpopcntw %ymm0, %ymm01538; BITALG-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01539; BITALG-NEXT: retq1540 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)1541 %3 = icmp ugt <16 x i16> %2, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>1542 %4 = sext <16 x i1> %3 to <16 x i16>1543 ret <16 x i16> %41544}1545 1546define <16 x i16> @ult_5_v16i16(<16 x i16> %0) {1547; AVX1-LABEL: ult_5_v16i16:1548; AVX1: # %bb.0:1549; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]1550; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm21551; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]1552; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm21553; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm41554; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm41555; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm41556; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm21557; AVX1-NEXT: vpsllw $8, %xmm2, %xmm41558; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm21559; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm21560; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm01561; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm41562; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm41563; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm01564; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm01565; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm01566; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm01567; AVX1-NEXT: vpsllw $8, %xmm0, %xmm11568; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm01569; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm01570; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [5,5,5,5,5,5,5,5]1571; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm01572; AVX1-NEXT: vpcmpgtw %xmm2, %xmm1, %xmm11573; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm01574; AVX1-NEXT: retq1575;1576; AVX2-LABEL: ult_5_v16i16:1577; AVX2: # %bb.0:1578; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]1579; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm21580; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]1581; AVX2-NEXT: # ymm3 = mem[0,1,0,1]1582; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm21583; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm01584; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm01585; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm01586; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm01587; AVX2-NEXT: vpsllw $8, %ymm0, %ymm11588; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm01589; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm01590; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]1591; AVX2-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01592; AVX2-NEXT: retq1593;1594; AVX512VPOPCNTDQ-LABEL: ult_5_v16i16:1595; AVX512VPOPCNTDQ: # %bb.0:1596; AVX512VPOPCNTDQ-NEXT: vpmovzxwd {{.*#+}} 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],zero1597; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm01598; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm01599; AVX512VPOPCNTDQ-NEXT: vpbroadcastw {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]1600; AVX512VPOPCNTDQ-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01601; AVX512VPOPCNTDQ-NEXT: retq1602;1603; AVX512VPOPCNTDQVL-LABEL: ult_5_v16i16:1604; AVX512VPOPCNTDQVL: # %bb.0:1605; AVX512VPOPCNTDQVL-NEXT: vpmovzxwd {{.*#+}} 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],zero1606; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm01607; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm01608; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]1609; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01610; AVX512VPOPCNTDQVL-NEXT: retq1611;1612; BITALG_NOVLX-LABEL: ult_5_v16i16:1613; BITALG_NOVLX: # %bb.0:1614; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm01615; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm01616; BITALG_NOVLX-NEXT: vpbroadcastw {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]1617; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01618; BITALG_NOVLX-NEXT: retq1619;1620; BITALG-LABEL: ult_5_v16i16:1621; BITALG: # %bb.0:1622; BITALG-NEXT: vpopcntw %ymm0, %ymm01623; BITALG-NEXT: vpbroadcastw {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]1624; BITALG-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01625; BITALG-NEXT: retq1626 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)1627 %3 = icmp ult <16 x i16> %2, <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>1628 %4 = sext <16 x i1> %3 to <16 x i16>1629 ret <16 x i16> %41630}1631 1632define <16 x i16> @ugt_5_v16i16(<16 x i16> %0) {1633; AVX1-LABEL: ugt_5_v16i16:1634; AVX1: # %bb.0:1635; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]1636; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm21637; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]1638; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm21639; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm41640; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm41641; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm41642; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm21643; AVX1-NEXT: vpsllw $8, %xmm2, %xmm41644; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm21645; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm21646; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm01647; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm41648; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm41649; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm01650; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm01651; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm01652; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm01653; AVX1-NEXT: vpsllw $8, %xmm0, %xmm11654; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm01655; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm01656; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [5,5,5,5,5,5,5,5]1657; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm01658; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm11659; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm01660; AVX1-NEXT: retq1661;1662; AVX2-LABEL: ugt_5_v16i16:1663; AVX2: # %bb.0:1664; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]1665; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm21666; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]1667; AVX2-NEXT: # ymm3 = mem[0,1,0,1]1668; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm21669; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm01670; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm01671; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm01672; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm01673; AVX2-NEXT: vpsllw $8, %ymm0, %ymm11674; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm01675; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm01676; AVX2-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01677; AVX2-NEXT: retq1678;1679; AVX512VPOPCNTDQ-LABEL: ugt_5_v16i16:1680; AVX512VPOPCNTDQ: # %bb.0:1681; AVX512VPOPCNTDQ-NEXT: vpmovzxwd {{.*#+}} 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],zero1682; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm01683; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm01684; AVX512VPOPCNTDQ-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01685; AVX512VPOPCNTDQ-NEXT: retq1686;1687; AVX512VPOPCNTDQVL-LABEL: ugt_5_v16i16:1688; AVX512VPOPCNTDQVL: # %bb.0:1689; AVX512VPOPCNTDQVL-NEXT: vpmovzxwd {{.*#+}} 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],zero1690; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm01691; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm01692; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01693; AVX512VPOPCNTDQVL-NEXT: retq1694;1695; BITALG_NOVLX-LABEL: ugt_5_v16i16:1696; BITALG_NOVLX: # %bb.0:1697; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm01698; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm01699; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01700; BITALG_NOVLX-NEXT: retq1701;1702; BITALG-LABEL: ugt_5_v16i16:1703; BITALG: # %bb.0:1704; BITALG-NEXT: vpopcntw %ymm0, %ymm01705; BITALG-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01706; BITALG-NEXT: retq1707 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)1708 %3 = icmp ugt <16 x i16> %2, <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>1709 %4 = sext <16 x i1> %3 to <16 x i16>1710 ret <16 x i16> %41711}1712 1713define <16 x i16> @ult_6_v16i16(<16 x i16> %0) {1714; AVX1-LABEL: ult_6_v16i16:1715; AVX1: # %bb.0:1716; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]1717; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm21718; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]1719; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm21720; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm41721; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm41722; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm41723; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm21724; AVX1-NEXT: vpsllw $8, %xmm2, %xmm41725; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm21726; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm21727; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm01728; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm41729; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm41730; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm01731; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm01732; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm01733; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm01734; AVX1-NEXT: vpsllw $8, %xmm0, %xmm11735; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm01736; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm01737; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [6,6,6,6,6,6,6,6]1738; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm01739; AVX1-NEXT: vpcmpgtw %xmm2, %xmm1, %xmm11740; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm01741; AVX1-NEXT: retq1742;1743; AVX2-LABEL: ult_6_v16i16:1744; AVX2: # %bb.0:1745; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]1746; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm21747; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]1748; AVX2-NEXT: # ymm3 = mem[0,1,0,1]1749; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm21750; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm01751; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm01752; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm01753; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm01754; AVX2-NEXT: vpsllw $8, %ymm0, %ymm11755; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm01756; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm01757; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]1758; AVX2-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01759; AVX2-NEXT: retq1760;1761; AVX512VPOPCNTDQ-LABEL: ult_6_v16i16:1762; AVX512VPOPCNTDQ: # %bb.0:1763; AVX512VPOPCNTDQ-NEXT: vpmovzxwd {{.*#+}} 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],zero1764; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm01765; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm01766; AVX512VPOPCNTDQ-NEXT: vpbroadcastw {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]1767; AVX512VPOPCNTDQ-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01768; AVX512VPOPCNTDQ-NEXT: retq1769;1770; AVX512VPOPCNTDQVL-LABEL: ult_6_v16i16:1771; AVX512VPOPCNTDQVL: # %bb.0:1772; AVX512VPOPCNTDQVL-NEXT: vpmovzxwd {{.*#+}} 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],zero1773; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm01774; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm01775; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]1776; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01777; AVX512VPOPCNTDQVL-NEXT: retq1778;1779; BITALG_NOVLX-LABEL: ult_6_v16i16:1780; BITALG_NOVLX: # %bb.0:1781; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm01782; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm01783; BITALG_NOVLX-NEXT: vpbroadcastw {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]1784; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01785; BITALG_NOVLX-NEXT: retq1786;1787; BITALG-LABEL: ult_6_v16i16:1788; BITALG: # %bb.0:1789; BITALG-NEXT: vpopcntw %ymm0, %ymm01790; BITALG-NEXT: vpbroadcastw {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]1791; BITALG-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01792; BITALG-NEXT: retq1793 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)1794 %3 = icmp ult <16 x i16> %2, <i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6>1795 %4 = sext <16 x i1> %3 to <16 x i16>1796 ret <16 x i16> %41797}1798 1799define <16 x i16> @ugt_6_v16i16(<16 x i16> %0) {1800; AVX1-LABEL: ugt_6_v16i16:1801; AVX1: # %bb.0:1802; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]1803; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm21804; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]1805; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm21806; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm41807; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm41808; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm41809; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm21810; AVX1-NEXT: vpsllw $8, %xmm2, %xmm41811; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm21812; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm21813; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm01814; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm41815; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm41816; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm01817; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm01818; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm01819; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm01820; AVX1-NEXT: vpsllw $8, %xmm0, %xmm11821; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm01822; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm01823; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [6,6,6,6,6,6,6,6]1824; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm01825; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm11826; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm01827; AVX1-NEXT: retq1828;1829; AVX2-LABEL: ugt_6_v16i16:1830; AVX2: # %bb.0:1831; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]1832; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm21833; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]1834; AVX2-NEXT: # ymm3 = mem[0,1,0,1]1835; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm21836; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm01837; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm01838; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm01839; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm01840; AVX2-NEXT: vpsllw $8, %ymm0, %ymm11841; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm01842; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm01843; AVX2-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01844; AVX2-NEXT: retq1845;1846; AVX512VPOPCNTDQ-LABEL: ugt_6_v16i16:1847; AVX512VPOPCNTDQ: # %bb.0:1848; AVX512VPOPCNTDQ-NEXT: vpmovzxwd {{.*#+}} 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],zero1849; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm01850; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm01851; AVX512VPOPCNTDQ-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01852; AVX512VPOPCNTDQ-NEXT: retq1853;1854; AVX512VPOPCNTDQVL-LABEL: ugt_6_v16i16:1855; AVX512VPOPCNTDQVL: # %bb.0:1856; AVX512VPOPCNTDQVL-NEXT: vpmovzxwd {{.*#+}} 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],zero1857; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm01858; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm01859; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01860; AVX512VPOPCNTDQVL-NEXT: retq1861;1862; BITALG_NOVLX-LABEL: ugt_6_v16i16:1863; BITALG_NOVLX: # %bb.0:1864; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm01865; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm01866; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01867; BITALG_NOVLX-NEXT: retq1868;1869; BITALG-LABEL: ugt_6_v16i16:1870; BITALG: # %bb.0:1871; BITALG-NEXT: vpopcntw %ymm0, %ymm01872; BITALG-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01873; BITALG-NEXT: retq1874 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)1875 %3 = icmp ugt <16 x i16> %2, <i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6>1876 %4 = sext <16 x i1> %3 to <16 x i16>1877 ret <16 x i16> %41878}1879 1880define <16 x i16> @ult_7_v16i16(<16 x i16> %0) {1881; AVX1-LABEL: ult_7_v16i16:1882; AVX1: # %bb.0:1883; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]1884; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm21885; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]1886; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm21887; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm41888; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm41889; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm41890; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm21891; AVX1-NEXT: vpsllw $8, %xmm2, %xmm41892; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm21893; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm21894; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm01895; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm41896; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm41897; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm01898; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm01899; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm01900; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm01901; AVX1-NEXT: vpsllw $8, %xmm0, %xmm11902; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm01903; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm01904; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [7,7,7,7,7,7,7,7]1905; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm01906; AVX1-NEXT: vpcmpgtw %xmm2, %xmm1, %xmm11907; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm01908; AVX1-NEXT: retq1909;1910; AVX2-LABEL: ult_7_v16i16:1911; AVX2: # %bb.0:1912; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]1913; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm21914; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]1915; AVX2-NEXT: # ymm3 = mem[0,1,0,1]1916; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm21917; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm01918; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm01919; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm01920; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm01921; AVX2-NEXT: vpsllw $8, %ymm0, %ymm11922; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm01923; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm01924; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]1925; AVX2-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01926; AVX2-NEXT: retq1927;1928; AVX512VPOPCNTDQ-LABEL: ult_7_v16i16:1929; AVX512VPOPCNTDQ: # %bb.0:1930; AVX512VPOPCNTDQ-NEXT: vpmovzxwd {{.*#+}} 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],zero1931; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm01932; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm01933; AVX512VPOPCNTDQ-NEXT: vpbroadcastw {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]1934; AVX512VPOPCNTDQ-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01935; AVX512VPOPCNTDQ-NEXT: retq1936;1937; AVX512VPOPCNTDQVL-LABEL: ult_7_v16i16:1938; AVX512VPOPCNTDQVL: # %bb.0:1939; AVX512VPOPCNTDQVL-NEXT: vpmovzxwd {{.*#+}} 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],zero1940; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm01941; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm01942; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]1943; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01944; AVX512VPOPCNTDQVL-NEXT: retq1945;1946; BITALG_NOVLX-LABEL: ult_7_v16i16:1947; BITALG_NOVLX: # %bb.0:1948; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm01949; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm01950; BITALG_NOVLX-NEXT: vpbroadcastw {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]1951; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01952; BITALG_NOVLX-NEXT: retq1953;1954; BITALG-LABEL: ult_7_v16i16:1955; BITALG: # %bb.0:1956; BITALG-NEXT: vpopcntw %ymm0, %ymm01957; BITALG-NEXT: vpbroadcastw {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]1958; BITALG-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm01959; BITALG-NEXT: retq1960 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)1961 %3 = icmp ult <16 x i16> %2, <i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7>1962 %4 = sext <16 x i1> %3 to <16 x i16>1963 ret <16 x i16> %41964}1965 1966define <16 x i16> @ugt_7_v16i16(<16 x i16> %0) {1967; AVX1-LABEL: ugt_7_v16i16:1968; AVX1: # %bb.0:1969; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]1970; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm21971; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]1972; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm21973; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm41974; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm41975; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm41976; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm21977; AVX1-NEXT: vpsllw $8, %xmm2, %xmm41978; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm21979; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm21980; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm01981; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm41982; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm41983; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm01984; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm01985; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm01986; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm01987; AVX1-NEXT: vpsllw $8, %xmm0, %xmm11988; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm01989; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm01990; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [7,7,7,7,7,7,7,7]1991; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm01992; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm11993; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm01994; AVX1-NEXT: retq1995;1996; AVX2-LABEL: ugt_7_v16i16:1997; AVX2: # %bb.0:1998; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]1999; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm22000; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]2001; AVX2-NEXT: # ymm3 = mem[0,1,0,1]2002; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm22003; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm02004; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm02005; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm02006; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm02007; AVX2-NEXT: vpsllw $8, %ymm0, %ymm12008; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm02009; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm02010; AVX2-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02011; AVX2-NEXT: retq2012;2013; AVX512VPOPCNTDQ-LABEL: ugt_7_v16i16:2014; AVX512VPOPCNTDQ: # %bb.0:2015; AVX512VPOPCNTDQ-NEXT: vpmovzxwd {{.*#+}} 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],zero2016; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm02017; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm02018; AVX512VPOPCNTDQ-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02019; AVX512VPOPCNTDQ-NEXT: retq2020;2021; AVX512VPOPCNTDQVL-LABEL: ugt_7_v16i16:2022; AVX512VPOPCNTDQVL: # %bb.0:2023; AVX512VPOPCNTDQVL-NEXT: vpmovzxwd {{.*#+}} 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],zero2024; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm02025; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm02026; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02027; AVX512VPOPCNTDQVL-NEXT: retq2028;2029; BITALG_NOVLX-LABEL: ugt_7_v16i16:2030; BITALG_NOVLX: # %bb.0:2031; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm02032; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm02033; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02034; BITALG_NOVLX-NEXT: retq2035;2036; BITALG-LABEL: ugt_7_v16i16:2037; BITALG: # %bb.0:2038; BITALG-NEXT: vpopcntw %ymm0, %ymm02039; BITALG-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02040; BITALG-NEXT: retq2041 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)2042 %3 = icmp ugt <16 x i16> %2, <i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7>2043 %4 = sext <16 x i1> %3 to <16 x i16>2044 ret <16 x i16> %42045}2046 2047define <16 x i16> @ult_8_v16i16(<16 x i16> %0) {2048; AVX1-LABEL: ult_8_v16i16:2049; AVX1: # %bb.0:2050; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]2051; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm22052; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]2053; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm22054; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm42055; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm42056; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm42057; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm22058; AVX1-NEXT: vpsllw $8, %xmm2, %xmm42059; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm22060; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm22061; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm02062; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm42063; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm42064; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm02065; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm02066; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm02067; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm02068; AVX1-NEXT: vpsllw $8, %xmm0, %xmm12069; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm02070; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm02071; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [8,8,8,8,8,8,8,8]2072; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm02073; AVX1-NEXT: vpcmpgtw %xmm2, %xmm1, %xmm12074; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm02075; AVX1-NEXT: retq2076;2077; AVX2-LABEL: ult_8_v16i16:2078; AVX2: # %bb.0:2079; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]2080; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm22081; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]2082; AVX2-NEXT: # ymm3 = mem[0,1,0,1]2083; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm22084; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm02085; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm02086; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm02087; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm02088; AVX2-NEXT: vpsllw $8, %ymm0, %ymm12089; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm02090; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm02091; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]2092; AVX2-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02093; AVX2-NEXT: retq2094;2095; AVX512VPOPCNTDQ-LABEL: ult_8_v16i16:2096; AVX512VPOPCNTDQ: # %bb.0:2097; AVX512VPOPCNTDQ-NEXT: vpmovzxwd {{.*#+}} 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],zero2098; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm02099; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm02100; AVX512VPOPCNTDQ-NEXT: vpbroadcastw {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]2101; AVX512VPOPCNTDQ-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02102; AVX512VPOPCNTDQ-NEXT: retq2103;2104; AVX512VPOPCNTDQVL-LABEL: ult_8_v16i16:2105; AVX512VPOPCNTDQVL: # %bb.0:2106; AVX512VPOPCNTDQVL-NEXT: vpmovzxwd {{.*#+}} 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],zero2107; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm02108; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm02109; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]2110; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02111; AVX512VPOPCNTDQVL-NEXT: retq2112;2113; BITALG_NOVLX-LABEL: ult_8_v16i16:2114; BITALG_NOVLX: # %bb.0:2115; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm02116; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm02117; BITALG_NOVLX-NEXT: vpbroadcastw {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]2118; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02119; BITALG_NOVLX-NEXT: retq2120;2121; BITALG-LABEL: ult_8_v16i16:2122; BITALG: # %bb.0:2123; BITALG-NEXT: vpopcntw %ymm0, %ymm02124; BITALG-NEXT: vpbroadcastw {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]2125; BITALG-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02126; BITALG-NEXT: retq2127 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)2128 %3 = icmp ult <16 x i16> %2, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>2129 %4 = sext <16 x i1> %3 to <16 x i16>2130 ret <16 x i16> %42131}2132 2133define <16 x i16> @ugt_8_v16i16(<16 x i16> %0) {2134; AVX1-LABEL: ugt_8_v16i16:2135; AVX1: # %bb.0:2136; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]2137; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm22138; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]2139; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm22140; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm42141; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm42142; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm42143; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm22144; AVX1-NEXT: vpsllw $8, %xmm2, %xmm42145; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm22146; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm22147; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm02148; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm42149; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm42150; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm02151; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm02152; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm02153; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm02154; AVX1-NEXT: vpsllw $8, %xmm0, %xmm12155; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm02156; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm02157; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [8,8,8,8,8,8,8,8]2158; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm02159; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm12160; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm02161; AVX1-NEXT: retq2162;2163; AVX2-LABEL: ugt_8_v16i16:2164; AVX2: # %bb.0:2165; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]2166; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm22167; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]2168; AVX2-NEXT: # ymm3 = mem[0,1,0,1]2169; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm22170; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm02171; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm02172; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm02173; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm02174; AVX2-NEXT: vpsllw $8, %ymm0, %ymm12175; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm02176; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm02177; AVX2-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02178; AVX2-NEXT: retq2179;2180; AVX512VPOPCNTDQ-LABEL: ugt_8_v16i16:2181; AVX512VPOPCNTDQ: # %bb.0:2182; AVX512VPOPCNTDQ-NEXT: vpmovzxwd {{.*#+}} 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],zero2183; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm02184; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm02185; AVX512VPOPCNTDQ-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02186; AVX512VPOPCNTDQ-NEXT: retq2187;2188; AVX512VPOPCNTDQVL-LABEL: ugt_8_v16i16:2189; AVX512VPOPCNTDQVL: # %bb.0:2190; AVX512VPOPCNTDQVL-NEXT: vpmovzxwd {{.*#+}} 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],zero2191; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm02192; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm02193; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02194; AVX512VPOPCNTDQVL-NEXT: retq2195;2196; BITALG_NOVLX-LABEL: ugt_8_v16i16:2197; BITALG_NOVLX: # %bb.0:2198; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm02199; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm02200; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02201; BITALG_NOVLX-NEXT: retq2202;2203; BITALG-LABEL: ugt_8_v16i16:2204; BITALG: # %bb.0:2205; BITALG-NEXT: vpopcntw %ymm0, %ymm02206; BITALG-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02207; BITALG-NEXT: retq2208 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)2209 %3 = icmp ugt <16 x i16> %2, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>2210 %4 = sext <16 x i1> %3 to <16 x i16>2211 ret <16 x i16> %42212}2213 2214define <16 x i16> @ult_9_v16i16(<16 x i16> %0) {2215; AVX1-LABEL: ult_9_v16i16:2216; AVX1: # %bb.0:2217; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]2218; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm22219; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]2220; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm22221; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm42222; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm42223; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm42224; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm22225; AVX1-NEXT: vpsllw $8, %xmm2, %xmm42226; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm22227; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm22228; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm02229; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm42230; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm42231; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm02232; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm02233; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm02234; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm02235; AVX1-NEXT: vpsllw $8, %xmm0, %xmm12236; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm02237; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm02238; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [9,9,9,9,9,9,9,9]2239; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm02240; AVX1-NEXT: vpcmpgtw %xmm2, %xmm1, %xmm12241; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm02242; AVX1-NEXT: retq2243;2244; AVX2-LABEL: ult_9_v16i16:2245; AVX2: # %bb.0:2246; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]2247; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm22248; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]2249; AVX2-NEXT: # ymm3 = mem[0,1,0,1]2250; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm22251; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm02252; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm02253; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm02254; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm02255; AVX2-NEXT: vpsllw $8, %ymm0, %ymm12256; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm02257; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm02258; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9]2259; AVX2-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02260; AVX2-NEXT: retq2261;2262; AVX512VPOPCNTDQ-LABEL: ult_9_v16i16:2263; AVX512VPOPCNTDQ: # %bb.0:2264; AVX512VPOPCNTDQ-NEXT: vpmovzxwd {{.*#+}} 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],zero2265; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm02266; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm02267; AVX512VPOPCNTDQ-NEXT: vpbroadcastw {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9]2268; AVX512VPOPCNTDQ-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02269; AVX512VPOPCNTDQ-NEXT: retq2270;2271; AVX512VPOPCNTDQVL-LABEL: ult_9_v16i16:2272; AVX512VPOPCNTDQVL: # %bb.0:2273; AVX512VPOPCNTDQVL-NEXT: vpmovzxwd {{.*#+}} 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],zero2274; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm02275; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm02276; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9]2277; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02278; AVX512VPOPCNTDQVL-NEXT: retq2279;2280; BITALG_NOVLX-LABEL: ult_9_v16i16:2281; BITALG_NOVLX: # %bb.0:2282; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm02283; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm02284; BITALG_NOVLX-NEXT: vpbroadcastw {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9]2285; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02286; BITALG_NOVLX-NEXT: retq2287;2288; BITALG-LABEL: ult_9_v16i16:2289; BITALG: # %bb.0:2290; BITALG-NEXT: vpopcntw %ymm0, %ymm02291; BITALG-NEXT: vpbroadcastw {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9]2292; BITALG-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02293; BITALG-NEXT: retq2294 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)2295 %3 = icmp ult <16 x i16> %2, <i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9>2296 %4 = sext <16 x i1> %3 to <16 x i16>2297 ret <16 x i16> %42298}2299 2300define <16 x i16> @ugt_9_v16i16(<16 x i16> %0) {2301; AVX1-LABEL: ugt_9_v16i16:2302; AVX1: # %bb.0:2303; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]2304; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm22305; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]2306; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm22307; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm42308; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm42309; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm42310; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm22311; AVX1-NEXT: vpsllw $8, %xmm2, %xmm42312; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm22313; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm22314; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm02315; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm42316; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm42317; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm02318; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm02319; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm02320; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm02321; AVX1-NEXT: vpsllw $8, %xmm0, %xmm12322; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm02323; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm02324; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [9,9,9,9,9,9,9,9]2325; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm02326; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm12327; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm02328; AVX1-NEXT: retq2329;2330; AVX2-LABEL: ugt_9_v16i16:2331; AVX2: # %bb.0:2332; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]2333; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm22334; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]2335; AVX2-NEXT: # ymm3 = mem[0,1,0,1]2336; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm22337; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm02338; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm02339; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm02340; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm02341; AVX2-NEXT: vpsllw $8, %ymm0, %ymm12342; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm02343; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm02344; AVX2-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02345; AVX2-NEXT: retq2346;2347; AVX512VPOPCNTDQ-LABEL: ugt_9_v16i16:2348; AVX512VPOPCNTDQ: # %bb.0:2349; AVX512VPOPCNTDQ-NEXT: vpmovzxwd {{.*#+}} 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],zero2350; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm02351; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm02352; AVX512VPOPCNTDQ-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02353; AVX512VPOPCNTDQ-NEXT: retq2354;2355; AVX512VPOPCNTDQVL-LABEL: ugt_9_v16i16:2356; AVX512VPOPCNTDQVL: # %bb.0:2357; AVX512VPOPCNTDQVL-NEXT: vpmovzxwd {{.*#+}} 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],zero2358; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm02359; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm02360; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02361; AVX512VPOPCNTDQVL-NEXT: retq2362;2363; BITALG_NOVLX-LABEL: ugt_9_v16i16:2364; BITALG_NOVLX: # %bb.0:2365; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm02366; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm02367; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02368; BITALG_NOVLX-NEXT: retq2369;2370; BITALG-LABEL: ugt_9_v16i16:2371; BITALG: # %bb.0:2372; BITALG-NEXT: vpopcntw %ymm0, %ymm02373; BITALG-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02374; BITALG-NEXT: retq2375 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)2376 %3 = icmp ugt <16 x i16> %2, <i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9>2377 %4 = sext <16 x i1> %3 to <16 x i16>2378 ret <16 x i16> %42379}2380 2381define <16 x i16> @ult_10_v16i16(<16 x i16> %0) {2382; AVX1-LABEL: ult_10_v16i16:2383; AVX1: # %bb.0:2384; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]2385; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm22386; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]2387; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm22388; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm42389; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm42390; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm42391; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm22392; AVX1-NEXT: vpsllw $8, %xmm2, %xmm42393; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm22394; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm22395; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm02396; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm42397; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm42398; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm02399; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm02400; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm02401; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm02402; AVX1-NEXT: vpsllw $8, %xmm0, %xmm12403; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm02404; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm02405; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [10,10,10,10,10,10,10,10]2406; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm02407; AVX1-NEXT: vpcmpgtw %xmm2, %xmm1, %xmm12408; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm02409; AVX1-NEXT: retq2410;2411; AVX2-LABEL: ult_10_v16i16:2412; AVX2: # %bb.0:2413; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]2414; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm22415; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]2416; AVX2-NEXT: # ymm3 = mem[0,1,0,1]2417; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm22418; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm02419; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm02420; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm02421; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm02422; AVX2-NEXT: vpsllw $8, %ymm0, %ymm12423; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm02424; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm02425; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]2426; AVX2-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02427; AVX2-NEXT: retq2428;2429; AVX512VPOPCNTDQ-LABEL: ult_10_v16i16:2430; AVX512VPOPCNTDQ: # %bb.0:2431; AVX512VPOPCNTDQ-NEXT: vpmovzxwd {{.*#+}} 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],zero2432; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm02433; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm02434; AVX512VPOPCNTDQ-NEXT: vpbroadcastw {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]2435; AVX512VPOPCNTDQ-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02436; AVX512VPOPCNTDQ-NEXT: retq2437;2438; AVX512VPOPCNTDQVL-LABEL: ult_10_v16i16:2439; AVX512VPOPCNTDQVL: # %bb.0:2440; AVX512VPOPCNTDQVL-NEXT: vpmovzxwd {{.*#+}} 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],zero2441; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm02442; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm02443; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]2444; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02445; AVX512VPOPCNTDQVL-NEXT: retq2446;2447; BITALG_NOVLX-LABEL: ult_10_v16i16:2448; BITALG_NOVLX: # %bb.0:2449; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm02450; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm02451; BITALG_NOVLX-NEXT: vpbroadcastw {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]2452; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02453; BITALG_NOVLX-NEXT: retq2454;2455; BITALG-LABEL: ult_10_v16i16:2456; BITALG: # %bb.0:2457; BITALG-NEXT: vpopcntw %ymm0, %ymm02458; BITALG-NEXT: vpbroadcastw {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]2459; BITALG-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02460; BITALG-NEXT: retq2461 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)2462 %3 = icmp ult <16 x i16> %2, <i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10>2463 %4 = sext <16 x i1> %3 to <16 x i16>2464 ret <16 x i16> %42465}2466 2467define <16 x i16> @ugt_10_v16i16(<16 x i16> %0) {2468; AVX1-LABEL: ugt_10_v16i16:2469; AVX1: # %bb.0:2470; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]2471; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm22472; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]2473; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm22474; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm42475; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm42476; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm42477; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm22478; AVX1-NEXT: vpsllw $8, %xmm2, %xmm42479; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm22480; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm22481; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm02482; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm42483; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm42484; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm02485; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm02486; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm02487; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm02488; AVX1-NEXT: vpsllw $8, %xmm0, %xmm12489; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm02490; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm02491; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [10,10,10,10,10,10,10,10]2492; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm02493; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm12494; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm02495; AVX1-NEXT: retq2496;2497; AVX2-LABEL: ugt_10_v16i16:2498; AVX2: # %bb.0:2499; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]2500; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm22501; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]2502; AVX2-NEXT: # ymm3 = mem[0,1,0,1]2503; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm22504; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm02505; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm02506; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm02507; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm02508; AVX2-NEXT: vpsllw $8, %ymm0, %ymm12509; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm02510; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm02511; AVX2-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02512; AVX2-NEXT: retq2513;2514; AVX512VPOPCNTDQ-LABEL: ugt_10_v16i16:2515; AVX512VPOPCNTDQ: # %bb.0:2516; AVX512VPOPCNTDQ-NEXT: vpmovzxwd {{.*#+}} 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],zero2517; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm02518; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm02519; AVX512VPOPCNTDQ-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02520; AVX512VPOPCNTDQ-NEXT: retq2521;2522; AVX512VPOPCNTDQVL-LABEL: ugt_10_v16i16:2523; AVX512VPOPCNTDQVL: # %bb.0:2524; AVX512VPOPCNTDQVL-NEXT: vpmovzxwd {{.*#+}} 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],zero2525; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm02526; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm02527; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02528; AVX512VPOPCNTDQVL-NEXT: retq2529;2530; BITALG_NOVLX-LABEL: ugt_10_v16i16:2531; BITALG_NOVLX: # %bb.0:2532; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm02533; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm02534; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02535; BITALG_NOVLX-NEXT: retq2536;2537; BITALG-LABEL: ugt_10_v16i16:2538; BITALG: # %bb.0:2539; BITALG-NEXT: vpopcntw %ymm0, %ymm02540; BITALG-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02541; BITALG-NEXT: retq2542 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)2543 %3 = icmp ugt <16 x i16> %2, <i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10>2544 %4 = sext <16 x i1> %3 to <16 x i16>2545 ret <16 x i16> %42546}2547 2548define <16 x i16> @ult_11_v16i16(<16 x i16> %0) {2549; AVX1-LABEL: ult_11_v16i16:2550; AVX1: # %bb.0:2551; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]2552; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm22553; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]2554; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm22555; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm42556; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm42557; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm42558; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm22559; AVX1-NEXT: vpsllw $8, %xmm2, %xmm42560; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm22561; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm22562; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm02563; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm42564; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm42565; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm02566; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm02567; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm02568; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm02569; AVX1-NEXT: vpsllw $8, %xmm0, %xmm12570; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm02571; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm02572; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [11,11,11,11,11,11,11,11]2573; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm02574; AVX1-NEXT: vpcmpgtw %xmm2, %xmm1, %xmm12575; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm02576; AVX1-NEXT: retq2577;2578; AVX2-LABEL: ult_11_v16i16:2579; AVX2: # %bb.0:2580; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]2581; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm22582; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]2583; AVX2-NEXT: # ymm3 = mem[0,1,0,1]2584; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm22585; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm02586; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm02587; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm02588; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm02589; AVX2-NEXT: vpsllw $8, %ymm0, %ymm12590; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm02591; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm02592; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11]2593; AVX2-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02594; AVX2-NEXT: retq2595;2596; AVX512VPOPCNTDQ-LABEL: ult_11_v16i16:2597; AVX512VPOPCNTDQ: # %bb.0:2598; AVX512VPOPCNTDQ-NEXT: vpmovzxwd {{.*#+}} 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],zero2599; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm02600; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm02601; AVX512VPOPCNTDQ-NEXT: vpbroadcastw {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11]2602; AVX512VPOPCNTDQ-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02603; AVX512VPOPCNTDQ-NEXT: retq2604;2605; AVX512VPOPCNTDQVL-LABEL: ult_11_v16i16:2606; AVX512VPOPCNTDQVL: # %bb.0:2607; AVX512VPOPCNTDQVL-NEXT: vpmovzxwd {{.*#+}} 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],zero2608; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm02609; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm02610; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11]2611; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02612; AVX512VPOPCNTDQVL-NEXT: retq2613;2614; BITALG_NOVLX-LABEL: ult_11_v16i16:2615; BITALG_NOVLX: # %bb.0:2616; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm02617; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm02618; BITALG_NOVLX-NEXT: vpbroadcastw {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11]2619; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02620; BITALG_NOVLX-NEXT: retq2621;2622; BITALG-LABEL: ult_11_v16i16:2623; BITALG: # %bb.0:2624; BITALG-NEXT: vpopcntw %ymm0, %ymm02625; BITALG-NEXT: vpbroadcastw {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11]2626; BITALG-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02627; BITALG-NEXT: retq2628 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)2629 %3 = icmp ult <16 x i16> %2, <i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11>2630 %4 = sext <16 x i1> %3 to <16 x i16>2631 ret <16 x i16> %42632}2633 2634define <16 x i16> @ugt_11_v16i16(<16 x i16> %0) {2635; AVX1-LABEL: ugt_11_v16i16:2636; AVX1: # %bb.0:2637; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]2638; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm22639; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]2640; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm22641; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm42642; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm42643; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm42644; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm22645; AVX1-NEXT: vpsllw $8, %xmm2, %xmm42646; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm22647; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm22648; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm02649; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm42650; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm42651; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm02652; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm02653; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm02654; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm02655; AVX1-NEXT: vpsllw $8, %xmm0, %xmm12656; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm02657; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm02658; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [11,11,11,11,11,11,11,11]2659; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm02660; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm12661; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm02662; AVX1-NEXT: retq2663;2664; AVX2-LABEL: ugt_11_v16i16:2665; AVX2: # %bb.0:2666; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]2667; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm22668; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]2669; AVX2-NEXT: # ymm3 = mem[0,1,0,1]2670; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm22671; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm02672; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm02673; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm02674; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm02675; AVX2-NEXT: vpsllw $8, %ymm0, %ymm12676; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm02677; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm02678; AVX2-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02679; AVX2-NEXT: retq2680;2681; AVX512VPOPCNTDQ-LABEL: ugt_11_v16i16:2682; AVX512VPOPCNTDQ: # %bb.0:2683; AVX512VPOPCNTDQ-NEXT: vpmovzxwd {{.*#+}} 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],zero2684; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm02685; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm02686; AVX512VPOPCNTDQ-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02687; AVX512VPOPCNTDQ-NEXT: retq2688;2689; AVX512VPOPCNTDQVL-LABEL: ugt_11_v16i16:2690; AVX512VPOPCNTDQVL: # %bb.0:2691; AVX512VPOPCNTDQVL-NEXT: vpmovzxwd {{.*#+}} 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],zero2692; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm02693; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm02694; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02695; AVX512VPOPCNTDQVL-NEXT: retq2696;2697; BITALG_NOVLX-LABEL: ugt_11_v16i16:2698; BITALG_NOVLX: # %bb.0:2699; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm02700; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm02701; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02702; BITALG_NOVLX-NEXT: retq2703;2704; BITALG-LABEL: ugt_11_v16i16:2705; BITALG: # %bb.0:2706; BITALG-NEXT: vpopcntw %ymm0, %ymm02707; BITALG-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02708; BITALG-NEXT: retq2709 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)2710 %3 = icmp ugt <16 x i16> %2, <i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11>2711 %4 = sext <16 x i1> %3 to <16 x i16>2712 ret <16 x i16> %42713}2714 2715define <16 x i16> @ult_12_v16i16(<16 x i16> %0) {2716; AVX1-LABEL: ult_12_v16i16:2717; AVX1: # %bb.0:2718; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]2719; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm22720; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]2721; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm22722; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm42723; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm42724; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm42725; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm22726; AVX1-NEXT: vpsllw $8, %xmm2, %xmm42727; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm22728; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm22729; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm02730; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm42731; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm42732; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm02733; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm02734; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm02735; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm02736; AVX1-NEXT: vpsllw $8, %xmm0, %xmm12737; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm02738; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm02739; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [12,12,12,12,12,12,12,12]2740; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm02741; AVX1-NEXT: vpcmpgtw %xmm2, %xmm1, %xmm12742; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm02743; AVX1-NEXT: retq2744;2745; AVX2-LABEL: ult_12_v16i16:2746; AVX2: # %bb.0:2747; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]2748; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm22749; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]2750; AVX2-NEXT: # ymm3 = mem[0,1,0,1]2751; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm22752; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm02753; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm02754; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm02755; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm02756; AVX2-NEXT: vpsllw $8, %ymm0, %ymm12757; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm02758; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm02759; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12]2760; AVX2-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02761; AVX2-NEXT: retq2762;2763; AVX512VPOPCNTDQ-LABEL: ult_12_v16i16:2764; AVX512VPOPCNTDQ: # %bb.0:2765; AVX512VPOPCNTDQ-NEXT: vpmovzxwd {{.*#+}} 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],zero2766; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm02767; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm02768; AVX512VPOPCNTDQ-NEXT: vpbroadcastw {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12]2769; AVX512VPOPCNTDQ-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02770; AVX512VPOPCNTDQ-NEXT: retq2771;2772; AVX512VPOPCNTDQVL-LABEL: ult_12_v16i16:2773; AVX512VPOPCNTDQVL: # %bb.0:2774; AVX512VPOPCNTDQVL-NEXT: vpmovzxwd {{.*#+}} 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],zero2775; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm02776; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm02777; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12]2778; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02779; AVX512VPOPCNTDQVL-NEXT: retq2780;2781; BITALG_NOVLX-LABEL: ult_12_v16i16:2782; BITALG_NOVLX: # %bb.0:2783; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm02784; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm02785; BITALG_NOVLX-NEXT: vpbroadcastw {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12]2786; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02787; BITALG_NOVLX-NEXT: retq2788;2789; BITALG-LABEL: ult_12_v16i16:2790; BITALG: # %bb.0:2791; BITALG-NEXT: vpopcntw %ymm0, %ymm02792; BITALG-NEXT: vpbroadcastw {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12]2793; BITALG-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02794; BITALG-NEXT: retq2795 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)2796 %3 = icmp ult <16 x i16> %2, <i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12>2797 %4 = sext <16 x i1> %3 to <16 x i16>2798 ret <16 x i16> %42799}2800 2801define <16 x i16> @ugt_12_v16i16(<16 x i16> %0) {2802; AVX1-LABEL: ugt_12_v16i16:2803; AVX1: # %bb.0:2804; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]2805; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm22806; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]2807; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm22808; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm42809; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm42810; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm42811; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm22812; AVX1-NEXT: vpsllw $8, %xmm2, %xmm42813; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm22814; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm22815; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm02816; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm42817; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm42818; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm02819; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm02820; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm02821; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm02822; AVX1-NEXT: vpsllw $8, %xmm0, %xmm12823; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm02824; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm02825; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [12,12,12,12,12,12,12,12]2826; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm02827; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm12828; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm02829; AVX1-NEXT: retq2830;2831; AVX2-LABEL: ugt_12_v16i16:2832; AVX2: # %bb.0:2833; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]2834; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm22835; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]2836; AVX2-NEXT: # ymm3 = mem[0,1,0,1]2837; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm22838; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm02839; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm02840; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm02841; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm02842; AVX2-NEXT: vpsllw $8, %ymm0, %ymm12843; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm02844; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm02845; AVX2-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02846; AVX2-NEXT: retq2847;2848; AVX512VPOPCNTDQ-LABEL: ugt_12_v16i16:2849; AVX512VPOPCNTDQ: # %bb.0:2850; AVX512VPOPCNTDQ-NEXT: vpmovzxwd {{.*#+}} 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],zero2851; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm02852; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm02853; AVX512VPOPCNTDQ-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02854; AVX512VPOPCNTDQ-NEXT: retq2855;2856; AVX512VPOPCNTDQVL-LABEL: ugt_12_v16i16:2857; AVX512VPOPCNTDQVL: # %bb.0:2858; AVX512VPOPCNTDQVL-NEXT: vpmovzxwd {{.*#+}} 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],zero2859; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm02860; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm02861; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02862; AVX512VPOPCNTDQVL-NEXT: retq2863;2864; BITALG_NOVLX-LABEL: ugt_12_v16i16:2865; BITALG_NOVLX: # %bb.0:2866; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm02867; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm02868; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02869; BITALG_NOVLX-NEXT: retq2870;2871; BITALG-LABEL: ugt_12_v16i16:2872; BITALG: # %bb.0:2873; BITALG-NEXT: vpopcntw %ymm0, %ymm02874; BITALG-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02875; BITALG-NEXT: retq2876 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)2877 %3 = icmp ugt <16 x i16> %2, <i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12>2878 %4 = sext <16 x i1> %3 to <16 x i16>2879 ret <16 x i16> %42880}2881 2882define <16 x i16> @ult_13_v16i16(<16 x i16> %0) {2883; AVX1-LABEL: ult_13_v16i16:2884; AVX1: # %bb.0:2885; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]2886; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm22887; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]2888; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm22889; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm42890; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm42891; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm42892; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm22893; AVX1-NEXT: vpsllw $8, %xmm2, %xmm42894; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm22895; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm22896; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm02897; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm42898; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm42899; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm02900; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm02901; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm02902; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm02903; AVX1-NEXT: vpsllw $8, %xmm0, %xmm12904; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm02905; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm02906; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [13,13,13,13,13,13,13,13]2907; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm02908; AVX1-NEXT: vpcmpgtw %xmm2, %xmm1, %xmm12909; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm02910; AVX1-NEXT: retq2911;2912; AVX2-LABEL: ult_13_v16i16:2913; AVX2: # %bb.0:2914; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]2915; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm22916; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]2917; AVX2-NEXT: # ymm3 = mem[0,1,0,1]2918; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm22919; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm02920; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm02921; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm02922; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm02923; AVX2-NEXT: vpsllw $8, %ymm0, %ymm12924; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm02925; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm02926; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13]2927; AVX2-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02928; AVX2-NEXT: retq2929;2930; AVX512VPOPCNTDQ-LABEL: ult_13_v16i16:2931; AVX512VPOPCNTDQ: # %bb.0:2932; AVX512VPOPCNTDQ-NEXT: vpmovzxwd {{.*#+}} 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],zero2933; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm02934; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm02935; AVX512VPOPCNTDQ-NEXT: vpbroadcastw {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13]2936; AVX512VPOPCNTDQ-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02937; AVX512VPOPCNTDQ-NEXT: retq2938;2939; AVX512VPOPCNTDQVL-LABEL: ult_13_v16i16:2940; AVX512VPOPCNTDQVL: # %bb.0:2941; AVX512VPOPCNTDQVL-NEXT: vpmovzxwd {{.*#+}} 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],zero2942; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm02943; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm02944; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13]2945; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02946; AVX512VPOPCNTDQVL-NEXT: retq2947;2948; BITALG_NOVLX-LABEL: ult_13_v16i16:2949; BITALG_NOVLX: # %bb.0:2950; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm02951; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm02952; BITALG_NOVLX-NEXT: vpbroadcastw {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13]2953; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02954; BITALG_NOVLX-NEXT: retq2955;2956; BITALG-LABEL: ult_13_v16i16:2957; BITALG: # %bb.0:2958; BITALG-NEXT: vpopcntw %ymm0, %ymm02959; BITALG-NEXT: vpbroadcastw {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13]2960; BITALG-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm02961; BITALG-NEXT: retq2962 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)2963 %3 = icmp ult <16 x i16> %2, <i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13>2964 %4 = sext <16 x i1> %3 to <16 x i16>2965 ret <16 x i16> %42966}2967 2968define <16 x i16> @ugt_13_v16i16(<16 x i16> %0) {2969; AVX1-LABEL: ugt_13_v16i16:2970; AVX1: # %bb.0:2971; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]2972; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm22973; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]2974; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm22975; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm42976; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm42977; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm42978; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm22979; AVX1-NEXT: vpsllw $8, %xmm2, %xmm42980; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm22981; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm22982; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm02983; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm42984; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm42985; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm02986; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm02987; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm02988; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm02989; AVX1-NEXT: vpsllw $8, %xmm0, %xmm12990; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm02991; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm02992; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [13,13,13,13,13,13,13,13]2993; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm02994; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm12995; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm02996; AVX1-NEXT: retq2997;2998; AVX2-LABEL: ugt_13_v16i16:2999; AVX2: # %bb.0:3000; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]3001; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm23002; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]3003; AVX2-NEXT: # ymm3 = mem[0,1,0,1]3004; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm23005; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm03006; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm03007; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm03008; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm03009; AVX2-NEXT: vpsllw $8, %ymm0, %ymm13010; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm03011; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm03012; AVX2-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm03013; AVX2-NEXT: retq3014;3015; AVX512VPOPCNTDQ-LABEL: ugt_13_v16i16:3016; AVX512VPOPCNTDQ: # %bb.0:3017; AVX512VPOPCNTDQ-NEXT: vpmovzxwd {{.*#+}} 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],zero3018; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm03019; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm03020; AVX512VPOPCNTDQ-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm03021; AVX512VPOPCNTDQ-NEXT: retq3022;3023; AVX512VPOPCNTDQVL-LABEL: ugt_13_v16i16:3024; AVX512VPOPCNTDQVL: # %bb.0:3025; AVX512VPOPCNTDQVL-NEXT: vpmovzxwd {{.*#+}} 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],zero3026; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm03027; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm03028; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm03029; AVX512VPOPCNTDQVL-NEXT: retq3030;3031; BITALG_NOVLX-LABEL: ugt_13_v16i16:3032; BITALG_NOVLX: # %bb.0:3033; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm03034; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm03035; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm03036; BITALG_NOVLX-NEXT: retq3037;3038; BITALG-LABEL: ugt_13_v16i16:3039; BITALG: # %bb.0:3040; BITALG-NEXT: vpopcntw %ymm0, %ymm03041; BITALG-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm03042; BITALG-NEXT: retq3043 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)3044 %3 = icmp ugt <16 x i16> %2, <i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13>3045 %4 = sext <16 x i1> %3 to <16 x i16>3046 ret <16 x i16> %43047}3048 3049define <16 x i16> @ult_14_v16i16(<16 x i16> %0) {3050; AVX1-LABEL: ult_14_v16i16:3051; AVX1: # %bb.0:3052; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]3053; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm23054; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]3055; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm23056; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm43057; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm43058; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm43059; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm23060; AVX1-NEXT: vpsllw $8, %xmm2, %xmm43061; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm23062; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm23063; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm03064; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm43065; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm43066; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm03067; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm03068; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm03069; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm03070; AVX1-NEXT: vpsllw $8, %xmm0, %xmm13071; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm03072; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm03073; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [14,14,14,14,14,14,14,14]3074; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm03075; AVX1-NEXT: vpcmpgtw %xmm2, %xmm1, %xmm13076; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm03077; AVX1-NEXT: retq3078;3079; AVX2-LABEL: ult_14_v16i16:3080; AVX2: # %bb.0:3081; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]3082; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm23083; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]3084; AVX2-NEXT: # ymm3 = mem[0,1,0,1]3085; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm23086; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm03087; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm03088; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm03089; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm03090; AVX2-NEXT: vpsllw $8, %ymm0, %ymm13091; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm03092; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm03093; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14]3094; AVX2-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm03095; AVX2-NEXT: retq3096;3097; AVX512VPOPCNTDQ-LABEL: ult_14_v16i16:3098; AVX512VPOPCNTDQ: # %bb.0:3099; AVX512VPOPCNTDQ-NEXT: vpmovzxwd {{.*#+}} 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],zero3100; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm03101; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm03102; AVX512VPOPCNTDQ-NEXT: vpbroadcastw {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14]3103; AVX512VPOPCNTDQ-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm03104; AVX512VPOPCNTDQ-NEXT: retq3105;3106; AVX512VPOPCNTDQVL-LABEL: ult_14_v16i16:3107; AVX512VPOPCNTDQVL: # %bb.0:3108; AVX512VPOPCNTDQVL-NEXT: vpmovzxwd {{.*#+}} 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],zero3109; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm03110; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm03111; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14]3112; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm03113; AVX512VPOPCNTDQVL-NEXT: retq3114;3115; BITALG_NOVLX-LABEL: ult_14_v16i16:3116; BITALG_NOVLX: # %bb.0:3117; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm03118; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm03119; BITALG_NOVLX-NEXT: vpbroadcastw {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14]3120; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm03121; BITALG_NOVLX-NEXT: retq3122;3123; BITALG-LABEL: ult_14_v16i16:3124; BITALG: # %bb.0:3125; BITALG-NEXT: vpopcntw %ymm0, %ymm03126; BITALG-NEXT: vpbroadcastw {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14]3127; BITALG-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm03128; BITALG-NEXT: retq3129 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)3130 %3 = icmp ult <16 x i16> %2, <i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14>3131 %4 = sext <16 x i1> %3 to <16 x i16>3132 ret <16 x i16> %43133}3134 3135define <16 x i16> @ugt_14_v16i16(<16 x i16> %0) {3136; AVX1-LABEL: ugt_14_v16i16:3137; AVX1: # %bb.0:3138; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]3139; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm23140; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]3141; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm23142; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm43143; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm43144; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm43145; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm23146; AVX1-NEXT: vpsllw $8, %xmm2, %xmm43147; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm23148; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm23149; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm03150; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm43151; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm43152; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm03153; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm03154; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm03155; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm03156; AVX1-NEXT: vpsllw $8, %xmm0, %xmm13157; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm03158; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm03159; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [14,14,14,14,14,14,14,14]3160; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm03161; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm13162; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm03163; AVX1-NEXT: retq3164;3165; AVX2-LABEL: ugt_14_v16i16:3166; AVX2: # %bb.0:3167; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]3168; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm23169; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]3170; AVX2-NEXT: # ymm3 = mem[0,1,0,1]3171; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm23172; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm03173; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm03174; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm03175; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm03176; AVX2-NEXT: vpsllw $8, %ymm0, %ymm13177; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm03178; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm03179; AVX2-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm03180; AVX2-NEXT: retq3181;3182; AVX512VPOPCNTDQ-LABEL: ugt_14_v16i16:3183; AVX512VPOPCNTDQ: # %bb.0:3184; AVX512VPOPCNTDQ-NEXT: vpmovzxwd {{.*#+}} 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],zero3185; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm03186; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm03187; AVX512VPOPCNTDQ-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm03188; AVX512VPOPCNTDQ-NEXT: retq3189;3190; AVX512VPOPCNTDQVL-LABEL: ugt_14_v16i16:3191; AVX512VPOPCNTDQVL: # %bb.0:3192; AVX512VPOPCNTDQVL-NEXT: vpmovzxwd {{.*#+}} 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],zero3193; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm03194; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm03195; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm03196; AVX512VPOPCNTDQVL-NEXT: retq3197;3198; BITALG_NOVLX-LABEL: ugt_14_v16i16:3199; BITALG_NOVLX: # %bb.0:3200; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm03201; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm03202; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm03203; BITALG_NOVLX-NEXT: retq3204;3205; BITALG-LABEL: ugt_14_v16i16:3206; BITALG: # %bb.0:3207; BITALG-NEXT: vpopcntw %ymm0, %ymm03208; BITALG-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm03209; BITALG-NEXT: retq3210 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)3211 %3 = icmp ugt <16 x i16> %2, <i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14>3212 %4 = sext <16 x i1> %3 to <16 x i16>3213 ret <16 x i16> %43214}3215 3216define <16 x i16> @ult_15_v16i16(<16 x i16> %0) {3217; AVX1-LABEL: ult_15_v16i16:3218; AVX1: # %bb.0:3219; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]3220; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm23221; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]3222; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm23223; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm43224; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm43225; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm43226; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm23227; AVX1-NEXT: vpsllw $8, %xmm2, %xmm43228; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm23229; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm23230; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm03231; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm43232; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm43233; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm03234; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm03235; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm03236; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm03237; AVX1-NEXT: vpsllw $8, %xmm0, %xmm13238; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm03239; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm03240; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15]3241; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm03242; AVX1-NEXT: vpcmpgtw %xmm2, %xmm1, %xmm13243; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm03244; AVX1-NEXT: retq3245;3246; AVX2-LABEL: ult_15_v16i16:3247; AVX2: # %bb.0:3248; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]3249; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm23250; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]3251; AVX2-NEXT: # ymm3 = mem[0,1,0,1]3252; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm23253; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm03254; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm03255; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm03256; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm03257; AVX2-NEXT: vpsllw $8, %ymm0, %ymm13258; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm03259; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm03260; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]3261; AVX2-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm03262; AVX2-NEXT: retq3263;3264; AVX512VPOPCNTDQ-LABEL: ult_15_v16i16:3265; AVX512VPOPCNTDQ: # %bb.0:3266; AVX512VPOPCNTDQ-NEXT: vpmovzxwd {{.*#+}} 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],zero3267; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm03268; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm03269; AVX512VPOPCNTDQ-NEXT: vpbroadcastw {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]3270; AVX512VPOPCNTDQ-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm03271; AVX512VPOPCNTDQ-NEXT: retq3272;3273; AVX512VPOPCNTDQVL-LABEL: ult_15_v16i16:3274; AVX512VPOPCNTDQVL: # %bb.0:3275; AVX512VPOPCNTDQVL-NEXT: vpmovzxwd {{.*#+}} 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],zero3276; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm03277; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm03278; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]3279; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm03280; AVX512VPOPCNTDQVL-NEXT: retq3281;3282; BITALG_NOVLX-LABEL: ult_15_v16i16:3283; BITALG_NOVLX: # %bb.0:3284; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm03285; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm03286; BITALG_NOVLX-NEXT: vpbroadcastw {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]3287; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm03288; BITALG_NOVLX-NEXT: retq3289;3290; BITALG-LABEL: ult_15_v16i16:3291; BITALG: # %bb.0:3292; BITALG-NEXT: vpopcntw %ymm0, %ymm03293; BITALG-NEXT: vpbroadcastw {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]3294; BITALG-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm03295; BITALG-NEXT: retq3296 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0)3297 %3 = icmp ult <16 x i16> %2, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15>3298 %4 = sext <16 x i1> %3 to <16 x i16>3299 ret <16 x i16> %43300}3301 3302define <8 x i32> @ugt_1_v8i32(<8 x i32> %0) {3303; AVX1-LABEL: ugt_1_v8i32:3304; AVX1: # %bb.0:3305; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm13306; AVX1-NEXT: vpaddd %xmm1, %xmm0, %xmm23307; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm33308; AVX1-NEXT: vpaddd %xmm1, %xmm3, %xmm43309; AVX1-NEXT: vpand %xmm4, %xmm3, %xmm33310; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm43311; AVX1-NEXT: vpcmpeqd %xmm4, %xmm3, %xmm33312; AVX1-NEXT: vpxor %xmm1, %xmm3, %xmm33313; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm03314; AVX1-NEXT: vpcmpeqd %xmm4, %xmm0, %xmm03315; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm03316; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm0, %ymm03317; AVX1-NEXT: retq3318;3319; AVX2-LABEL: ugt_1_v8i32:3320; AVX2: # %bb.0:3321; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm13322; AVX2-NEXT: vpaddd %ymm1, %ymm0, %ymm23323; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm03324; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm23325; AVX2-NEXT: vpcmpeqd %ymm2, %ymm0, %ymm03326; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm03327; AVX2-NEXT: retq3328;3329; AVX512VPOPCNTDQ-LABEL: ugt_1_v8i32:3330; AVX512VPOPCNTDQ: # %bb.0:3331; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm03332; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm03333; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [1,1,1,1,1,1,1,1]3334; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm03335; AVX512VPOPCNTDQ-NEXT: retq3336;3337; AVX512VPOPCNTDQVL-LABEL: ugt_1_v8i32:3338; AVX512VPOPCNTDQVL: # %bb.0:3339; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm03340; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [1,1,1,1,1,1,1,1]3341; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm03342; AVX512VPOPCNTDQVL-NEXT: retq3343;3344; BITALG_NOVLX-LABEL: ugt_1_v8i32:3345; BITALG_NOVLX: # %bb.0:3346; BITALG_NOVLX-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm13347; BITALG_NOVLX-NEXT: vpaddd %ymm1, %ymm0, %ymm13348; BITALG_NOVLX-NEXT: vpand %ymm1, %ymm0, %ymm03349; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm13350; BITALG_NOVLX-NEXT: vpcmpeqd %ymm1, %ymm0, %ymm03351; BITALG_NOVLX-NEXT: vpternlogq {{.*#+}} zmm0 = ~zmm03352; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm03353; BITALG_NOVLX-NEXT: retq3354;3355; BITALG-LABEL: ugt_1_v8i32:3356; BITALG: # %bb.0:3357; BITALG-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm13358; BITALG-NEXT: vpaddd %ymm1, %ymm0, %ymm13359; BITALG-NEXT: vpand %ymm1, %ymm0, %ymm03360; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm13361; BITALG-NEXT: vpcmpeqd %ymm1, %ymm0, %ymm03362; BITALG-NEXT: vpternlogq {{.*#+}} ymm0 = ~ymm03363; BITALG-NEXT: retq3364 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)3365 %3 = icmp ugt <8 x i32> %2, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>3366 %4 = sext <8 x i1> %3 to <8 x i32>3367 ret <8 x i32> %43368}3369 3370define <8 x i32> @ult_2_v8i32(<8 x i32> %0) {3371; AVX1-LABEL: ult_2_v8i32:3372; AVX1: # %bb.0:3373; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm13374; AVX1-NEXT: vpaddd %xmm1, %xmm0, %xmm23375; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm33376; AVX1-NEXT: vpaddd %xmm1, %xmm3, %xmm13377; AVX1-NEXT: vpand %xmm1, %xmm3, %xmm13378; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm33379; AVX1-NEXT: vpcmpeqd %xmm3, %xmm1, %xmm13380; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm03381; AVX1-NEXT: vpcmpeqd %xmm3, %xmm0, %xmm03382; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm03383; AVX1-NEXT: retq3384;3385; AVX2-LABEL: ult_2_v8i32:3386; AVX2: # %bb.0:3387; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm13388; AVX2-NEXT: vpaddd %ymm1, %ymm0, %ymm13389; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm03390; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm13391; AVX2-NEXT: vpcmpeqd %ymm1, %ymm0, %ymm03392; AVX2-NEXT: retq3393;3394; AVX512VPOPCNTDQ-LABEL: ult_2_v8i32:3395; AVX512VPOPCNTDQ: # %bb.0:3396; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm03397; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm03398; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [2,2,2,2,2,2,2,2]3399; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm03400; AVX512VPOPCNTDQ-NEXT: retq3401;3402; AVX512VPOPCNTDQVL-LABEL: ult_2_v8i32:3403; AVX512VPOPCNTDQVL: # %bb.0:3404; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm03405; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [2,2,2,2,2,2,2,2]3406; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm03407; AVX512VPOPCNTDQVL-NEXT: retq3408;3409; BITALG_NOVLX-LABEL: ult_2_v8i32:3410; BITALG_NOVLX: # %bb.0:3411; BITALG_NOVLX-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm13412; BITALG_NOVLX-NEXT: vpaddd %ymm1, %ymm0, %ymm13413; BITALG_NOVLX-NEXT: vpand %ymm1, %ymm0, %ymm03414; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm13415; BITALG_NOVLX-NEXT: vpcmpeqd %ymm1, %ymm0, %ymm03416; BITALG_NOVLX-NEXT: retq3417;3418; BITALG-LABEL: ult_2_v8i32:3419; BITALG: # %bb.0:3420; BITALG-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm13421; BITALG-NEXT: vpaddd %ymm1, %ymm0, %ymm13422; BITALG-NEXT: vpand %ymm1, %ymm0, %ymm03423; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm13424; BITALG-NEXT: vpcmpeqd %ymm1, %ymm0, %ymm03425; BITALG-NEXT: retq3426 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)3427 %3 = icmp ult <8 x i32> %2, <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>3428 %4 = sext <8 x i1> %3 to <8 x i32>3429 ret <8 x i32> %43430}3431 3432define <8 x i32> @ugt_2_v8i32(<8 x i32> %0) {3433; AVX1-LABEL: ugt_2_v8i32:3434; AVX1: # %bb.0:3435; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm13436; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]3437; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm33438; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]3439; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm33440; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm13441; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm13442; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm13443; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm13444; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm33445; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]3446; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm53447; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero3448; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm13449; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm13450; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm53451; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm53452; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm03453; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm03454; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm03455; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm03456; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]3457; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm23458; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero3459; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm03460; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm03461; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm03462; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm03463; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [2.0E+0,2.0E+0,2.0E+0,2.0E+0,2.0E+0,2.0E+0,2.0E+0,2.0E+0]3464; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm03465; AVX1-NEXT: retq3466;3467; AVX2-LABEL: ugt_2_v8i32:3468; AVX2: # %bb.0:3469; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]3470; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm23471; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]3472; AVX2-NEXT: # ymm3 = mem[0,1,0,1]3473; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm23474; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm03475; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm03476; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm03477; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm03478; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm13479; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]3480; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm23481; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]3482; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm03483; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm03484; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [2,2,2,2,2,2,2,2]3485; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm03486; AVX2-NEXT: retq3487;3488; AVX512VPOPCNTDQ-LABEL: ugt_2_v8i32:3489; AVX512VPOPCNTDQ: # %bb.0:3490; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm03491; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm03492; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [2,2,2,2,2,2,2,2]3493; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm03494; AVX512VPOPCNTDQ-NEXT: retq3495;3496; AVX512VPOPCNTDQVL-LABEL: ugt_2_v8i32:3497; AVX512VPOPCNTDQVL: # %bb.0:3498; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm03499; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [2,2,2,2,2,2,2,2]3500; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm03501; AVX512VPOPCNTDQVL-NEXT: retq3502;3503; BITALG_NOVLX-LABEL: ugt_2_v8i32:3504; BITALG_NOVLX: # %bb.0:3505; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm03506; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm03507; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm13508; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]3509; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm23510; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]3511; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm03512; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm03513; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [2,2,2,2,2,2,2,2]3514; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm03515; BITALG_NOVLX-NEXT: retq3516;3517; BITALG-LABEL: ugt_2_v8i32:3518; BITALG: # %bb.0:3519; BITALG-NEXT: vpopcntb %ymm0, %ymm03520; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm13521; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]3522; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm23523; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]3524; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm03525; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm03526; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [2,2,2,2,2,2,2,2]3527; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm03528; BITALG-NEXT: retq3529 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)3530 %3 = icmp ugt <8 x i32> %2, <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>3531 %4 = sext <8 x i1> %3 to <8 x i32>3532 ret <8 x i32> %43533}3534 3535define <8 x i32> @ult_3_v8i32(<8 x i32> %0) {3536; AVX1-LABEL: ult_3_v8i32:3537; AVX1: # %bb.0:3538; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm13539; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]3540; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm33541; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]3542; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm33543; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm13544; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm13545; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm13546; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm13547; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm33548; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]3549; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm53550; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero3551; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm13552; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm13553; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm53554; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm53555; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm03556; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm03557; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm03558; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm03559; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]3560; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm23561; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero3562; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm03563; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm03564; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm03565; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm03566; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm03567; AVX1-NEXT: retq3568;3569; AVX2-LABEL: ult_3_v8i32:3570; AVX2: # %bb.0:3571; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]3572; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm23573; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]3574; AVX2-NEXT: # ymm3 = mem[0,1,0,1]3575; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm23576; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm03577; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm03578; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm03579; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm03580; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm13581; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]3582; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm23583; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]3584; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm03585; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm03586; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3]3587; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm03588; AVX2-NEXT: retq3589;3590; AVX512VPOPCNTDQ-LABEL: ult_3_v8i32:3591; AVX512VPOPCNTDQ: # %bb.0:3592; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm03593; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm03594; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3]3595; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm03596; AVX512VPOPCNTDQ-NEXT: retq3597;3598; AVX512VPOPCNTDQVL-LABEL: ult_3_v8i32:3599; AVX512VPOPCNTDQVL: # %bb.0:3600; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm03601; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3]3602; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm03603; AVX512VPOPCNTDQVL-NEXT: retq3604;3605; BITALG_NOVLX-LABEL: ult_3_v8i32:3606; BITALG_NOVLX: # %bb.0:3607; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm03608; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm03609; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm13610; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]3611; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm23612; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]3613; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm03614; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm03615; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3]3616; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm03617; BITALG_NOVLX-NEXT: retq3618;3619; BITALG-LABEL: ult_3_v8i32:3620; BITALG: # %bb.0:3621; BITALG-NEXT: vpopcntb %ymm0, %ymm03622; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm13623; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]3624; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm23625; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]3626; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm03627; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm03628; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3]3629; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm03630; BITALG-NEXT: retq3631 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)3632 %3 = icmp ult <8 x i32> %2, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>3633 %4 = sext <8 x i1> %3 to <8 x i32>3634 ret <8 x i32> %43635}3636 3637define <8 x i32> @ugt_3_v8i32(<8 x i32> %0) {3638; AVX1-LABEL: ugt_3_v8i32:3639; AVX1: # %bb.0:3640; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm13641; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]3642; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm33643; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]3644; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm33645; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm13646; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm13647; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm13648; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm13649; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm33650; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]3651; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm53652; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero3653; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm13654; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm13655; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm53656; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm53657; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm03658; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm03659; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm03660; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm03661; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]3662; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm23663; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero3664; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm03665; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm03666; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm03667; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm03668; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [3.0E+0,3.0E+0,3.0E+0,3.0E+0,3.0E+0,3.0E+0,3.0E+0,3.0E+0]3669; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm03670; AVX1-NEXT: retq3671;3672; AVX2-LABEL: ugt_3_v8i32:3673; AVX2: # %bb.0:3674; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]3675; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm23676; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]3677; AVX2-NEXT: # ymm3 = mem[0,1,0,1]3678; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm23679; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm03680; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm03681; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm03682; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm03683; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm13684; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]3685; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm23686; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]3687; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm03688; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm03689; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3]3690; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm03691; AVX2-NEXT: retq3692;3693; AVX512VPOPCNTDQ-LABEL: ugt_3_v8i32:3694; AVX512VPOPCNTDQ: # %bb.0:3695; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm03696; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm03697; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3]3698; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm03699; AVX512VPOPCNTDQ-NEXT: retq3700;3701; AVX512VPOPCNTDQVL-LABEL: ugt_3_v8i32:3702; AVX512VPOPCNTDQVL: # %bb.0:3703; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm03704; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3]3705; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm03706; AVX512VPOPCNTDQVL-NEXT: retq3707;3708; BITALG_NOVLX-LABEL: ugt_3_v8i32:3709; BITALG_NOVLX: # %bb.0:3710; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm03711; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm03712; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm13713; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]3714; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm23715; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]3716; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm03717; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm03718; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3]3719; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm03720; BITALG_NOVLX-NEXT: retq3721;3722; BITALG-LABEL: ugt_3_v8i32:3723; BITALG: # %bb.0:3724; BITALG-NEXT: vpopcntb %ymm0, %ymm03725; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm13726; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]3727; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm23728; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]3729; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm03730; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm03731; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3]3732; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm03733; BITALG-NEXT: retq3734 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)3735 %3 = icmp ugt <8 x i32> %2, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>3736 %4 = sext <8 x i1> %3 to <8 x i32>3737 ret <8 x i32> %43738}3739 3740define <8 x i32> @ult_4_v8i32(<8 x i32> %0) {3741; AVX1-LABEL: ult_4_v8i32:3742; AVX1: # %bb.0:3743; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm13744; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]3745; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm33746; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]3747; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm33748; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm13749; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm13750; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm13751; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm13752; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm33753; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]3754; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm53755; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero3756; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm13757; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm13758; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm53759; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm53760; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm03761; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm03762; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm03763; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm03764; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]3765; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm23766; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero3767; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm03768; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm03769; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm03770; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm03771; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm03772; AVX1-NEXT: retq3773;3774; AVX2-LABEL: ult_4_v8i32:3775; AVX2: # %bb.0:3776; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]3777; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm23778; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]3779; AVX2-NEXT: # ymm3 = mem[0,1,0,1]3780; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm23781; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm03782; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm03783; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm03784; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm03785; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm13786; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]3787; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm23788; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]3789; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm03790; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm03791; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4]3792; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm03793; AVX2-NEXT: retq3794;3795; AVX512VPOPCNTDQ-LABEL: ult_4_v8i32:3796; AVX512VPOPCNTDQ: # %bb.0:3797; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm03798; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm03799; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4]3800; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm03801; AVX512VPOPCNTDQ-NEXT: retq3802;3803; AVX512VPOPCNTDQVL-LABEL: ult_4_v8i32:3804; AVX512VPOPCNTDQVL: # %bb.0:3805; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm03806; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4]3807; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm03808; AVX512VPOPCNTDQVL-NEXT: retq3809;3810; BITALG_NOVLX-LABEL: ult_4_v8i32:3811; BITALG_NOVLX: # %bb.0:3812; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm03813; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm03814; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm13815; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]3816; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm23817; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]3818; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm03819; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm03820; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4]3821; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm03822; BITALG_NOVLX-NEXT: retq3823;3824; BITALG-LABEL: ult_4_v8i32:3825; BITALG: # %bb.0:3826; BITALG-NEXT: vpopcntb %ymm0, %ymm03827; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm13828; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]3829; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm23830; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]3831; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm03832; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm03833; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4]3834; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm03835; BITALG-NEXT: retq3836 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)3837 %3 = icmp ult <8 x i32> %2, <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>3838 %4 = sext <8 x i1> %3 to <8 x i32>3839 ret <8 x i32> %43840}3841 3842define <8 x i32> @ugt_4_v8i32(<8 x i32> %0) {3843; AVX1-LABEL: ugt_4_v8i32:3844; AVX1: # %bb.0:3845; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm13846; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]3847; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm33848; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]3849; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm33850; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm13851; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm13852; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm13853; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm13854; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm33855; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]3856; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm53857; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero3858; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm13859; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm13860; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm53861; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm53862; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm03863; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm03864; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm03865; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm03866; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]3867; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm23868; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero3869; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm03870; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm03871; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm03872; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm03873; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [4.0E+0,4.0E+0,4.0E+0,4.0E+0,4.0E+0,4.0E+0,4.0E+0,4.0E+0]3874; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm03875; AVX1-NEXT: retq3876;3877; AVX2-LABEL: ugt_4_v8i32:3878; AVX2: # %bb.0:3879; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]3880; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm23881; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]3882; AVX2-NEXT: # ymm3 = mem[0,1,0,1]3883; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm23884; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm03885; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm03886; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm03887; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm03888; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm13889; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]3890; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm23891; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]3892; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm03893; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm03894; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4]3895; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm03896; AVX2-NEXT: retq3897;3898; AVX512VPOPCNTDQ-LABEL: ugt_4_v8i32:3899; AVX512VPOPCNTDQ: # %bb.0:3900; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm03901; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm03902; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4]3903; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm03904; AVX512VPOPCNTDQ-NEXT: retq3905;3906; AVX512VPOPCNTDQVL-LABEL: ugt_4_v8i32:3907; AVX512VPOPCNTDQVL: # %bb.0:3908; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm03909; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4]3910; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm03911; AVX512VPOPCNTDQVL-NEXT: retq3912;3913; BITALG_NOVLX-LABEL: ugt_4_v8i32:3914; BITALG_NOVLX: # %bb.0:3915; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm03916; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm03917; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm13918; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]3919; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm23920; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]3921; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm03922; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm03923; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4]3924; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm03925; BITALG_NOVLX-NEXT: retq3926;3927; BITALG-LABEL: ugt_4_v8i32:3928; BITALG: # %bb.0:3929; BITALG-NEXT: vpopcntb %ymm0, %ymm03930; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm13931; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]3932; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm23933; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]3934; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm03935; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm03936; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4]3937; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm03938; BITALG-NEXT: retq3939 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)3940 %3 = icmp ugt <8 x i32> %2, <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>3941 %4 = sext <8 x i1> %3 to <8 x i32>3942 ret <8 x i32> %43943}3944 3945define <8 x i32> @ult_5_v8i32(<8 x i32> %0) {3946; AVX1-LABEL: ult_5_v8i32:3947; AVX1: # %bb.0:3948; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm13949; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]3950; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm33951; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]3952; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm33953; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm13954; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm13955; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm13956; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm13957; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm33958; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]3959; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm53960; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero3961; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm13962; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm13963; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm53964; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm53965; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm03966; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm03967; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm03968; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm03969; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]3970; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm23971; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero3972; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm03973; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm03974; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm03975; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm03976; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm03977; AVX1-NEXT: retq3978;3979; AVX2-LABEL: ult_5_v8i32:3980; AVX2: # %bb.0:3981; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]3982; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm23983; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]3984; AVX2-NEXT: # ymm3 = mem[0,1,0,1]3985; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm23986; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm03987; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm03988; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm03989; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm03990; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm13991; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]3992; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm23993; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]3994; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm03995; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm03996; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5]3997; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm03998; AVX2-NEXT: retq3999;4000; AVX512VPOPCNTDQ-LABEL: ult_5_v8i32:4001; AVX512VPOPCNTDQ: # %bb.0:4002; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm04003; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm04004; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5]4005; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm04006; AVX512VPOPCNTDQ-NEXT: retq4007;4008; AVX512VPOPCNTDQVL-LABEL: ult_5_v8i32:4009; AVX512VPOPCNTDQVL: # %bb.0:4010; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm04011; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5]4012; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm04013; AVX512VPOPCNTDQVL-NEXT: retq4014;4015; BITALG_NOVLX-LABEL: ult_5_v8i32:4016; BITALG_NOVLX: # %bb.0:4017; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm04018; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm04019; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm14020; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4021; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm24022; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4023; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm04024; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm04025; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5]4026; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm04027; BITALG_NOVLX-NEXT: retq4028;4029; BITALG-LABEL: ult_5_v8i32:4030; BITALG: # %bb.0:4031; BITALG-NEXT: vpopcntb %ymm0, %ymm04032; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm14033; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4034; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm24035; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4036; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm04037; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm04038; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5]4039; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm04040; BITALG-NEXT: retq4041 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)4042 %3 = icmp ult <8 x i32> %2, <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>4043 %4 = sext <8 x i1> %3 to <8 x i32>4044 ret <8 x i32> %44045}4046 4047define <8 x i32> @ugt_5_v8i32(<8 x i32> %0) {4048; AVX1-LABEL: ugt_5_v8i32:4049; AVX1: # %bb.0:4050; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm14051; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]4052; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm34053; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]4054; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm34055; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm14056; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm14057; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm14058; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm14059; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm34060; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]4061; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm54062; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero4063; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm14064; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm14065; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm54066; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm54067; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm04068; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm04069; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm04070; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm04071; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]4072; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm24073; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero4074; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm04075; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm04076; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm04077; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm04078; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [5.0E+0,5.0E+0,5.0E+0,5.0E+0,5.0E+0,5.0E+0,5.0E+0,5.0E+0]4079; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm04080; AVX1-NEXT: retq4081;4082; AVX2-LABEL: ugt_5_v8i32:4083; AVX2: # %bb.0:4084; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]4085; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm24086; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]4087; AVX2-NEXT: # ymm3 = mem[0,1,0,1]4088; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm24089; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm04090; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm04091; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm04092; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm04093; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm14094; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4095; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm24096; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4097; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm04098; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm04099; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5]4100; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm04101; AVX2-NEXT: retq4102;4103; AVX512VPOPCNTDQ-LABEL: ugt_5_v8i32:4104; AVX512VPOPCNTDQ: # %bb.0:4105; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm04106; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm04107; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5]4108; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm04109; AVX512VPOPCNTDQ-NEXT: retq4110;4111; AVX512VPOPCNTDQVL-LABEL: ugt_5_v8i32:4112; AVX512VPOPCNTDQVL: # %bb.0:4113; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm04114; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5]4115; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm04116; AVX512VPOPCNTDQVL-NEXT: retq4117;4118; BITALG_NOVLX-LABEL: ugt_5_v8i32:4119; BITALG_NOVLX: # %bb.0:4120; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm04121; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm04122; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm14123; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4124; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm24125; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4126; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm04127; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm04128; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5]4129; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm04130; BITALG_NOVLX-NEXT: retq4131;4132; BITALG-LABEL: ugt_5_v8i32:4133; BITALG: # %bb.0:4134; BITALG-NEXT: vpopcntb %ymm0, %ymm04135; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm14136; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4137; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm24138; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4139; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm04140; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm04141; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5]4142; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm04143; BITALG-NEXT: retq4144 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)4145 %3 = icmp ugt <8 x i32> %2, <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>4146 %4 = sext <8 x i1> %3 to <8 x i32>4147 ret <8 x i32> %44148}4149 4150define <8 x i32> @ult_6_v8i32(<8 x i32> %0) {4151; AVX1-LABEL: ult_6_v8i32:4152; AVX1: # %bb.0:4153; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm14154; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]4155; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm34156; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]4157; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm34158; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm14159; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm14160; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm14161; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm14162; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm34163; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]4164; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm54165; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero4166; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm14167; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm14168; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm54169; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm54170; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm04171; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm04172; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm04173; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm04174; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]4175; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm24176; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero4177; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm04178; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm04179; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm04180; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm04181; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm04182; AVX1-NEXT: retq4183;4184; AVX2-LABEL: ult_6_v8i32:4185; AVX2: # %bb.0:4186; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]4187; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm24188; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]4189; AVX2-NEXT: # ymm3 = mem[0,1,0,1]4190; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm24191; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm04192; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm04193; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm04194; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm04195; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm14196; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4197; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm24198; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4199; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm04200; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm04201; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6]4202; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm04203; AVX2-NEXT: retq4204;4205; AVX512VPOPCNTDQ-LABEL: ult_6_v8i32:4206; AVX512VPOPCNTDQ: # %bb.0:4207; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm04208; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm04209; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6]4210; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm04211; AVX512VPOPCNTDQ-NEXT: retq4212;4213; AVX512VPOPCNTDQVL-LABEL: ult_6_v8i32:4214; AVX512VPOPCNTDQVL: # %bb.0:4215; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm04216; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6]4217; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm04218; AVX512VPOPCNTDQVL-NEXT: retq4219;4220; BITALG_NOVLX-LABEL: ult_6_v8i32:4221; BITALG_NOVLX: # %bb.0:4222; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm04223; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm04224; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm14225; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4226; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm24227; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4228; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm04229; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm04230; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6]4231; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm04232; BITALG_NOVLX-NEXT: retq4233;4234; BITALG-LABEL: ult_6_v8i32:4235; BITALG: # %bb.0:4236; BITALG-NEXT: vpopcntb %ymm0, %ymm04237; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm14238; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4239; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm24240; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4241; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm04242; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm04243; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6]4244; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm04245; BITALG-NEXT: retq4246 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)4247 %3 = icmp ult <8 x i32> %2, <i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6>4248 %4 = sext <8 x i1> %3 to <8 x i32>4249 ret <8 x i32> %44250}4251 4252define <8 x i32> @ugt_6_v8i32(<8 x i32> %0) {4253; AVX1-LABEL: ugt_6_v8i32:4254; AVX1: # %bb.0:4255; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm14256; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]4257; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm34258; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]4259; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm34260; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm14261; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm14262; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm14263; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm14264; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm34265; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]4266; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm54267; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero4268; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm14269; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm14270; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm54271; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm54272; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm04273; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm04274; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm04275; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm04276; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]4277; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm24278; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero4279; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm04280; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm04281; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm04282; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm04283; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [6.0E+0,6.0E+0,6.0E+0,6.0E+0,6.0E+0,6.0E+0,6.0E+0,6.0E+0]4284; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm04285; AVX1-NEXT: retq4286;4287; AVX2-LABEL: ugt_6_v8i32:4288; AVX2: # %bb.0:4289; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]4290; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm24291; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]4292; AVX2-NEXT: # ymm3 = mem[0,1,0,1]4293; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm24294; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm04295; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm04296; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm04297; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm04298; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm14299; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4300; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm24301; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4302; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm04303; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm04304; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6]4305; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm04306; AVX2-NEXT: retq4307;4308; AVX512VPOPCNTDQ-LABEL: ugt_6_v8i32:4309; AVX512VPOPCNTDQ: # %bb.0:4310; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm04311; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm04312; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6]4313; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm04314; AVX512VPOPCNTDQ-NEXT: retq4315;4316; AVX512VPOPCNTDQVL-LABEL: ugt_6_v8i32:4317; AVX512VPOPCNTDQVL: # %bb.0:4318; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm04319; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6]4320; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm04321; AVX512VPOPCNTDQVL-NEXT: retq4322;4323; BITALG_NOVLX-LABEL: ugt_6_v8i32:4324; BITALG_NOVLX: # %bb.0:4325; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm04326; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm04327; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm14328; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4329; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm24330; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4331; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm04332; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm04333; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6]4334; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm04335; BITALG_NOVLX-NEXT: retq4336;4337; BITALG-LABEL: ugt_6_v8i32:4338; BITALG: # %bb.0:4339; BITALG-NEXT: vpopcntb %ymm0, %ymm04340; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm14341; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4342; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm24343; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4344; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm04345; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm04346; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6]4347; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm04348; BITALG-NEXT: retq4349 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)4350 %3 = icmp ugt <8 x i32> %2, <i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6>4351 %4 = sext <8 x i1> %3 to <8 x i32>4352 ret <8 x i32> %44353}4354 4355define <8 x i32> @ult_7_v8i32(<8 x i32> %0) {4356; AVX1-LABEL: ult_7_v8i32:4357; AVX1: # %bb.0:4358; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm14359; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]4360; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm34361; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]4362; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm34363; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm14364; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm14365; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm14366; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm14367; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm34368; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]4369; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm54370; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero4371; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm14372; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm14373; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm54374; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm54375; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm04376; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm04377; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm04378; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm04379; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]4380; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm24381; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero4382; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm04383; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm04384; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm04385; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm04386; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm04387; AVX1-NEXT: retq4388;4389; AVX2-LABEL: ult_7_v8i32:4390; AVX2: # %bb.0:4391; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]4392; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm24393; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]4394; AVX2-NEXT: # ymm3 = mem[0,1,0,1]4395; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm24396; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm04397; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm04398; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm04399; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm04400; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm14401; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4402; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm24403; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4404; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm04405; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm04406; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7]4407; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm04408; AVX2-NEXT: retq4409;4410; AVX512VPOPCNTDQ-LABEL: ult_7_v8i32:4411; AVX512VPOPCNTDQ: # %bb.0:4412; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm04413; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm04414; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7]4415; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm04416; AVX512VPOPCNTDQ-NEXT: retq4417;4418; AVX512VPOPCNTDQVL-LABEL: ult_7_v8i32:4419; AVX512VPOPCNTDQVL: # %bb.0:4420; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm04421; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7]4422; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm04423; AVX512VPOPCNTDQVL-NEXT: retq4424;4425; BITALG_NOVLX-LABEL: ult_7_v8i32:4426; BITALG_NOVLX: # %bb.0:4427; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm04428; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm04429; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm14430; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4431; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm24432; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4433; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm04434; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm04435; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7]4436; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm04437; BITALG_NOVLX-NEXT: retq4438;4439; BITALG-LABEL: ult_7_v8i32:4440; BITALG: # %bb.0:4441; BITALG-NEXT: vpopcntb %ymm0, %ymm04442; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm14443; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4444; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm24445; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4446; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm04447; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm04448; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7]4449; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm04450; BITALG-NEXT: retq4451 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)4452 %3 = icmp ult <8 x i32> %2, <i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7>4453 %4 = sext <8 x i1> %3 to <8 x i32>4454 ret <8 x i32> %44455}4456 4457define <8 x i32> @ugt_7_v8i32(<8 x i32> %0) {4458; AVX1-LABEL: ugt_7_v8i32:4459; AVX1: # %bb.0:4460; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm14461; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]4462; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm34463; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]4464; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm34465; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm14466; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm14467; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm14468; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm14469; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm34470; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]4471; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm54472; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero4473; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm14474; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm14475; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm54476; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm54477; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm04478; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm04479; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm04480; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm04481; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]4482; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm24483; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero4484; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm04485; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm04486; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm04487; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm04488; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [7.0E+0,7.0E+0,7.0E+0,7.0E+0,7.0E+0,7.0E+0,7.0E+0,7.0E+0]4489; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm04490; AVX1-NEXT: retq4491;4492; AVX2-LABEL: ugt_7_v8i32:4493; AVX2: # %bb.0:4494; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]4495; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm24496; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]4497; AVX2-NEXT: # ymm3 = mem[0,1,0,1]4498; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm24499; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm04500; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm04501; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm04502; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm04503; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm14504; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4505; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm24506; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4507; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm04508; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm04509; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7]4510; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm04511; AVX2-NEXT: retq4512;4513; AVX512VPOPCNTDQ-LABEL: ugt_7_v8i32:4514; AVX512VPOPCNTDQ: # %bb.0:4515; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm04516; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm04517; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7]4518; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm04519; AVX512VPOPCNTDQ-NEXT: retq4520;4521; AVX512VPOPCNTDQVL-LABEL: ugt_7_v8i32:4522; AVX512VPOPCNTDQVL: # %bb.0:4523; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm04524; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7]4525; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm04526; AVX512VPOPCNTDQVL-NEXT: retq4527;4528; BITALG_NOVLX-LABEL: ugt_7_v8i32:4529; BITALG_NOVLX: # %bb.0:4530; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm04531; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm04532; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm14533; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4534; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm24535; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4536; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm04537; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm04538; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7]4539; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm04540; BITALG_NOVLX-NEXT: retq4541;4542; BITALG-LABEL: ugt_7_v8i32:4543; BITALG: # %bb.0:4544; BITALG-NEXT: vpopcntb %ymm0, %ymm04545; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm14546; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4547; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm24548; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4549; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm04550; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm04551; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7]4552; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm04553; BITALG-NEXT: retq4554 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)4555 %3 = icmp ugt <8 x i32> %2, <i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7>4556 %4 = sext <8 x i1> %3 to <8 x i32>4557 ret <8 x i32> %44558}4559 4560define <8 x i32> @ult_8_v8i32(<8 x i32> %0) {4561; AVX1-LABEL: ult_8_v8i32:4562; AVX1: # %bb.0:4563; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm14564; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]4565; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm34566; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]4567; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm34568; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm14569; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm14570; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm14571; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm14572; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm34573; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]4574; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm54575; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero4576; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm14577; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm14578; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm54579; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm54580; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm04581; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm04582; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm04583; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm04584; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]4585; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm24586; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero4587; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm04588; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm04589; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm04590; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm04591; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm04592; AVX1-NEXT: retq4593;4594; AVX2-LABEL: ult_8_v8i32:4595; AVX2: # %bb.0:4596; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]4597; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm24598; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]4599; AVX2-NEXT: # ymm3 = mem[0,1,0,1]4600; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm24601; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm04602; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm04603; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm04604; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm04605; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm14606; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4607; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm24608; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4609; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm04610; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm04611; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8]4612; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm04613; AVX2-NEXT: retq4614;4615; AVX512VPOPCNTDQ-LABEL: ult_8_v8i32:4616; AVX512VPOPCNTDQ: # %bb.0:4617; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm04618; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm04619; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8]4620; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm04621; AVX512VPOPCNTDQ-NEXT: retq4622;4623; AVX512VPOPCNTDQVL-LABEL: ult_8_v8i32:4624; AVX512VPOPCNTDQVL: # %bb.0:4625; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm04626; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8]4627; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm04628; AVX512VPOPCNTDQVL-NEXT: retq4629;4630; BITALG_NOVLX-LABEL: ult_8_v8i32:4631; BITALG_NOVLX: # %bb.0:4632; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm04633; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm04634; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm14635; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4636; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm24637; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4638; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm04639; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm04640; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8]4641; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm04642; BITALG_NOVLX-NEXT: retq4643;4644; BITALG-LABEL: ult_8_v8i32:4645; BITALG: # %bb.0:4646; BITALG-NEXT: vpopcntb %ymm0, %ymm04647; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm14648; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4649; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm24650; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4651; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm04652; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm04653; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8]4654; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm04655; BITALG-NEXT: retq4656 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)4657 %3 = icmp ult <8 x i32> %2, <i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>4658 %4 = sext <8 x i1> %3 to <8 x i32>4659 ret <8 x i32> %44660}4661 4662define <8 x i32> @ugt_8_v8i32(<8 x i32> %0) {4663; AVX1-LABEL: ugt_8_v8i32:4664; AVX1: # %bb.0:4665; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm14666; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]4667; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm34668; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]4669; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm34670; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm14671; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm14672; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm14673; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm14674; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm34675; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]4676; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm54677; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero4678; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm14679; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm14680; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm54681; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm54682; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm04683; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm04684; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm04685; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm04686; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]4687; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm24688; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero4689; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm04690; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm04691; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm04692; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm04693; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [8.0E+0,8.0E+0,8.0E+0,8.0E+0,8.0E+0,8.0E+0,8.0E+0,8.0E+0]4694; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm04695; AVX1-NEXT: retq4696;4697; AVX2-LABEL: ugt_8_v8i32:4698; AVX2: # %bb.0:4699; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]4700; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm24701; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]4702; AVX2-NEXT: # ymm3 = mem[0,1,0,1]4703; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm24704; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm04705; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm04706; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm04707; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm04708; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm14709; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4710; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm24711; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4712; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm04713; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm04714; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8]4715; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm04716; AVX2-NEXT: retq4717;4718; AVX512VPOPCNTDQ-LABEL: ugt_8_v8i32:4719; AVX512VPOPCNTDQ: # %bb.0:4720; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm04721; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm04722; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8]4723; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm04724; AVX512VPOPCNTDQ-NEXT: retq4725;4726; AVX512VPOPCNTDQVL-LABEL: ugt_8_v8i32:4727; AVX512VPOPCNTDQVL: # %bb.0:4728; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm04729; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8]4730; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm04731; AVX512VPOPCNTDQVL-NEXT: retq4732;4733; BITALG_NOVLX-LABEL: ugt_8_v8i32:4734; BITALG_NOVLX: # %bb.0:4735; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm04736; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm04737; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm14738; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4739; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm24740; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4741; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm04742; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm04743; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8]4744; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm04745; BITALG_NOVLX-NEXT: retq4746;4747; BITALG-LABEL: ugt_8_v8i32:4748; BITALG: # %bb.0:4749; BITALG-NEXT: vpopcntb %ymm0, %ymm04750; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm14751; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4752; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm24753; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4754; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm04755; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm04756; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8]4757; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm04758; BITALG-NEXT: retq4759 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)4760 %3 = icmp ugt <8 x i32> %2, <i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>4761 %4 = sext <8 x i1> %3 to <8 x i32>4762 ret <8 x i32> %44763}4764 4765define <8 x i32> @ult_9_v8i32(<8 x i32> %0) {4766; AVX1-LABEL: ult_9_v8i32:4767; AVX1: # %bb.0:4768; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm14769; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]4770; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm34771; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]4772; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm34773; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm14774; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm14775; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm14776; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm14777; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm34778; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]4779; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm54780; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero4781; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm14782; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm14783; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm54784; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm54785; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm04786; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm04787; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm04788; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm04789; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]4790; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm24791; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero4792; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm04793; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm04794; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm04795; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm04796; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm04797; AVX1-NEXT: retq4798;4799; AVX2-LABEL: ult_9_v8i32:4800; AVX2: # %bb.0:4801; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]4802; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm24803; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]4804; AVX2-NEXT: # ymm3 = mem[0,1,0,1]4805; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm24806; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm04807; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm04808; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm04809; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm04810; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm14811; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4812; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm24813; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4814; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm04815; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm04816; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9]4817; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm04818; AVX2-NEXT: retq4819;4820; AVX512VPOPCNTDQ-LABEL: ult_9_v8i32:4821; AVX512VPOPCNTDQ: # %bb.0:4822; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm04823; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm04824; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9]4825; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm04826; AVX512VPOPCNTDQ-NEXT: retq4827;4828; AVX512VPOPCNTDQVL-LABEL: ult_9_v8i32:4829; AVX512VPOPCNTDQVL: # %bb.0:4830; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm04831; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9]4832; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm04833; AVX512VPOPCNTDQVL-NEXT: retq4834;4835; BITALG_NOVLX-LABEL: ult_9_v8i32:4836; BITALG_NOVLX: # %bb.0:4837; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm04838; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm04839; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm14840; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4841; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm24842; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4843; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm04844; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm04845; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9]4846; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm04847; BITALG_NOVLX-NEXT: retq4848;4849; BITALG-LABEL: ult_9_v8i32:4850; BITALG: # %bb.0:4851; BITALG-NEXT: vpopcntb %ymm0, %ymm04852; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm14853; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4854; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm24855; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4856; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm04857; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm04858; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9]4859; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm04860; BITALG-NEXT: retq4861 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)4862 %3 = icmp ult <8 x i32> %2, <i32 9, i32 9, i32 9, i32 9, i32 9, i32 9, i32 9, i32 9>4863 %4 = sext <8 x i1> %3 to <8 x i32>4864 ret <8 x i32> %44865}4866 4867define <8 x i32> @ugt_9_v8i32(<8 x i32> %0) {4868; AVX1-LABEL: ugt_9_v8i32:4869; AVX1: # %bb.0:4870; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm14871; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]4872; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm34873; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]4874; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm34875; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm14876; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm14877; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm14878; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm14879; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm34880; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]4881; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm54882; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero4883; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm14884; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm14885; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm54886; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm54887; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm04888; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm04889; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm04890; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm04891; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]4892; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm24893; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero4894; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm04895; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm04896; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm04897; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm04898; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [9.0E+0,9.0E+0,9.0E+0,9.0E+0,9.0E+0,9.0E+0,9.0E+0,9.0E+0]4899; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm04900; AVX1-NEXT: retq4901;4902; AVX2-LABEL: ugt_9_v8i32:4903; AVX2: # %bb.0:4904; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]4905; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm24906; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]4907; AVX2-NEXT: # ymm3 = mem[0,1,0,1]4908; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm24909; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm04910; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm04911; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm04912; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm04913; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm14914; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4915; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm24916; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4917; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm04918; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm04919; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9]4920; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm04921; AVX2-NEXT: retq4922;4923; AVX512VPOPCNTDQ-LABEL: ugt_9_v8i32:4924; AVX512VPOPCNTDQ: # %bb.0:4925; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm04926; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm04927; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9]4928; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm04929; AVX512VPOPCNTDQ-NEXT: retq4930;4931; AVX512VPOPCNTDQVL-LABEL: ugt_9_v8i32:4932; AVX512VPOPCNTDQVL: # %bb.0:4933; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm04934; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9]4935; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm04936; AVX512VPOPCNTDQVL-NEXT: retq4937;4938; BITALG_NOVLX-LABEL: ugt_9_v8i32:4939; BITALG_NOVLX: # %bb.0:4940; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm04941; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm04942; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm14943; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4944; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm24945; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4946; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm04947; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm04948; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9]4949; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm04950; BITALG_NOVLX-NEXT: retq4951;4952; BITALG-LABEL: ugt_9_v8i32:4953; BITALG: # %bb.0:4954; BITALG-NEXT: vpopcntb %ymm0, %ymm04955; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm14956; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]4957; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm24958; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]4959; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm04960; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm04961; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9]4962; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm04963; BITALG-NEXT: retq4964 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)4965 %3 = icmp ugt <8 x i32> %2, <i32 9, i32 9, i32 9, i32 9, i32 9, i32 9, i32 9, i32 9>4966 %4 = sext <8 x i1> %3 to <8 x i32>4967 ret <8 x i32> %44968}4969 4970define <8 x i32> @ult_10_v8i32(<8 x i32> %0) {4971; AVX1-LABEL: ult_10_v8i32:4972; AVX1: # %bb.0:4973; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm14974; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]4975; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm34976; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]4977; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm34978; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm14979; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm14980; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm14981; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm14982; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm34983; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]4984; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm54985; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero4986; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm14987; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm14988; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm54989; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm54990; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm04991; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm04992; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm04993; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm04994; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]4995; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm24996; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero4997; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm04998; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm04999; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm05000; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm05001; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm05002; AVX1-NEXT: retq5003;5004; AVX2-LABEL: ult_10_v8i32:5005; AVX2: # %bb.0:5006; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]5007; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm25008; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]5009; AVX2-NEXT: # ymm3 = mem[0,1,0,1]5010; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm25011; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm05012; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm05013; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm05014; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm05015; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm15016; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5017; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm25018; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5019; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm05020; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm05021; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10]5022; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm05023; AVX2-NEXT: retq5024;5025; AVX512VPOPCNTDQ-LABEL: ult_10_v8i32:5026; AVX512VPOPCNTDQ: # %bb.0:5027; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm05028; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm05029; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10]5030; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm05031; AVX512VPOPCNTDQ-NEXT: retq5032;5033; AVX512VPOPCNTDQVL-LABEL: ult_10_v8i32:5034; AVX512VPOPCNTDQVL: # %bb.0:5035; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm05036; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10]5037; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm05038; AVX512VPOPCNTDQVL-NEXT: retq5039;5040; BITALG_NOVLX-LABEL: ult_10_v8i32:5041; BITALG_NOVLX: # %bb.0:5042; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm05043; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm05044; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm15045; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5046; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm25047; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5048; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm05049; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm05050; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10]5051; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm05052; BITALG_NOVLX-NEXT: retq5053;5054; BITALG-LABEL: ult_10_v8i32:5055; BITALG: # %bb.0:5056; BITALG-NEXT: vpopcntb %ymm0, %ymm05057; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm15058; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5059; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm25060; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5061; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm05062; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm05063; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10]5064; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm05065; BITALG-NEXT: retq5066 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)5067 %3 = icmp ult <8 x i32> %2, <i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10>5068 %4 = sext <8 x i1> %3 to <8 x i32>5069 ret <8 x i32> %45070}5071 5072define <8 x i32> @ugt_10_v8i32(<8 x i32> %0) {5073; AVX1-LABEL: ugt_10_v8i32:5074; AVX1: # %bb.0:5075; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm15076; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]5077; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm35078; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]5079; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm35080; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm15081; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm15082; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm15083; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm15084; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm35085; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]5086; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm55087; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero5088; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm15089; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm15090; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm55091; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm55092; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm05093; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm05094; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm05095; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm05096; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]5097; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm25098; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero5099; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm05100; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm05101; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm05102; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm05103; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [1.0E+1,1.0E+1,1.0E+1,1.0E+1,1.0E+1,1.0E+1,1.0E+1,1.0E+1]5104; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm05105; AVX1-NEXT: retq5106;5107; AVX2-LABEL: ugt_10_v8i32:5108; AVX2: # %bb.0:5109; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]5110; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm25111; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]5112; AVX2-NEXT: # ymm3 = mem[0,1,0,1]5113; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm25114; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm05115; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm05116; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm05117; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm05118; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm15119; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5120; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm25121; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5122; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm05123; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm05124; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10]5125; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm05126; AVX2-NEXT: retq5127;5128; AVX512VPOPCNTDQ-LABEL: ugt_10_v8i32:5129; AVX512VPOPCNTDQ: # %bb.0:5130; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm05131; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm05132; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10]5133; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm05134; AVX512VPOPCNTDQ-NEXT: retq5135;5136; AVX512VPOPCNTDQVL-LABEL: ugt_10_v8i32:5137; AVX512VPOPCNTDQVL: # %bb.0:5138; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm05139; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10]5140; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm05141; AVX512VPOPCNTDQVL-NEXT: retq5142;5143; BITALG_NOVLX-LABEL: ugt_10_v8i32:5144; BITALG_NOVLX: # %bb.0:5145; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm05146; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm05147; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm15148; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5149; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm25150; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5151; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm05152; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm05153; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10]5154; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm05155; BITALG_NOVLX-NEXT: retq5156;5157; BITALG-LABEL: ugt_10_v8i32:5158; BITALG: # %bb.0:5159; BITALG-NEXT: vpopcntb %ymm0, %ymm05160; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm15161; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5162; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm25163; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5164; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm05165; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm05166; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10]5167; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm05168; BITALG-NEXT: retq5169 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)5170 %3 = icmp ugt <8 x i32> %2, <i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10>5171 %4 = sext <8 x i1> %3 to <8 x i32>5172 ret <8 x i32> %45173}5174 5175define <8 x i32> @ult_11_v8i32(<8 x i32> %0) {5176; AVX1-LABEL: ult_11_v8i32:5177; AVX1: # %bb.0:5178; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm15179; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]5180; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm35181; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]5182; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm35183; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm15184; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm15185; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm15186; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm15187; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm35188; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]5189; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm55190; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero5191; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm15192; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm15193; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm55194; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm55195; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm05196; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm05197; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm05198; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm05199; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]5200; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm25201; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero5202; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm05203; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm05204; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm05205; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm05206; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm05207; AVX1-NEXT: retq5208;5209; AVX2-LABEL: ult_11_v8i32:5210; AVX2: # %bb.0:5211; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]5212; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm25213; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]5214; AVX2-NEXT: # ymm3 = mem[0,1,0,1]5215; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm25216; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm05217; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm05218; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm05219; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm05220; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm15221; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5222; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm25223; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5224; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm05225; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm05226; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11]5227; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm05228; AVX2-NEXT: retq5229;5230; AVX512VPOPCNTDQ-LABEL: ult_11_v8i32:5231; AVX512VPOPCNTDQ: # %bb.0:5232; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm05233; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm05234; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11]5235; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm05236; AVX512VPOPCNTDQ-NEXT: retq5237;5238; AVX512VPOPCNTDQVL-LABEL: ult_11_v8i32:5239; AVX512VPOPCNTDQVL: # %bb.0:5240; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm05241; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11]5242; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm05243; AVX512VPOPCNTDQVL-NEXT: retq5244;5245; BITALG_NOVLX-LABEL: ult_11_v8i32:5246; BITALG_NOVLX: # %bb.0:5247; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm05248; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm05249; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm15250; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5251; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm25252; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5253; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm05254; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm05255; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11]5256; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm05257; BITALG_NOVLX-NEXT: retq5258;5259; BITALG-LABEL: ult_11_v8i32:5260; BITALG: # %bb.0:5261; BITALG-NEXT: vpopcntb %ymm0, %ymm05262; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm15263; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5264; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm25265; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5266; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm05267; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm05268; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11]5269; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm05270; BITALG-NEXT: retq5271 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)5272 %3 = icmp ult <8 x i32> %2, <i32 11, i32 11, i32 11, i32 11, i32 11, i32 11, i32 11, i32 11>5273 %4 = sext <8 x i1> %3 to <8 x i32>5274 ret <8 x i32> %45275}5276 5277define <8 x i32> @ugt_11_v8i32(<8 x i32> %0) {5278; AVX1-LABEL: ugt_11_v8i32:5279; AVX1: # %bb.0:5280; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm15281; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]5282; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm35283; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]5284; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm35285; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm15286; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm15287; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm15288; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm15289; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm35290; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]5291; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm55292; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero5293; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm15294; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm15295; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm55296; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm55297; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm05298; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm05299; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm05300; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm05301; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]5302; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm25303; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero5304; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm05305; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm05306; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm05307; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm05308; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [1.1E+1,1.1E+1,1.1E+1,1.1E+1,1.1E+1,1.1E+1,1.1E+1,1.1E+1]5309; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm05310; AVX1-NEXT: retq5311;5312; AVX2-LABEL: ugt_11_v8i32:5313; AVX2: # %bb.0:5314; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]5315; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm25316; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]5317; AVX2-NEXT: # ymm3 = mem[0,1,0,1]5318; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm25319; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm05320; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm05321; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm05322; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm05323; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm15324; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5325; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm25326; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5327; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm05328; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm05329; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11]5330; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm05331; AVX2-NEXT: retq5332;5333; AVX512VPOPCNTDQ-LABEL: ugt_11_v8i32:5334; AVX512VPOPCNTDQ: # %bb.0:5335; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm05336; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm05337; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11]5338; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm05339; AVX512VPOPCNTDQ-NEXT: retq5340;5341; AVX512VPOPCNTDQVL-LABEL: ugt_11_v8i32:5342; AVX512VPOPCNTDQVL: # %bb.0:5343; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm05344; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11]5345; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm05346; AVX512VPOPCNTDQVL-NEXT: retq5347;5348; BITALG_NOVLX-LABEL: ugt_11_v8i32:5349; BITALG_NOVLX: # %bb.0:5350; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm05351; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm05352; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm15353; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5354; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm25355; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5356; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm05357; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm05358; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11]5359; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm05360; BITALG_NOVLX-NEXT: retq5361;5362; BITALG-LABEL: ugt_11_v8i32:5363; BITALG: # %bb.0:5364; BITALG-NEXT: vpopcntb %ymm0, %ymm05365; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm15366; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5367; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm25368; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5369; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm05370; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm05371; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11]5372; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm05373; BITALG-NEXT: retq5374 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)5375 %3 = icmp ugt <8 x i32> %2, <i32 11, i32 11, i32 11, i32 11, i32 11, i32 11, i32 11, i32 11>5376 %4 = sext <8 x i1> %3 to <8 x i32>5377 ret <8 x i32> %45378}5379 5380define <8 x i32> @ult_12_v8i32(<8 x i32> %0) {5381; AVX1-LABEL: ult_12_v8i32:5382; AVX1: # %bb.0:5383; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm15384; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]5385; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm35386; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]5387; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm35388; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm15389; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm15390; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm15391; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm15392; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm35393; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]5394; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm55395; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero5396; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm15397; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm15398; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm55399; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm55400; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm05401; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm05402; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm05403; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm05404; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]5405; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm25406; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero5407; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm05408; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm05409; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm05410; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm05411; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm05412; AVX1-NEXT: retq5413;5414; AVX2-LABEL: ult_12_v8i32:5415; AVX2: # %bb.0:5416; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]5417; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm25418; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]5419; AVX2-NEXT: # ymm3 = mem[0,1,0,1]5420; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm25421; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm05422; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm05423; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm05424; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm05425; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm15426; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5427; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm25428; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5429; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm05430; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm05431; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12]5432; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm05433; AVX2-NEXT: retq5434;5435; AVX512VPOPCNTDQ-LABEL: ult_12_v8i32:5436; AVX512VPOPCNTDQ: # %bb.0:5437; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm05438; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm05439; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12]5440; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm05441; AVX512VPOPCNTDQ-NEXT: retq5442;5443; AVX512VPOPCNTDQVL-LABEL: ult_12_v8i32:5444; AVX512VPOPCNTDQVL: # %bb.0:5445; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm05446; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12]5447; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm05448; AVX512VPOPCNTDQVL-NEXT: retq5449;5450; BITALG_NOVLX-LABEL: ult_12_v8i32:5451; BITALG_NOVLX: # %bb.0:5452; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm05453; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm05454; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm15455; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5456; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm25457; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5458; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm05459; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm05460; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12]5461; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm05462; BITALG_NOVLX-NEXT: retq5463;5464; BITALG-LABEL: ult_12_v8i32:5465; BITALG: # %bb.0:5466; BITALG-NEXT: vpopcntb %ymm0, %ymm05467; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm15468; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5469; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm25470; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5471; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm05472; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm05473; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12]5474; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm05475; BITALG-NEXT: retq5476 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)5477 %3 = icmp ult <8 x i32> %2, <i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12>5478 %4 = sext <8 x i1> %3 to <8 x i32>5479 ret <8 x i32> %45480}5481 5482define <8 x i32> @ugt_12_v8i32(<8 x i32> %0) {5483; AVX1-LABEL: ugt_12_v8i32:5484; AVX1: # %bb.0:5485; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm15486; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]5487; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm35488; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]5489; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm35490; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm15491; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm15492; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm15493; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm15494; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm35495; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]5496; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm55497; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero5498; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm15499; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm15500; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm55501; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm55502; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm05503; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm05504; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm05505; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm05506; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]5507; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm25508; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero5509; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm05510; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm05511; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm05512; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm05513; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [1.2E+1,1.2E+1,1.2E+1,1.2E+1,1.2E+1,1.2E+1,1.2E+1,1.2E+1]5514; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm05515; AVX1-NEXT: retq5516;5517; AVX2-LABEL: ugt_12_v8i32:5518; AVX2: # %bb.0:5519; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]5520; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm25521; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]5522; AVX2-NEXT: # ymm3 = mem[0,1,0,1]5523; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm25524; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm05525; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm05526; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm05527; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm05528; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm15529; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5530; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm25531; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5532; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm05533; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm05534; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12]5535; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm05536; AVX2-NEXT: retq5537;5538; AVX512VPOPCNTDQ-LABEL: ugt_12_v8i32:5539; AVX512VPOPCNTDQ: # %bb.0:5540; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm05541; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm05542; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12]5543; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm05544; AVX512VPOPCNTDQ-NEXT: retq5545;5546; AVX512VPOPCNTDQVL-LABEL: ugt_12_v8i32:5547; AVX512VPOPCNTDQVL: # %bb.0:5548; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm05549; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12]5550; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm05551; AVX512VPOPCNTDQVL-NEXT: retq5552;5553; BITALG_NOVLX-LABEL: ugt_12_v8i32:5554; BITALG_NOVLX: # %bb.0:5555; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm05556; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm05557; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm15558; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5559; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm25560; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5561; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm05562; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm05563; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12]5564; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm05565; BITALG_NOVLX-NEXT: retq5566;5567; BITALG-LABEL: ugt_12_v8i32:5568; BITALG: # %bb.0:5569; BITALG-NEXT: vpopcntb %ymm0, %ymm05570; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm15571; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5572; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm25573; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5574; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm05575; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm05576; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12]5577; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm05578; BITALG-NEXT: retq5579 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)5580 %3 = icmp ugt <8 x i32> %2, <i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12>5581 %4 = sext <8 x i1> %3 to <8 x i32>5582 ret <8 x i32> %45583}5584 5585define <8 x i32> @ult_13_v8i32(<8 x i32> %0) {5586; AVX1-LABEL: ult_13_v8i32:5587; AVX1: # %bb.0:5588; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm15589; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]5590; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm35591; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]5592; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm35593; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm15594; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm15595; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm15596; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm15597; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm35598; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]5599; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm55600; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero5601; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm15602; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm15603; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm55604; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm55605; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm05606; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm05607; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm05608; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm05609; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]5610; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm25611; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero5612; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm05613; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm05614; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm05615; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm05616; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm05617; AVX1-NEXT: retq5618;5619; AVX2-LABEL: ult_13_v8i32:5620; AVX2: # %bb.0:5621; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]5622; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm25623; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]5624; AVX2-NEXT: # ymm3 = mem[0,1,0,1]5625; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm25626; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm05627; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm05628; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm05629; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm05630; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm15631; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5632; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm25633; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5634; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm05635; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm05636; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13]5637; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm05638; AVX2-NEXT: retq5639;5640; AVX512VPOPCNTDQ-LABEL: ult_13_v8i32:5641; AVX512VPOPCNTDQ: # %bb.0:5642; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm05643; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm05644; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13]5645; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm05646; AVX512VPOPCNTDQ-NEXT: retq5647;5648; AVX512VPOPCNTDQVL-LABEL: ult_13_v8i32:5649; AVX512VPOPCNTDQVL: # %bb.0:5650; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm05651; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13]5652; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm05653; AVX512VPOPCNTDQVL-NEXT: retq5654;5655; BITALG_NOVLX-LABEL: ult_13_v8i32:5656; BITALG_NOVLX: # %bb.0:5657; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm05658; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm05659; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm15660; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5661; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm25662; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5663; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm05664; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm05665; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13]5666; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm05667; BITALG_NOVLX-NEXT: retq5668;5669; BITALG-LABEL: ult_13_v8i32:5670; BITALG: # %bb.0:5671; BITALG-NEXT: vpopcntb %ymm0, %ymm05672; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm15673; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5674; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm25675; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5676; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm05677; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm05678; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13]5679; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm05680; BITALG-NEXT: retq5681 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)5682 %3 = icmp ult <8 x i32> %2, <i32 13, i32 13, i32 13, i32 13, i32 13, i32 13, i32 13, i32 13>5683 %4 = sext <8 x i1> %3 to <8 x i32>5684 ret <8 x i32> %45685}5686 5687define <8 x i32> @ugt_13_v8i32(<8 x i32> %0) {5688; AVX1-LABEL: ugt_13_v8i32:5689; AVX1: # %bb.0:5690; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm15691; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]5692; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm35693; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]5694; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm35695; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm15696; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm15697; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm15698; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm15699; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm35700; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]5701; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm55702; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero5703; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm15704; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm15705; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm55706; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm55707; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm05708; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm05709; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm05710; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm05711; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]5712; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm25713; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero5714; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm05715; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm05716; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm05717; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm05718; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [1.3E+1,1.3E+1,1.3E+1,1.3E+1,1.3E+1,1.3E+1,1.3E+1,1.3E+1]5719; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm05720; AVX1-NEXT: retq5721;5722; AVX2-LABEL: ugt_13_v8i32:5723; AVX2: # %bb.0:5724; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]5725; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm25726; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]5727; AVX2-NEXT: # ymm3 = mem[0,1,0,1]5728; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm25729; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm05730; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm05731; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm05732; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm05733; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm15734; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5735; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm25736; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5737; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm05738; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm05739; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13]5740; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm05741; AVX2-NEXT: retq5742;5743; AVX512VPOPCNTDQ-LABEL: ugt_13_v8i32:5744; AVX512VPOPCNTDQ: # %bb.0:5745; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm05746; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm05747; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13]5748; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm05749; AVX512VPOPCNTDQ-NEXT: retq5750;5751; AVX512VPOPCNTDQVL-LABEL: ugt_13_v8i32:5752; AVX512VPOPCNTDQVL: # %bb.0:5753; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm05754; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13]5755; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm05756; AVX512VPOPCNTDQVL-NEXT: retq5757;5758; BITALG_NOVLX-LABEL: ugt_13_v8i32:5759; BITALG_NOVLX: # %bb.0:5760; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm05761; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm05762; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm15763; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5764; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm25765; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5766; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm05767; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm05768; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13]5769; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm05770; BITALG_NOVLX-NEXT: retq5771;5772; BITALG-LABEL: ugt_13_v8i32:5773; BITALG: # %bb.0:5774; BITALG-NEXT: vpopcntb %ymm0, %ymm05775; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm15776; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5777; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm25778; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5779; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm05780; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm05781; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13]5782; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm05783; BITALG-NEXT: retq5784 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)5785 %3 = icmp ugt <8 x i32> %2, <i32 13, i32 13, i32 13, i32 13, i32 13, i32 13, i32 13, i32 13>5786 %4 = sext <8 x i1> %3 to <8 x i32>5787 ret <8 x i32> %45788}5789 5790define <8 x i32> @ult_14_v8i32(<8 x i32> %0) {5791; AVX1-LABEL: ult_14_v8i32:5792; AVX1: # %bb.0:5793; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm15794; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]5795; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm35796; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]5797; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm35798; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm15799; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm15800; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm15801; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm15802; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm35803; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]5804; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm55805; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero5806; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm15807; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm15808; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm55809; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm55810; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm05811; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm05812; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm05813; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm05814; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]5815; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm25816; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero5817; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm05818; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm05819; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm05820; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm05821; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm05822; AVX1-NEXT: retq5823;5824; AVX2-LABEL: ult_14_v8i32:5825; AVX2: # %bb.0:5826; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]5827; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm25828; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]5829; AVX2-NEXT: # ymm3 = mem[0,1,0,1]5830; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm25831; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm05832; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm05833; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm05834; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm05835; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm15836; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5837; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm25838; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5839; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm05840; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm05841; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14]5842; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm05843; AVX2-NEXT: retq5844;5845; AVX512VPOPCNTDQ-LABEL: ult_14_v8i32:5846; AVX512VPOPCNTDQ: # %bb.0:5847; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm05848; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm05849; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14]5850; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm05851; AVX512VPOPCNTDQ-NEXT: retq5852;5853; AVX512VPOPCNTDQVL-LABEL: ult_14_v8i32:5854; AVX512VPOPCNTDQVL: # %bb.0:5855; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm05856; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14]5857; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm05858; AVX512VPOPCNTDQVL-NEXT: retq5859;5860; BITALG_NOVLX-LABEL: ult_14_v8i32:5861; BITALG_NOVLX: # %bb.0:5862; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm05863; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm05864; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm15865; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5866; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm25867; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5868; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm05869; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm05870; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14]5871; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm05872; BITALG_NOVLX-NEXT: retq5873;5874; BITALG-LABEL: ult_14_v8i32:5875; BITALG: # %bb.0:5876; BITALG-NEXT: vpopcntb %ymm0, %ymm05877; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm15878; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5879; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm25880; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5881; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm05882; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm05883; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14]5884; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm05885; BITALG-NEXT: retq5886 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)5887 %3 = icmp ult <8 x i32> %2, <i32 14, i32 14, i32 14, i32 14, i32 14, i32 14, i32 14, i32 14>5888 %4 = sext <8 x i1> %3 to <8 x i32>5889 ret <8 x i32> %45890}5891 5892define <8 x i32> @ugt_14_v8i32(<8 x i32> %0) {5893; AVX1-LABEL: ugt_14_v8i32:5894; AVX1: # %bb.0:5895; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm15896; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]5897; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm35898; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]5899; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm35900; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm15901; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm15902; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm15903; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm15904; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm35905; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]5906; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm55907; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero5908; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm15909; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm15910; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm55911; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm55912; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm05913; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm05914; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm05915; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm05916; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]5917; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm25918; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero5919; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm05920; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm05921; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm05922; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm05923; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [1.4E+1,1.4E+1,1.4E+1,1.4E+1,1.4E+1,1.4E+1,1.4E+1,1.4E+1]5924; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm05925; AVX1-NEXT: retq5926;5927; AVX2-LABEL: ugt_14_v8i32:5928; AVX2: # %bb.0:5929; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]5930; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm25931; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]5932; AVX2-NEXT: # ymm3 = mem[0,1,0,1]5933; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm25934; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm05935; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm05936; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm05937; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm05938; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm15939; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5940; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm25941; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5942; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm05943; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm05944; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14]5945; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm05946; AVX2-NEXT: retq5947;5948; AVX512VPOPCNTDQ-LABEL: ugt_14_v8i32:5949; AVX512VPOPCNTDQ: # %bb.0:5950; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm05951; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm05952; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14]5953; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm05954; AVX512VPOPCNTDQ-NEXT: retq5955;5956; AVX512VPOPCNTDQVL-LABEL: ugt_14_v8i32:5957; AVX512VPOPCNTDQVL: # %bb.0:5958; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm05959; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14]5960; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm05961; AVX512VPOPCNTDQVL-NEXT: retq5962;5963; BITALG_NOVLX-LABEL: ugt_14_v8i32:5964; BITALG_NOVLX: # %bb.0:5965; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm05966; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm05967; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm15968; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5969; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm25970; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5971; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm05972; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm05973; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14]5974; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm05975; BITALG_NOVLX-NEXT: retq5976;5977; BITALG-LABEL: ugt_14_v8i32:5978; BITALG: # %bb.0:5979; BITALG-NEXT: vpopcntb %ymm0, %ymm05980; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm15981; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]5982; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm25983; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]5984; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm05985; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm05986; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14]5987; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm05988; BITALG-NEXT: retq5989 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)5990 %3 = icmp ugt <8 x i32> %2, <i32 14, i32 14, i32 14, i32 14, i32 14, i32 14, i32 14, i32 14>5991 %4 = sext <8 x i1> %3 to <8 x i32>5992 ret <8 x i32> %45993}5994 5995define <8 x i32> @ult_15_v8i32(<8 x i32> %0) {5996; AVX1-LABEL: ult_15_v8i32:5997; AVX1: # %bb.0:5998; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm15999; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]6000; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm36001; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]6002; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm36003; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm16004; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm16005; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm16006; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm16007; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm36008; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]6009; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm56010; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero6011; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm16012; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm16013; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm56014; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm56015; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm06016; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm06017; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm06018; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm06019; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]6020; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm26021; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero6022; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm06023; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm06024; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm06025; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm06026; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm06027; AVX1-NEXT: retq6028;6029; AVX2-LABEL: ult_15_v8i32:6030; AVX2: # %bb.0:6031; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]6032; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm26033; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]6034; AVX2-NEXT: # ymm3 = mem[0,1,0,1]6035; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm26036; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm06037; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm06038; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm06039; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm06040; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm16041; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6042; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm26043; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6044; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm06045; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm06046; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15]6047; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm06048; AVX2-NEXT: retq6049;6050; AVX512VPOPCNTDQ-LABEL: ult_15_v8i32:6051; AVX512VPOPCNTDQ: # %bb.0:6052; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm06053; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm06054; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15]6055; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm06056; AVX512VPOPCNTDQ-NEXT: retq6057;6058; AVX512VPOPCNTDQVL-LABEL: ult_15_v8i32:6059; AVX512VPOPCNTDQVL: # %bb.0:6060; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm06061; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15]6062; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm06063; AVX512VPOPCNTDQVL-NEXT: retq6064;6065; BITALG_NOVLX-LABEL: ult_15_v8i32:6066; BITALG_NOVLX: # %bb.0:6067; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm06068; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm06069; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm16070; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6071; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm26072; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6073; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm06074; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm06075; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15]6076; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm06077; BITALG_NOVLX-NEXT: retq6078;6079; BITALG-LABEL: ult_15_v8i32:6080; BITALG: # %bb.0:6081; BITALG-NEXT: vpopcntb %ymm0, %ymm06082; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm16083; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6084; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm26085; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6086; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm06087; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm06088; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15]6089; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm06090; BITALG-NEXT: retq6091 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)6092 %3 = icmp ult <8 x i32> %2, <i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15>6093 %4 = sext <8 x i1> %3 to <8 x i32>6094 ret <8 x i32> %46095}6096 6097define <8 x i32> @ugt_15_v8i32(<8 x i32> %0) {6098; AVX1-LABEL: ugt_15_v8i32:6099; AVX1: # %bb.0:6100; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm16101; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]6102; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm36103; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]6104; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm36105; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm16106; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm16107; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm16108; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm16109; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm36110; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]6111; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm56112; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero6113; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm16114; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm16115; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm56116; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm56117; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm06118; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm06119; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm06120; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm06121; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]6122; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm26123; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero6124; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm06125; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm06126; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm06127; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm06128; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [1.5E+1,1.5E+1,1.5E+1,1.5E+1,1.5E+1,1.5E+1,1.5E+1,1.5E+1]6129; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm06130; AVX1-NEXT: retq6131;6132; AVX2-LABEL: ugt_15_v8i32:6133; AVX2: # %bb.0:6134; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]6135; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm26136; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]6137; AVX2-NEXT: # ymm3 = mem[0,1,0,1]6138; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm26139; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm06140; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm06141; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm06142; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm06143; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm16144; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6145; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm26146; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6147; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm06148; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm06149; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15]6150; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm06151; AVX2-NEXT: retq6152;6153; AVX512VPOPCNTDQ-LABEL: ugt_15_v8i32:6154; AVX512VPOPCNTDQ: # %bb.0:6155; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm06156; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm06157; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15]6158; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm06159; AVX512VPOPCNTDQ-NEXT: retq6160;6161; AVX512VPOPCNTDQVL-LABEL: ugt_15_v8i32:6162; AVX512VPOPCNTDQVL: # %bb.0:6163; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm06164; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15]6165; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm06166; AVX512VPOPCNTDQVL-NEXT: retq6167;6168; BITALG_NOVLX-LABEL: ugt_15_v8i32:6169; BITALG_NOVLX: # %bb.0:6170; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm06171; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm06172; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm16173; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6174; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm26175; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6176; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm06177; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm06178; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15]6179; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm06180; BITALG_NOVLX-NEXT: retq6181;6182; BITALG-LABEL: ugt_15_v8i32:6183; BITALG: # %bb.0:6184; BITALG-NEXT: vpopcntb %ymm0, %ymm06185; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm16186; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6187; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm26188; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6189; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm06190; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm06191; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15]6192; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm06193; BITALG-NEXT: retq6194 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)6195 %3 = icmp ugt <8 x i32> %2, <i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15>6196 %4 = sext <8 x i1> %3 to <8 x i32>6197 ret <8 x i32> %46198}6199 6200define <8 x i32> @ult_16_v8i32(<8 x i32> %0) {6201; AVX1-LABEL: ult_16_v8i32:6202; AVX1: # %bb.0:6203; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm16204; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]6205; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm36206; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]6207; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm36208; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm16209; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm16210; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm16211; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm16212; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm36213; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]6214; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm56215; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero6216; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm16217; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm16218; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm56219; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm56220; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm06221; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm06222; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm06223; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm06224; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]6225; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm26226; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero6227; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm06228; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm06229; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm06230; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm06231; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm06232; AVX1-NEXT: retq6233;6234; AVX2-LABEL: ult_16_v8i32:6235; AVX2: # %bb.0:6236; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]6237; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm26238; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]6239; AVX2-NEXT: # ymm3 = mem[0,1,0,1]6240; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm26241; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm06242; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm06243; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm06244; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm06245; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm16246; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6247; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm26248; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6249; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm06250; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm06251; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16]6252; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm06253; AVX2-NEXT: retq6254;6255; AVX512VPOPCNTDQ-LABEL: ult_16_v8i32:6256; AVX512VPOPCNTDQ: # %bb.0:6257; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm06258; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm06259; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16]6260; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm06261; AVX512VPOPCNTDQ-NEXT: retq6262;6263; AVX512VPOPCNTDQVL-LABEL: ult_16_v8i32:6264; AVX512VPOPCNTDQVL: # %bb.0:6265; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm06266; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16]6267; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm06268; AVX512VPOPCNTDQVL-NEXT: retq6269;6270; BITALG_NOVLX-LABEL: ult_16_v8i32:6271; BITALG_NOVLX: # %bb.0:6272; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm06273; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm06274; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm16275; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6276; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm26277; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6278; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm06279; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm06280; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16]6281; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm06282; BITALG_NOVLX-NEXT: retq6283;6284; BITALG-LABEL: ult_16_v8i32:6285; BITALG: # %bb.0:6286; BITALG-NEXT: vpopcntb %ymm0, %ymm06287; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm16288; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6289; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm26290; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6291; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm06292; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm06293; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16]6294; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm06295; BITALG-NEXT: retq6296 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)6297 %3 = icmp ult <8 x i32> %2, <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>6298 %4 = sext <8 x i1> %3 to <8 x i32>6299 ret <8 x i32> %46300}6301 6302define <8 x i32> @ugt_16_v8i32(<8 x i32> %0) {6303; AVX1-LABEL: ugt_16_v8i32:6304; AVX1: # %bb.0:6305; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm16306; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]6307; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm36308; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]6309; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm36310; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm16311; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm16312; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm16313; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm16314; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm36315; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]6316; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm56317; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero6318; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm16319; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm16320; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm56321; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm56322; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm06323; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm06324; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm06325; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm06326; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]6327; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm26328; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero6329; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm06330; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm06331; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm06332; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm06333; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [1.6E+1,1.6E+1,1.6E+1,1.6E+1,1.6E+1,1.6E+1,1.6E+1,1.6E+1]6334; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm06335; AVX1-NEXT: retq6336;6337; AVX2-LABEL: ugt_16_v8i32:6338; AVX2: # %bb.0:6339; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]6340; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm26341; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]6342; AVX2-NEXT: # ymm3 = mem[0,1,0,1]6343; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm26344; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm06345; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm06346; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm06347; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm06348; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm16349; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6350; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm26351; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6352; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm06353; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm06354; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16]6355; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm06356; AVX2-NEXT: retq6357;6358; AVX512VPOPCNTDQ-LABEL: ugt_16_v8i32:6359; AVX512VPOPCNTDQ: # %bb.0:6360; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm06361; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm06362; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16]6363; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm06364; AVX512VPOPCNTDQ-NEXT: retq6365;6366; AVX512VPOPCNTDQVL-LABEL: ugt_16_v8i32:6367; AVX512VPOPCNTDQVL: # %bb.0:6368; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm06369; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16]6370; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm06371; AVX512VPOPCNTDQVL-NEXT: retq6372;6373; BITALG_NOVLX-LABEL: ugt_16_v8i32:6374; BITALG_NOVLX: # %bb.0:6375; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm06376; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm06377; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm16378; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6379; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm26380; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6381; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm06382; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm06383; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16]6384; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm06385; BITALG_NOVLX-NEXT: retq6386;6387; BITALG-LABEL: ugt_16_v8i32:6388; BITALG: # %bb.0:6389; BITALG-NEXT: vpopcntb %ymm0, %ymm06390; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm16391; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6392; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm26393; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6394; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm06395; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm06396; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16]6397; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm06398; BITALG-NEXT: retq6399 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)6400 %3 = icmp ugt <8 x i32> %2, <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>6401 %4 = sext <8 x i1> %3 to <8 x i32>6402 ret <8 x i32> %46403}6404 6405define <8 x i32> @ult_17_v8i32(<8 x i32> %0) {6406; AVX1-LABEL: ult_17_v8i32:6407; AVX1: # %bb.0:6408; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm16409; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]6410; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm36411; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]6412; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm36413; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm16414; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm16415; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm16416; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm16417; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm36418; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]6419; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm56420; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero6421; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm16422; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm16423; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm56424; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm56425; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm06426; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm06427; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm06428; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm06429; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]6430; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm26431; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero6432; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm06433; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm06434; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm06435; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm06436; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm06437; AVX1-NEXT: retq6438;6439; AVX2-LABEL: ult_17_v8i32:6440; AVX2: # %bb.0:6441; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]6442; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm26443; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]6444; AVX2-NEXT: # ymm3 = mem[0,1,0,1]6445; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm26446; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm06447; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm06448; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm06449; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm06450; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm16451; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6452; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm26453; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6454; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm06455; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm06456; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [17,17,17,17,17,17,17,17]6457; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm06458; AVX2-NEXT: retq6459;6460; AVX512VPOPCNTDQ-LABEL: ult_17_v8i32:6461; AVX512VPOPCNTDQ: # %bb.0:6462; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm06463; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm06464; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [17,17,17,17,17,17,17,17]6465; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm06466; AVX512VPOPCNTDQ-NEXT: retq6467;6468; AVX512VPOPCNTDQVL-LABEL: ult_17_v8i32:6469; AVX512VPOPCNTDQVL: # %bb.0:6470; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm06471; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [17,17,17,17,17,17,17,17]6472; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm06473; AVX512VPOPCNTDQVL-NEXT: retq6474;6475; BITALG_NOVLX-LABEL: ult_17_v8i32:6476; BITALG_NOVLX: # %bb.0:6477; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm06478; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm06479; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm16480; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6481; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm26482; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6483; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm06484; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm06485; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [17,17,17,17,17,17,17,17]6486; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm06487; BITALG_NOVLX-NEXT: retq6488;6489; BITALG-LABEL: ult_17_v8i32:6490; BITALG: # %bb.0:6491; BITALG-NEXT: vpopcntb %ymm0, %ymm06492; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm16493; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6494; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm26495; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6496; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm06497; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm06498; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [17,17,17,17,17,17,17,17]6499; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm06500; BITALG-NEXT: retq6501 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)6502 %3 = icmp ult <8 x i32> %2, <i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17>6503 %4 = sext <8 x i1> %3 to <8 x i32>6504 ret <8 x i32> %46505}6506 6507define <8 x i32> @ugt_17_v8i32(<8 x i32> %0) {6508; AVX1-LABEL: ugt_17_v8i32:6509; AVX1: # %bb.0:6510; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm16511; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]6512; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm36513; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]6514; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm36515; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm16516; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm16517; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm16518; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm16519; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm36520; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]6521; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm56522; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero6523; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm16524; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm16525; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm56526; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm56527; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm06528; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm06529; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm06530; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm06531; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]6532; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm26533; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero6534; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm06535; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm06536; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm06537; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm06538; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [1.7E+1,1.7E+1,1.7E+1,1.7E+1,1.7E+1,1.7E+1,1.7E+1,1.7E+1]6539; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm06540; AVX1-NEXT: retq6541;6542; AVX2-LABEL: ugt_17_v8i32:6543; AVX2: # %bb.0:6544; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]6545; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm26546; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]6547; AVX2-NEXT: # ymm3 = mem[0,1,0,1]6548; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm26549; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm06550; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm06551; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm06552; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm06553; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm16554; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6555; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm26556; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6557; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm06558; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm06559; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [17,17,17,17,17,17,17,17]6560; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm06561; AVX2-NEXT: retq6562;6563; AVX512VPOPCNTDQ-LABEL: ugt_17_v8i32:6564; AVX512VPOPCNTDQ: # %bb.0:6565; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm06566; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm06567; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [17,17,17,17,17,17,17,17]6568; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm06569; AVX512VPOPCNTDQ-NEXT: retq6570;6571; AVX512VPOPCNTDQVL-LABEL: ugt_17_v8i32:6572; AVX512VPOPCNTDQVL: # %bb.0:6573; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm06574; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [17,17,17,17,17,17,17,17]6575; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm06576; AVX512VPOPCNTDQVL-NEXT: retq6577;6578; BITALG_NOVLX-LABEL: ugt_17_v8i32:6579; BITALG_NOVLX: # %bb.0:6580; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm06581; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm06582; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm16583; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6584; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm26585; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6586; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm06587; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm06588; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [17,17,17,17,17,17,17,17]6589; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm06590; BITALG_NOVLX-NEXT: retq6591;6592; BITALG-LABEL: ugt_17_v8i32:6593; BITALG: # %bb.0:6594; BITALG-NEXT: vpopcntb %ymm0, %ymm06595; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm16596; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6597; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm26598; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6599; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm06600; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm06601; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [17,17,17,17,17,17,17,17]6602; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm06603; BITALG-NEXT: retq6604 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)6605 %3 = icmp ugt <8 x i32> %2, <i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17>6606 %4 = sext <8 x i1> %3 to <8 x i32>6607 ret <8 x i32> %46608}6609 6610define <8 x i32> @ult_18_v8i32(<8 x i32> %0) {6611; AVX1-LABEL: ult_18_v8i32:6612; AVX1: # %bb.0:6613; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm16614; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]6615; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm36616; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]6617; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm36618; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm16619; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm16620; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm16621; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm16622; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm36623; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]6624; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm56625; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero6626; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm16627; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm16628; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm56629; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm56630; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm06631; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm06632; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm06633; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm06634; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]6635; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm26636; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero6637; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm06638; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm06639; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm06640; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm06641; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm06642; AVX1-NEXT: retq6643;6644; AVX2-LABEL: ult_18_v8i32:6645; AVX2: # %bb.0:6646; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]6647; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm26648; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]6649; AVX2-NEXT: # ymm3 = mem[0,1,0,1]6650; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm26651; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm06652; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm06653; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm06654; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm06655; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm16656; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6657; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm26658; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6659; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm06660; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm06661; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [18,18,18,18,18,18,18,18]6662; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm06663; AVX2-NEXT: retq6664;6665; AVX512VPOPCNTDQ-LABEL: ult_18_v8i32:6666; AVX512VPOPCNTDQ: # %bb.0:6667; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm06668; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm06669; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [18,18,18,18,18,18,18,18]6670; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm06671; AVX512VPOPCNTDQ-NEXT: retq6672;6673; AVX512VPOPCNTDQVL-LABEL: ult_18_v8i32:6674; AVX512VPOPCNTDQVL: # %bb.0:6675; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm06676; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [18,18,18,18,18,18,18,18]6677; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm06678; AVX512VPOPCNTDQVL-NEXT: retq6679;6680; BITALG_NOVLX-LABEL: ult_18_v8i32:6681; BITALG_NOVLX: # %bb.0:6682; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm06683; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm06684; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm16685; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6686; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm26687; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6688; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm06689; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm06690; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [18,18,18,18,18,18,18,18]6691; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm06692; BITALG_NOVLX-NEXT: retq6693;6694; BITALG-LABEL: ult_18_v8i32:6695; BITALG: # %bb.0:6696; BITALG-NEXT: vpopcntb %ymm0, %ymm06697; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm16698; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6699; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm26700; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6701; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm06702; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm06703; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [18,18,18,18,18,18,18,18]6704; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm06705; BITALG-NEXT: retq6706 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)6707 %3 = icmp ult <8 x i32> %2, <i32 18, i32 18, i32 18, i32 18, i32 18, i32 18, i32 18, i32 18>6708 %4 = sext <8 x i1> %3 to <8 x i32>6709 ret <8 x i32> %46710}6711 6712define <8 x i32> @ugt_18_v8i32(<8 x i32> %0) {6713; AVX1-LABEL: ugt_18_v8i32:6714; AVX1: # %bb.0:6715; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm16716; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]6717; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm36718; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]6719; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm36720; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm16721; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm16722; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm16723; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm16724; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm36725; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]6726; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm56727; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero6728; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm16729; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm16730; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm56731; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm56732; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm06733; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm06734; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm06735; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm06736; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]6737; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm26738; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero6739; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm06740; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm06741; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm06742; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm06743; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [1.8E+1,1.8E+1,1.8E+1,1.8E+1,1.8E+1,1.8E+1,1.8E+1,1.8E+1]6744; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm06745; AVX1-NEXT: retq6746;6747; AVX2-LABEL: ugt_18_v8i32:6748; AVX2: # %bb.0:6749; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]6750; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm26751; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]6752; AVX2-NEXT: # ymm3 = mem[0,1,0,1]6753; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm26754; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm06755; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm06756; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm06757; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm06758; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm16759; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6760; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm26761; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6762; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm06763; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm06764; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [18,18,18,18,18,18,18,18]6765; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm06766; AVX2-NEXT: retq6767;6768; AVX512VPOPCNTDQ-LABEL: ugt_18_v8i32:6769; AVX512VPOPCNTDQ: # %bb.0:6770; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm06771; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm06772; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [18,18,18,18,18,18,18,18]6773; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm06774; AVX512VPOPCNTDQ-NEXT: retq6775;6776; AVX512VPOPCNTDQVL-LABEL: ugt_18_v8i32:6777; AVX512VPOPCNTDQVL: # %bb.0:6778; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm06779; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [18,18,18,18,18,18,18,18]6780; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm06781; AVX512VPOPCNTDQVL-NEXT: retq6782;6783; BITALG_NOVLX-LABEL: ugt_18_v8i32:6784; BITALG_NOVLX: # %bb.0:6785; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm06786; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm06787; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm16788; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6789; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm26790; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6791; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm06792; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm06793; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [18,18,18,18,18,18,18,18]6794; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm06795; BITALG_NOVLX-NEXT: retq6796;6797; BITALG-LABEL: ugt_18_v8i32:6798; BITALG: # %bb.0:6799; BITALG-NEXT: vpopcntb %ymm0, %ymm06800; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm16801; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6802; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm26803; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6804; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm06805; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm06806; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [18,18,18,18,18,18,18,18]6807; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm06808; BITALG-NEXT: retq6809 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)6810 %3 = icmp ugt <8 x i32> %2, <i32 18, i32 18, i32 18, i32 18, i32 18, i32 18, i32 18, i32 18>6811 %4 = sext <8 x i1> %3 to <8 x i32>6812 ret <8 x i32> %46813}6814 6815define <8 x i32> @ult_19_v8i32(<8 x i32> %0) {6816; AVX1-LABEL: ult_19_v8i32:6817; AVX1: # %bb.0:6818; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm16819; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]6820; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm36821; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]6822; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm36823; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm16824; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm16825; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm16826; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm16827; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm36828; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]6829; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm56830; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero6831; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm16832; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm16833; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm56834; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm56835; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm06836; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm06837; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm06838; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm06839; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]6840; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm26841; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero6842; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm06843; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm06844; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm06845; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm06846; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm06847; AVX1-NEXT: retq6848;6849; AVX2-LABEL: ult_19_v8i32:6850; AVX2: # %bb.0:6851; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]6852; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm26853; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]6854; AVX2-NEXT: # ymm3 = mem[0,1,0,1]6855; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm26856; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm06857; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm06858; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm06859; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm06860; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm16861; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6862; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm26863; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6864; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm06865; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm06866; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [19,19,19,19,19,19,19,19]6867; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm06868; AVX2-NEXT: retq6869;6870; AVX512VPOPCNTDQ-LABEL: ult_19_v8i32:6871; AVX512VPOPCNTDQ: # %bb.0:6872; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm06873; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm06874; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [19,19,19,19,19,19,19,19]6875; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm06876; AVX512VPOPCNTDQ-NEXT: retq6877;6878; AVX512VPOPCNTDQVL-LABEL: ult_19_v8i32:6879; AVX512VPOPCNTDQVL: # %bb.0:6880; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm06881; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [19,19,19,19,19,19,19,19]6882; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm06883; AVX512VPOPCNTDQVL-NEXT: retq6884;6885; BITALG_NOVLX-LABEL: ult_19_v8i32:6886; BITALG_NOVLX: # %bb.0:6887; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm06888; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm06889; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm16890; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6891; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm26892; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6893; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm06894; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm06895; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [19,19,19,19,19,19,19,19]6896; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm06897; BITALG_NOVLX-NEXT: retq6898;6899; BITALG-LABEL: ult_19_v8i32:6900; BITALG: # %bb.0:6901; BITALG-NEXT: vpopcntb %ymm0, %ymm06902; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm16903; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6904; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm26905; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6906; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm06907; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm06908; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [19,19,19,19,19,19,19,19]6909; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm06910; BITALG-NEXT: retq6911 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)6912 %3 = icmp ult <8 x i32> %2, <i32 19, i32 19, i32 19, i32 19, i32 19, i32 19, i32 19, i32 19>6913 %4 = sext <8 x i1> %3 to <8 x i32>6914 ret <8 x i32> %46915}6916 6917define <8 x i32> @ugt_19_v8i32(<8 x i32> %0) {6918; AVX1-LABEL: ugt_19_v8i32:6919; AVX1: # %bb.0:6920; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm16921; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]6922; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm36923; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]6924; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm36925; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm16926; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm16927; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm16928; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm16929; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm36930; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]6931; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm56932; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero6933; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm16934; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm16935; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm56936; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm56937; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm06938; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm06939; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm06940; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm06941; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]6942; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm26943; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero6944; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm06945; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm06946; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm06947; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm06948; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [1.9E+1,1.9E+1,1.9E+1,1.9E+1,1.9E+1,1.9E+1,1.9E+1,1.9E+1]6949; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm06950; AVX1-NEXT: retq6951;6952; AVX2-LABEL: ugt_19_v8i32:6953; AVX2: # %bb.0:6954; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]6955; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm26956; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]6957; AVX2-NEXT: # ymm3 = mem[0,1,0,1]6958; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm26959; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm06960; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm06961; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm06962; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm06963; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm16964; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6965; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm26966; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6967; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm06968; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm06969; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [19,19,19,19,19,19,19,19]6970; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm06971; AVX2-NEXT: retq6972;6973; AVX512VPOPCNTDQ-LABEL: ugt_19_v8i32:6974; AVX512VPOPCNTDQ: # %bb.0:6975; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm06976; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm06977; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [19,19,19,19,19,19,19,19]6978; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm06979; AVX512VPOPCNTDQ-NEXT: retq6980;6981; AVX512VPOPCNTDQVL-LABEL: ugt_19_v8i32:6982; AVX512VPOPCNTDQVL: # %bb.0:6983; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm06984; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [19,19,19,19,19,19,19,19]6985; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm06986; AVX512VPOPCNTDQVL-NEXT: retq6987;6988; BITALG_NOVLX-LABEL: ugt_19_v8i32:6989; BITALG_NOVLX: # %bb.0:6990; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm06991; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm06992; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm16993; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]6994; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm26995; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]6996; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm06997; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm06998; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [19,19,19,19,19,19,19,19]6999; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm07000; BITALG_NOVLX-NEXT: retq7001;7002; BITALG-LABEL: ugt_19_v8i32:7003; BITALG: # %bb.0:7004; BITALG-NEXT: vpopcntb %ymm0, %ymm07005; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm17006; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7007; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm27008; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7009; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm07010; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm07011; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [19,19,19,19,19,19,19,19]7012; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm07013; BITALG-NEXT: retq7014 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)7015 %3 = icmp ugt <8 x i32> %2, <i32 19, i32 19, i32 19, i32 19, i32 19, i32 19, i32 19, i32 19>7016 %4 = sext <8 x i1> %3 to <8 x i32>7017 ret <8 x i32> %47018}7019 7020define <8 x i32> @ult_20_v8i32(<8 x i32> %0) {7021; AVX1-LABEL: ult_20_v8i32:7022; AVX1: # %bb.0:7023; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm17024; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]7025; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm37026; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]7027; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm37028; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm17029; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm17030; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm17031; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm17032; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm37033; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]7034; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm57035; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero7036; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm17037; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm17038; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm57039; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm57040; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm07041; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm07042; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm07043; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm07044; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]7045; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm27046; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero7047; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm07048; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm07049; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm07050; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm07051; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm07052; AVX1-NEXT: retq7053;7054; AVX2-LABEL: ult_20_v8i32:7055; AVX2: # %bb.0:7056; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]7057; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm27058; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]7059; AVX2-NEXT: # ymm3 = mem[0,1,0,1]7060; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm27061; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm07062; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm07063; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm07064; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm07065; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm17066; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7067; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm27068; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7069; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm07070; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm07071; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [20,20,20,20,20,20,20,20]7072; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm07073; AVX2-NEXT: retq7074;7075; AVX512VPOPCNTDQ-LABEL: ult_20_v8i32:7076; AVX512VPOPCNTDQ: # %bb.0:7077; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm07078; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm07079; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [20,20,20,20,20,20,20,20]7080; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm07081; AVX512VPOPCNTDQ-NEXT: retq7082;7083; AVX512VPOPCNTDQVL-LABEL: ult_20_v8i32:7084; AVX512VPOPCNTDQVL: # %bb.0:7085; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm07086; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [20,20,20,20,20,20,20,20]7087; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm07088; AVX512VPOPCNTDQVL-NEXT: retq7089;7090; BITALG_NOVLX-LABEL: ult_20_v8i32:7091; BITALG_NOVLX: # %bb.0:7092; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm07093; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm07094; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm17095; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7096; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm27097; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7098; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm07099; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm07100; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [20,20,20,20,20,20,20,20]7101; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm07102; BITALG_NOVLX-NEXT: retq7103;7104; BITALG-LABEL: ult_20_v8i32:7105; BITALG: # %bb.0:7106; BITALG-NEXT: vpopcntb %ymm0, %ymm07107; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm17108; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7109; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm27110; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7111; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm07112; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm07113; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [20,20,20,20,20,20,20,20]7114; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm07115; BITALG-NEXT: retq7116 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)7117 %3 = icmp ult <8 x i32> %2, <i32 20, i32 20, i32 20, i32 20, i32 20, i32 20, i32 20, i32 20>7118 %4 = sext <8 x i1> %3 to <8 x i32>7119 ret <8 x i32> %47120}7121 7122define <8 x i32> @ugt_20_v8i32(<8 x i32> %0) {7123; AVX1-LABEL: ugt_20_v8i32:7124; AVX1: # %bb.0:7125; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm17126; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]7127; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm37128; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]7129; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm37130; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm17131; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm17132; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm17133; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm17134; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm37135; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]7136; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm57137; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero7138; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm17139; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm17140; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm57141; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm57142; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm07143; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm07144; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm07145; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm07146; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]7147; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm27148; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero7149; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm07150; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm07151; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm07152; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm07153; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [2.0E+1,2.0E+1,2.0E+1,2.0E+1,2.0E+1,2.0E+1,2.0E+1,2.0E+1]7154; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm07155; AVX1-NEXT: retq7156;7157; AVX2-LABEL: ugt_20_v8i32:7158; AVX2: # %bb.0:7159; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]7160; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm27161; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]7162; AVX2-NEXT: # ymm3 = mem[0,1,0,1]7163; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm27164; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm07165; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm07166; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm07167; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm07168; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm17169; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7170; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm27171; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7172; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm07173; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm07174; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [20,20,20,20,20,20,20,20]7175; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm07176; AVX2-NEXT: retq7177;7178; AVX512VPOPCNTDQ-LABEL: ugt_20_v8i32:7179; AVX512VPOPCNTDQ: # %bb.0:7180; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm07181; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm07182; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [20,20,20,20,20,20,20,20]7183; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm07184; AVX512VPOPCNTDQ-NEXT: retq7185;7186; AVX512VPOPCNTDQVL-LABEL: ugt_20_v8i32:7187; AVX512VPOPCNTDQVL: # %bb.0:7188; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm07189; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [20,20,20,20,20,20,20,20]7190; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm07191; AVX512VPOPCNTDQVL-NEXT: retq7192;7193; BITALG_NOVLX-LABEL: ugt_20_v8i32:7194; BITALG_NOVLX: # %bb.0:7195; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm07196; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm07197; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm17198; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7199; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm27200; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7201; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm07202; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm07203; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [20,20,20,20,20,20,20,20]7204; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm07205; BITALG_NOVLX-NEXT: retq7206;7207; BITALG-LABEL: ugt_20_v8i32:7208; BITALG: # %bb.0:7209; BITALG-NEXT: vpopcntb %ymm0, %ymm07210; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm17211; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7212; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm27213; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7214; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm07215; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm07216; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [20,20,20,20,20,20,20,20]7217; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm07218; BITALG-NEXT: retq7219 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)7220 %3 = icmp ugt <8 x i32> %2, <i32 20, i32 20, i32 20, i32 20, i32 20, i32 20, i32 20, i32 20>7221 %4 = sext <8 x i1> %3 to <8 x i32>7222 ret <8 x i32> %47223}7224 7225define <8 x i32> @ult_21_v8i32(<8 x i32> %0) {7226; AVX1-LABEL: ult_21_v8i32:7227; AVX1: # %bb.0:7228; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm17229; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]7230; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm37231; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]7232; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm37233; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm17234; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm17235; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm17236; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm17237; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm37238; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]7239; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm57240; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero7241; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm17242; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm17243; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm57244; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm57245; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm07246; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm07247; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm07248; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm07249; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]7250; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm27251; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero7252; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm07253; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm07254; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm07255; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm07256; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm07257; AVX1-NEXT: retq7258;7259; AVX2-LABEL: ult_21_v8i32:7260; AVX2: # %bb.0:7261; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]7262; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm27263; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]7264; AVX2-NEXT: # ymm3 = mem[0,1,0,1]7265; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm27266; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm07267; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm07268; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm07269; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm07270; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm17271; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7272; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm27273; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7274; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm07275; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm07276; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [21,21,21,21,21,21,21,21]7277; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm07278; AVX2-NEXT: retq7279;7280; AVX512VPOPCNTDQ-LABEL: ult_21_v8i32:7281; AVX512VPOPCNTDQ: # %bb.0:7282; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm07283; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm07284; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [21,21,21,21,21,21,21,21]7285; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm07286; AVX512VPOPCNTDQ-NEXT: retq7287;7288; AVX512VPOPCNTDQVL-LABEL: ult_21_v8i32:7289; AVX512VPOPCNTDQVL: # %bb.0:7290; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm07291; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [21,21,21,21,21,21,21,21]7292; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm07293; AVX512VPOPCNTDQVL-NEXT: retq7294;7295; BITALG_NOVLX-LABEL: ult_21_v8i32:7296; BITALG_NOVLX: # %bb.0:7297; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm07298; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm07299; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm17300; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7301; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm27302; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7303; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm07304; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm07305; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [21,21,21,21,21,21,21,21]7306; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm07307; BITALG_NOVLX-NEXT: retq7308;7309; BITALG-LABEL: ult_21_v8i32:7310; BITALG: # %bb.0:7311; BITALG-NEXT: vpopcntb %ymm0, %ymm07312; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm17313; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7314; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm27315; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7316; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm07317; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm07318; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [21,21,21,21,21,21,21,21]7319; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm07320; BITALG-NEXT: retq7321 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)7322 %3 = icmp ult <8 x i32> %2, <i32 21, i32 21, i32 21, i32 21, i32 21, i32 21, i32 21, i32 21>7323 %4 = sext <8 x i1> %3 to <8 x i32>7324 ret <8 x i32> %47325}7326 7327define <8 x i32> @ugt_21_v8i32(<8 x i32> %0) {7328; AVX1-LABEL: ugt_21_v8i32:7329; AVX1: # %bb.0:7330; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm17331; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]7332; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm37333; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]7334; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm37335; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm17336; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm17337; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm17338; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm17339; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm37340; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]7341; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm57342; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero7343; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm17344; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm17345; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm57346; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm57347; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm07348; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm07349; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm07350; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm07351; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]7352; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm27353; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero7354; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm07355; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm07356; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm07357; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm07358; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [2.1E+1,2.1E+1,2.1E+1,2.1E+1,2.1E+1,2.1E+1,2.1E+1,2.1E+1]7359; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm07360; AVX1-NEXT: retq7361;7362; AVX2-LABEL: ugt_21_v8i32:7363; AVX2: # %bb.0:7364; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]7365; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm27366; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]7367; AVX2-NEXT: # ymm3 = mem[0,1,0,1]7368; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm27369; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm07370; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm07371; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm07372; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm07373; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm17374; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7375; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm27376; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7377; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm07378; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm07379; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [21,21,21,21,21,21,21,21]7380; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm07381; AVX2-NEXT: retq7382;7383; AVX512VPOPCNTDQ-LABEL: ugt_21_v8i32:7384; AVX512VPOPCNTDQ: # %bb.0:7385; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm07386; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm07387; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [21,21,21,21,21,21,21,21]7388; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm07389; AVX512VPOPCNTDQ-NEXT: retq7390;7391; AVX512VPOPCNTDQVL-LABEL: ugt_21_v8i32:7392; AVX512VPOPCNTDQVL: # %bb.0:7393; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm07394; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [21,21,21,21,21,21,21,21]7395; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm07396; AVX512VPOPCNTDQVL-NEXT: retq7397;7398; BITALG_NOVLX-LABEL: ugt_21_v8i32:7399; BITALG_NOVLX: # %bb.0:7400; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm07401; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm07402; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm17403; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7404; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm27405; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7406; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm07407; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm07408; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [21,21,21,21,21,21,21,21]7409; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm07410; BITALG_NOVLX-NEXT: retq7411;7412; BITALG-LABEL: ugt_21_v8i32:7413; BITALG: # %bb.0:7414; BITALG-NEXT: vpopcntb %ymm0, %ymm07415; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm17416; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7417; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm27418; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7419; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm07420; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm07421; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [21,21,21,21,21,21,21,21]7422; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm07423; BITALG-NEXT: retq7424 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)7425 %3 = icmp ugt <8 x i32> %2, <i32 21, i32 21, i32 21, i32 21, i32 21, i32 21, i32 21, i32 21>7426 %4 = sext <8 x i1> %3 to <8 x i32>7427 ret <8 x i32> %47428}7429 7430define <8 x i32> @ult_22_v8i32(<8 x i32> %0) {7431; AVX1-LABEL: ult_22_v8i32:7432; AVX1: # %bb.0:7433; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm17434; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]7435; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm37436; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]7437; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm37438; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm17439; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm17440; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm17441; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm17442; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm37443; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]7444; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm57445; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero7446; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm17447; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm17448; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm57449; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm57450; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm07451; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm07452; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm07453; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm07454; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]7455; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm27456; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero7457; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm07458; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm07459; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm07460; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm07461; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm07462; AVX1-NEXT: retq7463;7464; AVX2-LABEL: ult_22_v8i32:7465; AVX2: # %bb.0:7466; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]7467; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm27468; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]7469; AVX2-NEXT: # ymm3 = mem[0,1,0,1]7470; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm27471; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm07472; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm07473; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm07474; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm07475; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm17476; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7477; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm27478; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7479; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm07480; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm07481; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [22,22,22,22,22,22,22,22]7482; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm07483; AVX2-NEXT: retq7484;7485; AVX512VPOPCNTDQ-LABEL: ult_22_v8i32:7486; AVX512VPOPCNTDQ: # %bb.0:7487; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm07488; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm07489; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [22,22,22,22,22,22,22,22]7490; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm07491; AVX512VPOPCNTDQ-NEXT: retq7492;7493; AVX512VPOPCNTDQVL-LABEL: ult_22_v8i32:7494; AVX512VPOPCNTDQVL: # %bb.0:7495; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm07496; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [22,22,22,22,22,22,22,22]7497; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm07498; AVX512VPOPCNTDQVL-NEXT: retq7499;7500; BITALG_NOVLX-LABEL: ult_22_v8i32:7501; BITALG_NOVLX: # %bb.0:7502; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm07503; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm07504; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm17505; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7506; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm27507; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7508; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm07509; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm07510; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [22,22,22,22,22,22,22,22]7511; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm07512; BITALG_NOVLX-NEXT: retq7513;7514; BITALG-LABEL: ult_22_v8i32:7515; BITALG: # %bb.0:7516; BITALG-NEXT: vpopcntb %ymm0, %ymm07517; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm17518; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7519; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm27520; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7521; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm07522; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm07523; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [22,22,22,22,22,22,22,22]7524; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm07525; BITALG-NEXT: retq7526 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)7527 %3 = icmp ult <8 x i32> %2, <i32 22, i32 22, i32 22, i32 22, i32 22, i32 22, i32 22, i32 22>7528 %4 = sext <8 x i1> %3 to <8 x i32>7529 ret <8 x i32> %47530}7531 7532define <8 x i32> @ugt_22_v8i32(<8 x i32> %0) {7533; AVX1-LABEL: ugt_22_v8i32:7534; AVX1: # %bb.0:7535; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm17536; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]7537; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm37538; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]7539; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm37540; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm17541; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm17542; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm17543; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm17544; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm37545; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]7546; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm57547; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero7548; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm17549; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm17550; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm57551; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm57552; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm07553; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm07554; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm07555; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm07556; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]7557; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm27558; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero7559; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm07560; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm07561; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm07562; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm07563; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [2.2E+1,2.2E+1,2.2E+1,2.2E+1,2.2E+1,2.2E+1,2.2E+1,2.2E+1]7564; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm07565; AVX1-NEXT: retq7566;7567; AVX2-LABEL: ugt_22_v8i32:7568; AVX2: # %bb.0:7569; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]7570; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm27571; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]7572; AVX2-NEXT: # ymm3 = mem[0,1,0,1]7573; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm27574; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm07575; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm07576; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm07577; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm07578; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm17579; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7580; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm27581; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7582; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm07583; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm07584; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [22,22,22,22,22,22,22,22]7585; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm07586; AVX2-NEXT: retq7587;7588; AVX512VPOPCNTDQ-LABEL: ugt_22_v8i32:7589; AVX512VPOPCNTDQ: # %bb.0:7590; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm07591; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm07592; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [22,22,22,22,22,22,22,22]7593; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm07594; AVX512VPOPCNTDQ-NEXT: retq7595;7596; AVX512VPOPCNTDQVL-LABEL: ugt_22_v8i32:7597; AVX512VPOPCNTDQVL: # %bb.0:7598; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm07599; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [22,22,22,22,22,22,22,22]7600; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm07601; AVX512VPOPCNTDQVL-NEXT: retq7602;7603; BITALG_NOVLX-LABEL: ugt_22_v8i32:7604; BITALG_NOVLX: # %bb.0:7605; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm07606; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm07607; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm17608; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7609; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm27610; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7611; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm07612; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm07613; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [22,22,22,22,22,22,22,22]7614; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm07615; BITALG_NOVLX-NEXT: retq7616;7617; BITALG-LABEL: ugt_22_v8i32:7618; BITALG: # %bb.0:7619; BITALG-NEXT: vpopcntb %ymm0, %ymm07620; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm17621; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7622; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm27623; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7624; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm07625; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm07626; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [22,22,22,22,22,22,22,22]7627; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm07628; BITALG-NEXT: retq7629 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)7630 %3 = icmp ugt <8 x i32> %2, <i32 22, i32 22, i32 22, i32 22, i32 22, i32 22, i32 22, i32 22>7631 %4 = sext <8 x i1> %3 to <8 x i32>7632 ret <8 x i32> %47633}7634 7635define <8 x i32> @ult_23_v8i32(<8 x i32> %0) {7636; AVX1-LABEL: ult_23_v8i32:7637; AVX1: # %bb.0:7638; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm17639; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]7640; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm37641; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]7642; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm37643; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm17644; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm17645; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm17646; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm17647; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm37648; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]7649; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm57650; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero7651; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm17652; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm17653; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm57654; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm57655; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm07656; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm07657; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm07658; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm07659; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]7660; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm27661; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero7662; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm07663; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm07664; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm07665; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm07666; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm07667; AVX1-NEXT: retq7668;7669; AVX2-LABEL: ult_23_v8i32:7670; AVX2: # %bb.0:7671; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]7672; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm27673; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]7674; AVX2-NEXT: # ymm3 = mem[0,1,0,1]7675; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm27676; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm07677; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm07678; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm07679; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm07680; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm17681; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7682; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm27683; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7684; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm07685; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm07686; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [23,23,23,23,23,23,23,23]7687; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm07688; AVX2-NEXT: retq7689;7690; AVX512VPOPCNTDQ-LABEL: ult_23_v8i32:7691; AVX512VPOPCNTDQ: # %bb.0:7692; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm07693; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm07694; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [23,23,23,23,23,23,23,23]7695; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm07696; AVX512VPOPCNTDQ-NEXT: retq7697;7698; AVX512VPOPCNTDQVL-LABEL: ult_23_v8i32:7699; AVX512VPOPCNTDQVL: # %bb.0:7700; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm07701; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [23,23,23,23,23,23,23,23]7702; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm07703; AVX512VPOPCNTDQVL-NEXT: retq7704;7705; BITALG_NOVLX-LABEL: ult_23_v8i32:7706; BITALG_NOVLX: # %bb.0:7707; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm07708; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm07709; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm17710; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7711; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm27712; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7713; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm07714; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm07715; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [23,23,23,23,23,23,23,23]7716; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm07717; BITALG_NOVLX-NEXT: retq7718;7719; BITALG-LABEL: ult_23_v8i32:7720; BITALG: # %bb.0:7721; BITALG-NEXT: vpopcntb %ymm0, %ymm07722; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm17723; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7724; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm27725; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7726; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm07727; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm07728; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [23,23,23,23,23,23,23,23]7729; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm07730; BITALG-NEXT: retq7731 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)7732 %3 = icmp ult <8 x i32> %2, <i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23>7733 %4 = sext <8 x i1> %3 to <8 x i32>7734 ret <8 x i32> %47735}7736 7737define <8 x i32> @ugt_23_v8i32(<8 x i32> %0) {7738; AVX1-LABEL: ugt_23_v8i32:7739; AVX1: # %bb.0:7740; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm17741; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]7742; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm37743; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]7744; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm37745; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm17746; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm17747; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm17748; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm17749; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm37750; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]7751; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm57752; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero7753; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm17754; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm17755; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm57756; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm57757; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm07758; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm07759; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm07760; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm07761; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]7762; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm27763; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero7764; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm07765; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm07766; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm07767; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm07768; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [2.3E+1,2.3E+1,2.3E+1,2.3E+1,2.3E+1,2.3E+1,2.3E+1,2.3E+1]7769; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm07770; AVX1-NEXT: retq7771;7772; AVX2-LABEL: ugt_23_v8i32:7773; AVX2: # %bb.0:7774; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]7775; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm27776; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]7777; AVX2-NEXT: # ymm3 = mem[0,1,0,1]7778; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm27779; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm07780; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm07781; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm07782; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm07783; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm17784; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7785; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm27786; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7787; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm07788; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm07789; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [23,23,23,23,23,23,23,23]7790; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm07791; AVX2-NEXT: retq7792;7793; AVX512VPOPCNTDQ-LABEL: ugt_23_v8i32:7794; AVX512VPOPCNTDQ: # %bb.0:7795; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm07796; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm07797; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [23,23,23,23,23,23,23,23]7798; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm07799; AVX512VPOPCNTDQ-NEXT: retq7800;7801; AVX512VPOPCNTDQVL-LABEL: ugt_23_v8i32:7802; AVX512VPOPCNTDQVL: # %bb.0:7803; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm07804; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [23,23,23,23,23,23,23,23]7805; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm07806; AVX512VPOPCNTDQVL-NEXT: retq7807;7808; BITALG_NOVLX-LABEL: ugt_23_v8i32:7809; BITALG_NOVLX: # %bb.0:7810; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm07811; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm07812; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm17813; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7814; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm27815; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7816; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm07817; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm07818; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [23,23,23,23,23,23,23,23]7819; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm07820; BITALG_NOVLX-NEXT: retq7821;7822; BITALG-LABEL: ugt_23_v8i32:7823; BITALG: # %bb.0:7824; BITALG-NEXT: vpopcntb %ymm0, %ymm07825; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm17826; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7827; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm27828; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7829; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm07830; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm07831; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [23,23,23,23,23,23,23,23]7832; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm07833; BITALG-NEXT: retq7834 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)7835 %3 = icmp ugt <8 x i32> %2, <i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23>7836 %4 = sext <8 x i1> %3 to <8 x i32>7837 ret <8 x i32> %47838}7839 7840define <8 x i32> @ult_24_v8i32(<8 x i32> %0) {7841; AVX1-LABEL: ult_24_v8i32:7842; AVX1: # %bb.0:7843; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm17844; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]7845; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm37846; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]7847; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm37848; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm17849; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm17850; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm17851; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm17852; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm37853; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]7854; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm57855; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero7856; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm17857; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm17858; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm57859; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm57860; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm07861; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm07862; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm07863; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm07864; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]7865; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm27866; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero7867; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm07868; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm07869; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm07870; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm07871; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm07872; AVX1-NEXT: retq7873;7874; AVX2-LABEL: ult_24_v8i32:7875; AVX2: # %bb.0:7876; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]7877; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm27878; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]7879; AVX2-NEXT: # ymm3 = mem[0,1,0,1]7880; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm27881; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm07882; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm07883; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm07884; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm07885; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm17886; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7887; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm27888; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7889; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm07890; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm07891; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [24,24,24,24,24,24,24,24]7892; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm07893; AVX2-NEXT: retq7894;7895; AVX512VPOPCNTDQ-LABEL: ult_24_v8i32:7896; AVX512VPOPCNTDQ: # %bb.0:7897; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm07898; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm07899; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [24,24,24,24,24,24,24,24]7900; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm07901; AVX512VPOPCNTDQ-NEXT: retq7902;7903; AVX512VPOPCNTDQVL-LABEL: ult_24_v8i32:7904; AVX512VPOPCNTDQVL: # %bb.0:7905; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm07906; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [24,24,24,24,24,24,24,24]7907; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm07908; AVX512VPOPCNTDQVL-NEXT: retq7909;7910; BITALG_NOVLX-LABEL: ult_24_v8i32:7911; BITALG_NOVLX: # %bb.0:7912; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm07913; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm07914; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm17915; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7916; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm27917; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7918; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm07919; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm07920; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [24,24,24,24,24,24,24,24]7921; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm07922; BITALG_NOVLX-NEXT: retq7923;7924; BITALG-LABEL: ult_24_v8i32:7925; BITALG: # %bb.0:7926; BITALG-NEXT: vpopcntb %ymm0, %ymm07927; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm17928; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7929; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm27930; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7931; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm07932; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm07933; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [24,24,24,24,24,24,24,24]7934; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm07935; BITALG-NEXT: retq7936 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)7937 %3 = icmp ult <8 x i32> %2, <i32 24, i32 24, i32 24, i32 24, i32 24, i32 24, i32 24, i32 24>7938 %4 = sext <8 x i1> %3 to <8 x i32>7939 ret <8 x i32> %47940}7941 7942define <8 x i32> @ugt_24_v8i32(<8 x i32> %0) {7943; AVX1-LABEL: ugt_24_v8i32:7944; AVX1: # %bb.0:7945; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm17946; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]7947; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm37948; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]7949; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm37950; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm17951; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm17952; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm17953; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm17954; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm37955; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]7956; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm57957; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero7958; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm17959; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm17960; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm57961; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm57962; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm07963; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm07964; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm07965; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm07966; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]7967; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm27968; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero7969; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm07970; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm07971; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm07972; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm07973; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [2.4E+1,2.4E+1,2.4E+1,2.4E+1,2.4E+1,2.4E+1,2.4E+1,2.4E+1]7974; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm07975; AVX1-NEXT: retq7976;7977; AVX2-LABEL: ugt_24_v8i32:7978; AVX2: # %bb.0:7979; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]7980; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm27981; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]7982; AVX2-NEXT: # ymm3 = mem[0,1,0,1]7983; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm27984; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm07985; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm07986; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm07987; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm07988; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm17989; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]7990; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm27991; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]7992; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm07993; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm07994; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [24,24,24,24,24,24,24,24]7995; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm07996; AVX2-NEXT: retq7997;7998; AVX512VPOPCNTDQ-LABEL: ugt_24_v8i32:7999; AVX512VPOPCNTDQ: # %bb.0:8000; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm08001; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm08002; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [24,24,24,24,24,24,24,24]8003; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm08004; AVX512VPOPCNTDQ-NEXT: retq8005;8006; AVX512VPOPCNTDQVL-LABEL: ugt_24_v8i32:8007; AVX512VPOPCNTDQVL: # %bb.0:8008; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm08009; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [24,24,24,24,24,24,24,24]8010; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm08011; AVX512VPOPCNTDQVL-NEXT: retq8012;8013; BITALG_NOVLX-LABEL: ugt_24_v8i32:8014; BITALG_NOVLX: # %bb.0:8015; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm08016; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm08017; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm18018; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8019; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm28020; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8021; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm08022; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm08023; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [24,24,24,24,24,24,24,24]8024; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm08025; BITALG_NOVLX-NEXT: retq8026;8027; BITALG-LABEL: ugt_24_v8i32:8028; BITALG: # %bb.0:8029; BITALG-NEXT: vpopcntb %ymm0, %ymm08030; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm18031; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8032; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm28033; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8034; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm08035; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm08036; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [24,24,24,24,24,24,24,24]8037; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm08038; BITALG-NEXT: retq8039 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)8040 %3 = icmp ugt <8 x i32> %2, <i32 24, i32 24, i32 24, i32 24, i32 24, i32 24, i32 24, i32 24>8041 %4 = sext <8 x i1> %3 to <8 x i32>8042 ret <8 x i32> %48043}8044 8045define <8 x i32> @ult_25_v8i32(<8 x i32> %0) {8046; AVX1-LABEL: ult_25_v8i32:8047; AVX1: # %bb.0:8048; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm18049; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]8050; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm38051; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]8052; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm38053; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm18054; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm18055; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm18056; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm18057; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm38058; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]8059; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm58060; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero8061; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm18062; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm18063; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm58064; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm58065; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm08066; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm08067; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm08068; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm08069; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]8070; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm28071; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero8072; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm08073; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm08074; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm08075; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm08076; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm08077; AVX1-NEXT: retq8078;8079; AVX2-LABEL: ult_25_v8i32:8080; AVX2: # %bb.0:8081; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]8082; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm28083; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]8084; AVX2-NEXT: # ymm3 = mem[0,1,0,1]8085; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm28086; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm08087; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm08088; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm08089; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm08090; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm18091; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8092; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm28093; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8094; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm08095; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm08096; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [25,25,25,25,25,25,25,25]8097; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm08098; AVX2-NEXT: retq8099;8100; AVX512VPOPCNTDQ-LABEL: ult_25_v8i32:8101; AVX512VPOPCNTDQ: # %bb.0:8102; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm08103; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm08104; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [25,25,25,25,25,25,25,25]8105; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm08106; AVX512VPOPCNTDQ-NEXT: retq8107;8108; AVX512VPOPCNTDQVL-LABEL: ult_25_v8i32:8109; AVX512VPOPCNTDQVL: # %bb.0:8110; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm08111; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [25,25,25,25,25,25,25,25]8112; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm08113; AVX512VPOPCNTDQVL-NEXT: retq8114;8115; BITALG_NOVLX-LABEL: ult_25_v8i32:8116; BITALG_NOVLX: # %bb.0:8117; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm08118; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm08119; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm18120; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8121; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm28122; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8123; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm08124; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm08125; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [25,25,25,25,25,25,25,25]8126; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm08127; BITALG_NOVLX-NEXT: retq8128;8129; BITALG-LABEL: ult_25_v8i32:8130; BITALG: # %bb.0:8131; BITALG-NEXT: vpopcntb %ymm0, %ymm08132; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm18133; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8134; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm28135; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8136; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm08137; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm08138; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [25,25,25,25,25,25,25,25]8139; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm08140; BITALG-NEXT: retq8141 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)8142 %3 = icmp ult <8 x i32> %2, <i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25>8143 %4 = sext <8 x i1> %3 to <8 x i32>8144 ret <8 x i32> %48145}8146 8147define <8 x i32> @ugt_25_v8i32(<8 x i32> %0) {8148; AVX1-LABEL: ugt_25_v8i32:8149; AVX1: # %bb.0:8150; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm18151; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]8152; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm38153; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]8154; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm38155; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm18156; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm18157; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm18158; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm18159; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm38160; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]8161; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm58162; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero8163; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm18164; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm18165; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm58166; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm58167; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm08168; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm08169; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm08170; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm08171; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]8172; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm28173; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero8174; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm08175; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm08176; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm08177; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm08178; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [2.5E+1,2.5E+1,2.5E+1,2.5E+1,2.5E+1,2.5E+1,2.5E+1,2.5E+1]8179; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm08180; AVX1-NEXT: retq8181;8182; AVX2-LABEL: ugt_25_v8i32:8183; AVX2: # %bb.0:8184; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]8185; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm28186; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]8187; AVX2-NEXT: # ymm3 = mem[0,1,0,1]8188; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm28189; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm08190; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm08191; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm08192; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm08193; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm18194; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8195; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm28196; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8197; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm08198; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm08199; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [25,25,25,25,25,25,25,25]8200; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm08201; AVX2-NEXT: retq8202;8203; AVX512VPOPCNTDQ-LABEL: ugt_25_v8i32:8204; AVX512VPOPCNTDQ: # %bb.0:8205; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm08206; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm08207; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [25,25,25,25,25,25,25,25]8208; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm08209; AVX512VPOPCNTDQ-NEXT: retq8210;8211; AVX512VPOPCNTDQVL-LABEL: ugt_25_v8i32:8212; AVX512VPOPCNTDQVL: # %bb.0:8213; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm08214; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [25,25,25,25,25,25,25,25]8215; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm08216; AVX512VPOPCNTDQVL-NEXT: retq8217;8218; BITALG_NOVLX-LABEL: ugt_25_v8i32:8219; BITALG_NOVLX: # %bb.0:8220; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm08221; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm08222; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm18223; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8224; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm28225; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8226; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm08227; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm08228; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [25,25,25,25,25,25,25,25]8229; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm08230; BITALG_NOVLX-NEXT: retq8231;8232; BITALG-LABEL: ugt_25_v8i32:8233; BITALG: # %bb.0:8234; BITALG-NEXT: vpopcntb %ymm0, %ymm08235; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm18236; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8237; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm28238; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8239; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm08240; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm08241; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [25,25,25,25,25,25,25,25]8242; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm08243; BITALG-NEXT: retq8244 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)8245 %3 = icmp ugt <8 x i32> %2, <i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25>8246 %4 = sext <8 x i1> %3 to <8 x i32>8247 ret <8 x i32> %48248}8249 8250define <8 x i32> @ult_26_v8i32(<8 x i32> %0) {8251; AVX1-LABEL: ult_26_v8i32:8252; AVX1: # %bb.0:8253; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm18254; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]8255; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm38256; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]8257; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm38258; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm18259; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm18260; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm18261; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm18262; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm38263; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]8264; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm58265; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero8266; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm18267; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm18268; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm58269; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm58270; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm08271; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm08272; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm08273; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm08274; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]8275; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm28276; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero8277; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm08278; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm08279; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm08280; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm08281; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm08282; AVX1-NEXT: retq8283;8284; AVX2-LABEL: ult_26_v8i32:8285; AVX2: # %bb.0:8286; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]8287; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm28288; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]8289; AVX2-NEXT: # ymm3 = mem[0,1,0,1]8290; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm28291; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm08292; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm08293; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm08294; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm08295; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm18296; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8297; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm28298; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8299; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm08300; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm08301; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [26,26,26,26,26,26,26,26]8302; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm08303; AVX2-NEXT: retq8304;8305; AVX512VPOPCNTDQ-LABEL: ult_26_v8i32:8306; AVX512VPOPCNTDQ: # %bb.0:8307; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm08308; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm08309; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [26,26,26,26,26,26,26,26]8310; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm08311; AVX512VPOPCNTDQ-NEXT: retq8312;8313; AVX512VPOPCNTDQVL-LABEL: ult_26_v8i32:8314; AVX512VPOPCNTDQVL: # %bb.0:8315; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm08316; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [26,26,26,26,26,26,26,26]8317; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm08318; AVX512VPOPCNTDQVL-NEXT: retq8319;8320; BITALG_NOVLX-LABEL: ult_26_v8i32:8321; BITALG_NOVLX: # %bb.0:8322; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm08323; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm08324; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm18325; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8326; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm28327; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8328; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm08329; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm08330; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [26,26,26,26,26,26,26,26]8331; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm08332; BITALG_NOVLX-NEXT: retq8333;8334; BITALG-LABEL: ult_26_v8i32:8335; BITALG: # %bb.0:8336; BITALG-NEXT: vpopcntb %ymm0, %ymm08337; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm18338; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8339; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm28340; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8341; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm08342; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm08343; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [26,26,26,26,26,26,26,26]8344; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm08345; BITALG-NEXT: retq8346 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)8347 %3 = icmp ult <8 x i32> %2, <i32 26, i32 26, i32 26, i32 26, i32 26, i32 26, i32 26, i32 26>8348 %4 = sext <8 x i1> %3 to <8 x i32>8349 ret <8 x i32> %48350}8351 8352define <8 x i32> @ugt_26_v8i32(<8 x i32> %0) {8353; AVX1-LABEL: ugt_26_v8i32:8354; AVX1: # %bb.0:8355; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm18356; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]8357; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm38358; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]8359; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm38360; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm18361; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm18362; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm18363; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm18364; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm38365; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]8366; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm58367; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero8368; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm18369; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm18370; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm58371; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm58372; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm08373; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm08374; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm08375; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm08376; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]8377; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm28378; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero8379; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm08380; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm08381; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm08382; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm08383; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [2.6E+1,2.6E+1,2.6E+1,2.6E+1,2.6E+1,2.6E+1,2.6E+1,2.6E+1]8384; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm08385; AVX1-NEXT: retq8386;8387; AVX2-LABEL: ugt_26_v8i32:8388; AVX2: # %bb.0:8389; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]8390; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm28391; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]8392; AVX2-NEXT: # ymm3 = mem[0,1,0,1]8393; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm28394; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm08395; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm08396; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm08397; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm08398; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm18399; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8400; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm28401; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8402; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm08403; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm08404; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [26,26,26,26,26,26,26,26]8405; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm08406; AVX2-NEXT: retq8407;8408; AVX512VPOPCNTDQ-LABEL: ugt_26_v8i32:8409; AVX512VPOPCNTDQ: # %bb.0:8410; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm08411; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm08412; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [26,26,26,26,26,26,26,26]8413; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm08414; AVX512VPOPCNTDQ-NEXT: retq8415;8416; AVX512VPOPCNTDQVL-LABEL: ugt_26_v8i32:8417; AVX512VPOPCNTDQVL: # %bb.0:8418; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm08419; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [26,26,26,26,26,26,26,26]8420; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm08421; AVX512VPOPCNTDQVL-NEXT: retq8422;8423; BITALG_NOVLX-LABEL: ugt_26_v8i32:8424; BITALG_NOVLX: # %bb.0:8425; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm08426; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm08427; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm18428; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8429; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm28430; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8431; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm08432; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm08433; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [26,26,26,26,26,26,26,26]8434; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm08435; BITALG_NOVLX-NEXT: retq8436;8437; BITALG-LABEL: ugt_26_v8i32:8438; BITALG: # %bb.0:8439; BITALG-NEXT: vpopcntb %ymm0, %ymm08440; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm18441; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8442; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm28443; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8444; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm08445; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm08446; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [26,26,26,26,26,26,26,26]8447; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm08448; BITALG-NEXT: retq8449 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)8450 %3 = icmp ugt <8 x i32> %2, <i32 26, i32 26, i32 26, i32 26, i32 26, i32 26, i32 26, i32 26>8451 %4 = sext <8 x i1> %3 to <8 x i32>8452 ret <8 x i32> %48453}8454 8455define <8 x i32> @ult_27_v8i32(<8 x i32> %0) {8456; AVX1-LABEL: ult_27_v8i32:8457; AVX1: # %bb.0:8458; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm18459; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]8460; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm38461; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]8462; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm38463; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm18464; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm18465; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm18466; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm18467; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm38468; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]8469; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm58470; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero8471; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm18472; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm18473; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm58474; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm58475; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm08476; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm08477; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm08478; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm08479; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]8480; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm28481; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero8482; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm08483; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm08484; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm08485; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm08486; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm08487; AVX1-NEXT: retq8488;8489; AVX2-LABEL: ult_27_v8i32:8490; AVX2: # %bb.0:8491; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]8492; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm28493; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]8494; AVX2-NEXT: # ymm3 = mem[0,1,0,1]8495; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm28496; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm08497; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm08498; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm08499; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm08500; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm18501; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8502; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm28503; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8504; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm08505; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm08506; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [27,27,27,27,27,27,27,27]8507; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm08508; AVX2-NEXT: retq8509;8510; AVX512VPOPCNTDQ-LABEL: ult_27_v8i32:8511; AVX512VPOPCNTDQ: # %bb.0:8512; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm08513; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm08514; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [27,27,27,27,27,27,27,27]8515; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm08516; AVX512VPOPCNTDQ-NEXT: retq8517;8518; AVX512VPOPCNTDQVL-LABEL: ult_27_v8i32:8519; AVX512VPOPCNTDQVL: # %bb.0:8520; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm08521; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [27,27,27,27,27,27,27,27]8522; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm08523; AVX512VPOPCNTDQVL-NEXT: retq8524;8525; BITALG_NOVLX-LABEL: ult_27_v8i32:8526; BITALG_NOVLX: # %bb.0:8527; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm08528; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm08529; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm18530; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8531; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm28532; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8533; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm08534; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm08535; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [27,27,27,27,27,27,27,27]8536; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm08537; BITALG_NOVLX-NEXT: retq8538;8539; BITALG-LABEL: ult_27_v8i32:8540; BITALG: # %bb.0:8541; BITALG-NEXT: vpopcntb %ymm0, %ymm08542; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm18543; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8544; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm28545; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8546; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm08547; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm08548; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [27,27,27,27,27,27,27,27]8549; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm08550; BITALG-NEXT: retq8551 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)8552 %3 = icmp ult <8 x i32> %2, <i32 27, i32 27, i32 27, i32 27, i32 27, i32 27, i32 27, i32 27>8553 %4 = sext <8 x i1> %3 to <8 x i32>8554 ret <8 x i32> %48555}8556 8557define <8 x i32> @ugt_27_v8i32(<8 x i32> %0) {8558; AVX1-LABEL: ugt_27_v8i32:8559; AVX1: # %bb.0:8560; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm18561; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]8562; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm38563; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]8564; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm38565; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm18566; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm18567; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm18568; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm18569; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm38570; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]8571; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm58572; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero8573; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm18574; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm18575; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm58576; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm58577; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm08578; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm08579; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm08580; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm08581; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]8582; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm28583; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero8584; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm08585; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm08586; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm08587; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm08588; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [2.7E+1,2.7E+1,2.7E+1,2.7E+1,2.7E+1,2.7E+1,2.7E+1,2.7E+1]8589; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm08590; AVX1-NEXT: retq8591;8592; AVX2-LABEL: ugt_27_v8i32:8593; AVX2: # %bb.0:8594; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]8595; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm28596; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]8597; AVX2-NEXT: # ymm3 = mem[0,1,0,1]8598; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm28599; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm08600; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm08601; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm08602; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm08603; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm18604; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8605; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm28606; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8607; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm08608; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm08609; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [27,27,27,27,27,27,27,27]8610; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm08611; AVX2-NEXT: retq8612;8613; AVX512VPOPCNTDQ-LABEL: ugt_27_v8i32:8614; AVX512VPOPCNTDQ: # %bb.0:8615; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm08616; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm08617; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [27,27,27,27,27,27,27,27]8618; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm08619; AVX512VPOPCNTDQ-NEXT: retq8620;8621; AVX512VPOPCNTDQVL-LABEL: ugt_27_v8i32:8622; AVX512VPOPCNTDQVL: # %bb.0:8623; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm08624; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [27,27,27,27,27,27,27,27]8625; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm08626; AVX512VPOPCNTDQVL-NEXT: retq8627;8628; BITALG_NOVLX-LABEL: ugt_27_v8i32:8629; BITALG_NOVLX: # %bb.0:8630; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm08631; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm08632; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm18633; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8634; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm28635; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8636; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm08637; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm08638; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [27,27,27,27,27,27,27,27]8639; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm08640; BITALG_NOVLX-NEXT: retq8641;8642; BITALG-LABEL: ugt_27_v8i32:8643; BITALG: # %bb.0:8644; BITALG-NEXT: vpopcntb %ymm0, %ymm08645; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm18646; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8647; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm28648; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8649; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm08650; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm08651; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [27,27,27,27,27,27,27,27]8652; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm08653; BITALG-NEXT: retq8654 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)8655 %3 = icmp ugt <8 x i32> %2, <i32 27, i32 27, i32 27, i32 27, i32 27, i32 27, i32 27, i32 27>8656 %4 = sext <8 x i1> %3 to <8 x i32>8657 ret <8 x i32> %48658}8659 8660define <8 x i32> @ult_28_v8i32(<8 x i32> %0) {8661; AVX1-LABEL: ult_28_v8i32:8662; AVX1: # %bb.0:8663; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm18664; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]8665; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm38666; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]8667; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm38668; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm18669; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm18670; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm18671; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm18672; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm38673; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]8674; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm58675; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero8676; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm18677; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm18678; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm58679; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm58680; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm08681; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm08682; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm08683; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm08684; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]8685; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm28686; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero8687; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm08688; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm08689; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm08690; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm08691; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm08692; AVX1-NEXT: retq8693;8694; AVX2-LABEL: ult_28_v8i32:8695; AVX2: # %bb.0:8696; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]8697; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm28698; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]8699; AVX2-NEXT: # ymm3 = mem[0,1,0,1]8700; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm28701; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm08702; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm08703; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm08704; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm08705; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm18706; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8707; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm28708; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8709; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm08710; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm08711; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [28,28,28,28,28,28,28,28]8712; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm08713; AVX2-NEXT: retq8714;8715; AVX512VPOPCNTDQ-LABEL: ult_28_v8i32:8716; AVX512VPOPCNTDQ: # %bb.0:8717; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm08718; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm08719; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [28,28,28,28,28,28,28,28]8720; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm08721; AVX512VPOPCNTDQ-NEXT: retq8722;8723; AVX512VPOPCNTDQVL-LABEL: ult_28_v8i32:8724; AVX512VPOPCNTDQVL: # %bb.0:8725; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm08726; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [28,28,28,28,28,28,28,28]8727; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm08728; AVX512VPOPCNTDQVL-NEXT: retq8729;8730; BITALG_NOVLX-LABEL: ult_28_v8i32:8731; BITALG_NOVLX: # %bb.0:8732; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm08733; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm08734; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm18735; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8736; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm28737; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8738; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm08739; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm08740; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [28,28,28,28,28,28,28,28]8741; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm08742; BITALG_NOVLX-NEXT: retq8743;8744; BITALG-LABEL: ult_28_v8i32:8745; BITALG: # %bb.0:8746; BITALG-NEXT: vpopcntb %ymm0, %ymm08747; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm18748; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8749; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm28750; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8751; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm08752; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm08753; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [28,28,28,28,28,28,28,28]8754; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm08755; BITALG-NEXT: retq8756 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)8757 %3 = icmp ult <8 x i32> %2, <i32 28, i32 28, i32 28, i32 28, i32 28, i32 28, i32 28, i32 28>8758 %4 = sext <8 x i1> %3 to <8 x i32>8759 ret <8 x i32> %48760}8761 8762define <8 x i32> @ugt_28_v8i32(<8 x i32> %0) {8763; AVX1-LABEL: ugt_28_v8i32:8764; AVX1: # %bb.0:8765; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm18766; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]8767; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm38768; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]8769; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm38770; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm18771; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm18772; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm18773; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm18774; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm38775; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]8776; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm58777; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero8778; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm18779; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm18780; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm58781; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm58782; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm08783; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm08784; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm08785; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm08786; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]8787; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm28788; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero8789; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm08790; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm08791; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm08792; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm08793; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [2.8E+1,2.8E+1,2.8E+1,2.8E+1,2.8E+1,2.8E+1,2.8E+1,2.8E+1]8794; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm08795; AVX1-NEXT: retq8796;8797; AVX2-LABEL: ugt_28_v8i32:8798; AVX2: # %bb.0:8799; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]8800; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm28801; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]8802; AVX2-NEXT: # ymm3 = mem[0,1,0,1]8803; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm28804; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm08805; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm08806; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm08807; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm08808; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm18809; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8810; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm28811; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8812; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm08813; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm08814; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [28,28,28,28,28,28,28,28]8815; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm08816; AVX2-NEXT: retq8817;8818; AVX512VPOPCNTDQ-LABEL: ugt_28_v8i32:8819; AVX512VPOPCNTDQ: # %bb.0:8820; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm08821; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm08822; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [28,28,28,28,28,28,28,28]8823; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm08824; AVX512VPOPCNTDQ-NEXT: retq8825;8826; AVX512VPOPCNTDQVL-LABEL: ugt_28_v8i32:8827; AVX512VPOPCNTDQVL: # %bb.0:8828; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm08829; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [28,28,28,28,28,28,28,28]8830; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm08831; AVX512VPOPCNTDQVL-NEXT: retq8832;8833; BITALG_NOVLX-LABEL: ugt_28_v8i32:8834; BITALG_NOVLX: # %bb.0:8835; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm08836; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm08837; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm18838; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8839; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm28840; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8841; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm08842; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm08843; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [28,28,28,28,28,28,28,28]8844; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm08845; BITALG_NOVLX-NEXT: retq8846;8847; BITALG-LABEL: ugt_28_v8i32:8848; BITALG: # %bb.0:8849; BITALG-NEXT: vpopcntb %ymm0, %ymm08850; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm18851; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8852; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm28853; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8854; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm08855; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm08856; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [28,28,28,28,28,28,28,28]8857; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm08858; BITALG-NEXT: retq8859 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)8860 %3 = icmp ugt <8 x i32> %2, <i32 28, i32 28, i32 28, i32 28, i32 28, i32 28, i32 28, i32 28>8861 %4 = sext <8 x i1> %3 to <8 x i32>8862 ret <8 x i32> %48863}8864 8865define <8 x i32> @ult_29_v8i32(<8 x i32> %0) {8866; AVX1-LABEL: ult_29_v8i32:8867; AVX1: # %bb.0:8868; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm18869; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]8870; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm38871; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]8872; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm38873; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm18874; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm18875; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm18876; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm18877; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm38878; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]8879; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm58880; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero8881; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm18882; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm18883; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm58884; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm58885; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm08886; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm08887; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm08888; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm08889; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]8890; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm28891; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero8892; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm08893; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm08894; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm08895; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm08896; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm08897; AVX1-NEXT: retq8898;8899; AVX2-LABEL: ult_29_v8i32:8900; AVX2: # %bb.0:8901; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]8902; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm28903; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]8904; AVX2-NEXT: # ymm3 = mem[0,1,0,1]8905; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm28906; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm08907; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm08908; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm08909; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm08910; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm18911; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8912; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm28913; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8914; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm08915; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm08916; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [29,29,29,29,29,29,29,29]8917; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm08918; AVX2-NEXT: retq8919;8920; AVX512VPOPCNTDQ-LABEL: ult_29_v8i32:8921; AVX512VPOPCNTDQ: # %bb.0:8922; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm08923; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm08924; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [29,29,29,29,29,29,29,29]8925; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm08926; AVX512VPOPCNTDQ-NEXT: retq8927;8928; AVX512VPOPCNTDQVL-LABEL: ult_29_v8i32:8929; AVX512VPOPCNTDQVL: # %bb.0:8930; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm08931; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [29,29,29,29,29,29,29,29]8932; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm08933; AVX512VPOPCNTDQVL-NEXT: retq8934;8935; BITALG_NOVLX-LABEL: ult_29_v8i32:8936; BITALG_NOVLX: # %bb.0:8937; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm08938; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm08939; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm18940; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8941; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm28942; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8943; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm08944; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm08945; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [29,29,29,29,29,29,29,29]8946; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm08947; BITALG_NOVLX-NEXT: retq8948;8949; BITALG-LABEL: ult_29_v8i32:8950; BITALG: # %bb.0:8951; BITALG-NEXT: vpopcntb %ymm0, %ymm08952; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm18953; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]8954; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm28955; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]8956; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm08957; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm08958; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [29,29,29,29,29,29,29,29]8959; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm08960; BITALG-NEXT: retq8961 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)8962 %3 = icmp ult <8 x i32> %2, <i32 29, i32 29, i32 29, i32 29, i32 29, i32 29, i32 29, i32 29>8963 %4 = sext <8 x i1> %3 to <8 x i32>8964 ret <8 x i32> %48965}8966 8967define <8 x i32> @ugt_29_v8i32(<8 x i32> %0) {8968; AVX1-LABEL: ugt_29_v8i32:8969; AVX1: # %bb.0:8970; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm18971; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]8972; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm38973; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]8974; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm38975; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm18976; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm18977; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm18978; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm18979; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm38980; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]8981; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm58982; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero8983; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm18984; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm18985; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm58986; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm58987; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm08988; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm08989; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm08990; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm08991; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]8992; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm28993; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero8994; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm08995; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm08996; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm08997; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm08998; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [2.9E+1,2.9E+1,2.9E+1,2.9E+1,2.9E+1,2.9E+1,2.9E+1,2.9E+1]8999; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm09000; AVX1-NEXT: retq9001;9002; AVX2-LABEL: ugt_29_v8i32:9003; AVX2: # %bb.0:9004; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]9005; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm29006; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]9007; AVX2-NEXT: # ymm3 = mem[0,1,0,1]9008; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm29009; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm09010; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm09011; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm09012; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm09013; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm19014; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]9015; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm29016; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]9017; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm09018; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm09019; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [29,29,29,29,29,29,29,29]9020; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm09021; AVX2-NEXT: retq9022;9023; AVX512VPOPCNTDQ-LABEL: ugt_29_v8i32:9024; AVX512VPOPCNTDQ: # %bb.0:9025; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm09026; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm09027; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [29,29,29,29,29,29,29,29]9028; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm09029; AVX512VPOPCNTDQ-NEXT: retq9030;9031; AVX512VPOPCNTDQVL-LABEL: ugt_29_v8i32:9032; AVX512VPOPCNTDQVL: # %bb.0:9033; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm09034; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [29,29,29,29,29,29,29,29]9035; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm09036; AVX512VPOPCNTDQVL-NEXT: retq9037;9038; BITALG_NOVLX-LABEL: ugt_29_v8i32:9039; BITALG_NOVLX: # %bb.0:9040; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm09041; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm09042; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm19043; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]9044; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm29045; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]9046; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm09047; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm09048; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [29,29,29,29,29,29,29,29]9049; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm09050; BITALG_NOVLX-NEXT: retq9051;9052; BITALG-LABEL: ugt_29_v8i32:9053; BITALG: # %bb.0:9054; BITALG-NEXT: vpopcntb %ymm0, %ymm09055; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm19056; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]9057; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm29058; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]9059; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm09060; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm09061; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [29,29,29,29,29,29,29,29]9062; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm09063; BITALG-NEXT: retq9064 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)9065 %3 = icmp ugt <8 x i32> %2, <i32 29, i32 29, i32 29, i32 29, i32 29, i32 29, i32 29, i32 29>9066 %4 = sext <8 x i1> %3 to <8 x i32>9067 ret <8 x i32> %49068}9069 9070define <8 x i32> @ult_30_v8i32(<8 x i32> %0) {9071; AVX1-LABEL: ult_30_v8i32:9072; AVX1: # %bb.0:9073; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm19074; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]9075; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm39076; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]9077; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm39078; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm19079; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm19080; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm19081; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm19082; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm39083; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]9084; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm59085; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero9086; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm19087; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm19088; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm59089; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm59090; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm09091; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm09092; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm09093; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm09094; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]9095; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm29096; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero9097; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm09098; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm09099; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm09100; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm09101; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm09102; AVX1-NEXT: retq9103;9104; AVX2-LABEL: ult_30_v8i32:9105; AVX2: # %bb.0:9106; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]9107; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm29108; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]9109; AVX2-NEXT: # ymm3 = mem[0,1,0,1]9110; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm29111; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm09112; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm09113; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm09114; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm09115; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm19116; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]9117; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm29118; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]9119; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm09120; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm09121; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [30,30,30,30,30,30,30,30]9122; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm09123; AVX2-NEXT: retq9124;9125; AVX512VPOPCNTDQ-LABEL: ult_30_v8i32:9126; AVX512VPOPCNTDQ: # %bb.0:9127; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm09128; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm09129; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [30,30,30,30,30,30,30,30]9130; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm09131; AVX512VPOPCNTDQ-NEXT: retq9132;9133; AVX512VPOPCNTDQVL-LABEL: ult_30_v8i32:9134; AVX512VPOPCNTDQVL: # %bb.0:9135; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm09136; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [30,30,30,30,30,30,30,30]9137; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm09138; AVX512VPOPCNTDQVL-NEXT: retq9139;9140; BITALG_NOVLX-LABEL: ult_30_v8i32:9141; BITALG_NOVLX: # %bb.0:9142; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm09143; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm09144; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm19145; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]9146; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm29147; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]9148; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm09149; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm09150; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [30,30,30,30,30,30,30,30]9151; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm09152; BITALG_NOVLX-NEXT: retq9153;9154; BITALG-LABEL: ult_30_v8i32:9155; BITALG: # %bb.0:9156; BITALG-NEXT: vpopcntb %ymm0, %ymm09157; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm19158; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]9159; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm29160; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]9161; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm09162; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm09163; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [30,30,30,30,30,30,30,30]9164; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm09165; BITALG-NEXT: retq9166 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)9167 %3 = icmp ult <8 x i32> %2, <i32 30, i32 30, i32 30, i32 30, i32 30, i32 30, i32 30, i32 30>9168 %4 = sext <8 x i1> %3 to <8 x i32>9169 ret <8 x i32> %49170}9171 9172define <8 x i32> @ugt_30_v8i32(<8 x i32> %0) {9173; AVX1-LABEL: ugt_30_v8i32:9174; AVX1: # %bb.0:9175; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm19176; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]9177; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm39178; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]9179; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm39180; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm19181; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm19182; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm19183; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm19184; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm39185; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]9186; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm59187; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero9188; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm19189; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm19190; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm59191; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm59192; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm09193; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm09194; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm09195; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm09196; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]9197; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm29198; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero9199; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm09200; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm09201; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm09202; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm09203; AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [3.0E+1,3.0E+1,3.0E+1,3.0E+1,3.0E+1,3.0E+1,3.0E+1,3.0E+1]9204; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm09205; AVX1-NEXT: retq9206;9207; AVX2-LABEL: ugt_30_v8i32:9208; AVX2: # %bb.0:9209; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]9210; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm29211; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]9212; AVX2-NEXT: # ymm3 = mem[0,1,0,1]9213; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm29214; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm09215; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm09216; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm09217; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm09218; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm19219; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]9220; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm29221; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]9222; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm09223; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm09224; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [30,30,30,30,30,30,30,30]9225; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm09226; AVX2-NEXT: retq9227;9228; AVX512VPOPCNTDQ-LABEL: ugt_30_v8i32:9229; AVX512VPOPCNTDQ: # %bb.0:9230; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm09231; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm09232; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [30,30,30,30,30,30,30,30]9233; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm09234; AVX512VPOPCNTDQ-NEXT: retq9235;9236; AVX512VPOPCNTDQVL-LABEL: ugt_30_v8i32:9237; AVX512VPOPCNTDQVL: # %bb.0:9238; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm09239; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [30,30,30,30,30,30,30,30]9240; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm09241; AVX512VPOPCNTDQVL-NEXT: retq9242;9243; BITALG_NOVLX-LABEL: ugt_30_v8i32:9244; BITALG_NOVLX: # %bb.0:9245; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm09246; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm09247; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm19248; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]9249; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm29250; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]9251; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm09252; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm09253; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [30,30,30,30,30,30,30,30]9254; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm09255; BITALG_NOVLX-NEXT: retq9256;9257; BITALG-LABEL: ugt_30_v8i32:9258; BITALG: # %bb.0:9259; BITALG-NEXT: vpopcntb %ymm0, %ymm09260; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm19261; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]9262; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm29263; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]9264; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm09265; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm09266; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [30,30,30,30,30,30,30,30]9267; BITALG-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm09268; BITALG-NEXT: retq9269 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)9270 %3 = icmp ugt <8 x i32> %2, <i32 30, i32 30, i32 30, i32 30, i32 30, i32 30, i32 30, i32 30>9271 %4 = sext <8 x i1> %3 to <8 x i32>9272 ret <8 x i32> %49273}9274 9275define <8 x i32> @ult_31_v8i32(<8 x i32> %0) {9276; AVX1-LABEL: ult_31_v8i32:9277; AVX1: # %bb.0:9278; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm19279; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]9280; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm39281; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]9282; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm39283; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm19284; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm19285; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm19286; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm19287; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm39288; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]9289; AVX1-NEXT: vpsadbw %xmm3, %xmm5, %xmm59290; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero9291; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm19292; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm19293; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm59294; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm59295; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm09296; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm09297; AVX1-NEXT: vpshufb %xmm0, %xmm4, %xmm09298; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm09299; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]9300; AVX1-NEXT: vpsadbw %xmm3, %xmm2, %xmm29301; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero9302; AVX1-NEXT: vpsadbw %xmm3, %xmm0, %xmm09303; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm09304; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm09305; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm09306; AVX1-NEXT: vcmpltps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm09307; AVX1-NEXT: retq9308;9309; AVX2-LABEL: ult_31_v8i32:9310; AVX2: # %bb.0:9311; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]9312; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm29313; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]9314; AVX2-NEXT: # ymm3 = mem[0,1,0,1]9315; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm29316; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm09317; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm09318; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm09319; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm09320; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm19321; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]9322; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm29323; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]9324; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm09325; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm09326; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [31,31,31,31,31,31,31,31]9327; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm09328; AVX2-NEXT: retq9329;9330; AVX512VPOPCNTDQ-LABEL: ult_31_v8i32:9331; AVX512VPOPCNTDQ: # %bb.0:9332; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm09333; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm09334; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [31,31,31,31,31,31,31,31]9335; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm09336; AVX512VPOPCNTDQ-NEXT: retq9337;9338; AVX512VPOPCNTDQVL-LABEL: ult_31_v8i32:9339; AVX512VPOPCNTDQVL: # %bb.0:9340; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm09341; AVX512VPOPCNTDQVL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [31,31,31,31,31,31,31,31]9342; AVX512VPOPCNTDQVL-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm09343; AVX512VPOPCNTDQVL-NEXT: retq9344;9345; BITALG_NOVLX-LABEL: ult_31_v8i32:9346; BITALG_NOVLX: # %bb.0:9347; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm09348; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm09349; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm19350; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]9351; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm29352; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]9353; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm09354; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm09355; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [31,31,31,31,31,31,31,31]9356; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm09357; BITALG_NOVLX-NEXT: retq9358;9359; BITALG-LABEL: ult_31_v8i32:9360; BITALG: # %bb.0:9361; BITALG-NEXT: vpopcntb %ymm0, %ymm09362; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm19363; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]9364; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm29365; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]9366; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm09367; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm09368; BITALG-NEXT: vpbroadcastd {{.*#+}} ymm1 = [31,31,31,31,31,31,31,31]9369; BITALG-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm09370; BITALG-NEXT: retq9371 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0)9372 %3 = icmp ult <8 x i32> %2, <i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31>9373 %4 = sext <8 x i1> %3 to <8 x i32>9374 ret <8 x i32> %49375}9376 9377define <4 x i64> @ugt_1_v4i64(<4 x i64> %0) {9378; AVX1-LABEL: ugt_1_v4i64:9379; AVX1: # %bb.0:9380; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm19381; AVX1-NEXT: vpaddq %xmm1, %xmm0, %xmm29382; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm39383; AVX1-NEXT: vpaddq %xmm1, %xmm3, %xmm49384; AVX1-NEXT: vpand %xmm4, %xmm3, %xmm39385; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm49386; AVX1-NEXT: vpcmpeqq %xmm4, %xmm3, %xmm39387; AVX1-NEXT: vpxor %xmm1, %xmm3, %xmm39388; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm09389; AVX1-NEXT: vpcmpeqq %xmm4, %xmm0, %xmm09390; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm09391; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm0, %ymm09392; AVX1-NEXT: retq9393;9394; AVX2-LABEL: ugt_1_v4i64:9395; AVX2: # %bb.0:9396; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm19397; AVX2-NEXT: vpaddq %ymm1, %ymm0, %ymm29398; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm09399; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm29400; AVX2-NEXT: vpcmpeqq %ymm2, %ymm0, %ymm09401; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm09402; AVX2-NEXT: retq9403;9404; AVX512VPOPCNTDQ-LABEL: ugt_1_v4i64:9405; AVX512VPOPCNTDQ: # %bb.0:9406; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm09407; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm09408; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [1,1,1,1]9409; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm09410; AVX512VPOPCNTDQ-NEXT: retq9411;9412; AVX512VPOPCNTDQVL-LABEL: ugt_1_v4i64:9413; AVX512VPOPCNTDQVL: # %bb.0:9414; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm09415; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [1,1,1,1]9416; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm09417; AVX512VPOPCNTDQVL-NEXT: retq9418;9419; BITALG_NOVLX-LABEL: ugt_1_v4i64:9420; BITALG_NOVLX: # %bb.0:9421; BITALG_NOVLX-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm19422; BITALG_NOVLX-NEXT: vpaddq %ymm1, %ymm0, %ymm19423; BITALG_NOVLX-NEXT: vpand %ymm1, %ymm0, %ymm09424; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm19425; BITALG_NOVLX-NEXT: vpcmpeqq %ymm1, %ymm0, %ymm09426; BITALG_NOVLX-NEXT: vpternlogq {{.*#+}} zmm0 = ~zmm09427; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm09428; BITALG_NOVLX-NEXT: retq9429;9430; BITALG-LABEL: ugt_1_v4i64:9431; BITALG: # %bb.0:9432; BITALG-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm19433; BITALG-NEXT: vpaddq %ymm1, %ymm0, %ymm19434; BITALG-NEXT: vpand %ymm1, %ymm0, %ymm09435; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm19436; BITALG-NEXT: vpcmpeqq %ymm1, %ymm0, %ymm09437; BITALG-NEXT: vpternlogq {{.*#+}} ymm0 = ~ymm09438; BITALG-NEXT: retq9439 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)9440 %3 = icmp ugt <4 x i64> %2, <i64 1, i64 1, i64 1, i64 1>9441 %4 = sext <4 x i1> %3 to <4 x i64>9442 ret <4 x i64> %49443}9444 9445define <4 x i64> @ult_2_v4i64(<4 x i64> %0) {9446; AVX1-LABEL: ult_2_v4i64:9447; AVX1: # %bb.0:9448; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm19449; AVX1-NEXT: vpaddq %xmm1, %xmm0, %xmm29450; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm39451; AVX1-NEXT: vpaddq %xmm1, %xmm3, %xmm19452; AVX1-NEXT: vpand %xmm1, %xmm3, %xmm19453; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm39454; AVX1-NEXT: vpcmpeqq %xmm3, %xmm1, %xmm19455; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm09456; AVX1-NEXT: vpcmpeqq %xmm3, %xmm0, %xmm09457; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm09458; AVX1-NEXT: retq9459;9460; AVX2-LABEL: ult_2_v4i64:9461; AVX2: # %bb.0:9462; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm19463; AVX2-NEXT: vpaddq %ymm1, %ymm0, %ymm19464; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm09465; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm19466; AVX2-NEXT: vpcmpeqq %ymm1, %ymm0, %ymm09467; AVX2-NEXT: retq9468;9469; AVX512VPOPCNTDQ-LABEL: ult_2_v4i64:9470; AVX512VPOPCNTDQ: # %bb.0:9471; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm09472; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm09473; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [2,2,2,2]9474; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm09475; AVX512VPOPCNTDQ-NEXT: retq9476;9477; AVX512VPOPCNTDQVL-LABEL: ult_2_v4i64:9478; AVX512VPOPCNTDQVL: # %bb.0:9479; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm09480; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [2,2,2,2]9481; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm09482; AVX512VPOPCNTDQVL-NEXT: retq9483;9484; BITALG_NOVLX-LABEL: ult_2_v4i64:9485; BITALG_NOVLX: # %bb.0:9486; BITALG_NOVLX-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm19487; BITALG_NOVLX-NEXT: vpaddq %ymm1, %ymm0, %ymm19488; BITALG_NOVLX-NEXT: vpand %ymm1, %ymm0, %ymm09489; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm19490; BITALG_NOVLX-NEXT: vpcmpeqq %ymm1, %ymm0, %ymm09491; BITALG_NOVLX-NEXT: retq9492;9493; BITALG-LABEL: ult_2_v4i64:9494; BITALG: # %bb.0:9495; BITALG-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm19496; BITALG-NEXT: vpaddq %ymm1, %ymm0, %ymm19497; BITALG-NEXT: vpand %ymm1, %ymm0, %ymm09498; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm19499; BITALG-NEXT: vpcmpeqq %ymm1, %ymm0, %ymm09500; BITALG-NEXT: retq9501 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)9502 %3 = icmp ult <4 x i64> %2, <i64 2, i64 2, i64 2, i64 2>9503 %4 = sext <4 x i1> %3 to <4 x i64>9504 ret <4 x i64> %49505}9506 9507define <4 x i64> @ugt_2_v4i64(<4 x i64> %0) {9508; AVX1-LABEL: ugt_2_v4i64:9509; AVX1: # %bb.0:9510; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]9511; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm29512; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]9513; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm29514; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm49515; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm49516; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm49517; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm29518; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm49519; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm29520; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm09521; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm59522; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm59523; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm09524; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm09525; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm09526; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm09527; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm09528; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [2,2]9529; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm09530; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm19531; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm09532; AVX1-NEXT: retq9533;9534; AVX2-LABEL: ugt_2_v4i64:9535; AVX2: # %bb.0:9536; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]9537; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm29538; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]9539; AVX2-NEXT: # ymm3 = mem[0,1,0,1]9540; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm29541; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm09542; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm09543; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm09544; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm09545; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm19546; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm09547; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [2,2,2,2]9548; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm09549; AVX2-NEXT: retq9550;9551; AVX512VPOPCNTDQ-LABEL: ugt_2_v4i64:9552; AVX512VPOPCNTDQ: # %bb.0:9553; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm09554; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm09555; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [2,2,2,2]9556; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm09557; AVX512VPOPCNTDQ-NEXT: retq9558;9559; AVX512VPOPCNTDQVL-LABEL: ugt_2_v4i64:9560; AVX512VPOPCNTDQVL: # %bb.0:9561; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm09562; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [2,2,2,2]9563; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm09564; AVX512VPOPCNTDQVL-NEXT: retq9565;9566; BITALG_NOVLX-LABEL: ugt_2_v4i64:9567; BITALG_NOVLX: # %bb.0:9568; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm09569; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm09570; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm19571; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm09572; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [2,2,2,2]9573; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm09574; BITALG_NOVLX-NEXT: retq9575;9576; BITALG-LABEL: ugt_2_v4i64:9577; BITALG: # %bb.0:9578; BITALG-NEXT: vpopcntb %ymm0, %ymm09579; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm19580; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm09581; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [2,2,2,2]9582; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm09583; BITALG-NEXT: retq9584 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)9585 %3 = icmp ugt <4 x i64> %2, <i64 2, i64 2, i64 2, i64 2>9586 %4 = sext <4 x i1> %3 to <4 x i64>9587 ret <4 x i64> %49588}9589 9590define <4 x i64> @ult_3_v4i64(<4 x i64> %0) {9591; AVX1-LABEL: ult_3_v4i64:9592; AVX1: # %bb.0:9593; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]9594; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm29595; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]9596; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm29597; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm49598; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm49599; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm49600; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm29601; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm49602; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm29603; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm09604; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm59605; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm59606; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm09607; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm09608; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm09609; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm09610; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm09611; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [3,3]9612; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm09613; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm19614; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm09615; AVX1-NEXT: retq9616;9617; AVX2-LABEL: ult_3_v4i64:9618; AVX2: # %bb.0:9619; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]9620; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm29621; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]9622; AVX2-NEXT: # ymm3 = mem[0,1,0,1]9623; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm29624; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm09625; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm09626; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm09627; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm09628; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm19629; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm09630; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [3,3,3,3]9631; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm09632; AVX2-NEXT: retq9633;9634; AVX512VPOPCNTDQ-LABEL: ult_3_v4i64:9635; AVX512VPOPCNTDQ: # %bb.0:9636; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm09637; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm09638; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [3,3,3,3]9639; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm09640; AVX512VPOPCNTDQ-NEXT: retq9641;9642; AVX512VPOPCNTDQVL-LABEL: ult_3_v4i64:9643; AVX512VPOPCNTDQVL: # %bb.0:9644; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm09645; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [3,3,3,3]9646; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm09647; AVX512VPOPCNTDQVL-NEXT: retq9648;9649; BITALG_NOVLX-LABEL: ult_3_v4i64:9650; BITALG_NOVLX: # %bb.0:9651; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm09652; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm09653; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm19654; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm09655; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [3,3,3,3]9656; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm09657; BITALG_NOVLX-NEXT: retq9658;9659; BITALG-LABEL: ult_3_v4i64:9660; BITALG: # %bb.0:9661; BITALG-NEXT: vpopcntb %ymm0, %ymm09662; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm19663; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm09664; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [3,3,3,3]9665; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm09666; BITALG-NEXT: retq9667 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)9668 %3 = icmp ult <4 x i64> %2, <i64 3, i64 3, i64 3, i64 3>9669 %4 = sext <4 x i1> %3 to <4 x i64>9670 ret <4 x i64> %49671}9672 9673define <4 x i64> @ugt_3_v4i64(<4 x i64> %0) {9674; AVX1-LABEL: ugt_3_v4i64:9675; AVX1: # %bb.0:9676; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]9677; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm29678; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]9679; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm29680; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm49681; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm49682; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm49683; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm29684; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm49685; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm29686; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm09687; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm59688; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm59689; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm09690; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm09691; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm09692; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm09693; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm09694; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [3,3]9695; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm09696; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm19697; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm09698; AVX1-NEXT: retq9699;9700; AVX2-LABEL: ugt_3_v4i64:9701; AVX2: # %bb.0:9702; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]9703; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm29704; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]9705; AVX2-NEXT: # ymm3 = mem[0,1,0,1]9706; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm29707; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm09708; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm09709; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm09710; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm09711; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm19712; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm09713; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [3,3,3,3]9714; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm09715; AVX2-NEXT: retq9716;9717; AVX512VPOPCNTDQ-LABEL: ugt_3_v4i64:9718; AVX512VPOPCNTDQ: # %bb.0:9719; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm09720; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm09721; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [3,3,3,3]9722; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm09723; AVX512VPOPCNTDQ-NEXT: retq9724;9725; AVX512VPOPCNTDQVL-LABEL: ugt_3_v4i64:9726; AVX512VPOPCNTDQVL: # %bb.0:9727; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm09728; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [3,3,3,3]9729; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm09730; AVX512VPOPCNTDQVL-NEXT: retq9731;9732; BITALG_NOVLX-LABEL: ugt_3_v4i64:9733; BITALG_NOVLX: # %bb.0:9734; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm09735; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm09736; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm19737; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm09738; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [3,3,3,3]9739; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm09740; BITALG_NOVLX-NEXT: retq9741;9742; BITALG-LABEL: ugt_3_v4i64:9743; BITALG: # %bb.0:9744; BITALG-NEXT: vpopcntb %ymm0, %ymm09745; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm19746; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm09747; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [3,3,3,3]9748; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm09749; BITALG-NEXT: retq9750 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)9751 %3 = icmp ugt <4 x i64> %2, <i64 3, i64 3, i64 3, i64 3>9752 %4 = sext <4 x i1> %3 to <4 x i64>9753 ret <4 x i64> %49754}9755 9756define <4 x i64> @ult_4_v4i64(<4 x i64> %0) {9757; AVX1-LABEL: ult_4_v4i64:9758; AVX1: # %bb.0:9759; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]9760; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm29761; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]9762; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm29763; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm49764; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm49765; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm49766; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm29767; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm49768; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm29769; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm09770; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm59771; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm59772; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm09773; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm09774; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm09775; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm09776; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm09777; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [4,4]9778; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm09779; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm19780; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm09781; AVX1-NEXT: retq9782;9783; AVX2-LABEL: ult_4_v4i64:9784; AVX2: # %bb.0:9785; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]9786; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm29787; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]9788; AVX2-NEXT: # ymm3 = mem[0,1,0,1]9789; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm29790; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm09791; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm09792; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm09793; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm09794; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm19795; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm09796; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [4,4,4,4]9797; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm09798; AVX2-NEXT: retq9799;9800; AVX512VPOPCNTDQ-LABEL: ult_4_v4i64:9801; AVX512VPOPCNTDQ: # %bb.0:9802; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm09803; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm09804; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [4,4,4,4]9805; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm09806; AVX512VPOPCNTDQ-NEXT: retq9807;9808; AVX512VPOPCNTDQVL-LABEL: ult_4_v4i64:9809; AVX512VPOPCNTDQVL: # %bb.0:9810; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm09811; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [4,4,4,4]9812; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm09813; AVX512VPOPCNTDQVL-NEXT: retq9814;9815; BITALG_NOVLX-LABEL: ult_4_v4i64:9816; BITALG_NOVLX: # %bb.0:9817; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm09818; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm09819; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm19820; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm09821; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [4,4,4,4]9822; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm09823; BITALG_NOVLX-NEXT: retq9824;9825; BITALG-LABEL: ult_4_v4i64:9826; BITALG: # %bb.0:9827; BITALG-NEXT: vpopcntb %ymm0, %ymm09828; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm19829; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm09830; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [4,4,4,4]9831; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm09832; BITALG-NEXT: retq9833 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)9834 %3 = icmp ult <4 x i64> %2, <i64 4, i64 4, i64 4, i64 4>9835 %4 = sext <4 x i1> %3 to <4 x i64>9836 ret <4 x i64> %49837}9838 9839define <4 x i64> @ugt_4_v4i64(<4 x i64> %0) {9840; AVX1-LABEL: ugt_4_v4i64:9841; AVX1: # %bb.0:9842; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]9843; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm29844; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]9845; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm29846; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm49847; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm49848; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm49849; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm29850; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm49851; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm29852; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm09853; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm59854; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm59855; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm09856; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm09857; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm09858; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm09859; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm09860; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [4,4]9861; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm09862; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm19863; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm09864; AVX1-NEXT: retq9865;9866; AVX2-LABEL: ugt_4_v4i64:9867; AVX2: # %bb.0:9868; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]9869; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm29870; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]9871; AVX2-NEXT: # ymm3 = mem[0,1,0,1]9872; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm29873; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm09874; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm09875; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm09876; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm09877; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm19878; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm09879; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [4,4,4,4]9880; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm09881; AVX2-NEXT: retq9882;9883; AVX512VPOPCNTDQ-LABEL: ugt_4_v4i64:9884; AVX512VPOPCNTDQ: # %bb.0:9885; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm09886; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm09887; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [4,4,4,4]9888; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm09889; AVX512VPOPCNTDQ-NEXT: retq9890;9891; AVX512VPOPCNTDQVL-LABEL: ugt_4_v4i64:9892; AVX512VPOPCNTDQVL: # %bb.0:9893; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm09894; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [4,4,4,4]9895; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm09896; AVX512VPOPCNTDQVL-NEXT: retq9897;9898; BITALG_NOVLX-LABEL: ugt_4_v4i64:9899; BITALG_NOVLX: # %bb.0:9900; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm09901; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm09902; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm19903; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm09904; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [4,4,4,4]9905; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm09906; BITALG_NOVLX-NEXT: retq9907;9908; BITALG-LABEL: ugt_4_v4i64:9909; BITALG: # %bb.0:9910; BITALG-NEXT: vpopcntb %ymm0, %ymm09911; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm19912; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm09913; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [4,4,4,4]9914; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm09915; BITALG-NEXT: retq9916 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)9917 %3 = icmp ugt <4 x i64> %2, <i64 4, i64 4, i64 4, i64 4>9918 %4 = sext <4 x i1> %3 to <4 x i64>9919 ret <4 x i64> %49920}9921 9922define <4 x i64> @ult_5_v4i64(<4 x i64> %0) {9923; AVX1-LABEL: ult_5_v4i64:9924; AVX1: # %bb.0:9925; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]9926; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm29927; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]9928; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm29929; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm49930; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm49931; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm49932; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm29933; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm49934; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm29935; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm09936; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm59937; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm59938; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm09939; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm09940; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm09941; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm09942; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm09943; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [5,5]9944; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm09945; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm19946; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm09947; AVX1-NEXT: retq9948;9949; AVX2-LABEL: ult_5_v4i64:9950; AVX2: # %bb.0:9951; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]9952; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm29953; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]9954; AVX2-NEXT: # ymm3 = mem[0,1,0,1]9955; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm29956; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm09957; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm09958; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm09959; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm09960; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm19961; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm09962; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [5,5,5,5]9963; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm09964; AVX2-NEXT: retq9965;9966; AVX512VPOPCNTDQ-LABEL: ult_5_v4i64:9967; AVX512VPOPCNTDQ: # %bb.0:9968; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm09969; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm09970; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [5,5,5,5]9971; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm09972; AVX512VPOPCNTDQ-NEXT: retq9973;9974; AVX512VPOPCNTDQVL-LABEL: ult_5_v4i64:9975; AVX512VPOPCNTDQVL: # %bb.0:9976; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm09977; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [5,5,5,5]9978; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm09979; AVX512VPOPCNTDQVL-NEXT: retq9980;9981; BITALG_NOVLX-LABEL: ult_5_v4i64:9982; BITALG_NOVLX: # %bb.0:9983; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm09984; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm09985; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm19986; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm09987; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [5,5,5,5]9988; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm09989; BITALG_NOVLX-NEXT: retq9990;9991; BITALG-LABEL: ult_5_v4i64:9992; BITALG: # %bb.0:9993; BITALG-NEXT: vpopcntb %ymm0, %ymm09994; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm19995; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm09996; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [5,5,5,5]9997; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm09998; BITALG-NEXT: retq9999 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)10000 %3 = icmp ult <4 x i64> %2, <i64 5, i64 5, i64 5, i64 5>10001 %4 = sext <4 x i1> %3 to <4 x i64>10002 ret <4 x i64> %410003}10004 10005define <4 x i64> @ugt_5_v4i64(<4 x i64> %0) {10006; AVX1-LABEL: ugt_5_v4i64:10007; AVX1: # %bb.0:10008; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]10009; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm210010; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]10011; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm210012; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm410013; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm410014; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm410015; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm210016; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm410017; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm210018; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm010019; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm510020; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm510021; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm010022; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm010023; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm010024; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm010025; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm010026; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [5,5]10027; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm010028; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm110029; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm010030; AVX1-NEXT: retq10031;10032; AVX2-LABEL: ugt_5_v4i64:10033; AVX2: # %bb.0:10034; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]10035; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm210036; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]10037; AVX2-NEXT: # ymm3 = mem[0,1,0,1]10038; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm210039; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm010040; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm010041; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm010042; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm010043; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm110044; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm010045; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [5,5,5,5]10046; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010047; AVX2-NEXT: retq10048;10049; AVX512VPOPCNTDQ-LABEL: ugt_5_v4i64:10050; AVX512VPOPCNTDQ: # %bb.0:10051; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm010052; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm010053; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [5,5,5,5]10054; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010055; AVX512VPOPCNTDQ-NEXT: retq10056;10057; AVX512VPOPCNTDQVL-LABEL: ugt_5_v4i64:10058; AVX512VPOPCNTDQVL: # %bb.0:10059; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm010060; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [5,5,5,5]10061; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010062; AVX512VPOPCNTDQVL-NEXT: retq10063;10064; BITALG_NOVLX-LABEL: ugt_5_v4i64:10065; BITALG_NOVLX: # %bb.0:10066; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm010067; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm010068; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm110069; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm010070; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [5,5,5,5]10071; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010072; BITALG_NOVLX-NEXT: retq10073;10074; BITALG-LABEL: ugt_5_v4i64:10075; BITALG: # %bb.0:10076; BITALG-NEXT: vpopcntb %ymm0, %ymm010077; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm110078; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm010079; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [5,5,5,5]10080; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010081; BITALG-NEXT: retq10082 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)10083 %3 = icmp ugt <4 x i64> %2, <i64 5, i64 5, i64 5, i64 5>10084 %4 = sext <4 x i1> %3 to <4 x i64>10085 ret <4 x i64> %410086}10087 10088define <4 x i64> @ult_6_v4i64(<4 x i64> %0) {10089; AVX1-LABEL: ult_6_v4i64:10090; AVX1: # %bb.0:10091; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]10092; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm210093; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]10094; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm210095; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm410096; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm410097; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm410098; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm210099; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm410100; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm210101; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm010102; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm510103; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm510104; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm010105; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm010106; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm010107; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm010108; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm010109; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [6,6]10110; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm010111; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm110112; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm010113; AVX1-NEXT: retq10114;10115; AVX2-LABEL: ult_6_v4i64:10116; AVX2: # %bb.0:10117; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]10118; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm210119; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]10120; AVX2-NEXT: # ymm3 = mem[0,1,0,1]10121; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm210122; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm010123; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm010124; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm010125; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm010126; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm110127; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm010128; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [6,6,6,6]10129; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010130; AVX2-NEXT: retq10131;10132; AVX512VPOPCNTDQ-LABEL: ult_6_v4i64:10133; AVX512VPOPCNTDQ: # %bb.0:10134; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm010135; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm010136; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [6,6,6,6]10137; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010138; AVX512VPOPCNTDQ-NEXT: retq10139;10140; AVX512VPOPCNTDQVL-LABEL: ult_6_v4i64:10141; AVX512VPOPCNTDQVL: # %bb.0:10142; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm010143; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [6,6,6,6]10144; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010145; AVX512VPOPCNTDQVL-NEXT: retq10146;10147; BITALG_NOVLX-LABEL: ult_6_v4i64:10148; BITALG_NOVLX: # %bb.0:10149; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm010150; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm010151; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm110152; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm010153; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [6,6,6,6]10154; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010155; BITALG_NOVLX-NEXT: retq10156;10157; BITALG-LABEL: ult_6_v4i64:10158; BITALG: # %bb.0:10159; BITALG-NEXT: vpopcntb %ymm0, %ymm010160; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm110161; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm010162; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [6,6,6,6]10163; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010164; BITALG-NEXT: retq10165 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)10166 %3 = icmp ult <4 x i64> %2, <i64 6, i64 6, i64 6, i64 6>10167 %4 = sext <4 x i1> %3 to <4 x i64>10168 ret <4 x i64> %410169}10170 10171define <4 x i64> @ugt_6_v4i64(<4 x i64> %0) {10172; AVX1-LABEL: ugt_6_v4i64:10173; AVX1: # %bb.0:10174; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]10175; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm210176; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]10177; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm210178; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm410179; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm410180; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm410181; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm210182; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm410183; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm210184; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm010185; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm510186; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm510187; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm010188; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm010189; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm010190; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm010191; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm010192; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [6,6]10193; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm010194; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm110195; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm010196; AVX1-NEXT: retq10197;10198; AVX2-LABEL: ugt_6_v4i64:10199; AVX2: # %bb.0:10200; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]10201; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm210202; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]10203; AVX2-NEXT: # ymm3 = mem[0,1,0,1]10204; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm210205; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm010206; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm010207; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm010208; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm010209; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm110210; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm010211; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [6,6,6,6]10212; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010213; AVX2-NEXT: retq10214;10215; AVX512VPOPCNTDQ-LABEL: ugt_6_v4i64:10216; AVX512VPOPCNTDQ: # %bb.0:10217; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm010218; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm010219; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [6,6,6,6]10220; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010221; AVX512VPOPCNTDQ-NEXT: retq10222;10223; AVX512VPOPCNTDQVL-LABEL: ugt_6_v4i64:10224; AVX512VPOPCNTDQVL: # %bb.0:10225; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm010226; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [6,6,6,6]10227; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010228; AVX512VPOPCNTDQVL-NEXT: retq10229;10230; BITALG_NOVLX-LABEL: ugt_6_v4i64:10231; BITALG_NOVLX: # %bb.0:10232; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm010233; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm010234; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm110235; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm010236; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [6,6,6,6]10237; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010238; BITALG_NOVLX-NEXT: retq10239;10240; BITALG-LABEL: ugt_6_v4i64:10241; BITALG: # %bb.0:10242; BITALG-NEXT: vpopcntb %ymm0, %ymm010243; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm110244; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm010245; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [6,6,6,6]10246; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010247; BITALG-NEXT: retq10248 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)10249 %3 = icmp ugt <4 x i64> %2, <i64 6, i64 6, i64 6, i64 6>10250 %4 = sext <4 x i1> %3 to <4 x i64>10251 ret <4 x i64> %410252}10253 10254define <4 x i64> @ult_7_v4i64(<4 x i64> %0) {10255; AVX1-LABEL: ult_7_v4i64:10256; AVX1: # %bb.0:10257; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]10258; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm210259; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]10260; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm210261; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm410262; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm410263; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm410264; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm210265; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm410266; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm210267; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm010268; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm510269; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm510270; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm010271; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm010272; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm010273; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm010274; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm010275; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [7,7]10276; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm010277; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm110278; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm010279; AVX1-NEXT: retq10280;10281; AVX2-LABEL: ult_7_v4i64:10282; AVX2: # %bb.0:10283; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]10284; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm210285; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]10286; AVX2-NEXT: # ymm3 = mem[0,1,0,1]10287; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm210288; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm010289; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm010290; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm010291; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm010292; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm110293; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm010294; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [7,7,7,7]10295; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010296; AVX2-NEXT: retq10297;10298; AVX512VPOPCNTDQ-LABEL: ult_7_v4i64:10299; AVX512VPOPCNTDQ: # %bb.0:10300; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm010301; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm010302; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [7,7,7,7]10303; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010304; AVX512VPOPCNTDQ-NEXT: retq10305;10306; AVX512VPOPCNTDQVL-LABEL: ult_7_v4i64:10307; AVX512VPOPCNTDQVL: # %bb.0:10308; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm010309; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [7,7,7,7]10310; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010311; AVX512VPOPCNTDQVL-NEXT: retq10312;10313; BITALG_NOVLX-LABEL: ult_7_v4i64:10314; BITALG_NOVLX: # %bb.0:10315; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm010316; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm010317; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm110318; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm010319; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [7,7,7,7]10320; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010321; BITALG_NOVLX-NEXT: retq10322;10323; BITALG-LABEL: ult_7_v4i64:10324; BITALG: # %bb.0:10325; BITALG-NEXT: vpopcntb %ymm0, %ymm010326; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm110327; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm010328; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [7,7,7,7]10329; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010330; BITALG-NEXT: retq10331 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)10332 %3 = icmp ult <4 x i64> %2, <i64 7, i64 7, i64 7, i64 7>10333 %4 = sext <4 x i1> %3 to <4 x i64>10334 ret <4 x i64> %410335}10336 10337define <4 x i64> @ugt_7_v4i64(<4 x i64> %0) {10338; AVX1-LABEL: ugt_7_v4i64:10339; AVX1: # %bb.0:10340; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]10341; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm210342; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]10343; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm210344; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm410345; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm410346; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm410347; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm210348; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm410349; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm210350; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm010351; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm510352; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm510353; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm010354; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm010355; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm010356; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm010357; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm010358; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [7,7]10359; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm010360; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm110361; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm010362; AVX1-NEXT: retq10363;10364; AVX2-LABEL: ugt_7_v4i64:10365; AVX2: # %bb.0:10366; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]10367; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm210368; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]10369; AVX2-NEXT: # ymm3 = mem[0,1,0,1]10370; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm210371; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm010372; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm010373; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm010374; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm010375; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm110376; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm010377; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [7,7,7,7]10378; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010379; AVX2-NEXT: retq10380;10381; AVX512VPOPCNTDQ-LABEL: ugt_7_v4i64:10382; AVX512VPOPCNTDQ: # %bb.0:10383; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm010384; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm010385; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [7,7,7,7]10386; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010387; AVX512VPOPCNTDQ-NEXT: retq10388;10389; AVX512VPOPCNTDQVL-LABEL: ugt_7_v4i64:10390; AVX512VPOPCNTDQVL: # %bb.0:10391; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm010392; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [7,7,7,7]10393; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010394; AVX512VPOPCNTDQVL-NEXT: retq10395;10396; BITALG_NOVLX-LABEL: ugt_7_v4i64:10397; BITALG_NOVLX: # %bb.0:10398; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm010399; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm010400; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm110401; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm010402; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [7,7,7,7]10403; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010404; BITALG_NOVLX-NEXT: retq10405;10406; BITALG-LABEL: ugt_7_v4i64:10407; BITALG: # %bb.0:10408; BITALG-NEXT: vpopcntb %ymm0, %ymm010409; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm110410; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm010411; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [7,7,7,7]10412; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010413; BITALG-NEXT: retq10414 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)10415 %3 = icmp ugt <4 x i64> %2, <i64 7, i64 7, i64 7, i64 7>10416 %4 = sext <4 x i1> %3 to <4 x i64>10417 ret <4 x i64> %410418}10419 10420define <4 x i64> @ult_8_v4i64(<4 x i64> %0) {10421; AVX1-LABEL: ult_8_v4i64:10422; AVX1: # %bb.0:10423; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]10424; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm210425; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]10426; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm210427; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm410428; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm410429; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm410430; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm210431; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm410432; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm210433; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm010434; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm510435; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm510436; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm010437; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm010438; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm010439; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm010440; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm010441; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [8,8]10442; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm010443; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm110444; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm010445; AVX1-NEXT: retq10446;10447; AVX2-LABEL: ult_8_v4i64:10448; AVX2: # %bb.0:10449; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]10450; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm210451; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]10452; AVX2-NEXT: # ymm3 = mem[0,1,0,1]10453; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm210454; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm010455; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm010456; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm010457; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm010458; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm110459; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm010460; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [8,8,8,8]10461; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010462; AVX2-NEXT: retq10463;10464; AVX512VPOPCNTDQ-LABEL: ult_8_v4i64:10465; AVX512VPOPCNTDQ: # %bb.0:10466; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm010467; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm010468; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [8,8,8,8]10469; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010470; AVX512VPOPCNTDQ-NEXT: retq10471;10472; AVX512VPOPCNTDQVL-LABEL: ult_8_v4i64:10473; AVX512VPOPCNTDQVL: # %bb.0:10474; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm010475; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [8,8,8,8]10476; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010477; AVX512VPOPCNTDQVL-NEXT: retq10478;10479; BITALG_NOVLX-LABEL: ult_8_v4i64:10480; BITALG_NOVLX: # %bb.0:10481; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm010482; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm010483; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm110484; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm010485; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [8,8,8,8]10486; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010487; BITALG_NOVLX-NEXT: retq10488;10489; BITALG-LABEL: ult_8_v4i64:10490; BITALG: # %bb.0:10491; BITALG-NEXT: vpopcntb %ymm0, %ymm010492; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm110493; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm010494; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [8,8,8,8]10495; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010496; BITALG-NEXT: retq10497 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)10498 %3 = icmp ult <4 x i64> %2, <i64 8, i64 8, i64 8, i64 8>10499 %4 = sext <4 x i1> %3 to <4 x i64>10500 ret <4 x i64> %410501}10502 10503define <4 x i64> @ugt_8_v4i64(<4 x i64> %0) {10504; AVX1-LABEL: ugt_8_v4i64:10505; AVX1: # %bb.0:10506; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]10507; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm210508; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]10509; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm210510; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm410511; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm410512; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm410513; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm210514; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm410515; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm210516; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm010517; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm510518; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm510519; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm010520; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm010521; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm010522; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm010523; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm010524; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [8,8]10525; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm010526; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm110527; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm010528; AVX1-NEXT: retq10529;10530; AVX2-LABEL: ugt_8_v4i64:10531; AVX2: # %bb.0:10532; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]10533; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm210534; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]10535; AVX2-NEXT: # ymm3 = mem[0,1,0,1]10536; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm210537; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm010538; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm010539; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm010540; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm010541; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm110542; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm010543; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [8,8,8,8]10544; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010545; AVX2-NEXT: retq10546;10547; AVX512VPOPCNTDQ-LABEL: ugt_8_v4i64:10548; AVX512VPOPCNTDQ: # %bb.0:10549; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm010550; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm010551; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [8,8,8,8]10552; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010553; AVX512VPOPCNTDQ-NEXT: retq10554;10555; AVX512VPOPCNTDQVL-LABEL: ugt_8_v4i64:10556; AVX512VPOPCNTDQVL: # %bb.0:10557; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm010558; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [8,8,8,8]10559; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010560; AVX512VPOPCNTDQVL-NEXT: retq10561;10562; BITALG_NOVLX-LABEL: ugt_8_v4i64:10563; BITALG_NOVLX: # %bb.0:10564; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm010565; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm010566; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm110567; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm010568; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [8,8,8,8]10569; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010570; BITALG_NOVLX-NEXT: retq10571;10572; BITALG-LABEL: ugt_8_v4i64:10573; BITALG: # %bb.0:10574; BITALG-NEXT: vpopcntb %ymm0, %ymm010575; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm110576; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm010577; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [8,8,8,8]10578; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010579; BITALG-NEXT: retq10580 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)10581 %3 = icmp ugt <4 x i64> %2, <i64 8, i64 8, i64 8, i64 8>10582 %4 = sext <4 x i1> %3 to <4 x i64>10583 ret <4 x i64> %410584}10585 10586define <4 x i64> @ult_9_v4i64(<4 x i64> %0) {10587; AVX1-LABEL: ult_9_v4i64:10588; AVX1: # %bb.0:10589; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]10590; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm210591; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]10592; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm210593; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm410594; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm410595; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm410596; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm210597; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm410598; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm210599; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm010600; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm510601; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm510602; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm010603; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm010604; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm010605; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm010606; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm010607; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [9,9]10608; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm010609; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm110610; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm010611; AVX1-NEXT: retq10612;10613; AVX2-LABEL: ult_9_v4i64:10614; AVX2: # %bb.0:10615; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]10616; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm210617; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]10618; AVX2-NEXT: # ymm3 = mem[0,1,0,1]10619; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm210620; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm010621; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm010622; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm010623; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm010624; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm110625; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm010626; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [9,9,9,9]10627; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010628; AVX2-NEXT: retq10629;10630; AVX512VPOPCNTDQ-LABEL: ult_9_v4i64:10631; AVX512VPOPCNTDQ: # %bb.0:10632; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm010633; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm010634; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [9,9,9,9]10635; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010636; AVX512VPOPCNTDQ-NEXT: retq10637;10638; AVX512VPOPCNTDQVL-LABEL: ult_9_v4i64:10639; AVX512VPOPCNTDQVL: # %bb.0:10640; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm010641; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [9,9,9,9]10642; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010643; AVX512VPOPCNTDQVL-NEXT: retq10644;10645; BITALG_NOVLX-LABEL: ult_9_v4i64:10646; BITALG_NOVLX: # %bb.0:10647; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm010648; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm010649; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm110650; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm010651; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [9,9,9,9]10652; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010653; BITALG_NOVLX-NEXT: retq10654;10655; BITALG-LABEL: ult_9_v4i64:10656; BITALG: # %bb.0:10657; BITALG-NEXT: vpopcntb %ymm0, %ymm010658; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm110659; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm010660; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [9,9,9,9]10661; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010662; BITALG-NEXT: retq10663 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)10664 %3 = icmp ult <4 x i64> %2, <i64 9, i64 9, i64 9, i64 9>10665 %4 = sext <4 x i1> %3 to <4 x i64>10666 ret <4 x i64> %410667}10668 10669define <4 x i64> @ugt_9_v4i64(<4 x i64> %0) {10670; AVX1-LABEL: ugt_9_v4i64:10671; AVX1: # %bb.0:10672; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]10673; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm210674; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]10675; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm210676; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm410677; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm410678; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm410679; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm210680; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm410681; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm210682; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm010683; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm510684; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm510685; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm010686; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm010687; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm010688; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm010689; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm010690; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [9,9]10691; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm010692; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm110693; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm010694; AVX1-NEXT: retq10695;10696; AVX2-LABEL: ugt_9_v4i64:10697; AVX2: # %bb.0:10698; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]10699; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm210700; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]10701; AVX2-NEXT: # ymm3 = mem[0,1,0,1]10702; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm210703; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm010704; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm010705; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm010706; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm010707; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm110708; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm010709; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [9,9,9,9]10710; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010711; AVX2-NEXT: retq10712;10713; AVX512VPOPCNTDQ-LABEL: ugt_9_v4i64:10714; AVX512VPOPCNTDQ: # %bb.0:10715; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm010716; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm010717; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [9,9,9,9]10718; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010719; AVX512VPOPCNTDQ-NEXT: retq10720;10721; AVX512VPOPCNTDQVL-LABEL: ugt_9_v4i64:10722; AVX512VPOPCNTDQVL: # %bb.0:10723; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm010724; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [9,9,9,9]10725; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010726; AVX512VPOPCNTDQVL-NEXT: retq10727;10728; BITALG_NOVLX-LABEL: ugt_9_v4i64:10729; BITALG_NOVLX: # %bb.0:10730; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm010731; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm010732; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm110733; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm010734; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [9,9,9,9]10735; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010736; BITALG_NOVLX-NEXT: retq10737;10738; BITALG-LABEL: ugt_9_v4i64:10739; BITALG: # %bb.0:10740; BITALG-NEXT: vpopcntb %ymm0, %ymm010741; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm110742; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm010743; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [9,9,9,9]10744; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010745; BITALG-NEXT: retq10746 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)10747 %3 = icmp ugt <4 x i64> %2, <i64 9, i64 9, i64 9, i64 9>10748 %4 = sext <4 x i1> %3 to <4 x i64>10749 ret <4 x i64> %410750}10751 10752define <4 x i64> @ult_10_v4i64(<4 x i64> %0) {10753; AVX1-LABEL: ult_10_v4i64:10754; AVX1: # %bb.0:10755; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]10756; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm210757; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]10758; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm210759; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm410760; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm410761; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm410762; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm210763; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm410764; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm210765; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm010766; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm510767; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm510768; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm010769; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm010770; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm010771; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm010772; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm010773; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [10,10]10774; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm010775; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm110776; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm010777; AVX1-NEXT: retq10778;10779; AVX2-LABEL: ult_10_v4i64:10780; AVX2: # %bb.0:10781; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]10782; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm210783; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]10784; AVX2-NEXT: # ymm3 = mem[0,1,0,1]10785; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm210786; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm010787; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm010788; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm010789; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm010790; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm110791; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm010792; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [10,10,10,10]10793; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010794; AVX2-NEXT: retq10795;10796; AVX512VPOPCNTDQ-LABEL: ult_10_v4i64:10797; AVX512VPOPCNTDQ: # %bb.0:10798; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm010799; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm010800; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [10,10,10,10]10801; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010802; AVX512VPOPCNTDQ-NEXT: retq10803;10804; AVX512VPOPCNTDQVL-LABEL: ult_10_v4i64:10805; AVX512VPOPCNTDQVL: # %bb.0:10806; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm010807; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [10,10,10,10]10808; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010809; AVX512VPOPCNTDQVL-NEXT: retq10810;10811; BITALG_NOVLX-LABEL: ult_10_v4i64:10812; BITALG_NOVLX: # %bb.0:10813; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm010814; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm010815; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm110816; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm010817; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [10,10,10,10]10818; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010819; BITALG_NOVLX-NEXT: retq10820;10821; BITALG-LABEL: ult_10_v4i64:10822; BITALG: # %bb.0:10823; BITALG-NEXT: vpopcntb %ymm0, %ymm010824; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm110825; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm010826; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [10,10,10,10]10827; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010828; BITALG-NEXT: retq10829 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)10830 %3 = icmp ult <4 x i64> %2, <i64 10, i64 10, i64 10, i64 10>10831 %4 = sext <4 x i1> %3 to <4 x i64>10832 ret <4 x i64> %410833}10834 10835define <4 x i64> @ugt_10_v4i64(<4 x i64> %0) {10836; AVX1-LABEL: ugt_10_v4i64:10837; AVX1: # %bb.0:10838; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]10839; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm210840; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]10841; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm210842; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm410843; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm410844; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm410845; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm210846; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm410847; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm210848; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm010849; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm510850; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm510851; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm010852; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm010853; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm010854; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm010855; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm010856; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [10,10]10857; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm010858; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm110859; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm010860; AVX1-NEXT: retq10861;10862; AVX2-LABEL: ugt_10_v4i64:10863; AVX2: # %bb.0:10864; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]10865; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm210866; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]10867; AVX2-NEXT: # ymm3 = mem[0,1,0,1]10868; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm210869; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm010870; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm010871; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm010872; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm010873; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm110874; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm010875; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [10,10,10,10]10876; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010877; AVX2-NEXT: retq10878;10879; AVX512VPOPCNTDQ-LABEL: ugt_10_v4i64:10880; AVX512VPOPCNTDQ: # %bb.0:10881; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm010882; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm010883; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [10,10,10,10]10884; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010885; AVX512VPOPCNTDQ-NEXT: retq10886;10887; AVX512VPOPCNTDQVL-LABEL: ugt_10_v4i64:10888; AVX512VPOPCNTDQVL: # %bb.0:10889; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm010890; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [10,10,10,10]10891; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010892; AVX512VPOPCNTDQVL-NEXT: retq10893;10894; BITALG_NOVLX-LABEL: ugt_10_v4i64:10895; BITALG_NOVLX: # %bb.0:10896; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm010897; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm010898; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm110899; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm010900; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [10,10,10,10]10901; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010902; BITALG_NOVLX-NEXT: retq10903;10904; BITALG-LABEL: ugt_10_v4i64:10905; BITALG: # %bb.0:10906; BITALG-NEXT: vpopcntb %ymm0, %ymm010907; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm110908; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm010909; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [10,10,10,10]10910; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm010911; BITALG-NEXT: retq10912 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)10913 %3 = icmp ugt <4 x i64> %2, <i64 10, i64 10, i64 10, i64 10>10914 %4 = sext <4 x i1> %3 to <4 x i64>10915 ret <4 x i64> %410916}10917 10918define <4 x i64> @ult_11_v4i64(<4 x i64> %0) {10919; AVX1-LABEL: ult_11_v4i64:10920; AVX1: # %bb.0:10921; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]10922; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm210923; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]10924; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm210925; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm410926; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm410927; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm410928; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm210929; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm410930; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm210931; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm010932; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm510933; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm510934; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm010935; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm010936; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm010937; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm010938; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm010939; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [11,11]10940; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm010941; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm110942; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm010943; AVX1-NEXT: retq10944;10945; AVX2-LABEL: ult_11_v4i64:10946; AVX2: # %bb.0:10947; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]10948; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm210949; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]10950; AVX2-NEXT: # ymm3 = mem[0,1,0,1]10951; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm210952; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm010953; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm010954; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm010955; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm010956; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm110957; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm010958; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [11,11,11,11]10959; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010960; AVX2-NEXT: retq10961;10962; AVX512VPOPCNTDQ-LABEL: ult_11_v4i64:10963; AVX512VPOPCNTDQ: # %bb.0:10964; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm010965; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm010966; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [11,11,11,11]10967; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010968; AVX512VPOPCNTDQ-NEXT: retq10969;10970; AVX512VPOPCNTDQVL-LABEL: ult_11_v4i64:10971; AVX512VPOPCNTDQVL: # %bb.0:10972; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm010973; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [11,11,11,11]10974; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010975; AVX512VPOPCNTDQVL-NEXT: retq10976;10977; BITALG_NOVLX-LABEL: ult_11_v4i64:10978; BITALG_NOVLX: # %bb.0:10979; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm010980; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm010981; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm110982; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm010983; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [11,11,11,11]10984; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010985; BITALG_NOVLX-NEXT: retq10986;10987; BITALG-LABEL: ult_11_v4i64:10988; BITALG: # %bb.0:10989; BITALG-NEXT: vpopcntb %ymm0, %ymm010990; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm110991; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm010992; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [11,11,11,11]10993; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm010994; BITALG-NEXT: retq10995 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)10996 %3 = icmp ult <4 x i64> %2, <i64 11, i64 11, i64 11, i64 11>10997 %4 = sext <4 x i1> %3 to <4 x i64>10998 ret <4 x i64> %410999}11000 11001define <4 x i64> @ugt_11_v4i64(<4 x i64> %0) {11002; AVX1-LABEL: ugt_11_v4i64:11003; AVX1: # %bb.0:11004; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]11005; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm211006; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]11007; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm211008; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm411009; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm411010; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm411011; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm211012; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm411013; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm211014; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm011015; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm511016; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm511017; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm011018; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm011019; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm011020; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm011021; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm011022; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [11,11]11023; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm011024; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm111025; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm011026; AVX1-NEXT: retq11027;11028; AVX2-LABEL: ugt_11_v4i64:11029; AVX2: # %bb.0:11030; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]11031; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm211032; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]11033; AVX2-NEXT: # ymm3 = mem[0,1,0,1]11034; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm211035; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm011036; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm011037; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm011038; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm011039; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm111040; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm011041; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [11,11,11,11]11042; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011043; AVX2-NEXT: retq11044;11045; AVX512VPOPCNTDQ-LABEL: ugt_11_v4i64:11046; AVX512VPOPCNTDQ: # %bb.0:11047; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm011048; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm011049; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [11,11,11,11]11050; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011051; AVX512VPOPCNTDQ-NEXT: retq11052;11053; AVX512VPOPCNTDQVL-LABEL: ugt_11_v4i64:11054; AVX512VPOPCNTDQVL: # %bb.0:11055; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm011056; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [11,11,11,11]11057; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011058; AVX512VPOPCNTDQVL-NEXT: retq11059;11060; BITALG_NOVLX-LABEL: ugt_11_v4i64:11061; BITALG_NOVLX: # %bb.0:11062; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm011063; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm011064; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm111065; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm011066; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [11,11,11,11]11067; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011068; BITALG_NOVLX-NEXT: retq11069;11070; BITALG-LABEL: ugt_11_v4i64:11071; BITALG: # %bb.0:11072; BITALG-NEXT: vpopcntb %ymm0, %ymm011073; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm111074; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm011075; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [11,11,11,11]11076; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011077; BITALG-NEXT: retq11078 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)11079 %3 = icmp ugt <4 x i64> %2, <i64 11, i64 11, i64 11, i64 11>11080 %4 = sext <4 x i1> %3 to <4 x i64>11081 ret <4 x i64> %411082}11083 11084define <4 x i64> @ult_12_v4i64(<4 x i64> %0) {11085; AVX1-LABEL: ult_12_v4i64:11086; AVX1: # %bb.0:11087; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]11088; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm211089; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]11090; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm211091; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm411092; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm411093; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm411094; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm211095; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm411096; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm211097; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm011098; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm511099; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm511100; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm011101; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm011102; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm011103; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm011104; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm011105; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [12,12]11106; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm011107; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm111108; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm011109; AVX1-NEXT: retq11110;11111; AVX2-LABEL: ult_12_v4i64:11112; AVX2: # %bb.0:11113; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]11114; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm211115; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]11116; AVX2-NEXT: # ymm3 = mem[0,1,0,1]11117; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm211118; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm011119; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm011120; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm011121; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm011122; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm111123; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm011124; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [12,12,12,12]11125; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011126; AVX2-NEXT: retq11127;11128; AVX512VPOPCNTDQ-LABEL: ult_12_v4i64:11129; AVX512VPOPCNTDQ: # %bb.0:11130; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm011131; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm011132; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [12,12,12,12]11133; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011134; AVX512VPOPCNTDQ-NEXT: retq11135;11136; AVX512VPOPCNTDQVL-LABEL: ult_12_v4i64:11137; AVX512VPOPCNTDQVL: # %bb.0:11138; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm011139; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [12,12,12,12]11140; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011141; AVX512VPOPCNTDQVL-NEXT: retq11142;11143; BITALG_NOVLX-LABEL: ult_12_v4i64:11144; BITALG_NOVLX: # %bb.0:11145; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm011146; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm011147; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm111148; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm011149; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [12,12,12,12]11150; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011151; BITALG_NOVLX-NEXT: retq11152;11153; BITALG-LABEL: ult_12_v4i64:11154; BITALG: # %bb.0:11155; BITALG-NEXT: vpopcntb %ymm0, %ymm011156; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm111157; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm011158; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [12,12,12,12]11159; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011160; BITALG-NEXT: retq11161 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)11162 %3 = icmp ult <4 x i64> %2, <i64 12, i64 12, i64 12, i64 12>11163 %4 = sext <4 x i1> %3 to <4 x i64>11164 ret <4 x i64> %411165}11166 11167define <4 x i64> @ugt_12_v4i64(<4 x i64> %0) {11168; AVX1-LABEL: ugt_12_v4i64:11169; AVX1: # %bb.0:11170; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]11171; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm211172; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]11173; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm211174; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm411175; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm411176; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm411177; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm211178; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm411179; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm211180; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm011181; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm511182; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm511183; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm011184; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm011185; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm011186; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm011187; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm011188; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [12,12]11189; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm011190; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm111191; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm011192; AVX1-NEXT: retq11193;11194; AVX2-LABEL: ugt_12_v4i64:11195; AVX2: # %bb.0:11196; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]11197; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm211198; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]11199; AVX2-NEXT: # ymm3 = mem[0,1,0,1]11200; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm211201; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm011202; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm011203; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm011204; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm011205; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm111206; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm011207; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [12,12,12,12]11208; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011209; AVX2-NEXT: retq11210;11211; AVX512VPOPCNTDQ-LABEL: ugt_12_v4i64:11212; AVX512VPOPCNTDQ: # %bb.0:11213; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm011214; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm011215; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [12,12,12,12]11216; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011217; AVX512VPOPCNTDQ-NEXT: retq11218;11219; AVX512VPOPCNTDQVL-LABEL: ugt_12_v4i64:11220; AVX512VPOPCNTDQVL: # %bb.0:11221; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm011222; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [12,12,12,12]11223; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011224; AVX512VPOPCNTDQVL-NEXT: retq11225;11226; BITALG_NOVLX-LABEL: ugt_12_v4i64:11227; BITALG_NOVLX: # %bb.0:11228; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm011229; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm011230; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm111231; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm011232; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [12,12,12,12]11233; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011234; BITALG_NOVLX-NEXT: retq11235;11236; BITALG-LABEL: ugt_12_v4i64:11237; BITALG: # %bb.0:11238; BITALG-NEXT: vpopcntb %ymm0, %ymm011239; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm111240; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm011241; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [12,12,12,12]11242; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011243; BITALG-NEXT: retq11244 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)11245 %3 = icmp ugt <4 x i64> %2, <i64 12, i64 12, i64 12, i64 12>11246 %4 = sext <4 x i1> %3 to <4 x i64>11247 ret <4 x i64> %411248}11249 11250define <4 x i64> @ult_13_v4i64(<4 x i64> %0) {11251; AVX1-LABEL: ult_13_v4i64:11252; AVX1: # %bb.0:11253; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]11254; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm211255; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]11256; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm211257; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm411258; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm411259; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm411260; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm211261; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm411262; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm211263; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm011264; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm511265; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm511266; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm011267; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm011268; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm011269; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm011270; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm011271; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [13,13]11272; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm011273; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm111274; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm011275; AVX1-NEXT: retq11276;11277; AVX2-LABEL: ult_13_v4i64:11278; AVX2: # %bb.0:11279; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]11280; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm211281; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]11282; AVX2-NEXT: # ymm3 = mem[0,1,0,1]11283; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm211284; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm011285; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm011286; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm011287; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm011288; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm111289; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm011290; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [13,13,13,13]11291; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011292; AVX2-NEXT: retq11293;11294; AVX512VPOPCNTDQ-LABEL: ult_13_v4i64:11295; AVX512VPOPCNTDQ: # %bb.0:11296; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm011297; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm011298; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [13,13,13,13]11299; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011300; AVX512VPOPCNTDQ-NEXT: retq11301;11302; AVX512VPOPCNTDQVL-LABEL: ult_13_v4i64:11303; AVX512VPOPCNTDQVL: # %bb.0:11304; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm011305; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [13,13,13,13]11306; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011307; AVX512VPOPCNTDQVL-NEXT: retq11308;11309; BITALG_NOVLX-LABEL: ult_13_v4i64:11310; BITALG_NOVLX: # %bb.0:11311; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm011312; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm011313; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm111314; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm011315; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [13,13,13,13]11316; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011317; BITALG_NOVLX-NEXT: retq11318;11319; BITALG-LABEL: ult_13_v4i64:11320; BITALG: # %bb.0:11321; BITALG-NEXT: vpopcntb %ymm0, %ymm011322; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm111323; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm011324; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [13,13,13,13]11325; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011326; BITALG-NEXT: retq11327 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)11328 %3 = icmp ult <4 x i64> %2, <i64 13, i64 13, i64 13, i64 13>11329 %4 = sext <4 x i1> %3 to <4 x i64>11330 ret <4 x i64> %411331}11332 11333define <4 x i64> @ugt_13_v4i64(<4 x i64> %0) {11334; AVX1-LABEL: ugt_13_v4i64:11335; AVX1: # %bb.0:11336; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]11337; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm211338; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]11339; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm211340; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm411341; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm411342; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm411343; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm211344; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm411345; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm211346; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm011347; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm511348; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm511349; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm011350; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm011351; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm011352; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm011353; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm011354; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [13,13]11355; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm011356; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm111357; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm011358; AVX1-NEXT: retq11359;11360; AVX2-LABEL: ugt_13_v4i64:11361; AVX2: # %bb.0:11362; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]11363; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm211364; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]11365; AVX2-NEXT: # ymm3 = mem[0,1,0,1]11366; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm211367; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm011368; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm011369; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm011370; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm011371; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm111372; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm011373; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [13,13,13,13]11374; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011375; AVX2-NEXT: retq11376;11377; AVX512VPOPCNTDQ-LABEL: ugt_13_v4i64:11378; AVX512VPOPCNTDQ: # %bb.0:11379; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm011380; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm011381; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [13,13,13,13]11382; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011383; AVX512VPOPCNTDQ-NEXT: retq11384;11385; AVX512VPOPCNTDQVL-LABEL: ugt_13_v4i64:11386; AVX512VPOPCNTDQVL: # %bb.0:11387; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm011388; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [13,13,13,13]11389; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011390; AVX512VPOPCNTDQVL-NEXT: retq11391;11392; BITALG_NOVLX-LABEL: ugt_13_v4i64:11393; BITALG_NOVLX: # %bb.0:11394; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm011395; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm011396; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm111397; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm011398; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [13,13,13,13]11399; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011400; BITALG_NOVLX-NEXT: retq11401;11402; BITALG-LABEL: ugt_13_v4i64:11403; BITALG: # %bb.0:11404; BITALG-NEXT: vpopcntb %ymm0, %ymm011405; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm111406; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm011407; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [13,13,13,13]11408; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011409; BITALG-NEXT: retq11410 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)11411 %3 = icmp ugt <4 x i64> %2, <i64 13, i64 13, i64 13, i64 13>11412 %4 = sext <4 x i1> %3 to <4 x i64>11413 ret <4 x i64> %411414}11415 11416define <4 x i64> @ult_14_v4i64(<4 x i64> %0) {11417; AVX1-LABEL: ult_14_v4i64:11418; AVX1: # %bb.0:11419; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]11420; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm211421; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]11422; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm211423; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm411424; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm411425; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm411426; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm211427; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm411428; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm211429; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm011430; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm511431; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm511432; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm011433; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm011434; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm011435; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm011436; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm011437; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [14,14]11438; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm011439; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm111440; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm011441; AVX1-NEXT: retq11442;11443; AVX2-LABEL: ult_14_v4i64:11444; AVX2: # %bb.0:11445; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]11446; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm211447; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]11448; AVX2-NEXT: # ymm3 = mem[0,1,0,1]11449; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm211450; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm011451; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm011452; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm011453; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm011454; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm111455; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm011456; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [14,14,14,14]11457; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011458; AVX2-NEXT: retq11459;11460; AVX512VPOPCNTDQ-LABEL: ult_14_v4i64:11461; AVX512VPOPCNTDQ: # %bb.0:11462; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm011463; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm011464; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [14,14,14,14]11465; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011466; AVX512VPOPCNTDQ-NEXT: retq11467;11468; AVX512VPOPCNTDQVL-LABEL: ult_14_v4i64:11469; AVX512VPOPCNTDQVL: # %bb.0:11470; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm011471; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [14,14,14,14]11472; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011473; AVX512VPOPCNTDQVL-NEXT: retq11474;11475; BITALG_NOVLX-LABEL: ult_14_v4i64:11476; BITALG_NOVLX: # %bb.0:11477; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm011478; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm011479; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm111480; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm011481; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [14,14,14,14]11482; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011483; BITALG_NOVLX-NEXT: retq11484;11485; BITALG-LABEL: ult_14_v4i64:11486; BITALG: # %bb.0:11487; BITALG-NEXT: vpopcntb %ymm0, %ymm011488; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm111489; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm011490; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [14,14,14,14]11491; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011492; BITALG-NEXT: retq11493 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)11494 %3 = icmp ult <4 x i64> %2, <i64 14, i64 14, i64 14, i64 14>11495 %4 = sext <4 x i1> %3 to <4 x i64>11496 ret <4 x i64> %411497}11498 11499define <4 x i64> @ugt_14_v4i64(<4 x i64> %0) {11500; AVX1-LABEL: ugt_14_v4i64:11501; AVX1: # %bb.0:11502; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]11503; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm211504; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]11505; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm211506; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm411507; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm411508; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm411509; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm211510; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm411511; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm211512; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm011513; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm511514; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm511515; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm011516; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm011517; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm011518; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm011519; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm011520; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [14,14]11521; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm011522; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm111523; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm011524; AVX1-NEXT: retq11525;11526; AVX2-LABEL: ugt_14_v4i64:11527; AVX2: # %bb.0:11528; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]11529; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm211530; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]11531; AVX2-NEXT: # ymm3 = mem[0,1,0,1]11532; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm211533; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm011534; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm011535; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm011536; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm011537; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm111538; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm011539; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [14,14,14,14]11540; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011541; AVX2-NEXT: retq11542;11543; AVX512VPOPCNTDQ-LABEL: ugt_14_v4i64:11544; AVX512VPOPCNTDQ: # %bb.0:11545; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm011546; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm011547; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [14,14,14,14]11548; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011549; AVX512VPOPCNTDQ-NEXT: retq11550;11551; AVX512VPOPCNTDQVL-LABEL: ugt_14_v4i64:11552; AVX512VPOPCNTDQVL: # %bb.0:11553; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm011554; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [14,14,14,14]11555; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011556; AVX512VPOPCNTDQVL-NEXT: retq11557;11558; BITALG_NOVLX-LABEL: ugt_14_v4i64:11559; BITALG_NOVLX: # %bb.0:11560; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm011561; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm011562; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm111563; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm011564; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [14,14,14,14]11565; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011566; BITALG_NOVLX-NEXT: retq11567;11568; BITALG-LABEL: ugt_14_v4i64:11569; BITALG: # %bb.0:11570; BITALG-NEXT: vpopcntb %ymm0, %ymm011571; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm111572; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm011573; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [14,14,14,14]11574; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011575; BITALG-NEXT: retq11576 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)11577 %3 = icmp ugt <4 x i64> %2, <i64 14, i64 14, i64 14, i64 14>11578 %4 = sext <4 x i1> %3 to <4 x i64>11579 ret <4 x i64> %411580}11581 11582define <4 x i64> @ult_15_v4i64(<4 x i64> %0) {11583; AVX1-LABEL: ult_15_v4i64:11584; AVX1: # %bb.0:11585; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]11586; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm211587; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]11588; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm211589; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm411590; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm411591; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm411592; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm211593; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm411594; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm211595; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm011596; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm511597; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm511598; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm011599; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm011600; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm011601; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm011602; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm011603; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [15,15]11604; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm011605; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm111606; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm011607; AVX1-NEXT: retq11608;11609; AVX2-LABEL: ult_15_v4i64:11610; AVX2: # %bb.0:11611; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]11612; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm211613; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]11614; AVX2-NEXT: # ymm3 = mem[0,1,0,1]11615; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm211616; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm011617; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm011618; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm011619; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm011620; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm111621; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm011622; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [15,15,15,15]11623; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011624; AVX2-NEXT: retq11625;11626; AVX512VPOPCNTDQ-LABEL: ult_15_v4i64:11627; AVX512VPOPCNTDQ: # %bb.0:11628; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm011629; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm011630; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [15,15,15,15]11631; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011632; AVX512VPOPCNTDQ-NEXT: retq11633;11634; AVX512VPOPCNTDQVL-LABEL: ult_15_v4i64:11635; AVX512VPOPCNTDQVL: # %bb.0:11636; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm011637; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [15,15,15,15]11638; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011639; AVX512VPOPCNTDQVL-NEXT: retq11640;11641; BITALG_NOVLX-LABEL: ult_15_v4i64:11642; BITALG_NOVLX: # %bb.0:11643; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm011644; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm011645; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm111646; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm011647; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [15,15,15,15]11648; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011649; BITALG_NOVLX-NEXT: retq11650;11651; BITALG-LABEL: ult_15_v4i64:11652; BITALG: # %bb.0:11653; BITALG-NEXT: vpopcntb %ymm0, %ymm011654; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm111655; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm011656; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [15,15,15,15]11657; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011658; BITALG-NEXT: retq11659 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)11660 %3 = icmp ult <4 x i64> %2, <i64 15, i64 15, i64 15, i64 15>11661 %4 = sext <4 x i1> %3 to <4 x i64>11662 ret <4 x i64> %411663}11664 11665define <4 x i64> @ugt_15_v4i64(<4 x i64> %0) {11666; AVX1-LABEL: ugt_15_v4i64:11667; AVX1: # %bb.0:11668; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]11669; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm211670; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]11671; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm211672; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm411673; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm411674; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm411675; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm211676; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm411677; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm211678; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm011679; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm511680; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm511681; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm011682; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm011683; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm011684; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm011685; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm011686; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [15,15]11687; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm011688; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm111689; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm011690; AVX1-NEXT: retq11691;11692; AVX2-LABEL: ugt_15_v4i64:11693; AVX2: # %bb.0:11694; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]11695; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm211696; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]11697; AVX2-NEXT: # ymm3 = mem[0,1,0,1]11698; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm211699; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm011700; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm011701; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm011702; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm011703; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm111704; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm011705; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [15,15,15,15]11706; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011707; AVX2-NEXT: retq11708;11709; AVX512VPOPCNTDQ-LABEL: ugt_15_v4i64:11710; AVX512VPOPCNTDQ: # %bb.0:11711; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm011712; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm011713; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [15,15,15,15]11714; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011715; AVX512VPOPCNTDQ-NEXT: retq11716;11717; AVX512VPOPCNTDQVL-LABEL: ugt_15_v4i64:11718; AVX512VPOPCNTDQVL: # %bb.0:11719; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm011720; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [15,15,15,15]11721; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011722; AVX512VPOPCNTDQVL-NEXT: retq11723;11724; BITALG_NOVLX-LABEL: ugt_15_v4i64:11725; BITALG_NOVLX: # %bb.0:11726; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm011727; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm011728; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm111729; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm011730; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [15,15,15,15]11731; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011732; BITALG_NOVLX-NEXT: retq11733;11734; BITALG-LABEL: ugt_15_v4i64:11735; BITALG: # %bb.0:11736; BITALG-NEXT: vpopcntb %ymm0, %ymm011737; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm111738; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm011739; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [15,15,15,15]11740; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011741; BITALG-NEXT: retq11742 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)11743 %3 = icmp ugt <4 x i64> %2, <i64 15, i64 15, i64 15, i64 15>11744 %4 = sext <4 x i1> %3 to <4 x i64>11745 ret <4 x i64> %411746}11747 11748define <4 x i64> @ult_16_v4i64(<4 x i64> %0) {11749; AVX1-LABEL: ult_16_v4i64:11750; AVX1: # %bb.0:11751; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]11752; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm211753; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]11754; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm211755; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm411756; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm411757; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm411758; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm211759; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm411760; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm211761; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm011762; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm511763; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm511764; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm011765; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm011766; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm011767; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm011768; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm011769; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [16,16]11770; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm011771; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm111772; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm011773; AVX1-NEXT: retq11774;11775; AVX2-LABEL: ult_16_v4i64:11776; AVX2: # %bb.0:11777; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]11778; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm211779; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]11780; AVX2-NEXT: # ymm3 = mem[0,1,0,1]11781; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm211782; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm011783; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm011784; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm011785; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm011786; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm111787; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm011788; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [16,16,16,16]11789; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011790; AVX2-NEXT: retq11791;11792; AVX512VPOPCNTDQ-LABEL: ult_16_v4i64:11793; AVX512VPOPCNTDQ: # %bb.0:11794; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm011795; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm011796; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [16,16,16,16]11797; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011798; AVX512VPOPCNTDQ-NEXT: retq11799;11800; AVX512VPOPCNTDQVL-LABEL: ult_16_v4i64:11801; AVX512VPOPCNTDQVL: # %bb.0:11802; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm011803; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [16,16,16,16]11804; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011805; AVX512VPOPCNTDQVL-NEXT: retq11806;11807; BITALG_NOVLX-LABEL: ult_16_v4i64:11808; BITALG_NOVLX: # %bb.0:11809; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm011810; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm011811; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm111812; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm011813; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [16,16,16,16]11814; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011815; BITALG_NOVLX-NEXT: retq11816;11817; BITALG-LABEL: ult_16_v4i64:11818; BITALG: # %bb.0:11819; BITALG-NEXT: vpopcntb %ymm0, %ymm011820; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm111821; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm011822; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [16,16,16,16]11823; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011824; BITALG-NEXT: retq11825 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)11826 %3 = icmp ult <4 x i64> %2, <i64 16, i64 16, i64 16, i64 16>11827 %4 = sext <4 x i1> %3 to <4 x i64>11828 ret <4 x i64> %411829}11830 11831define <4 x i64> @ugt_16_v4i64(<4 x i64> %0) {11832; AVX1-LABEL: ugt_16_v4i64:11833; AVX1: # %bb.0:11834; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]11835; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm211836; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]11837; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm211838; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm411839; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm411840; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm411841; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm211842; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm411843; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm211844; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm011845; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm511846; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm511847; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm011848; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm011849; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm011850; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm011851; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm011852; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [16,16]11853; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm011854; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm111855; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm011856; AVX1-NEXT: retq11857;11858; AVX2-LABEL: ugt_16_v4i64:11859; AVX2: # %bb.0:11860; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]11861; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm211862; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]11863; AVX2-NEXT: # ymm3 = mem[0,1,0,1]11864; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm211865; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm011866; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm011867; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm011868; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm011869; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm111870; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm011871; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [16,16,16,16]11872; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011873; AVX2-NEXT: retq11874;11875; AVX512VPOPCNTDQ-LABEL: ugt_16_v4i64:11876; AVX512VPOPCNTDQ: # %bb.0:11877; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm011878; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm011879; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [16,16,16,16]11880; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011881; AVX512VPOPCNTDQ-NEXT: retq11882;11883; AVX512VPOPCNTDQVL-LABEL: ugt_16_v4i64:11884; AVX512VPOPCNTDQVL: # %bb.0:11885; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm011886; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [16,16,16,16]11887; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011888; AVX512VPOPCNTDQVL-NEXT: retq11889;11890; BITALG_NOVLX-LABEL: ugt_16_v4i64:11891; BITALG_NOVLX: # %bb.0:11892; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm011893; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm011894; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm111895; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm011896; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [16,16,16,16]11897; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011898; BITALG_NOVLX-NEXT: retq11899;11900; BITALG-LABEL: ugt_16_v4i64:11901; BITALG: # %bb.0:11902; BITALG-NEXT: vpopcntb %ymm0, %ymm011903; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm111904; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm011905; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [16,16,16,16]11906; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm011907; BITALG-NEXT: retq11908 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)11909 %3 = icmp ugt <4 x i64> %2, <i64 16, i64 16, i64 16, i64 16>11910 %4 = sext <4 x i1> %3 to <4 x i64>11911 ret <4 x i64> %411912}11913 11914define <4 x i64> @ult_17_v4i64(<4 x i64> %0) {11915; AVX1-LABEL: ult_17_v4i64:11916; AVX1: # %bb.0:11917; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]11918; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm211919; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]11920; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm211921; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm411922; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm411923; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm411924; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm211925; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm411926; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm211927; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm011928; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm511929; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm511930; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm011931; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm011932; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm011933; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm011934; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm011935; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [17,17]11936; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm011937; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm111938; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm011939; AVX1-NEXT: retq11940;11941; AVX2-LABEL: ult_17_v4i64:11942; AVX2: # %bb.0:11943; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]11944; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm211945; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]11946; AVX2-NEXT: # ymm3 = mem[0,1,0,1]11947; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm211948; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm011949; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm011950; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm011951; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm011952; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm111953; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm011954; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [17,17,17,17]11955; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011956; AVX2-NEXT: retq11957;11958; AVX512VPOPCNTDQ-LABEL: ult_17_v4i64:11959; AVX512VPOPCNTDQ: # %bb.0:11960; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm011961; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm011962; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [17,17,17,17]11963; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011964; AVX512VPOPCNTDQ-NEXT: retq11965;11966; AVX512VPOPCNTDQVL-LABEL: ult_17_v4i64:11967; AVX512VPOPCNTDQVL: # %bb.0:11968; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm011969; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [17,17,17,17]11970; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011971; AVX512VPOPCNTDQVL-NEXT: retq11972;11973; BITALG_NOVLX-LABEL: ult_17_v4i64:11974; BITALG_NOVLX: # %bb.0:11975; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm011976; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm011977; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm111978; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm011979; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [17,17,17,17]11980; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011981; BITALG_NOVLX-NEXT: retq11982;11983; BITALG-LABEL: ult_17_v4i64:11984; BITALG: # %bb.0:11985; BITALG-NEXT: vpopcntb %ymm0, %ymm011986; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm111987; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm011988; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [17,17,17,17]11989; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm011990; BITALG-NEXT: retq11991 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)11992 %3 = icmp ult <4 x i64> %2, <i64 17, i64 17, i64 17, i64 17>11993 %4 = sext <4 x i1> %3 to <4 x i64>11994 ret <4 x i64> %411995}11996 11997define <4 x i64> @ugt_17_v4i64(<4 x i64> %0) {11998; AVX1-LABEL: ugt_17_v4i64:11999; AVX1: # %bb.0:12000; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]12001; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm212002; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]12003; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm212004; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm412005; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm412006; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm412007; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm212008; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm412009; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm212010; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm012011; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm512012; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm512013; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm012014; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm012015; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm012016; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm012017; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm012018; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [17,17]12019; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm012020; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm112021; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm012022; AVX1-NEXT: retq12023;12024; AVX2-LABEL: ugt_17_v4i64:12025; AVX2: # %bb.0:12026; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]12027; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm212028; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]12029; AVX2-NEXT: # ymm3 = mem[0,1,0,1]12030; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm212031; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm012032; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm012033; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm012034; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm012035; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm112036; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm012037; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [17,17,17,17]12038; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012039; AVX2-NEXT: retq12040;12041; AVX512VPOPCNTDQ-LABEL: ugt_17_v4i64:12042; AVX512VPOPCNTDQ: # %bb.0:12043; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm012044; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm012045; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [17,17,17,17]12046; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012047; AVX512VPOPCNTDQ-NEXT: retq12048;12049; AVX512VPOPCNTDQVL-LABEL: ugt_17_v4i64:12050; AVX512VPOPCNTDQVL: # %bb.0:12051; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm012052; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [17,17,17,17]12053; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012054; AVX512VPOPCNTDQVL-NEXT: retq12055;12056; BITALG_NOVLX-LABEL: ugt_17_v4i64:12057; BITALG_NOVLX: # %bb.0:12058; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm012059; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm012060; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm112061; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm012062; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [17,17,17,17]12063; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012064; BITALG_NOVLX-NEXT: retq12065;12066; BITALG-LABEL: ugt_17_v4i64:12067; BITALG: # %bb.0:12068; BITALG-NEXT: vpopcntb %ymm0, %ymm012069; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm112070; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm012071; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [17,17,17,17]12072; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012073; BITALG-NEXT: retq12074 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)12075 %3 = icmp ugt <4 x i64> %2, <i64 17, i64 17, i64 17, i64 17>12076 %4 = sext <4 x i1> %3 to <4 x i64>12077 ret <4 x i64> %412078}12079 12080define <4 x i64> @ult_18_v4i64(<4 x i64> %0) {12081; AVX1-LABEL: ult_18_v4i64:12082; AVX1: # %bb.0:12083; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]12084; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm212085; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]12086; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm212087; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm412088; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm412089; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm412090; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm212091; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm412092; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm212093; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm012094; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm512095; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm512096; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm012097; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm012098; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm012099; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm012100; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm012101; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [18,18]12102; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm012103; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm112104; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm012105; AVX1-NEXT: retq12106;12107; AVX2-LABEL: ult_18_v4i64:12108; AVX2: # %bb.0:12109; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]12110; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm212111; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]12112; AVX2-NEXT: # ymm3 = mem[0,1,0,1]12113; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm212114; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm012115; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm012116; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm012117; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm012118; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm112119; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm012120; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [18,18,18,18]12121; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012122; AVX2-NEXT: retq12123;12124; AVX512VPOPCNTDQ-LABEL: ult_18_v4i64:12125; AVX512VPOPCNTDQ: # %bb.0:12126; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm012127; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm012128; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [18,18,18,18]12129; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012130; AVX512VPOPCNTDQ-NEXT: retq12131;12132; AVX512VPOPCNTDQVL-LABEL: ult_18_v4i64:12133; AVX512VPOPCNTDQVL: # %bb.0:12134; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm012135; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [18,18,18,18]12136; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012137; AVX512VPOPCNTDQVL-NEXT: retq12138;12139; BITALG_NOVLX-LABEL: ult_18_v4i64:12140; BITALG_NOVLX: # %bb.0:12141; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm012142; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm012143; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm112144; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm012145; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [18,18,18,18]12146; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012147; BITALG_NOVLX-NEXT: retq12148;12149; BITALG-LABEL: ult_18_v4i64:12150; BITALG: # %bb.0:12151; BITALG-NEXT: vpopcntb %ymm0, %ymm012152; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm112153; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm012154; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [18,18,18,18]12155; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012156; BITALG-NEXT: retq12157 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)12158 %3 = icmp ult <4 x i64> %2, <i64 18, i64 18, i64 18, i64 18>12159 %4 = sext <4 x i1> %3 to <4 x i64>12160 ret <4 x i64> %412161}12162 12163define <4 x i64> @ugt_18_v4i64(<4 x i64> %0) {12164; AVX1-LABEL: ugt_18_v4i64:12165; AVX1: # %bb.0:12166; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]12167; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm212168; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]12169; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm212170; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm412171; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm412172; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm412173; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm212174; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm412175; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm212176; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm012177; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm512178; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm512179; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm012180; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm012181; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm012182; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm012183; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm012184; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [18,18]12185; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm012186; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm112187; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm012188; AVX1-NEXT: retq12189;12190; AVX2-LABEL: ugt_18_v4i64:12191; AVX2: # %bb.0:12192; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]12193; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm212194; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]12195; AVX2-NEXT: # ymm3 = mem[0,1,0,1]12196; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm212197; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm012198; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm012199; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm012200; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm012201; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm112202; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm012203; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [18,18,18,18]12204; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012205; AVX2-NEXT: retq12206;12207; AVX512VPOPCNTDQ-LABEL: ugt_18_v4i64:12208; AVX512VPOPCNTDQ: # %bb.0:12209; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm012210; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm012211; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [18,18,18,18]12212; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012213; AVX512VPOPCNTDQ-NEXT: retq12214;12215; AVX512VPOPCNTDQVL-LABEL: ugt_18_v4i64:12216; AVX512VPOPCNTDQVL: # %bb.0:12217; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm012218; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [18,18,18,18]12219; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012220; AVX512VPOPCNTDQVL-NEXT: retq12221;12222; BITALG_NOVLX-LABEL: ugt_18_v4i64:12223; BITALG_NOVLX: # %bb.0:12224; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm012225; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm012226; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm112227; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm012228; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [18,18,18,18]12229; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012230; BITALG_NOVLX-NEXT: retq12231;12232; BITALG-LABEL: ugt_18_v4i64:12233; BITALG: # %bb.0:12234; BITALG-NEXT: vpopcntb %ymm0, %ymm012235; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm112236; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm012237; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [18,18,18,18]12238; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012239; BITALG-NEXT: retq12240 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)12241 %3 = icmp ugt <4 x i64> %2, <i64 18, i64 18, i64 18, i64 18>12242 %4 = sext <4 x i1> %3 to <4 x i64>12243 ret <4 x i64> %412244}12245 12246define <4 x i64> @ult_19_v4i64(<4 x i64> %0) {12247; AVX1-LABEL: ult_19_v4i64:12248; AVX1: # %bb.0:12249; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]12250; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm212251; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]12252; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm212253; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm412254; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm412255; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm412256; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm212257; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm412258; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm212259; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm012260; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm512261; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm512262; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm012263; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm012264; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm012265; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm012266; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm012267; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [19,19]12268; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm012269; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm112270; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm012271; AVX1-NEXT: retq12272;12273; AVX2-LABEL: ult_19_v4i64:12274; AVX2: # %bb.0:12275; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]12276; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm212277; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]12278; AVX2-NEXT: # ymm3 = mem[0,1,0,1]12279; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm212280; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm012281; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm012282; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm012283; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm012284; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm112285; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm012286; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [19,19,19,19]12287; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012288; AVX2-NEXT: retq12289;12290; AVX512VPOPCNTDQ-LABEL: ult_19_v4i64:12291; AVX512VPOPCNTDQ: # %bb.0:12292; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm012293; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm012294; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [19,19,19,19]12295; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012296; AVX512VPOPCNTDQ-NEXT: retq12297;12298; AVX512VPOPCNTDQVL-LABEL: ult_19_v4i64:12299; AVX512VPOPCNTDQVL: # %bb.0:12300; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm012301; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [19,19,19,19]12302; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012303; AVX512VPOPCNTDQVL-NEXT: retq12304;12305; BITALG_NOVLX-LABEL: ult_19_v4i64:12306; BITALG_NOVLX: # %bb.0:12307; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm012308; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm012309; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm112310; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm012311; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [19,19,19,19]12312; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012313; BITALG_NOVLX-NEXT: retq12314;12315; BITALG-LABEL: ult_19_v4i64:12316; BITALG: # %bb.0:12317; BITALG-NEXT: vpopcntb %ymm0, %ymm012318; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm112319; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm012320; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [19,19,19,19]12321; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012322; BITALG-NEXT: retq12323 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)12324 %3 = icmp ult <4 x i64> %2, <i64 19, i64 19, i64 19, i64 19>12325 %4 = sext <4 x i1> %3 to <4 x i64>12326 ret <4 x i64> %412327}12328 12329define <4 x i64> @ugt_19_v4i64(<4 x i64> %0) {12330; AVX1-LABEL: ugt_19_v4i64:12331; AVX1: # %bb.0:12332; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]12333; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm212334; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]12335; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm212336; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm412337; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm412338; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm412339; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm212340; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm412341; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm212342; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm012343; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm512344; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm512345; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm012346; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm012347; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm012348; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm012349; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm012350; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [19,19]12351; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm012352; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm112353; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm012354; AVX1-NEXT: retq12355;12356; AVX2-LABEL: ugt_19_v4i64:12357; AVX2: # %bb.0:12358; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]12359; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm212360; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]12361; AVX2-NEXT: # ymm3 = mem[0,1,0,1]12362; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm212363; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm012364; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm012365; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm012366; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm012367; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm112368; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm012369; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [19,19,19,19]12370; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012371; AVX2-NEXT: retq12372;12373; AVX512VPOPCNTDQ-LABEL: ugt_19_v4i64:12374; AVX512VPOPCNTDQ: # %bb.0:12375; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm012376; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm012377; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [19,19,19,19]12378; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012379; AVX512VPOPCNTDQ-NEXT: retq12380;12381; AVX512VPOPCNTDQVL-LABEL: ugt_19_v4i64:12382; AVX512VPOPCNTDQVL: # %bb.0:12383; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm012384; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [19,19,19,19]12385; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012386; AVX512VPOPCNTDQVL-NEXT: retq12387;12388; BITALG_NOVLX-LABEL: ugt_19_v4i64:12389; BITALG_NOVLX: # %bb.0:12390; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm012391; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm012392; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm112393; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm012394; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [19,19,19,19]12395; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012396; BITALG_NOVLX-NEXT: retq12397;12398; BITALG-LABEL: ugt_19_v4i64:12399; BITALG: # %bb.0:12400; BITALG-NEXT: vpopcntb %ymm0, %ymm012401; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm112402; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm012403; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [19,19,19,19]12404; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012405; BITALG-NEXT: retq12406 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)12407 %3 = icmp ugt <4 x i64> %2, <i64 19, i64 19, i64 19, i64 19>12408 %4 = sext <4 x i1> %3 to <4 x i64>12409 ret <4 x i64> %412410}12411 12412define <4 x i64> @ult_20_v4i64(<4 x i64> %0) {12413; AVX1-LABEL: ult_20_v4i64:12414; AVX1: # %bb.0:12415; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]12416; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm212417; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]12418; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm212419; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm412420; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm412421; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm412422; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm212423; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm412424; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm212425; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm012426; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm512427; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm512428; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm012429; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm012430; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm012431; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm012432; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm012433; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [20,20]12434; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm012435; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm112436; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm012437; AVX1-NEXT: retq12438;12439; AVX2-LABEL: ult_20_v4i64:12440; AVX2: # %bb.0:12441; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]12442; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm212443; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]12444; AVX2-NEXT: # ymm3 = mem[0,1,0,1]12445; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm212446; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm012447; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm012448; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm012449; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm012450; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm112451; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm012452; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [20,20,20,20]12453; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012454; AVX2-NEXT: retq12455;12456; AVX512VPOPCNTDQ-LABEL: ult_20_v4i64:12457; AVX512VPOPCNTDQ: # %bb.0:12458; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm012459; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm012460; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [20,20,20,20]12461; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012462; AVX512VPOPCNTDQ-NEXT: retq12463;12464; AVX512VPOPCNTDQVL-LABEL: ult_20_v4i64:12465; AVX512VPOPCNTDQVL: # %bb.0:12466; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm012467; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [20,20,20,20]12468; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012469; AVX512VPOPCNTDQVL-NEXT: retq12470;12471; BITALG_NOVLX-LABEL: ult_20_v4i64:12472; BITALG_NOVLX: # %bb.0:12473; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm012474; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm012475; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm112476; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm012477; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [20,20,20,20]12478; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012479; BITALG_NOVLX-NEXT: retq12480;12481; BITALG-LABEL: ult_20_v4i64:12482; BITALG: # %bb.0:12483; BITALG-NEXT: vpopcntb %ymm0, %ymm012484; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm112485; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm012486; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [20,20,20,20]12487; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012488; BITALG-NEXT: retq12489 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)12490 %3 = icmp ult <4 x i64> %2, <i64 20, i64 20, i64 20, i64 20>12491 %4 = sext <4 x i1> %3 to <4 x i64>12492 ret <4 x i64> %412493}12494 12495define <4 x i64> @ugt_20_v4i64(<4 x i64> %0) {12496; AVX1-LABEL: ugt_20_v4i64:12497; AVX1: # %bb.0:12498; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]12499; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm212500; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]12501; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm212502; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm412503; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm412504; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm412505; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm212506; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm412507; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm212508; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm012509; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm512510; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm512511; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm012512; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm012513; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm012514; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm012515; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm012516; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [20,20]12517; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm012518; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm112519; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm012520; AVX1-NEXT: retq12521;12522; AVX2-LABEL: ugt_20_v4i64:12523; AVX2: # %bb.0:12524; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]12525; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm212526; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]12527; AVX2-NEXT: # ymm3 = mem[0,1,0,1]12528; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm212529; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm012530; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm012531; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm012532; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm012533; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm112534; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm012535; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [20,20,20,20]12536; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012537; AVX2-NEXT: retq12538;12539; AVX512VPOPCNTDQ-LABEL: ugt_20_v4i64:12540; AVX512VPOPCNTDQ: # %bb.0:12541; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm012542; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm012543; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [20,20,20,20]12544; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012545; AVX512VPOPCNTDQ-NEXT: retq12546;12547; AVX512VPOPCNTDQVL-LABEL: ugt_20_v4i64:12548; AVX512VPOPCNTDQVL: # %bb.0:12549; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm012550; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [20,20,20,20]12551; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012552; AVX512VPOPCNTDQVL-NEXT: retq12553;12554; BITALG_NOVLX-LABEL: ugt_20_v4i64:12555; BITALG_NOVLX: # %bb.0:12556; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm012557; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm012558; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm112559; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm012560; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [20,20,20,20]12561; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012562; BITALG_NOVLX-NEXT: retq12563;12564; BITALG-LABEL: ugt_20_v4i64:12565; BITALG: # %bb.0:12566; BITALG-NEXT: vpopcntb %ymm0, %ymm012567; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm112568; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm012569; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [20,20,20,20]12570; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012571; BITALG-NEXT: retq12572 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)12573 %3 = icmp ugt <4 x i64> %2, <i64 20, i64 20, i64 20, i64 20>12574 %4 = sext <4 x i1> %3 to <4 x i64>12575 ret <4 x i64> %412576}12577 12578define <4 x i64> @ult_21_v4i64(<4 x i64> %0) {12579; AVX1-LABEL: ult_21_v4i64:12580; AVX1: # %bb.0:12581; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]12582; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm212583; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]12584; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm212585; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm412586; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm412587; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm412588; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm212589; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm412590; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm212591; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm012592; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm512593; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm512594; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm012595; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm012596; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm012597; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm012598; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm012599; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [21,21]12600; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm012601; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm112602; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm012603; AVX1-NEXT: retq12604;12605; AVX2-LABEL: ult_21_v4i64:12606; AVX2: # %bb.0:12607; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]12608; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm212609; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]12610; AVX2-NEXT: # ymm3 = mem[0,1,0,1]12611; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm212612; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm012613; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm012614; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm012615; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm012616; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm112617; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm012618; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [21,21,21,21]12619; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012620; AVX2-NEXT: retq12621;12622; AVX512VPOPCNTDQ-LABEL: ult_21_v4i64:12623; AVX512VPOPCNTDQ: # %bb.0:12624; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm012625; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm012626; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [21,21,21,21]12627; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012628; AVX512VPOPCNTDQ-NEXT: retq12629;12630; AVX512VPOPCNTDQVL-LABEL: ult_21_v4i64:12631; AVX512VPOPCNTDQVL: # %bb.0:12632; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm012633; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [21,21,21,21]12634; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012635; AVX512VPOPCNTDQVL-NEXT: retq12636;12637; BITALG_NOVLX-LABEL: ult_21_v4i64:12638; BITALG_NOVLX: # %bb.0:12639; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm012640; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm012641; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm112642; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm012643; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [21,21,21,21]12644; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012645; BITALG_NOVLX-NEXT: retq12646;12647; BITALG-LABEL: ult_21_v4i64:12648; BITALG: # %bb.0:12649; BITALG-NEXT: vpopcntb %ymm0, %ymm012650; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm112651; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm012652; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [21,21,21,21]12653; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012654; BITALG-NEXT: retq12655 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)12656 %3 = icmp ult <4 x i64> %2, <i64 21, i64 21, i64 21, i64 21>12657 %4 = sext <4 x i1> %3 to <4 x i64>12658 ret <4 x i64> %412659}12660 12661define <4 x i64> @ugt_21_v4i64(<4 x i64> %0) {12662; AVX1-LABEL: ugt_21_v4i64:12663; AVX1: # %bb.0:12664; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]12665; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm212666; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]12667; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm212668; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm412669; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm412670; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm412671; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm212672; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm412673; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm212674; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm012675; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm512676; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm512677; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm012678; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm012679; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm012680; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm012681; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm012682; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [21,21]12683; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm012684; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm112685; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm012686; AVX1-NEXT: retq12687;12688; AVX2-LABEL: ugt_21_v4i64:12689; AVX2: # %bb.0:12690; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]12691; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm212692; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]12693; AVX2-NEXT: # ymm3 = mem[0,1,0,1]12694; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm212695; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm012696; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm012697; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm012698; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm012699; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm112700; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm012701; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [21,21,21,21]12702; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012703; AVX2-NEXT: retq12704;12705; AVX512VPOPCNTDQ-LABEL: ugt_21_v4i64:12706; AVX512VPOPCNTDQ: # %bb.0:12707; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm012708; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm012709; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [21,21,21,21]12710; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012711; AVX512VPOPCNTDQ-NEXT: retq12712;12713; AVX512VPOPCNTDQVL-LABEL: ugt_21_v4i64:12714; AVX512VPOPCNTDQVL: # %bb.0:12715; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm012716; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [21,21,21,21]12717; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012718; AVX512VPOPCNTDQVL-NEXT: retq12719;12720; BITALG_NOVLX-LABEL: ugt_21_v4i64:12721; BITALG_NOVLX: # %bb.0:12722; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm012723; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm012724; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm112725; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm012726; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [21,21,21,21]12727; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012728; BITALG_NOVLX-NEXT: retq12729;12730; BITALG-LABEL: ugt_21_v4i64:12731; BITALG: # %bb.0:12732; BITALG-NEXT: vpopcntb %ymm0, %ymm012733; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm112734; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm012735; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [21,21,21,21]12736; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012737; BITALG-NEXT: retq12738 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)12739 %3 = icmp ugt <4 x i64> %2, <i64 21, i64 21, i64 21, i64 21>12740 %4 = sext <4 x i1> %3 to <4 x i64>12741 ret <4 x i64> %412742}12743 12744define <4 x i64> @ult_22_v4i64(<4 x i64> %0) {12745; AVX1-LABEL: ult_22_v4i64:12746; AVX1: # %bb.0:12747; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]12748; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm212749; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]12750; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm212751; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm412752; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm412753; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm412754; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm212755; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm412756; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm212757; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm012758; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm512759; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm512760; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm012761; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm012762; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm012763; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm012764; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm012765; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [22,22]12766; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm012767; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm112768; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm012769; AVX1-NEXT: retq12770;12771; AVX2-LABEL: ult_22_v4i64:12772; AVX2: # %bb.0:12773; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]12774; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm212775; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]12776; AVX2-NEXT: # ymm3 = mem[0,1,0,1]12777; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm212778; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm012779; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm012780; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm012781; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm012782; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm112783; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm012784; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [22,22,22,22]12785; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012786; AVX2-NEXT: retq12787;12788; AVX512VPOPCNTDQ-LABEL: ult_22_v4i64:12789; AVX512VPOPCNTDQ: # %bb.0:12790; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm012791; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm012792; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [22,22,22,22]12793; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012794; AVX512VPOPCNTDQ-NEXT: retq12795;12796; AVX512VPOPCNTDQVL-LABEL: ult_22_v4i64:12797; AVX512VPOPCNTDQVL: # %bb.0:12798; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm012799; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [22,22,22,22]12800; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012801; AVX512VPOPCNTDQVL-NEXT: retq12802;12803; BITALG_NOVLX-LABEL: ult_22_v4i64:12804; BITALG_NOVLX: # %bb.0:12805; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm012806; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm012807; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm112808; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm012809; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [22,22,22,22]12810; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012811; BITALG_NOVLX-NEXT: retq12812;12813; BITALG-LABEL: ult_22_v4i64:12814; BITALG: # %bb.0:12815; BITALG-NEXT: vpopcntb %ymm0, %ymm012816; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm112817; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm012818; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [22,22,22,22]12819; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012820; BITALG-NEXT: retq12821 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)12822 %3 = icmp ult <4 x i64> %2, <i64 22, i64 22, i64 22, i64 22>12823 %4 = sext <4 x i1> %3 to <4 x i64>12824 ret <4 x i64> %412825}12826 12827define <4 x i64> @ugt_22_v4i64(<4 x i64> %0) {12828; AVX1-LABEL: ugt_22_v4i64:12829; AVX1: # %bb.0:12830; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]12831; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm212832; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]12833; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm212834; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm412835; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm412836; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm412837; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm212838; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm412839; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm212840; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm012841; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm512842; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm512843; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm012844; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm012845; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm012846; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm012847; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm012848; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [22,22]12849; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm012850; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm112851; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm012852; AVX1-NEXT: retq12853;12854; AVX2-LABEL: ugt_22_v4i64:12855; AVX2: # %bb.0:12856; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]12857; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm212858; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]12859; AVX2-NEXT: # ymm3 = mem[0,1,0,1]12860; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm212861; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm012862; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm012863; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm012864; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm012865; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm112866; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm012867; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [22,22,22,22]12868; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012869; AVX2-NEXT: retq12870;12871; AVX512VPOPCNTDQ-LABEL: ugt_22_v4i64:12872; AVX512VPOPCNTDQ: # %bb.0:12873; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm012874; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm012875; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [22,22,22,22]12876; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012877; AVX512VPOPCNTDQ-NEXT: retq12878;12879; AVX512VPOPCNTDQVL-LABEL: ugt_22_v4i64:12880; AVX512VPOPCNTDQVL: # %bb.0:12881; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm012882; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [22,22,22,22]12883; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012884; AVX512VPOPCNTDQVL-NEXT: retq12885;12886; BITALG_NOVLX-LABEL: ugt_22_v4i64:12887; BITALG_NOVLX: # %bb.0:12888; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm012889; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm012890; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm112891; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm012892; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [22,22,22,22]12893; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012894; BITALG_NOVLX-NEXT: retq12895;12896; BITALG-LABEL: ugt_22_v4i64:12897; BITALG: # %bb.0:12898; BITALG-NEXT: vpopcntb %ymm0, %ymm012899; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm112900; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm012901; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [22,22,22,22]12902; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm012903; BITALG-NEXT: retq12904 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)12905 %3 = icmp ugt <4 x i64> %2, <i64 22, i64 22, i64 22, i64 22>12906 %4 = sext <4 x i1> %3 to <4 x i64>12907 ret <4 x i64> %412908}12909 12910define <4 x i64> @ult_23_v4i64(<4 x i64> %0) {12911; AVX1-LABEL: ult_23_v4i64:12912; AVX1: # %bb.0:12913; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]12914; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm212915; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]12916; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm212917; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm412918; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm412919; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm412920; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm212921; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm412922; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm212923; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm012924; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm512925; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm512926; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm012927; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm012928; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm012929; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm012930; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm012931; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [23,23]12932; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm012933; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm112934; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm012935; AVX1-NEXT: retq12936;12937; AVX2-LABEL: ult_23_v4i64:12938; AVX2: # %bb.0:12939; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]12940; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm212941; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]12942; AVX2-NEXT: # ymm3 = mem[0,1,0,1]12943; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm212944; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm012945; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm012946; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm012947; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm012948; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm112949; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm012950; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [23,23,23,23]12951; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012952; AVX2-NEXT: retq12953;12954; AVX512VPOPCNTDQ-LABEL: ult_23_v4i64:12955; AVX512VPOPCNTDQ: # %bb.0:12956; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm012957; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm012958; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [23,23,23,23]12959; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012960; AVX512VPOPCNTDQ-NEXT: retq12961;12962; AVX512VPOPCNTDQVL-LABEL: ult_23_v4i64:12963; AVX512VPOPCNTDQVL: # %bb.0:12964; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm012965; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [23,23,23,23]12966; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012967; AVX512VPOPCNTDQVL-NEXT: retq12968;12969; BITALG_NOVLX-LABEL: ult_23_v4i64:12970; BITALG_NOVLX: # %bb.0:12971; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm012972; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm012973; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm112974; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm012975; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [23,23,23,23]12976; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012977; BITALG_NOVLX-NEXT: retq12978;12979; BITALG-LABEL: ult_23_v4i64:12980; BITALG: # %bb.0:12981; BITALG-NEXT: vpopcntb %ymm0, %ymm012982; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm112983; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm012984; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [23,23,23,23]12985; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm012986; BITALG-NEXT: retq12987 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)12988 %3 = icmp ult <4 x i64> %2, <i64 23, i64 23, i64 23, i64 23>12989 %4 = sext <4 x i1> %3 to <4 x i64>12990 ret <4 x i64> %412991}12992 12993define <4 x i64> @ugt_23_v4i64(<4 x i64> %0) {12994; AVX1-LABEL: ugt_23_v4i64:12995; AVX1: # %bb.0:12996; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]12997; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm212998; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]12999; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm213000; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm413001; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm413002; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm413003; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm213004; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm413005; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm213006; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm013007; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm513008; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm513009; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm013010; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm013011; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm013012; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm013013; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm013014; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [23,23]13015; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm013016; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm113017; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm013018; AVX1-NEXT: retq13019;13020; AVX2-LABEL: ugt_23_v4i64:13021; AVX2: # %bb.0:13022; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]13023; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm213024; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]13025; AVX2-NEXT: # ymm3 = mem[0,1,0,1]13026; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm213027; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm013028; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm013029; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm013030; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm013031; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm113032; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm013033; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [23,23,23,23]13034; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013035; AVX2-NEXT: retq13036;13037; AVX512VPOPCNTDQ-LABEL: ugt_23_v4i64:13038; AVX512VPOPCNTDQ: # %bb.0:13039; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm013040; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm013041; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [23,23,23,23]13042; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013043; AVX512VPOPCNTDQ-NEXT: retq13044;13045; AVX512VPOPCNTDQVL-LABEL: ugt_23_v4i64:13046; AVX512VPOPCNTDQVL: # %bb.0:13047; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm013048; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [23,23,23,23]13049; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013050; AVX512VPOPCNTDQVL-NEXT: retq13051;13052; BITALG_NOVLX-LABEL: ugt_23_v4i64:13053; BITALG_NOVLX: # %bb.0:13054; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm013055; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm013056; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm113057; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm013058; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [23,23,23,23]13059; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013060; BITALG_NOVLX-NEXT: retq13061;13062; BITALG-LABEL: ugt_23_v4i64:13063; BITALG: # %bb.0:13064; BITALG-NEXT: vpopcntb %ymm0, %ymm013065; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm113066; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm013067; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [23,23,23,23]13068; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013069; BITALG-NEXT: retq13070 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)13071 %3 = icmp ugt <4 x i64> %2, <i64 23, i64 23, i64 23, i64 23>13072 %4 = sext <4 x i1> %3 to <4 x i64>13073 ret <4 x i64> %413074}13075 13076define <4 x i64> @ult_24_v4i64(<4 x i64> %0) {13077; AVX1-LABEL: ult_24_v4i64:13078; AVX1: # %bb.0:13079; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]13080; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm213081; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]13082; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm213083; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm413084; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm413085; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm413086; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm213087; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm413088; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm213089; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm013090; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm513091; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm513092; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm013093; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm013094; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm013095; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm013096; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm013097; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [24,24]13098; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm013099; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm113100; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm013101; AVX1-NEXT: retq13102;13103; AVX2-LABEL: ult_24_v4i64:13104; AVX2: # %bb.0:13105; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]13106; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm213107; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]13108; AVX2-NEXT: # ymm3 = mem[0,1,0,1]13109; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm213110; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm013111; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm013112; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm013113; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm013114; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm113115; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm013116; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [24,24,24,24]13117; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013118; AVX2-NEXT: retq13119;13120; AVX512VPOPCNTDQ-LABEL: ult_24_v4i64:13121; AVX512VPOPCNTDQ: # %bb.0:13122; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm013123; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm013124; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [24,24,24,24]13125; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013126; AVX512VPOPCNTDQ-NEXT: retq13127;13128; AVX512VPOPCNTDQVL-LABEL: ult_24_v4i64:13129; AVX512VPOPCNTDQVL: # %bb.0:13130; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm013131; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [24,24,24,24]13132; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013133; AVX512VPOPCNTDQVL-NEXT: retq13134;13135; BITALG_NOVLX-LABEL: ult_24_v4i64:13136; BITALG_NOVLX: # %bb.0:13137; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm013138; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm013139; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm113140; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm013141; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [24,24,24,24]13142; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013143; BITALG_NOVLX-NEXT: retq13144;13145; BITALG-LABEL: ult_24_v4i64:13146; BITALG: # %bb.0:13147; BITALG-NEXT: vpopcntb %ymm0, %ymm013148; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm113149; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm013150; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [24,24,24,24]13151; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013152; BITALG-NEXT: retq13153 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)13154 %3 = icmp ult <4 x i64> %2, <i64 24, i64 24, i64 24, i64 24>13155 %4 = sext <4 x i1> %3 to <4 x i64>13156 ret <4 x i64> %413157}13158 13159define <4 x i64> @ugt_24_v4i64(<4 x i64> %0) {13160; AVX1-LABEL: ugt_24_v4i64:13161; AVX1: # %bb.0:13162; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]13163; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm213164; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]13165; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm213166; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm413167; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm413168; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm413169; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm213170; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm413171; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm213172; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm013173; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm513174; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm513175; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm013176; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm013177; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm013178; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm013179; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm013180; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [24,24]13181; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm013182; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm113183; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm013184; AVX1-NEXT: retq13185;13186; AVX2-LABEL: ugt_24_v4i64:13187; AVX2: # %bb.0:13188; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]13189; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm213190; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]13191; AVX2-NEXT: # ymm3 = mem[0,1,0,1]13192; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm213193; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm013194; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm013195; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm013196; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm013197; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm113198; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm013199; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [24,24,24,24]13200; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013201; AVX2-NEXT: retq13202;13203; AVX512VPOPCNTDQ-LABEL: ugt_24_v4i64:13204; AVX512VPOPCNTDQ: # %bb.0:13205; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm013206; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm013207; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [24,24,24,24]13208; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013209; AVX512VPOPCNTDQ-NEXT: retq13210;13211; AVX512VPOPCNTDQVL-LABEL: ugt_24_v4i64:13212; AVX512VPOPCNTDQVL: # %bb.0:13213; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm013214; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [24,24,24,24]13215; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013216; AVX512VPOPCNTDQVL-NEXT: retq13217;13218; BITALG_NOVLX-LABEL: ugt_24_v4i64:13219; BITALG_NOVLX: # %bb.0:13220; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm013221; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm013222; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm113223; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm013224; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [24,24,24,24]13225; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013226; BITALG_NOVLX-NEXT: retq13227;13228; BITALG-LABEL: ugt_24_v4i64:13229; BITALG: # %bb.0:13230; BITALG-NEXT: vpopcntb %ymm0, %ymm013231; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm113232; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm013233; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [24,24,24,24]13234; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013235; BITALG-NEXT: retq13236 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)13237 %3 = icmp ugt <4 x i64> %2, <i64 24, i64 24, i64 24, i64 24>13238 %4 = sext <4 x i1> %3 to <4 x i64>13239 ret <4 x i64> %413240}13241 13242define <4 x i64> @ult_25_v4i64(<4 x i64> %0) {13243; AVX1-LABEL: ult_25_v4i64:13244; AVX1: # %bb.0:13245; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]13246; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm213247; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]13248; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm213249; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm413250; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm413251; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm413252; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm213253; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm413254; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm213255; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm013256; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm513257; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm513258; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm013259; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm013260; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm013261; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm013262; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm013263; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [25,25]13264; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm013265; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm113266; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm013267; AVX1-NEXT: retq13268;13269; AVX2-LABEL: ult_25_v4i64:13270; AVX2: # %bb.0:13271; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]13272; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm213273; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]13274; AVX2-NEXT: # ymm3 = mem[0,1,0,1]13275; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm213276; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm013277; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm013278; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm013279; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm013280; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm113281; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm013282; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [25,25,25,25]13283; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013284; AVX2-NEXT: retq13285;13286; AVX512VPOPCNTDQ-LABEL: ult_25_v4i64:13287; AVX512VPOPCNTDQ: # %bb.0:13288; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm013289; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm013290; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [25,25,25,25]13291; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013292; AVX512VPOPCNTDQ-NEXT: retq13293;13294; AVX512VPOPCNTDQVL-LABEL: ult_25_v4i64:13295; AVX512VPOPCNTDQVL: # %bb.0:13296; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm013297; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [25,25,25,25]13298; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013299; AVX512VPOPCNTDQVL-NEXT: retq13300;13301; BITALG_NOVLX-LABEL: ult_25_v4i64:13302; BITALG_NOVLX: # %bb.0:13303; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm013304; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm013305; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm113306; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm013307; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [25,25,25,25]13308; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013309; BITALG_NOVLX-NEXT: retq13310;13311; BITALG-LABEL: ult_25_v4i64:13312; BITALG: # %bb.0:13313; BITALG-NEXT: vpopcntb %ymm0, %ymm013314; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm113315; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm013316; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [25,25,25,25]13317; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013318; BITALG-NEXT: retq13319 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)13320 %3 = icmp ult <4 x i64> %2, <i64 25, i64 25, i64 25, i64 25>13321 %4 = sext <4 x i1> %3 to <4 x i64>13322 ret <4 x i64> %413323}13324 13325define <4 x i64> @ugt_25_v4i64(<4 x i64> %0) {13326; AVX1-LABEL: ugt_25_v4i64:13327; AVX1: # %bb.0:13328; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]13329; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm213330; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]13331; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm213332; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm413333; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm413334; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm413335; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm213336; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm413337; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm213338; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm013339; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm513340; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm513341; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm013342; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm013343; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm013344; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm013345; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm013346; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [25,25]13347; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm013348; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm113349; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm013350; AVX1-NEXT: retq13351;13352; AVX2-LABEL: ugt_25_v4i64:13353; AVX2: # %bb.0:13354; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]13355; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm213356; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]13357; AVX2-NEXT: # ymm3 = mem[0,1,0,1]13358; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm213359; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm013360; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm013361; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm013362; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm013363; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm113364; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm013365; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [25,25,25,25]13366; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013367; AVX2-NEXT: retq13368;13369; AVX512VPOPCNTDQ-LABEL: ugt_25_v4i64:13370; AVX512VPOPCNTDQ: # %bb.0:13371; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm013372; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm013373; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [25,25,25,25]13374; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013375; AVX512VPOPCNTDQ-NEXT: retq13376;13377; AVX512VPOPCNTDQVL-LABEL: ugt_25_v4i64:13378; AVX512VPOPCNTDQVL: # %bb.0:13379; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm013380; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [25,25,25,25]13381; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013382; AVX512VPOPCNTDQVL-NEXT: retq13383;13384; BITALG_NOVLX-LABEL: ugt_25_v4i64:13385; BITALG_NOVLX: # %bb.0:13386; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm013387; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm013388; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm113389; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm013390; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [25,25,25,25]13391; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013392; BITALG_NOVLX-NEXT: retq13393;13394; BITALG-LABEL: ugt_25_v4i64:13395; BITALG: # %bb.0:13396; BITALG-NEXT: vpopcntb %ymm0, %ymm013397; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm113398; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm013399; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [25,25,25,25]13400; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013401; BITALG-NEXT: retq13402 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)13403 %3 = icmp ugt <4 x i64> %2, <i64 25, i64 25, i64 25, i64 25>13404 %4 = sext <4 x i1> %3 to <4 x i64>13405 ret <4 x i64> %413406}13407 13408define <4 x i64> @ult_26_v4i64(<4 x i64> %0) {13409; AVX1-LABEL: ult_26_v4i64:13410; AVX1: # %bb.0:13411; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]13412; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm213413; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]13414; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm213415; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm413416; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm413417; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm413418; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm213419; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm413420; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm213421; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm013422; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm513423; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm513424; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm013425; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm013426; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm013427; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm013428; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm013429; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [26,26]13430; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm013431; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm113432; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm013433; AVX1-NEXT: retq13434;13435; AVX2-LABEL: ult_26_v4i64:13436; AVX2: # %bb.0:13437; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]13438; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm213439; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]13440; AVX2-NEXT: # ymm3 = mem[0,1,0,1]13441; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm213442; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm013443; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm013444; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm013445; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm013446; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm113447; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm013448; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [26,26,26,26]13449; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013450; AVX2-NEXT: retq13451;13452; AVX512VPOPCNTDQ-LABEL: ult_26_v4i64:13453; AVX512VPOPCNTDQ: # %bb.0:13454; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm013455; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm013456; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [26,26,26,26]13457; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013458; AVX512VPOPCNTDQ-NEXT: retq13459;13460; AVX512VPOPCNTDQVL-LABEL: ult_26_v4i64:13461; AVX512VPOPCNTDQVL: # %bb.0:13462; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm013463; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [26,26,26,26]13464; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013465; AVX512VPOPCNTDQVL-NEXT: retq13466;13467; BITALG_NOVLX-LABEL: ult_26_v4i64:13468; BITALG_NOVLX: # %bb.0:13469; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm013470; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm013471; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm113472; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm013473; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [26,26,26,26]13474; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013475; BITALG_NOVLX-NEXT: retq13476;13477; BITALG-LABEL: ult_26_v4i64:13478; BITALG: # %bb.0:13479; BITALG-NEXT: vpopcntb %ymm0, %ymm013480; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm113481; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm013482; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [26,26,26,26]13483; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013484; BITALG-NEXT: retq13485 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)13486 %3 = icmp ult <4 x i64> %2, <i64 26, i64 26, i64 26, i64 26>13487 %4 = sext <4 x i1> %3 to <4 x i64>13488 ret <4 x i64> %413489}13490 13491define <4 x i64> @ugt_26_v4i64(<4 x i64> %0) {13492; AVX1-LABEL: ugt_26_v4i64:13493; AVX1: # %bb.0:13494; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]13495; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm213496; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]13497; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm213498; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm413499; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm413500; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm413501; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm213502; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm413503; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm213504; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm013505; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm513506; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm513507; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm013508; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm013509; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm013510; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm013511; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm013512; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [26,26]13513; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm013514; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm113515; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm013516; AVX1-NEXT: retq13517;13518; AVX2-LABEL: ugt_26_v4i64:13519; AVX2: # %bb.0:13520; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]13521; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm213522; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]13523; AVX2-NEXT: # ymm3 = mem[0,1,0,1]13524; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm213525; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm013526; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm013527; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm013528; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm013529; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm113530; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm013531; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [26,26,26,26]13532; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013533; AVX2-NEXT: retq13534;13535; AVX512VPOPCNTDQ-LABEL: ugt_26_v4i64:13536; AVX512VPOPCNTDQ: # %bb.0:13537; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm013538; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm013539; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [26,26,26,26]13540; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013541; AVX512VPOPCNTDQ-NEXT: retq13542;13543; AVX512VPOPCNTDQVL-LABEL: ugt_26_v4i64:13544; AVX512VPOPCNTDQVL: # %bb.0:13545; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm013546; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [26,26,26,26]13547; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013548; AVX512VPOPCNTDQVL-NEXT: retq13549;13550; BITALG_NOVLX-LABEL: ugt_26_v4i64:13551; BITALG_NOVLX: # %bb.0:13552; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm013553; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm013554; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm113555; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm013556; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [26,26,26,26]13557; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013558; BITALG_NOVLX-NEXT: retq13559;13560; BITALG-LABEL: ugt_26_v4i64:13561; BITALG: # %bb.0:13562; BITALG-NEXT: vpopcntb %ymm0, %ymm013563; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm113564; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm013565; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [26,26,26,26]13566; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013567; BITALG-NEXT: retq13568 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)13569 %3 = icmp ugt <4 x i64> %2, <i64 26, i64 26, i64 26, i64 26>13570 %4 = sext <4 x i1> %3 to <4 x i64>13571 ret <4 x i64> %413572}13573 13574define <4 x i64> @ult_27_v4i64(<4 x i64> %0) {13575; AVX1-LABEL: ult_27_v4i64:13576; AVX1: # %bb.0:13577; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]13578; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm213579; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]13580; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm213581; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm413582; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm413583; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm413584; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm213585; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm413586; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm213587; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm013588; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm513589; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm513590; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm013591; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm013592; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm013593; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm013594; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm013595; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [27,27]13596; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm013597; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm113598; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm013599; AVX1-NEXT: retq13600;13601; AVX2-LABEL: ult_27_v4i64:13602; AVX2: # %bb.0:13603; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]13604; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm213605; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]13606; AVX2-NEXT: # ymm3 = mem[0,1,0,1]13607; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm213608; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm013609; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm013610; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm013611; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm013612; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm113613; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm013614; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [27,27,27,27]13615; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013616; AVX2-NEXT: retq13617;13618; AVX512VPOPCNTDQ-LABEL: ult_27_v4i64:13619; AVX512VPOPCNTDQ: # %bb.0:13620; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm013621; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm013622; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [27,27,27,27]13623; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013624; AVX512VPOPCNTDQ-NEXT: retq13625;13626; AVX512VPOPCNTDQVL-LABEL: ult_27_v4i64:13627; AVX512VPOPCNTDQVL: # %bb.0:13628; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm013629; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [27,27,27,27]13630; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013631; AVX512VPOPCNTDQVL-NEXT: retq13632;13633; BITALG_NOVLX-LABEL: ult_27_v4i64:13634; BITALG_NOVLX: # %bb.0:13635; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm013636; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm013637; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm113638; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm013639; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [27,27,27,27]13640; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013641; BITALG_NOVLX-NEXT: retq13642;13643; BITALG-LABEL: ult_27_v4i64:13644; BITALG: # %bb.0:13645; BITALG-NEXT: vpopcntb %ymm0, %ymm013646; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm113647; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm013648; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [27,27,27,27]13649; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013650; BITALG-NEXT: retq13651 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)13652 %3 = icmp ult <4 x i64> %2, <i64 27, i64 27, i64 27, i64 27>13653 %4 = sext <4 x i1> %3 to <4 x i64>13654 ret <4 x i64> %413655}13656 13657define <4 x i64> @ugt_27_v4i64(<4 x i64> %0) {13658; AVX1-LABEL: ugt_27_v4i64:13659; AVX1: # %bb.0:13660; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]13661; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm213662; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]13663; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm213664; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm413665; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm413666; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm413667; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm213668; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm413669; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm213670; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm013671; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm513672; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm513673; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm013674; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm013675; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm013676; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm013677; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm013678; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [27,27]13679; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm013680; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm113681; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm013682; AVX1-NEXT: retq13683;13684; AVX2-LABEL: ugt_27_v4i64:13685; AVX2: # %bb.0:13686; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]13687; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm213688; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]13689; AVX2-NEXT: # ymm3 = mem[0,1,0,1]13690; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm213691; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm013692; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm013693; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm013694; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm013695; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm113696; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm013697; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [27,27,27,27]13698; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013699; AVX2-NEXT: retq13700;13701; AVX512VPOPCNTDQ-LABEL: ugt_27_v4i64:13702; AVX512VPOPCNTDQ: # %bb.0:13703; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm013704; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm013705; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [27,27,27,27]13706; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013707; AVX512VPOPCNTDQ-NEXT: retq13708;13709; AVX512VPOPCNTDQVL-LABEL: ugt_27_v4i64:13710; AVX512VPOPCNTDQVL: # %bb.0:13711; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm013712; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [27,27,27,27]13713; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013714; AVX512VPOPCNTDQVL-NEXT: retq13715;13716; BITALG_NOVLX-LABEL: ugt_27_v4i64:13717; BITALG_NOVLX: # %bb.0:13718; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm013719; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm013720; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm113721; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm013722; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [27,27,27,27]13723; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013724; BITALG_NOVLX-NEXT: retq13725;13726; BITALG-LABEL: ugt_27_v4i64:13727; BITALG: # %bb.0:13728; BITALG-NEXT: vpopcntb %ymm0, %ymm013729; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm113730; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm013731; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [27,27,27,27]13732; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013733; BITALG-NEXT: retq13734 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)13735 %3 = icmp ugt <4 x i64> %2, <i64 27, i64 27, i64 27, i64 27>13736 %4 = sext <4 x i1> %3 to <4 x i64>13737 ret <4 x i64> %413738}13739 13740define <4 x i64> @ult_28_v4i64(<4 x i64> %0) {13741; AVX1-LABEL: ult_28_v4i64:13742; AVX1: # %bb.0:13743; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]13744; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm213745; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]13746; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm213747; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm413748; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm413749; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm413750; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm213751; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm413752; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm213753; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm013754; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm513755; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm513756; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm013757; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm013758; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm013759; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm013760; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm013761; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [28,28]13762; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm013763; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm113764; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm013765; AVX1-NEXT: retq13766;13767; AVX2-LABEL: ult_28_v4i64:13768; AVX2: # %bb.0:13769; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]13770; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm213771; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]13772; AVX2-NEXT: # ymm3 = mem[0,1,0,1]13773; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm213774; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm013775; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm013776; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm013777; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm013778; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm113779; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm013780; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [28,28,28,28]13781; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013782; AVX2-NEXT: retq13783;13784; AVX512VPOPCNTDQ-LABEL: ult_28_v4i64:13785; AVX512VPOPCNTDQ: # %bb.0:13786; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm013787; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm013788; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [28,28,28,28]13789; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013790; AVX512VPOPCNTDQ-NEXT: retq13791;13792; AVX512VPOPCNTDQVL-LABEL: ult_28_v4i64:13793; AVX512VPOPCNTDQVL: # %bb.0:13794; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm013795; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [28,28,28,28]13796; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013797; AVX512VPOPCNTDQVL-NEXT: retq13798;13799; BITALG_NOVLX-LABEL: ult_28_v4i64:13800; BITALG_NOVLX: # %bb.0:13801; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm013802; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm013803; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm113804; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm013805; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [28,28,28,28]13806; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013807; BITALG_NOVLX-NEXT: retq13808;13809; BITALG-LABEL: ult_28_v4i64:13810; BITALG: # %bb.0:13811; BITALG-NEXT: vpopcntb %ymm0, %ymm013812; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm113813; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm013814; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [28,28,28,28]13815; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013816; BITALG-NEXT: retq13817 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)13818 %3 = icmp ult <4 x i64> %2, <i64 28, i64 28, i64 28, i64 28>13819 %4 = sext <4 x i1> %3 to <4 x i64>13820 ret <4 x i64> %413821}13822 13823define <4 x i64> @ugt_28_v4i64(<4 x i64> %0) {13824; AVX1-LABEL: ugt_28_v4i64:13825; AVX1: # %bb.0:13826; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]13827; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm213828; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]13829; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm213830; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm413831; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm413832; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm413833; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm213834; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm413835; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm213836; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm013837; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm513838; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm513839; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm013840; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm013841; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm013842; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm013843; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm013844; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [28,28]13845; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm013846; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm113847; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm013848; AVX1-NEXT: retq13849;13850; AVX2-LABEL: ugt_28_v4i64:13851; AVX2: # %bb.0:13852; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]13853; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm213854; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]13855; AVX2-NEXT: # ymm3 = mem[0,1,0,1]13856; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm213857; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm013858; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm013859; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm013860; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm013861; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm113862; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm013863; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [28,28,28,28]13864; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013865; AVX2-NEXT: retq13866;13867; AVX512VPOPCNTDQ-LABEL: ugt_28_v4i64:13868; AVX512VPOPCNTDQ: # %bb.0:13869; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm013870; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm013871; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [28,28,28,28]13872; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013873; AVX512VPOPCNTDQ-NEXT: retq13874;13875; AVX512VPOPCNTDQVL-LABEL: ugt_28_v4i64:13876; AVX512VPOPCNTDQVL: # %bb.0:13877; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm013878; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [28,28,28,28]13879; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013880; AVX512VPOPCNTDQVL-NEXT: retq13881;13882; BITALG_NOVLX-LABEL: ugt_28_v4i64:13883; BITALG_NOVLX: # %bb.0:13884; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm013885; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm013886; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm113887; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm013888; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [28,28,28,28]13889; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013890; BITALG_NOVLX-NEXT: retq13891;13892; BITALG-LABEL: ugt_28_v4i64:13893; BITALG: # %bb.0:13894; BITALG-NEXT: vpopcntb %ymm0, %ymm013895; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm113896; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm013897; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [28,28,28,28]13898; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm013899; BITALG-NEXT: retq13900 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)13901 %3 = icmp ugt <4 x i64> %2, <i64 28, i64 28, i64 28, i64 28>13902 %4 = sext <4 x i1> %3 to <4 x i64>13903 ret <4 x i64> %413904}13905 13906define <4 x i64> @ult_29_v4i64(<4 x i64> %0) {13907; AVX1-LABEL: ult_29_v4i64:13908; AVX1: # %bb.0:13909; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]13910; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm213911; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]13912; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm213913; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm413914; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm413915; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm413916; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm213917; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm413918; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm213919; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm013920; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm513921; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm513922; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm013923; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm013924; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm013925; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm013926; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm013927; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [29,29]13928; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm013929; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm113930; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm013931; AVX1-NEXT: retq13932;13933; AVX2-LABEL: ult_29_v4i64:13934; AVX2: # %bb.0:13935; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]13936; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm213937; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]13938; AVX2-NEXT: # ymm3 = mem[0,1,0,1]13939; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm213940; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm013941; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm013942; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm013943; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm013944; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm113945; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm013946; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [29,29,29,29]13947; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013948; AVX2-NEXT: retq13949;13950; AVX512VPOPCNTDQ-LABEL: ult_29_v4i64:13951; AVX512VPOPCNTDQ: # %bb.0:13952; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm013953; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm013954; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [29,29,29,29]13955; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013956; AVX512VPOPCNTDQ-NEXT: retq13957;13958; AVX512VPOPCNTDQVL-LABEL: ult_29_v4i64:13959; AVX512VPOPCNTDQVL: # %bb.0:13960; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm013961; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [29,29,29,29]13962; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013963; AVX512VPOPCNTDQVL-NEXT: retq13964;13965; BITALG_NOVLX-LABEL: ult_29_v4i64:13966; BITALG_NOVLX: # %bb.0:13967; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm013968; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm013969; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm113970; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm013971; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [29,29,29,29]13972; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013973; BITALG_NOVLX-NEXT: retq13974;13975; BITALG-LABEL: ult_29_v4i64:13976; BITALG: # %bb.0:13977; BITALG-NEXT: vpopcntb %ymm0, %ymm013978; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm113979; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm013980; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [29,29,29,29]13981; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm013982; BITALG-NEXT: retq13983 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)13984 %3 = icmp ult <4 x i64> %2, <i64 29, i64 29, i64 29, i64 29>13985 %4 = sext <4 x i1> %3 to <4 x i64>13986 ret <4 x i64> %413987}13988 13989define <4 x i64> @ugt_29_v4i64(<4 x i64> %0) {13990; AVX1-LABEL: ugt_29_v4i64:13991; AVX1: # %bb.0:13992; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]13993; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm213994; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]13995; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm213996; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm413997; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm413998; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm413999; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm214000; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm414001; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm214002; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm014003; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm514004; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm514005; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm014006; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm014007; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm014008; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm014009; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm014010; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [29,29]14011; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm014012; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm114013; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm014014; AVX1-NEXT: retq14015;14016; AVX2-LABEL: ugt_29_v4i64:14017; AVX2: # %bb.0:14018; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]14019; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm214020; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]14021; AVX2-NEXT: # ymm3 = mem[0,1,0,1]14022; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm214023; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm014024; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm014025; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm014026; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm014027; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm114028; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm014029; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [29,29,29,29]14030; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014031; AVX2-NEXT: retq14032;14033; AVX512VPOPCNTDQ-LABEL: ugt_29_v4i64:14034; AVX512VPOPCNTDQ: # %bb.0:14035; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm014036; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm014037; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [29,29,29,29]14038; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014039; AVX512VPOPCNTDQ-NEXT: retq14040;14041; AVX512VPOPCNTDQVL-LABEL: ugt_29_v4i64:14042; AVX512VPOPCNTDQVL: # %bb.0:14043; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm014044; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [29,29,29,29]14045; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014046; AVX512VPOPCNTDQVL-NEXT: retq14047;14048; BITALG_NOVLX-LABEL: ugt_29_v4i64:14049; BITALG_NOVLX: # %bb.0:14050; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm014051; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm014052; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm114053; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm014054; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [29,29,29,29]14055; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014056; BITALG_NOVLX-NEXT: retq14057;14058; BITALG-LABEL: ugt_29_v4i64:14059; BITALG: # %bb.0:14060; BITALG-NEXT: vpopcntb %ymm0, %ymm014061; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm114062; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm014063; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [29,29,29,29]14064; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014065; BITALG-NEXT: retq14066 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)14067 %3 = icmp ugt <4 x i64> %2, <i64 29, i64 29, i64 29, i64 29>14068 %4 = sext <4 x i1> %3 to <4 x i64>14069 ret <4 x i64> %414070}14071 14072define <4 x i64> @ult_30_v4i64(<4 x i64> %0) {14073; AVX1-LABEL: ult_30_v4i64:14074; AVX1: # %bb.0:14075; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]14076; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm214077; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]14078; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm214079; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm414080; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm414081; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm414082; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm214083; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm414084; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm214085; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm014086; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm514087; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm514088; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm014089; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm014090; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm014091; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm014092; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm014093; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [30,30]14094; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm014095; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm114096; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm014097; AVX1-NEXT: retq14098;14099; AVX2-LABEL: ult_30_v4i64:14100; AVX2: # %bb.0:14101; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]14102; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm214103; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]14104; AVX2-NEXT: # ymm3 = mem[0,1,0,1]14105; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm214106; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm014107; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm014108; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm014109; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm014110; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm114111; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm014112; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [30,30,30,30]14113; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014114; AVX2-NEXT: retq14115;14116; AVX512VPOPCNTDQ-LABEL: ult_30_v4i64:14117; AVX512VPOPCNTDQ: # %bb.0:14118; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm014119; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm014120; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [30,30,30,30]14121; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014122; AVX512VPOPCNTDQ-NEXT: retq14123;14124; AVX512VPOPCNTDQVL-LABEL: ult_30_v4i64:14125; AVX512VPOPCNTDQVL: # %bb.0:14126; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm014127; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [30,30,30,30]14128; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014129; AVX512VPOPCNTDQVL-NEXT: retq14130;14131; BITALG_NOVLX-LABEL: ult_30_v4i64:14132; BITALG_NOVLX: # %bb.0:14133; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm014134; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm014135; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm114136; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm014137; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [30,30,30,30]14138; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014139; BITALG_NOVLX-NEXT: retq14140;14141; BITALG-LABEL: ult_30_v4i64:14142; BITALG: # %bb.0:14143; BITALG-NEXT: vpopcntb %ymm0, %ymm014144; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm114145; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm014146; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [30,30,30,30]14147; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014148; BITALG-NEXT: retq14149 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)14150 %3 = icmp ult <4 x i64> %2, <i64 30, i64 30, i64 30, i64 30>14151 %4 = sext <4 x i1> %3 to <4 x i64>14152 ret <4 x i64> %414153}14154 14155define <4 x i64> @ugt_30_v4i64(<4 x i64> %0) {14156; AVX1-LABEL: ugt_30_v4i64:14157; AVX1: # %bb.0:14158; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]14159; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm214160; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]14161; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm214162; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm414163; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm414164; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm414165; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm214166; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm414167; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm214168; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm014169; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm514170; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm514171; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm014172; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm014173; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm014174; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm014175; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm014176; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [30,30]14177; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm014178; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm114179; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm014180; AVX1-NEXT: retq14181;14182; AVX2-LABEL: ugt_30_v4i64:14183; AVX2: # %bb.0:14184; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]14185; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm214186; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]14187; AVX2-NEXT: # ymm3 = mem[0,1,0,1]14188; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm214189; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm014190; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm014191; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm014192; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm014193; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm114194; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm014195; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [30,30,30,30]14196; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014197; AVX2-NEXT: retq14198;14199; AVX512VPOPCNTDQ-LABEL: ugt_30_v4i64:14200; AVX512VPOPCNTDQ: # %bb.0:14201; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm014202; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm014203; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [30,30,30,30]14204; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014205; AVX512VPOPCNTDQ-NEXT: retq14206;14207; AVX512VPOPCNTDQVL-LABEL: ugt_30_v4i64:14208; AVX512VPOPCNTDQVL: # %bb.0:14209; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm014210; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [30,30,30,30]14211; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014212; AVX512VPOPCNTDQVL-NEXT: retq14213;14214; BITALG_NOVLX-LABEL: ugt_30_v4i64:14215; BITALG_NOVLX: # %bb.0:14216; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm014217; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm014218; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm114219; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm014220; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [30,30,30,30]14221; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014222; BITALG_NOVLX-NEXT: retq14223;14224; BITALG-LABEL: ugt_30_v4i64:14225; BITALG: # %bb.0:14226; BITALG-NEXT: vpopcntb %ymm0, %ymm014227; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm114228; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm014229; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [30,30,30,30]14230; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014231; BITALG-NEXT: retq14232 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)14233 %3 = icmp ugt <4 x i64> %2, <i64 30, i64 30, i64 30, i64 30>14234 %4 = sext <4 x i1> %3 to <4 x i64>14235 ret <4 x i64> %414236}14237 14238define <4 x i64> @ult_31_v4i64(<4 x i64> %0) {14239; AVX1-LABEL: ult_31_v4i64:14240; AVX1: # %bb.0:14241; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]14242; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm214243; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]14244; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm214245; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm414246; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm414247; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm414248; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm214249; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm414250; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm214251; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm014252; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm514253; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm514254; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm014255; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm014256; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm014257; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm014258; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm014259; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [31,31]14260; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm014261; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm114262; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm014263; AVX1-NEXT: retq14264;14265; AVX2-LABEL: ult_31_v4i64:14266; AVX2: # %bb.0:14267; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]14268; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm214269; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]14270; AVX2-NEXT: # ymm3 = mem[0,1,0,1]14271; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm214272; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm014273; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm014274; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm014275; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm014276; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm114277; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm014278; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [31,31,31,31]14279; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014280; AVX2-NEXT: retq14281;14282; AVX512VPOPCNTDQ-LABEL: ult_31_v4i64:14283; AVX512VPOPCNTDQ: # %bb.0:14284; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm014285; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm014286; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [31,31,31,31]14287; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014288; AVX512VPOPCNTDQ-NEXT: retq14289;14290; AVX512VPOPCNTDQVL-LABEL: ult_31_v4i64:14291; AVX512VPOPCNTDQVL: # %bb.0:14292; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm014293; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [31,31,31,31]14294; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014295; AVX512VPOPCNTDQVL-NEXT: retq14296;14297; BITALG_NOVLX-LABEL: ult_31_v4i64:14298; BITALG_NOVLX: # %bb.0:14299; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm014300; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm014301; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm114302; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm014303; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [31,31,31,31]14304; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014305; BITALG_NOVLX-NEXT: retq14306;14307; BITALG-LABEL: ult_31_v4i64:14308; BITALG: # %bb.0:14309; BITALG-NEXT: vpopcntb %ymm0, %ymm014310; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm114311; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm014312; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [31,31,31,31]14313; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014314; BITALG-NEXT: retq14315 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)14316 %3 = icmp ult <4 x i64> %2, <i64 31, i64 31, i64 31, i64 31>14317 %4 = sext <4 x i1> %3 to <4 x i64>14318 ret <4 x i64> %414319}14320 14321define <4 x i64> @ugt_31_v4i64(<4 x i64> %0) {14322; AVX1-LABEL: ugt_31_v4i64:14323; AVX1: # %bb.0:14324; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]14325; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm214326; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]14327; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm214328; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm414329; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm414330; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm414331; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm214332; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm414333; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm214334; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm014335; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm514336; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm514337; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm014338; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm014339; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm014340; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm014341; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm014342; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [31,31]14343; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm014344; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm114345; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm014346; AVX1-NEXT: retq14347;14348; AVX2-LABEL: ugt_31_v4i64:14349; AVX2: # %bb.0:14350; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]14351; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm214352; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]14353; AVX2-NEXT: # ymm3 = mem[0,1,0,1]14354; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm214355; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm014356; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm014357; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm014358; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm014359; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm114360; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm014361; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [31,31,31,31]14362; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014363; AVX2-NEXT: retq14364;14365; AVX512VPOPCNTDQ-LABEL: ugt_31_v4i64:14366; AVX512VPOPCNTDQ: # %bb.0:14367; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm014368; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm014369; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [31,31,31,31]14370; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014371; AVX512VPOPCNTDQ-NEXT: retq14372;14373; AVX512VPOPCNTDQVL-LABEL: ugt_31_v4i64:14374; AVX512VPOPCNTDQVL: # %bb.0:14375; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm014376; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [31,31,31,31]14377; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014378; AVX512VPOPCNTDQVL-NEXT: retq14379;14380; BITALG_NOVLX-LABEL: ugt_31_v4i64:14381; BITALG_NOVLX: # %bb.0:14382; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm014383; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm014384; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm114385; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm014386; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [31,31,31,31]14387; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014388; BITALG_NOVLX-NEXT: retq14389;14390; BITALG-LABEL: ugt_31_v4i64:14391; BITALG: # %bb.0:14392; BITALG-NEXT: vpopcntb %ymm0, %ymm014393; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm114394; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm014395; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [31,31,31,31]14396; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014397; BITALG-NEXT: retq14398 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)14399 %3 = icmp ugt <4 x i64> %2, <i64 31, i64 31, i64 31, i64 31>14400 %4 = sext <4 x i1> %3 to <4 x i64>14401 ret <4 x i64> %414402}14403 14404define <4 x i64> @ult_32_v4i64(<4 x i64> %0) {14405; AVX1-LABEL: ult_32_v4i64:14406; AVX1: # %bb.0:14407; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]14408; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm214409; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]14410; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm214411; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm414412; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm414413; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm414414; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm214415; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm414416; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm214417; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm014418; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm514419; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm514420; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm014421; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm014422; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm014423; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm014424; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm014425; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [32,32]14426; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm014427; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm114428; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm014429; AVX1-NEXT: retq14430;14431; AVX2-LABEL: ult_32_v4i64:14432; AVX2: # %bb.0:14433; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]14434; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm214435; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]14436; AVX2-NEXT: # ymm3 = mem[0,1,0,1]14437; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm214438; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm014439; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm014440; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm014441; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm014442; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm114443; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm014444; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [32,32,32,32]14445; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014446; AVX2-NEXT: retq14447;14448; AVX512VPOPCNTDQ-LABEL: ult_32_v4i64:14449; AVX512VPOPCNTDQ: # %bb.0:14450; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm014451; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm014452; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [32,32,32,32]14453; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014454; AVX512VPOPCNTDQ-NEXT: retq14455;14456; AVX512VPOPCNTDQVL-LABEL: ult_32_v4i64:14457; AVX512VPOPCNTDQVL: # %bb.0:14458; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm014459; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [32,32,32,32]14460; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014461; AVX512VPOPCNTDQVL-NEXT: retq14462;14463; BITALG_NOVLX-LABEL: ult_32_v4i64:14464; BITALG_NOVLX: # %bb.0:14465; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm014466; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm014467; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm114468; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm014469; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [32,32,32,32]14470; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014471; BITALG_NOVLX-NEXT: retq14472;14473; BITALG-LABEL: ult_32_v4i64:14474; BITALG: # %bb.0:14475; BITALG-NEXT: vpopcntb %ymm0, %ymm014476; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm114477; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm014478; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [32,32,32,32]14479; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014480; BITALG-NEXT: retq14481 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)14482 %3 = icmp ult <4 x i64> %2, <i64 32, i64 32, i64 32, i64 32>14483 %4 = sext <4 x i1> %3 to <4 x i64>14484 ret <4 x i64> %414485}14486 14487define <4 x i64> @ugt_32_v4i64(<4 x i64> %0) {14488; AVX1-LABEL: ugt_32_v4i64:14489; AVX1: # %bb.0:14490; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]14491; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm214492; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]14493; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm214494; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm414495; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm414496; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm414497; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm214498; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm414499; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm214500; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm014501; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm514502; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm514503; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm014504; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm014505; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm014506; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm014507; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm014508; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [32,32]14509; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm014510; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm114511; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm014512; AVX1-NEXT: retq14513;14514; AVX2-LABEL: ugt_32_v4i64:14515; AVX2: # %bb.0:14516; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]14517; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm214518; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]14519; AVX2-NEXT: # ymm3 = mem[0,1,0,1]14520; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm214521; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm014522; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm014523; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm014524; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm014525; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm114526; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm014527; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [32,32,32,32]14528; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014529; AVX2-NEXT: retq14530;14531; AVX512VPOPCNTDQ-LABEL: ugt_32_v4i64:14532; AVX512VPOPCNTDQ: # %bb.0:14533; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm014534; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm014535; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [32,32,32,32]14536; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014537; AVX512VPOPCNTDQ-NEXT: retq14538;14539; AVX512VPOPCNTDQVL-LABEL: ugt_32_v4i64:14540; AVX512VPOPCNTDQVL: # %bb.0:14541; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm014542; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [32,32,32,32]14543; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014544; AVX512VPOPCNTDQVL-NEXT: retq14545;14546; BITALG_NOVLX-LABEL: ugt_32_v4i64:14547; BITALG_NOVLX: # %bb.0:14548; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm014549; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm014550; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm114551; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm014552; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [32,32,32,32]14553; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014554; BITALG_NOVLX-NEXT: retq14555;14556; BITALG-LABEL: ugt_32_v4i64:14557; BITALG: # %bb.0:14558; BITALG-NEXT: vpopcntb %ymm0, %ymm014559; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm114560; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm014561; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [32,32,32,32]14562; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014563; BITALG-NEXT: retq14564 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)14565 %3 = icmp ugt <4 x i64> %2, <i64 32, i64 32, i64 32, i64 32>14566 %4 = sext <4 x i1> %3 to <4 x i64>14567 ret <4 x i64> %414568}14569 14570define <4 x i64> @ult_33_v4i64(<4 x i64> %0) {14571; AVX1-LABEL: ult_33_v4i64:14572; AVX1: # %bb.0:14573; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]14574; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm214575; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]14576; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm214577; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm414578; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm414579; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm414580; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm214581; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm414582; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm214583; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm014584; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm514585; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm514586; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm014587; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm014588; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm014589; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm014590; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm014591; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [33,33]14592; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm014593; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm114594; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm014595; AVX1-NEXT: retq14596;14597; AVX2-LABEL: ult_33_v4i64:14598; AVX2: # %bb.0:14599; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]14600; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm214601; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]14602; AVX2-NEXT: # ymm3 = mem[0,1,0,1]14603; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm214604; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm014605; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm014606; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm014607; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm014608; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm114609; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm014610; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [33,33,33,33]14611; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014612; AVX2-NEXT: retq14613;14614; AVX512VPOPCNTDQ-LABEL: ult_33_v4i64:14615; AVX512VPOPCNTDQ: # %bb.0:14616; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm014617; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm014618; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [33,33,33,33]14619; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014620; AVX512VPOPCNTDQ-NEXT: retq14621;14622; AVX512VPOPCNTDQVL-LABEL: ult_33_v4i64:14623; AVX512VPOPCNTDQVL: # %bb.0:14624; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm014625; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [33,33,33,33]14626; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014627; AVX512VPOPCNTDQVL-NEXT: retq14628;14629; BITALG_NOVLX-LABEL: ult_33_v4i64:14630; BITALG_NOVLX: # %bb.0:14631; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm014632; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm014633; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm114634; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm014635; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [33,33,33,33]14636; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014637; BITALG_NOVLX-NEXT: retq14638;14639; BITALG-LABEL: ult_33_v4i64:14640; BITALG: # %bb.0:14641; BITALG-NEXT: vpopcntb %ymm0, %ymm014642; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm114643; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm014644; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [33,33,33,33]14645; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014646; BITALG-NEXT: retq14647 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)14648 %3 = icmp ult <4 x i64> %2, <i64 33, i64 33, i64 33, i64 33>14649 %4 = sext <4 x i1> %3 to <4 x i64>14650 ret <4 x i64> %414651}14652 14653define <4 x i64> @ugt_33_v4i64(<4 x i64> %0) {14654; AVX1-LABEL: ugt_33_v4i64:14655; AVX1: # %bb.0:14656; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]14657; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm214658; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]14659; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm214660; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm414661; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm414662; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm414663; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm214664; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm414665; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm214666; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm014667; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm514668; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm514669; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm014670; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm014671; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm014672; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm014673; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm014674; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [33,33]14675; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm014676; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm114677; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm014678; AVX1-NEXT: retq14679;14680; AVX2-LABEL: ugt_33_v4i64:14681; AVX2: # %bb.0:14682; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]14683; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm214684; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]14685; AVX2-NEXT: # ymm3 = mem[0,1,0,1]14686; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm214687; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm014688; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm014689; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm014690; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm014691; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm114692; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm014693; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [33,33,33,33]14694; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014695; AVX2-NEXT: retq14696;14697; AVX512VPOPCNTDQ-LABEL: ugt_33_v4i64:14698; AVX512VPOPCNTDQ: # %bb.0:14699; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm014700; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm014701; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [33,33,33,33]14702; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014703; AVX512VPOPCNTDQ-NEXT: retq14704;14705; AVX512VPOPCNTDQVL-LABEL: ugt_33_v4i64:14706; AVX512VPOPCNTDQVL: # %bb.0:14707; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm014708; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [33,33,33,33]14709; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014710; AVX512VPOPCNTDQVL-NEXT: retq14711;14712; BITALG_NOVLX-LABEL: ugt_33_v4i64:14713; BITALG_NOVLX: # %bb.0:14714; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm014715; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm014716; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm114717; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm014718; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [33,33,33,33]14719; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014720; BITALG_NOVLX-NEXT: retq14721;14722; BITALG-LABEL: ugt_33_v4i64:14723; BITALG: # %bb.0:14724; BITALG-NEXT: vpopcntb %ymm0, %ymm014725; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm114726; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm014727; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [33,33,33,33]14728; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014729; BITALG-NEXT: retq14730 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)14731 %3 = icmp ugt <4 x i64> %2, <i64 33, i64 33, i64 33, i64 33>14732 %4 = sext <4 x i1> %3 to <4 x i64>14733 ret <4 x i64> %414734}14735 14736define <4 x i64> @ult_34_v4i64(<4 x i64> %0) {14737; AVX1-LABEL: ult_34_v4i64:14738; AVX1: # %bb.0:14739; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]14740; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm214741; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]14742; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm214743; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm414744; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm414745; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm414746; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm214747; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm414748; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm214749; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm014750; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm514751; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm514752; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm014753; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm014754; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm014755; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm014756; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm014757; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [34,34]14758; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm014759; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm114760; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm014761; AVX1-NEXT: retq14762;14763; AVX2-LABEL: ult_34_v4i64:14764; AVX2: # %bb.0:14765; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]14766; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm214767; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]14768; AVX2-NEXT: # ymm3 = mem[0,1,0,1]14769; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm214770; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm014771; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm014772; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm014773; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm014774; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm114775; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm014776; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [34,34,34,34]14777; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014778; AVX2-NEXT: retq14779;14780; AVX512VPOPCNTDQ-LABEL: ult_34_v4i64:14781; AVX512VPOPCNTDQ: # %bb.0:14782; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm014783; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm014784; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [34,34,34,34]14785; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014786; AVX512VPOPCNTDQ-NEXT: retq14787;14788; AVX512VPOPCNTDQVL-LABEL: ult_34_v4i64:14789; AVX512VPOPCNTDQVL: # %bb.0:14790; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm014791; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [34,34,34,34]14792; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014793; AVX512VPOPCNTDQVL-NEXT: retq14794;14795; BITALG_NOVLX-LABEL: ult_34_v4i64:14796; BITALG_NOVLX: # %bb.0:14797; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm014798; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm014799; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm114800; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm014801; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [34,34,34,34]14802; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014803; BITALG_NOVLX-NEXT: retq14804;14805; BITALG-LABEL: ult_34_v4i64:14806; BITALG: # %bb.0:14807; BITALG-NEXT: vpopcntb %ymm0, %ymm014808; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm114809; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm014810; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [34,34,34,34]14811; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014812; BITALG-NEXT: retq14813 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)14814 %3 = icmp ult <4 x i64> %2, <i64 34, i64 34, i64 34, i64 34>14815 %4 = sext <4 x i1> %3 to <4 x i64>14816 ret <4 x i64> %414817}14818 14819define <4 x i64> @ugt_34_v4i64(<4 x i64> %0) {14820; AVX1-LABEL: ugt_34_v4i64:14821; AVX1: # %bb.0:14822; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]14823; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm214824; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]14825; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm214826; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm414827; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm414828; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm414829; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm214830; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm414831; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm214832; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm014833; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm514834; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm514835; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm014836; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm014837; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm014838; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm014839; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm014840; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [34,34]14841; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm014842; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm114843; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm014844; AVX1-NEXT: retq14845;14846; AVX2-LABEL: ugt_34_v4i64:14847; AVX2: # %bb.0:14848; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]14849; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm214850; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]14851; AVX2-NEXT: # ymm3 = mem[0,1,0,1]14852; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm214853; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm014854; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm014855; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm014856; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm014857; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm114858; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm014859; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [34,34,34,34]14860; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014861; AVX2-NEXT: retq14862;14863; AVX512VPOPCNTDQ-LABEL: ugt_34_v4i64:14864; AVX512VPOPCNTDQ: # %bb.0:14865; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm014866; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm014867; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [34,34,34,34]14868; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014869; AVX512VPOPCNTDQ-NEXT: retq14870;14871; AVX512VPOPCNTDQVL-LABEL: ugt_34_v4i64:14872; AVX512VPOPCNTDQVL: # %bb.0:14873; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm014874; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [34,34,34,34]14875; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014876; AVX512VPOPCNTDQVL-NEXT: retq14877;14878; BITALG_NOVLX-LABEL: ugt_34_v4i64:14879; BITALG_NOVLX: # %bb.0:14880; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm014881; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm014882; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm114883; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm014884; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [34,34,34,34]14885; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014886; BITALG_NOVLX-NEXT: retq14887;14888; BITALG-LABEL: ugt_34_v4i64:14889; BITALG: # %bb.0:14890; BITALG-NEXT: vpopcntb %ymm0, %ymm014891; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm114892; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm014893; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [34,34,34,34]14894; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm014895; BITALG-NEXT: retq14896 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)14897 %3 = icmp ugt <4 x i64> %2, <i64 34, i64 34, i64 34, i64 34>14898 %4 = sext <4 x i1> %3 to <4 x i64>14899 ret <4 x i64> %414900}14901 14902define <4 x i64> @ult_35_v4i64(<4 x i64> %0) {14903; AVX1-LABEL: ult_35_v4i64:14904; AVX1: # %bb.0:14905; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]14906; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm214907; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]14908; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm214909; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm414910; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm414911; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm414912; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm214913; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm414914; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm214915; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm014916; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm514917; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm514918; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm014919; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm014920; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm014921; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm014922; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm014923; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [35,35]14924; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm014925; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm114926; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm014927; AVX1-NEXT: retq14928;14929; AVX2-LABEL: ult_35_v4i64:14930; AVX2: # %bb.0:14931; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]14932; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm214933; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]14934; AVX2-NEXT: # ymm3 = mem[0,1,0,1]14935; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm214936; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm014937; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm014938; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm014939; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm014940; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm114941; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm014942; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [35,35,35,35]14943; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014944; AVX2-NEXT: retq14945;14946; AVX512VPOPCNTDQ-LABEL: ult_35_v4i64:14947; AVX512VPOPCNTDQ: # %bb.0:14948; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm014949; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm014950; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [35,35,35,35]14951; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014952; AVX512VPOPCNTDQ-NEXT: retq14953;14954; AVX512VPOPCNTDQVL-LABEL: ult_35_v4i64:14955; AVX512VPOPCNTDQVL: # %bb.0:14956; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm014957; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [35,35,35,35]14958; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014959; AVX512VPOPCNTDQVL-NEXT: retq14960;14961; BITALG_NOVLX-LABEL: ult_35_v4i64:14962; BITALG_NOVLX: # %bb.0:14963; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm014964; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm014965; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm114966; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm014967; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [35,35,35,35]14968; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014969; BITALG_NOVLX-NEXT: retq14970;14971; BITALG-LABEL: ult_35_v4i64:14972; BITALG: # %bb.0:14973; BITALG-NEXT: vpopcntb %ymm0, %ymm014974; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm114975; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm014976; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [35,35,35,35]14977; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm014978; BITALG-NEXT: retq14979 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)14980 %3 = icmp ult <4 x i64> %2, <i64 35, i64 35, i64 35, i64 35>14981 %4 = sext <4 x i1> %3 to <4 x i64>14982 ret <4 x i64> %414983}14984 14985define <4 x i64> @ugt_35_v4i64(<4 x i64> %0) {14986; AVX1-LABEL: ugt_35_v4i64:14987; AVX1: # %bb.0:14988; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]14989; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm214990; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]14991; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm214992; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm414993; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm414994; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm414995; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm214996; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm414997; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm214998; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm014999; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm515000; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm515001; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm015002; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm015003; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm015004; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm015005; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm015006; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [35,35]15007; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm015008; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm115009; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm015010; AVX1-NEXT: retq15011;15012; AVX2-LABEL: ugt_35_v4i64:15013; AVX2: # %bb.0:15014; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]15015; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm215016; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]15017; AVX2-NEXT: # ymm3 = mem[0,1,0,1]15018; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm215019; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm015020; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm015021; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm015022; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm015023; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm115024; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm015025; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [35,35,35,35]15026; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015027; AVX2-NEXT: retq15028;15029; AVX512VPOPCNTDQ-LABEL: ugt_35_v4i64:15030; AVX512VPOPCNTDQ: # %bb.0:15031; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm015032; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm015033; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [35,35,35,35]15034; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015035; AVX512VPOPCNTDQ-NEXT: retq15036;15037; AVX512VPOPCNTDQVL-LABEL: ugt_35_v4i64:15038; AVX512VPOPCNTDQVL: # %bb.0:15039; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm015040; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [35,35,35,35]15041; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015042; AVX512VPOPCNTDQVL-NEXT: retq15043;15044; BITALG_NOVLX-LABEL: ugt_35_v4i64:15045; BITALG_NOVLX: # %bb.0:15046; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm015047; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm015048; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm115049; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm015050; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [35,35,35,35]15051; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015052; BITALG_NOVLX-NEXT: retq15053;15054; BITALG-LABEL: ugt_35_v4i64:15055; BITALG: # %bb.0:15056; BITALG-NEXT: vpopcntb %ymm0, %ymm015057; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm115058; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm015059; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [35,35,35,35]15060; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015061; BITALG-NEXT: retq15062 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)15063 %3 = icmp ugt <4 x i64> %2, <i64 35, i64 35, i64 35, i64 35>15064 %4 = sext <4 x i1> %3 to <4 x i64>15065 ret <4 x i64> %415066}15067 15068define <4 x i64> @ult_36_v4i64(<4 x i64> %0) {15069; AVX1-LABEL: ult_36_v4i64:15070; AVX1: # %bb.0:15071; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]15072; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm215073; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]15074; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm215075; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm415076; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm415077; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm415078; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm215079; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm415080; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm215081; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm015082; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm515083; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm515084; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm015085; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm015086; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm015087; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm015088; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm015089; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [36,36]15090; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm015091; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm115092; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm015093; AVX1-NEXT: retq15094;15095; AVX2-LABEL: ult_36_v4i64:15096; AVX2: # %bb.0:15097; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]15098; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm215099; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]15100; AVX2-NEXT: # ymm3 = mem[0,1,0,1]15101; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm215102; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm015103; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm015104; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm015105; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm015106; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm115107; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm015108; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [36,36,36,36]15109; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015110; AVX2-NEXT: retq15111;15112; AVX512VPOPCNTDQ-LABEL: ult_36_v4i64:15113; AVX512VPOPCNTDQ: # %bb.0:15114; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm015115; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm015116; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [36,36,36,36]15117; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015118; AVX512VPOPCNTDQ-NEXT: retq15119;15120; AVX512VPOPCNTDQVL-LABEL: ult_36_v4i64:15121; AVX512VPOPCNTDQVL: # %bb.0:15122; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm015123; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [36,36,36,36]15124; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015125; AVX512VPOPCNTDQVL-NEXT: retq15126;15127; BITALG_NOVLX-LABEL: ult_36_v4i64:15128; BITALG_NOVLX: # %bb.0:15129; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm015130; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm015131; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm115132; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm015133; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [36,36,36,36]15134; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015135; BITALG_NOVLX-NEXT: retq15136;15137; BITALG-LABEL: ult_36_v4i64:15138; BITALG: # %bb.0:15139; BITALG-NEXT: vpopcntb %ymm0, %ymm015140; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm115141; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm015142; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [36,36,36,36]15143; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015144; BITALG-NEXT: retq15145 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)15146 %3 = icmp ult <4 x i64> %2, <i64 36, i64 36, i64 36, i64 36>15147 %4 = sext <4 x i1> %3 to <4 x i64>15148 ret <4 x i64> %415149}15150 15151define <4 x i64> @ugt_36_v4i64(<4 x i64> %0) {15152; AVX1-LABEL: ugt_36_v4i64:15153; AVX1: # %bb.0:15154; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]15155; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm215156; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]15157; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm215158; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm415159; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm415160; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm415161; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm215162; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm415163; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm215164; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm015165; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm515166; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm515167; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm015168; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm015169; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm015170; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm015171; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm015172; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [36,36]15173; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm015174; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm115175; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm015176; AVX1-NEXT: retq15177;15178; AVX2-LABEL: ugt_36_v4i64:15179; AVX2: # %bb.0:15180; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]15181; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm215182; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]15183; AVX2-NEXT: # ymm3 = mem[0,1,0,1]15184; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm215185; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm015186; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm015187; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm015188; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm015189; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm115190; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm015191; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [36,36,36,36]15192; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015193; AVX2-NEXT: retq15194;15195; AVX512VPOPCNTDQ-LABEL: ugt_36_v4i64:15196; AVX512VPOPCNTDQ: # %bb.0:15197; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm015198; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm015199; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [36,36,36,36]15200; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015201; AVX512VPOPCNTDQ-NEXT: retq15202;15203; AVX512VPOPCNTDQVL-LABEL: ugt_36_v4i64:15204; AVX512VPOPCNTDQVL: # %bb.0:15205; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm015206; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [36,36,36,36]15207; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015208; AVX512VPOPCNTDQVL-NEXT: retq15209;15210; BITALG_NOVLX-LABEL: ugt_36_v4i64:15211; BITALG_NOVLX: # %bb.0:15212; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm015213; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm015214; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm115215; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm015216; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [36,36,36,36]15217; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015218; BITALG_NOVLX-NEXT: retq15219;15220; BITALG-LABEL: ugt_36_v4i64:15221; BITALG: # %bb.0:15222; BITALG-NEXT: vpopcntb %ymm0, %ymm015223; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm115224; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm015225; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [36,36,36,36]15226; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015227; BITALG-NEXT: retq15228 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)15229 %3 = icmp ugt <4 x i64> %2, <i64 36, i64 36, i64 36, i64 36>15230 %4 = sext <4 x i1> %3 to <4 x i64>15231 ret <4 x i64> %415232}15233 15234define <4 x i64> @ult_37_v4i64(<4 x i64> %0) {15235; AVX1-LABEL: ult_37_v4i64:15236; AVX1: # %bb.0:15237; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]15238; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm215239; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]15240; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm215241; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm415242; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm415243; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm415244; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm215245; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm415246; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm215247; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm015248; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm515249; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm515250; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm015251; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm015252; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm015253; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm015254; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm015255; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [37,37]15256; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm015257; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm115258; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm015259; AVX1-NEXT: retq15260;15261; AVX2-LABEL: ult_37_v4i64:15262; AVX2: # %bb.0:15263; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]15264; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm215265; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]15266; AVX2-NEXT: # ymm3 = mem[0,1,0,1]15267; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm215268; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm015269; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm015270; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm015271; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm015272; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm115273; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm015274; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [37,37,37,37]15275; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015276; AVX2-NEXT: retq15277;15278; AVX512VPOPCNTDQ-LABEL: ult_37_v4i64:15279; AVX512VPOPCNTDQ: # %bb.0:15280; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm015281; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm015282; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [37,37,37,37]15283; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015284; AVX512VPOPCNTDQ-NEXT: retq15285;15286; AVX512VPOPCNTDQVL-LABEL: ult_37_v4i64:15287; AVX512VPOPCNTDQVL: # %bb.0:15288; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm015289; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [37,37,37,37]15290; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015291; AVX512VPOPCNTDQVL-NEXT: retq15292;15293; BITALG_NOVLX-LABEL: ult_37_v4i64:15294; BITALG_NOVLX: # %bb.0:15295; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm015296; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm015297; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm115298; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm015299; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [37,37,37,37]15300; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015301; BITALG_NOVLX-NEXT: retq15302;15303; BITALG-LABEL: ult_37_v4i64:15304; BITALG: # %bb.0:15305; BITALG-NEXT: vpopcntb %ymm0, %ymm015306; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm115307; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm015308; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [37,37,37,37]15309; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015310; BITALG-NEXT: retq15311 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)15312 %3 = icmp ult <4 x i64> %2, <i64 37, i64 37, i64 37, i64 37>15313 %4 = sext <4 x i1> %3 to <4 x i64>15314 ret <4 x i64> %415315}15316 15317define <4 x i64> @ugt_37_v4i64(<4 x i64> %0) {15318; AVX1-LABEL: ugt_37_v4i64:15319; AVX1: # %bb.0:15320; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]15321; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm215322; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]15323; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm215324; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm415325; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm415326; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm415327; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm215328; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm415329; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm215330; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm015331; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm515332; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm515333; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm015334; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm015335; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm015336; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm015337; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm015338; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [37,37]15339; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm015340; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm115341; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm015342; AVX1-NEXT: retq15343;15344; AVX2-LABEL: ugt_37_v4i64:15345; AVX2: # %bb.0:15346; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]15347; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm215348; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]15349; AVX2-NEXT: # ymm3 = mem[0,1,0,1]15350; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm215351; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm015352; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm015353; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm015354; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm015355; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm115356; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm015357; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [37,37,37,37]15358; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015359; AVX2-NEXT: retq15360;15361; AVX512VPOPCNTDQ-LABEL: ugt_37_v4i64:15362; AVX512VPOPCNTDQ: # %bb.0:15363; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm015364; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm015365; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [37,37,37,37]15366; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015367; AVX512VPOPCNTDQ-NEXT: retq15368;15369; AVX512VPOPCNTDQVL-LABEL: ugt_37_v4i64:15370; AVX512VPOPCNTDQVL: # %bb.0:15371; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm015372; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [37,37,37,37]15373; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015374; AVX512VPOPCNTDQVL-NEXT: retq15375;15376; BITALG_NOVLX-LABEL: ugt_37_v4i64:15377; BITALG_NOVLX: # %bb.0:15378; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm015379; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm015380; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm115381; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm015382; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [37,37,37,37]15383; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015384; BITALG_NOVLX-NEXT: retq15385;15386; BITALG-LABEL: ugt_37_v4i64:15387; BITALG: # %bb.0:15388; BITALG-NEXT: vpopcntb %ymm0, %ymm015389; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm115390; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm015391; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [37,37,37,37]15392; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015393; BITALG-NEXT: retq15394 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)15395 %3 = icmp ugt <4 x i64> %2, <i64 37, i64 37, i64 37, i64 37>15396 %4 = sext <4 x i1> %3 to <4 x i64>15397 ret <4 x i64> %415398}15399 15400define <4 x i64> @ult_38_v4i64(<4 x i64> %0) {15401; AVX1-LABEL: ult_38_v4i64:15402; AVX1: # %bb.0:15403; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]15404; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm215405; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]15406; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm215407; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm415408; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm415409; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm415410; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm215411; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm415412; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm215413; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm015414; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm515415; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm515416; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm015417; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm015418; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm015419; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm015420; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm015421; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [38,38]15422; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm015423; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm115424; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm015425; AVX1-NEXT: retq15426;15427; AVX2-LABEL: ult_38_v4i64:15428; AVX2: # %bb.0:15429; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]15430; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm215431; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]15432; AVX2-NEXT: # ymm3 = mem[0,1,0,1]15433; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm215434; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm015435; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm015436; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm015437; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm015438; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm115439; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm015440; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [38,38,38,38]15441; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015442; AVX2-NEXT: retq15443;15444; AVX512VPOPCNTDQ-LABEL: ult_38_v4i64:15445; AVX512VPOPCNTDQ: # %bb.0:15446; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm015447; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm015448; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [38,38,38,38]15449; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015450; AVX512VPOPCNTDQ-NEXT: retq15451;15452; AVX512VPOPCNTDQVL-LABEL: ult_38_v4i64:15453; AVX512VPOPCNTDQVL: # %bb.0:15454; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm015455; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [38,38,38,38]15456; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015457; AVX512VPOPCNTDQVL-NEXT: retq15458;15459; BITALG_NOVLX-LABEL: ult_38_v4i64:15460; BITALG_NOVLX: # %bb.0:15461; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm015462; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm015463; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm115464; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm015465; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [38,38,38,38]15466; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015467; BITALG_NOVLX-NEXT: retq15468;15469; BITALG-LABEL: ult_38_v4i64:15470; BITALG: # %bb.0:15471; BITALG-NEXT: vpopcntb %ymm0, %ymm015472; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm115473; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm015474; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [38,38,38,38]15475; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015476; BITALG-NEXT: retq15477 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)15478 %3 = icmp ult <4 x i64> %2, <i64 38, i64 38, i64 38, i64 38>15479 %4 = sext <4 x i1> %3 to <4 x i64>15480 ret <4 x i64> %415481}15482 15483define <4 x i64> @ugt_38_v4i64(<4 x i64> %0) {15484; AVX1-LABEL: ugt_38_v4i64:15485; AVX1: # %bb.0:15486; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]15487; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm215488; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]15489; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm215490; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm415491; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm415492; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm415493; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm215494; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm415495; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm215496; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm015497; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm515498; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm515499; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm015500; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm015501; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm015502; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm015503; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm015504; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [38,38]15505; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm015506; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm115507; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm015508; AVX1-NEXT: retq15509;15510; AVX2-LABEL: ugt_38_v4i64:15511; AVX2: # %bb.0:15512; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]15513; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm215514; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]15515; AVX2-NEXT: # ymm3 = mem[0,1,0,1]15516; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm215517; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm015518; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm015519; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm015520; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm015521; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm115522; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm015523; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [38,38,38,38]15524; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015525; AVX2-NEXT: retq15526;15527; AVX512VPOPCNTDQ-LABEL: ugt_38_v4i64:15528; AVX512VPOPCNTDQ: # %bb.0:15529; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm015530; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm015531; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [38,38,38,38]15532; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015533; AVX512VPOPCNTDQ-NEXT: retq15534;15535; AVX512VPOPCNTDQVL-LABEL: ugt_38_v4i64:15536; AVX512VPOPCNTDQVL: # %bb.0:15537; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm015538; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [38,38,38,38]15539; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015540; AVX512VPOPCNTDQVL-NEXT: retq15541;15542; BITALG_NOVLX-LABEL: ugt_38_v4i64:15543; BITALG_NOVLX: # %bb.0:15544; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm015545; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm015546; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm115547; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm015548; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [38,38,38,38]15549; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015550; BITALG_NOVLX-NEXT: retq15551;15552; BITALG-LABEL: ugt_38_v4i64:15553; BITALG: # %bb.0:15554; BITALG-NEXT: vpopcntb %ymm0, %ymm015555; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm115556; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm015557; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [38,38,38,38]15558; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015559; BITALG-NEXT: retq15560 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)15561 %3 = icmp ugt <4 x i64> %2, <i64 38, i64 38, i64 38, i64 38>15562 %4 = sext <4 x i1> %3 to <4 x i64>15563 ret <4 x i64> %415564}15565 15566define <4 x i64> @ult_39_v4i64(<4 x i64> %0) {15567; AVX1-LABEL: ult_39_v4i64:15568; AVX1: # %bb.0:15569; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]15570; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm215571; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]15572; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm215573; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm415574; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm415575; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm415576; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm215577; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm415578; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm215579; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm015580; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm515581; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm515582; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm015583; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm015584; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm015585; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm015586; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm015587; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [39,39]15588; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm015589; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm115590; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm015591; AVX1-NEXT: retq15592;15593; AVX2-LABEL: ult_39_v4i64:15594; AVX2: # %bb.0:15595; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]15596; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm215597; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]15598; AVX2-NEXT: # ymm3 = mem[0,1,0,1]15599; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm215600; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm015601; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm015602; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm015603; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm015604; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm115605; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm015606; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [39,39,39,39]15607; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015608; AVX2-NEXT: retq15609;15610; AVX512VPOPCNTDQ-LABEL: ult_39_v4i64:15611; AVX512VPOPCNTDQ: # %bb.0:15612; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm015613; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm015614; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [39,39,39,39]15615; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015616; AVX512VPOPCNTDQ-NEXT: retq15617;15618; AVX512VPOPCNTDQVL-LABEL: ult_39_v4i64:15619; AVX512VPOPCNTDQVL: # %bb.0:15620; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm015621; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [39,39,39,39]15622; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015623; AVX512VPOPCNTDQVL-NEXT: retq15624;15625; BITALG_NOVLX-LABEL: ult_39_v4i64:15626; BITALG_NOVLX: # %bb.0:15627; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm015628; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm015629; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm115630; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm015631; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [39,39,39,39]15632; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015633; BITALG_NOVLX-NEXT: retq15634;15635; BITALG-LABEL: ult_39_v4i64:15636; BITALG: # %bb.0:15637; BITALG-NEXT: vpopcntb %ymm0, %ymm015638; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm115639; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm015640; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [39,39,39,39]15641; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015642; BITALG-NEXT: retq15643 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)15644 %3 = icmp ult <4 x i64> %2, <i64 39, i64 39, i64 39, i64 39>15645 %4 = sext <4 x i1> %3 to <4 x i64>15646 ret <4 x i64> %415647}15648 15649define <4 x i64> @ugt_39_v4i64(<4 x i64> %0) {15650; AVX1-LABEL: ugt_39_v4i64:15651; AVX1: # %bb.0:15652; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]15653; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm215654; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]15655; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm215656; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm415657; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm415658; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm415659; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm215660; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm415661; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm215662; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm015663; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm515664; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm515665; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm015666; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm015667; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm015668; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm015669; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm015670; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [39,39]15671; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm015672; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm115673; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm015674; AVX1-NEXT: retq15675;15676; AVX2-LABEL: ugt_39_v4i64:15677; AVX2: # %bb.0:15678; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]15679; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm215680; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]15681; AVX2-NEXT: # ymm3 = mem[0,1,0,1]15682; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm215683; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm015684; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm015685; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm015686; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm015687; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm115688; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm015689; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [39,39,39,39]15690; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015691; AVX2-NEXT: retq15692;15693; AVX512VPOPCNTDQ-LABEL: ugt_39_v4i64:15694; AVX512VPOPCNTDQ: # %bb.0:15695; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm015696; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm015697; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [39,39,39,39]15698; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015699; AVX512VPOPCNTDQ-NEXT: retq15700;15701; AVX512VPOPCNTDQVL-LABEL: ugt_39_v4i64:15702; AVX512VPOPCNTDQVL: # %bb.0:15703; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm015704; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [39,39,39,39]15705; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015706; AVX512VPOPCNTDQVL-NEXT: retq15707;15708; BITALG_NOVLX-LABEL: ugt_39_v4i64:15709; BITALG_NOVLX: # %bb.0:15710; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm015711; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm015712; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm115713; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm015714; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [39,39,39,39]15715; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015716; BITALG_NOVLX-NEXT: retq15717;15718; BITALG-LABEL: ugt_39_v4i64:15719; BITALG: # %bb.0:15720; BITALG-NEXT: vpopcntb %ymm0, %ymm015721; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm115722; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm015723; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [39,39,39,39]15724; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015725; BITALG-NEXT: retq15726 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)15727 %3 = icmp ugt <4 x i64> %2, <i64 39, i64 39, i64 39, i64 39>15728 %4 = sext <4 x i1> %3 to <4 x i64>15729 ret <4 x i64> %415730}15731 15732define <4 x i64> @ult_40_v4i64(<4 x i64> %0) {15733; AVX1-LABEL: ult_40_v4i64:15734; AVX1: # %bb.0:15735; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]15736; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm215737; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]15738; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm215739; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm415740; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm415741; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm415742; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm215743; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm415744; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm215745; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm015746; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm515747; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm515748; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm015749; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm015750; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm015751; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm015752; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm015753; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [40,40]15754; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm015755; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm115756; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm015757; AVX1-NEXT: retq15758;15759; AVX2-LABEL: ult_40_v4i64:15760; AVX2: # %bb.0:15761; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]15762; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm215763; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]15764; AVX2-NEXT: # ymm3 = mem[0,1,0,1]15765; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm215766; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm015767; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm015768; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm015769; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm015770; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm115771; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm015772; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [40,40,40,40]15773; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015774; AVX2-NEXT: retq15775;15776; AVX512VPOPCNTDQ-LABEL: ult_40_v4i64:15777; AVX512VPOPCNTDQ: # %bb.0:15778; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm015779; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm015780; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [40,40,40,40]15781; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015782; AVX512VPOPCNTDQ-NEXT: retq15783;15784; AVX512VPOPCNTDQVL-LABEL: ult_40_v4i64:15785; AVX512VPOPCNTDQVL: # %bb.0:15786; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm015787; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [40,40,40,40]15788; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015789; AVX512VPOPCNTDQVL-NEXT: retq15790;15791; BITALG_NOVLX-LABEL: ult_40_v4i64:15792; BITALG_NOVLX: # %bb.0:15793; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm015794; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm015795; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm115796; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm015797; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [40,40,40,40]15798; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015799; BITALG_NOVLX-NEXT: retq15800;15801; BITALG-LABEL: ult_40_v4i64:15802; BITALG: # %bb.0:15803; BITALG-NEXT: vpopcntb %ymm0, %ymm015804; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm115805; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm015806; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [40,40,40,40]15807; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015808; BITALG-NEXT: retq15809 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)15810 %3 = icmp ult <4 x i64> %2, <i64 40, i64 40, i64 40, i64 40>15811 %4 = sext <4 x i1> %3 to <4 x i64>15812 ret <4 x i64> %415813}15814 15815define <4 x i64> @ugt_40_v4i64(<4 x i64> %0) {15816; AVX1-LABEL: ugt_40_v4i64:15817; AVX1: # %bb.0:15818; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]15819; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm215820; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]15821; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm215822; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm415823; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm415824; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm415825; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm215826; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm415827; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm215828; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm015829; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm515830; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm515831; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm015832; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm015833; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm015834; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm015835; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm015836; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [40,40]15837; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm015838; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm115839; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm015840; AVX1-NEXT: retq15841;15842; AVX2-LABEL: ugt_40_v4i64:15843; AVX2: # %bb.0:15844; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]15845; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm215846; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]15847; AVX2-NEXT: # ymm3 = mem[0,1,0,1]15848; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm215849; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm015850; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm015851; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm015852; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm015853; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm115854; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm015855; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [40,40,40,40]15856; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015857; AVX2-NEXT: retq15858;15859; AVX512VPOPCNTDQ-LABEL: ugt_40_v4i64:15860; AVX512VPOPCNTDQ: # %bb.0:15861; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm015862; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm015863; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [40,40,40,40]15864; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015865; AVX512VPOPCNTDQ-NEXT: retq15866;15867; AVX512VPOPCNTDQVL-LABEL: ugt_40_v4i64:15868; AVX512VPOPCNTDQVL: # %bb.0:15869; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm015870; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [40,40,40,40]15871; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015872; AVX512VPOPCNTDQVL-NEXT: retq15873;15874; BITALG_NOVLX-LABEL: ugt_40_v4i64:15875; BITALG_NOVLX: # %bb.0:15876; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm015877; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm015878; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm115879; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm015880; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [40,40,40,40]15881; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015882; BITALG_NOVLX-NEXT: retq15883;15884; BITALG-LABEL: ugt_40_v4i64:15885; BITALG: # %bb.0:15886; BITALG-NEXT: vpopcntb %ymm0, %ymm015887; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm115888; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm015889; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [40,40,40,40]15890; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm015891; BITALG-NEXT: retq15892 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)15893 %3 = icmp ugt <4 x i64> %2, <i64 40, i64 40, i64 40, i64 40>15894 %4 = sext <4 x i1> %3 to <4 x i64>15895 ret <4 x i64> %415896}15897 15898define <4 x i64> @ult_41_v4i64(<4 x i64> %0) {15899; AVX1-LABEL: ult_41_v4i64:15900; AVX1: # %bb.0:15901; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]15902; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm215903; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]15904; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm215905; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm415906; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm415907; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm415908; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm215909; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm415910; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm215911; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm015912; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm515913; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm515914; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm015915; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm015916; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm015917; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm015918; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm015919; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [41,41]15920; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm015921; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm115922; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm015923; AVX1-NEXT: retq15924;15925; AVX2-LABEL: ult_41_v4i64:15926; AVX2: # %bb.0:15927; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]15928; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm215929; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]15930; AVX2-NEXT: # ymm3 = mem[0,1,0,1]15931; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm215932; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm015933; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm015934; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm015935; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm015936; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm115937; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm015938; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [41,41,41,41]15939; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015940; AVX2-NEXT: retq15941;15942; AVX512VPOPCNTDQ-LABEL: ult_41_v4i64:15943; AVX512VPOPCNTDQ: # %bb.0:15944; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm015945; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm015946; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [41,41,41,41]15947; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015948; AVX512VPOPCNTDQ-NEXT: retq15949;15950; AVX512VPOPCNTDQVL-LABEL: ult_41_v4i64:15951; AVX512VPOPCNTDQVL: # %bb.0:15952; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm015953; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [41,41,41,41]15954; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015955; AVX512VPOPCNTDQVL-NEXT: retq15956;15957; BITALG_NOVLX-LABEL: ult_41_v4i64:15958; BITALG_NOVLX: # %bb.0:15959; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm015960; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm015961; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm115962; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm015963; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [41,41,41,41]15964; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015965; BITALG_NOVLX-NEXT: retq15966;15967; BITALG-LABEL: ult_41_v4i64:15968; BITALG: # %bb.0:15969; BITALG-NEXT: vpopcntb %ymm0, %ymm015970; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm115971; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm015972; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [41,41,41,41]15973; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm015974; BITALG-NEXT: retq15975 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)15976 %3 = icmp ult <4 x i64> %2, <i64 41, i64 41, i64 41, i64 41>15977 %4 = sext <4 x i1> %3 to <4 x i64>15978 ret <4 x i64> %415979}15980 15981define <4 x i64> @ugt_41_v4i64(<4 x i64> %0) {15982; AVX1-LABEL: ugt_41_v4i64:15983; AVX1: # %bb.0:15984; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]15985; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm215986; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]15987; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm215988; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm415989; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm415990; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm415991; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm215992; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm415993; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm215994; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm015995; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm515996; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm515997; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm015998; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm015999; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm016000; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm016001; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm016002; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [41,41]16003; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm016004; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm116005; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm016006; AVX1-NEXT: retq16007;16008; AVX2-LABEL: ugt_41_v4i64:16009; AVX2: # %bb.0:16010; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]16011; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm216012; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]16013; AVX2-NEXT: # ymm3 = mem[0,1,0,1]16014; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm216015; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm016016; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm016017; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm016018; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm016019; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm116020; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm016021; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [41,41,41,41]16022; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016023; AVX2-NEXT: retq16024;16025; AVX512VPOPCNTDQ-LABEL: ugt_41_v4i64:16026; AVX512VPOPCNTDQ: # %bb.0:16027; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm016028; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm016029; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [41,41,41,41]16030; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016031; AVX512VPOPCNTDQ-NEXT: retq16032;16033; AVX512VPOPCNTDQVL-LABEL: ugt_41_v4i64:16034; AVX512VPOPCNTDQVL: # %bb.0:16035; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm016036; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [41,41,41,41]16037; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016038; AVX512VPOPCNTDQVL-NEXT: retq16039;16040; BITALG_NOVLX-LABEL: ugt_41_v4i64:16041; BITALG_NOVLX: # %bb.0:16042; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm016043; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm016044; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm116045; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm016046; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [41,41,41,41]16047; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016048; BITALG_NOVLX-NEXT: retq16049;16050; BITALG-LABEL: ugt_41_v4i64:16051; BITALG: # %bb.0:16052; BITALG-NEXT: vpopcntb %ymm0, %ymm016053; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm116054; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm016055; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [41,41,41,41]16056; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016057; BITALG-NEXT: retq16058 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)16059 %3 = icmp ugt <4 x i64> %2, <i64 41, i64 41, i64 41, i64 41>16060 %4 = sext <4 x i1> %3 to <4 x i64>16061 ret <4 x i64> %416062}16063 16064define <4 x i64> @ult_42_v4i64(<4 x i64> %0) {16065; AVX1-LABEL: ult_42_v4i64:16066; AVX1: # %bb.0:16067; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]16068; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm216069; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]16070; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm216071; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm416072; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm416073; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm416074; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm216075; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm416076; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm216077; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm016078; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm516079; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm516080; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm016081; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm016082; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm016083; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm016084; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm016085; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [42,42]16086; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm016087; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm116088; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm016089; AVX1-NEXT: retq16090;16091; AVX2-LABEL: ult_42_v4i64:16092; AVX2: # %bb.0:16093; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]16094; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm216095; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]16096; AVX2-NEXT: # ymm3 = mem[0,1,0,1]16097; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm216098; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm016099; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm016100; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm016101; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm016102; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm116103; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm016104; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [42,42,42,42]16105; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016106; AVX2-NEXT: retq16107;16108; AVX512VPOPCNTDQ-LABEL: ult_42_v4i64:16109; AVX512VPOPCNTDQ: # %bb.0:16110; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm016111; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm016112; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [42,42,42,42]16113; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016114; AVX512VPOPCNTDQ-NEXT: retq16115;16116; AVX512VPOPCNTDQVL-LABEL: ult_42_v4i64:16117; AVX512VPOPCNTDQVL: # %bb.0:16118; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm016119; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [42,42,42,42]16120; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016121; AVX512VPOPCNTDQVL-NEXT: retq16122;16123; BITALG_NOVLX-LABEL: ult_42_v4i64:16124; BITALG_NOVLX: # %bb.0:16125; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm016126; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm016127; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm116128; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm016129; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [42,42,42,42]16130; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016131; BITALG_NOVLX-NEXT: retq16132;16133; BITALG-LABEL: ult_42_v4i64:16134; BITALG: # %bb.0:16135; BITALG-NEXT: vpopcntb %ymm0, %ymm016136; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm116137; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm016138; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [42,42,42,42]16139; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016140; BITALG-NEXT: retq16141 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)16142 %3 = icmp ult <4 x i64> %2, <i64 42, i64 42, i64 42, i64 42>16143 %4 = sext <4 x i1> %3 to <4 x i64>16144 ret <4 x i64> %416145}16146 16147define <4 x i64> @ugt_42_v4i64(<4 x i64> %0) {16148; AVX1-LABEL: ugt_42_v4i64:16149; AVX1: # %bb.0:16150; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]16151; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm216152; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]16153; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm216154; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm416155; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm416156; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm416157; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm216158; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm416159; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm216160; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm016161; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm516162; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm516163; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm016164; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm016165; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm016166; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm016167; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm016168; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [42,42]16169; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm016170; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm116171; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm016172; AVX1-NEXT: retq16173;16174; AVX2-LABEL: ugt_42_v4i64:16175; AVX2: # %bb.0:16176; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]16177; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm216178; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]16179; AVX2-NEXT: # ymm3 = mem[0,1,0,1]16180; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm216181; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm016182; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm016183; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm016184; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm016185; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm116186; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm016187; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [42,42,42,42]16188; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016189; AVX2-NEXT: retq16190;16191; AVX512VPOPCNTDQ-LABEL: ugt_42_v4i64:16192; AVX512VPOPCNTDQ: # %bb.0:16193; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm016194; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm016195; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [42,42,42,42]16196; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016197; AVX512VPOPCNTDQ-NEXT: retq16198;16199; AVX512VPOPCNTDQVL-LABEL: ugt_42_v4i64:16200; AVX512VPOPCNTDQVL: # %bb.0:16201; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm016202; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [42,42,42,42]16203; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016204; AVX512VPOPCNTDQVL-NEXT: retq16205;16206; BITALG_NOVLX-LABEL: ugt_42_v4i64:16207; BITALG_NOVLX: # %bb.0:16208; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm016209; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm016210; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm116211; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm016212; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [42,42,42,42]16213; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016214; BITALG_NOVLX-NEXT: retq16215;16216; BITALG-LABEL: ugt_42_v4i64:16217; BITALG: # %bb.0:16218; BITALG-NEXT: vpopcntb %ymm0, %ymm016219; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm116220; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm016221; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [42,42,42,42]16222; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016223; BITALG-NEXT: retq16224 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)16225 %3 = icmp ugt <4 x i64> %2, <i64 42, i64 42, i64 42, i64 42>16226 %4 = sext <4 x i1> %3 to <4 x i64>16227 ret <4 x i64> %416228}16229 16230define <4 x i64> @ult_43_v4i64(<4 x i64> %0) {16231; AVX1-LABEL: ult_43_v4i64:16232; AVX1: # %bb.0:16233; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]16234; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm216235; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]16236; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm216237; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm416238; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm416239; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm416240; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm216241; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm416242; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm216243; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm016244; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm516245; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm516246; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm016247; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm016248; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm016249; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm016250; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm016251; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [43,43]16252; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm016253; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm116254; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm016255; AVX1-NEXT: retq16256;16257; AVX2-LABEL: ult_43_v4i64:16258; AVX2: # %bb.0:16259; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]16260; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm216261; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]16262; AVX2-NEXT: # ymm3 = mem[0,1,0,1]16263; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm216264; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm016265; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm016266; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm016267; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm016268; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm116269; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm016270; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [43,43,43,43]16271; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016272; AVX2-NEXT: retq16273;16274; AVX512VPOPCNTDQ-LABEL: ult_43_v4i64:16275; AVX512VPOPCNTDQ: # %bb.0:16276; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm016277; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm016278; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [43,43,43,43]16279; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016280; AVX512VPOPCNTDQ-NEXT: retq16281;16282; AVX512VPOPCNTDQVL-LABEL: ult_43_v4i64:16283; AVX512VPOPCNTDQVL: # %bb.0:16284; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm016285; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [43,43,43,43]16286; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016287; AVX512VPOPCNTDQVL-NEXT: retq16288;16289; BITALG_NOVLX-LABEL: ult_43_v4i64:16290; BITALG_NOVLX: # %bb.0:16291; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm016292; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm016293; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm116294; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm016295; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [43,43,43,43]16296; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016297; BITALG_NOVLX-NEXT: retq16298;16299; BITALG-LABEL: ult_43_v4i64:16300; BITALG: # %bb.0:16301; BITALG-NEXT: vpopcntb %ymm0, %ymm016302; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm116303; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm016304; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [43,43,43,43]16305; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016306; BITALG-NEXT: retq16307 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)16308 %3 = icmp ult <4 x i64> %2, <i64 43, i64 43, i64 43, i64 43>16309 %4 = sext <4 x i1> %3 to <4 x i64>16310 ret <4 x i64> %416311}16312 16313define <4 x i64> @ugt_43_v4i64(<4 x i64> %0) {16314; AVX1-LABEL: ugt_43_v4i64:16315; AVX1: # %bb.0:16316; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]16317; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm216318; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]16319; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm216320; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm416321; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm416322; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm416323; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm216324; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm416325; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm216326; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm016327; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm516328; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm516329; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm016330; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm016331; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm016332; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm016333; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm016334; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [43,43]16335; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm016336; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm116337; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm016338; AVX1-NEXT: retq16339;16340; AVX2-LABEL: ugt_43_v4i64:16341; AVX2: # %bb.0:16342; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]16343; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm216344; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]16345; AVX2-NEXT: # ymm3 = mem[0,1,0,1]16346; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm216347; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm016348; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm016349; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm016350; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm016351; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm116352; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm016353; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [43,43,43,43]16354; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016355; AVX2-NEXT: retq16356;16357; AVX512VPOPCNTDQ-LABEL: ugt_43_v4i64:16358; AVX512VPOPCNTDQ: # %bb.0:16359; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm016360; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm016361; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [43,43,43,43]16362; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016363; AVX512VPOPCNTDQ-NEXT: retq16364;16365; AVX512VPOPCNTDQVL-LABEL: ugt_43_v4i64:16366; AVX512VPOPCNTDQVL: # %bb.0:16367; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm016368; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [43,43,43,43]16369; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016370; AVX512VPOPCNTDQVL-NEXT: retq16371;16372; BITALG_NOVLX-LABEL: ugt_43_v4i64:16373; BITALG_NOVLX: # %bb.0:16374; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm016375; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm016376; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm116377; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm016378; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [43,43,43,43]16379; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016380; BITALG_NOVLX-NEXT: retq16381;16382; BITALG-LABEL: ugt_43_v4i64:16383; BITALG: # %bb.0:16384; BITALG-NEXT: vpopcntb %ymm0, %ymm016385; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm116386; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm016387; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [43,43,43,43]16388; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016389; BITALG-NEXT: retq16390 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)16391 %3 = icmp ugt <4 x i64> %2, <i64 43, i64 43, i64 43, i64 43>16392 %4 = sext <4 x i1> %3 to <4 x i64>16393 ret <4 x i64> %416394}16395 16396define <4 x i64> @ult_44_v4i64(<4 x i64> %0) {16397; AVX1-LABEL: ult_44_v4i64:16398; AVX1: # %bb.0:16399; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]16400; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm216401; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]16402; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm216403; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm416404; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm416405; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm416406; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm216407; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm416408; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm216409; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm016410; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm516411; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm516412; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm016413; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm016414; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm016415; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm016416; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm016417; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [44,44]16418; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm016419; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm116420; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm016421; AVX1-NEXT: retq16422;16423; AVX2-LABEL: ult_44_v4i64:16424; AVX2: # %bb.0:16425; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]16426; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm216427; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]16428; AVX2-NEXT: # ymm3 = mem[0,1,0,1]16429; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm216430; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm016431; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm016432; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm016433; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm016434; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm116435; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm016436; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [44,44,44,44]16437; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016438; AVX2-NEXT: retq16439;16440; AVX512VPOPCNTDQ-LABEL: ult_44_v4i64:16441; AVX512VPOPCNTDQ: # %bb.0:16442; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm016443; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm016444; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [44,44,44,44]16445; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016446; AVX512VPOPCNTDQ-NEXT: retq16447;16448; AVX512VPOPCNTDQVL-LABEL: ult_44_v4i64:16449; AVX512VPOPCNTDQVL: # %bb.0:16450; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm016451; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [44,44,44,44]16452; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016453; AVX512VPOPCNTDQVL-NEXT: retq16454;16455; BITALG_NOVLX-LABEL: ult_44_v4i64:16456; BITALG_NOVLX: # %bb.0:16457; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm016458; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm016459; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm116460; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm016461; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [44,44,44,44]16462; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016463; BITALG_NOVLX-NEXT: retq16464;16465; BITALG-LABEL: ult_44_v4i64:16466; BITALG: # %bb.0:16467; BITALG-NEXT: vpopcntb %ymm0, %ymm016468; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm116469; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm016470; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [44,44,44,44]16471; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016472; BITALG-NEXT: retq16473 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)16474 %3 = icmp ult <4 x i64> %2, <i64 44, i64 44, i64 44, i64 44>16475 %4 = sext <4 x i1> %3 to <4 x i64>16476 ret <4 x i64> %416477}16478 16479define <4 x i64> @ugt_44_v4i64(<4 x i64> %0) {16480; AVX1-LABEL: ugt_44_v4i64:16481; AVX1: # %bb.0:16482; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]16483; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm216484; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]16485; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm216486; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm416487; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm416488; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm416489; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm216490; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm416491; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm216492; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm016493; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm516494; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm516495; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm016496; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm016497; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm016498; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm016499; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm016500; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [44,44]16501; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm016502; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm116503; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm016504; AVX1-NEXT: retq16505;16506; AVX2-LABEL: ugt_44_v4i64:16507; AVX2: # %bb.0:16508; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]16509; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm216510; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]16511; AVX2-NEXT: # ymm3 = mem[0,1,0,1]16512; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm216513; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm016514; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm016515; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm016516; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm016517; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm116518; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm016519; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [44,44,44,44]16520; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016521; AVX2-NEXT: retq16522;16523; AVX512VPOPCNTDQ-LABEL: ugt_44_v4i64:16524; AVX512VPOPCNTDQ: # %bb.0:16525; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm016526; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm016527; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [44,44,44,44]16528; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016529; AVX512VPOPCNTDQ-NEXT: retq16530;16531; AVX512VPOPCNTDQVL-LABEL: ugt_44_v4i64:16532; AVX512VPOPCNTDQVL: # %bb.0:16533; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm016534; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [44,44,44,44]16535; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016536; AVX512VPOPCNTDQVL-NEXT: retq16537;16538; BITALG_NOVLX-LABEL: ugt_44_v4i64:16539; BITALG_NOVLX: # %bb.0:16540; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm016541; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm016542; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm116543; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm016544; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [44,44,44,44]16545; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016546; BITALG_NOVLX-NEXT: retq16547;16548; BITALG-LABEL: ugt_44_v4i64:16549; BITALG: # %bb.0:16550; BITALG-NEXT: vpopcntb %ymm0, %ymm016551; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm116552; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm016553; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [44,44,44,44]16554; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016555; BITALG-NEXT: retq16556 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)16557 %3 = icmp ugt <4 x i64> %2, <i64 44, i64 44, i64 44, i64 44>16558 %4 = sext <4 x i1> %3 to <4 x i64>16559 ret <4 x i64> %416560}16561 16562define <4 x i64> @ult_45_v4i64(<4 x i64> %0) {16563; AVX1-LABEL: ult_45_v4i64:16564; AVX1: # %bb.0:16565; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]16566; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm216567; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]16568; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm216569; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm416570; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm416571; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm416572; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm216573; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm416574; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm216575; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm016576; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm516577; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm516578; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm016579; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm016580; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm016581; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm016582; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm016583; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [45,45]16584; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm016585; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm116586; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm016587; AVX1-NEXT: retq16588;16589; AVX2-LABEL: ult_45_v4i64:16590; AVX2: # %bb.0:16591; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]16592; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm216593; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]16594; AVX2-NEXT: # ymm3 = mem[0,1,0,1]16595; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm216596; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm016597; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm016598; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm016599; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm016600; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm116601; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm016602; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [45,45,45,45]16603; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016604; AVX2-NEXT: retq16605;16606; AVX512VPOPCNTDQ-LABEL: ult_45_v4i64:16607; AVX512VPOPCNTDQ: # %bb.0:16608; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm016609; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm016610; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [45,45,45,45]16611; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016612; AVX512VPOPCNTDQ-NEXT: retq16613;16614; AVX512VPOPCNTDQVL-LABEL: ult_45_v4i64:16615; AVX512VPOPCNTDQVL: # %bb.0:16616; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm016617; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [45,45,45,45]16618; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016619; AVX512VPOPCNTDQVL-NEXT: retq16620;16621; BITALG_NOVLX-LABEL: ult_45_v4i64:16622; BITALG_NOVLX: # %bb.0:16623; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm016624; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm016625; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm116626; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm016627; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [45,45,45,45]16628; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016629; BITALG_NOVLX-NEXT: retq16630;16631; BITALG-LABEL: ult_45_v4i64:16632; BITALG: # %bb.0:16633; BITALG-NEXT: vpopcntb %ymm0, %ymm016634; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm116635; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm016636; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [45,45,45,45]16637; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016638; BITALG-NEXT: retq16639 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)16640 %3 = icmp ult <4 x i64> %2, <i64 45, i64 45, i64 45, i64 45>16641 %4 = sext <4 x i1> %3 to <4 x i64>16642 ret <4 x i64> %416643}16644 16645define <4 x i64> @ugt_45_v4i64(<4 x i64> %0) {16646; AVX1-LABEL: ugt_45_v4i64:16647; AVX1: # %bb.0:16648; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]16649; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm216650; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]16651; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm216652; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm416653; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm416654; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm416655; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm216656; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm416657; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm216658; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm016659; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm516660; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm516661; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm016662; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm016663; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm016664; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm016665; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm016666; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [45,45]16667; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm016668; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm116669; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm016670; AVX1-NEXT: retq16671;16672; AVX2-LABEL: ugt_45_v4i64:16673; AVX2: # %bb.0:16674; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]16675; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm216676; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]16677; AVX2-NEXT: # ymm3 = mem[0,1,0,1]16678; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm216679; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm016680; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm016681; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm016682; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm016683; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm116684; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm016685; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [45,45,45,45]16686; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016687; AVX2-NEXT: retq16688;16689; AVX512VPOPCNTDQ-LABEL: ugt_45_v4i64:16690; AVX512VPOPCNTDQ: # %bb.0:16691; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm016692; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm016693; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [45,45,45,45]16694; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016695; AVX512VPOPCNTDQ-NEXT: retq16696;16697; AVX512VPOPCNTDQVL-LABEL: ugt_45_v4i64:16698; AVX512VPOPCNTDQVL: # %bb.0:16699; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm016700; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [45,45,45,45]16701; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016702; AVX512VPOPCNTDQVL-NEXT: retq16703;16704; BITALG_NOVLX-LABEL: ugt_45_v4i64:16705; BITALG_NOVLX: # %bb.0:16706; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm016707; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm016708; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm116709; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm016710; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [45,45,45,45]16711; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016712; BITALG_NOVLX-NEXT: retq16713;16714; BITALG-LABEL: ugt_45_v4i64:16715; BITALG: # %bb.0:16716; BITALG-NEXT: vpopcntb %ymm0, %ymm016717; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm116718; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm016719; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [45,45,45,45]16720; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016721; BITALG-NEXT: retq16722 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)16723 %3 = icmp ugt <4 x i64> %2, <i64 45, i64 45, i64 45, i64 45>16724 %4 = sext <4 x i1> %3 to <4 x i64>16725 ret <4 x i64> %416726}16727 16728define <4 x i64> @ult_46_v4i64(<4 x i64> %0) {16729; AVX1-LABEL: ult_46_v4i64:16730; AVX1: # %bb.0:16731; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]16732; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm216733; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]16734; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm216735; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm416736; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm416737; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm416738; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm216739; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm416740; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm216741; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm016742; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm516743; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm516744; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm016745; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm016746; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm016747; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm016748; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm016749; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [46,46]16750; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm016751; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm116752; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm016753; AVX1-NEXT: retq16754;16755; AVX2-LABEL: ult_46_v4i64:16756; AVX2: # %bb.0:16757; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]16758; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm216759; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]16760; AVX2-NEXT: # ymm3 = mem[0,1,0,1]16761; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm216762; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm016763; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm016764; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm016765; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm016766; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm116767; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm016768; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [46,46,46,46]16769; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016770; AVX2-NEXT: retq16771;16772; AVX512VPOPCNTDQ-LABEL: ult_46_v4i64:16773; AVX512VPOPCNTDQ: # %bb.0:16774; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm016775; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm016776; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [46,46,46,46]16777; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016778; AVX512VPOPCNTDQ-NEXT: retq16779;16780; AVX512VPOPCNTDQVL-LABEL: ult_46_v4i64:16781; AVX512VPOPCNTDQVL: # %bb.0:16782; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm016783; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [46,46,46,46]16784; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016785; AVX512VPOPCNTDQVL-NEXT: retq16786;16787; BITALG_NOVLX-LABEL: ult_46_v4i64:16788; BITALG_NOVLX: # %bb.0:16789; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm016790; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm016791; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm116792; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm016793; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [46,46,46,46]16794; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016795; BITALG_NOVLX-NEXT: retq16796;16797; BITALG-LABEL: ult_46_v4i64:16798; BITALG: # %bb.0:16799; BITALG-NEXT: vpopcntb %ymm0, %ymm016800; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm116801; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm016802; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [46,46,46,46]16803; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016804; BITALG-NEXT: retq16805 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)16806 %3 = icmp ult <4 x i64> %2, <i64 46, i64 46, i64 46, i64 46>16807 %4 = sext <4 x i1> %3 to <4 x i64>16808 ret <4 x i64> %416809}16810 16811define <4 x i64> @ugt_46_v4i64(<4 x i64> %0) {16812; AVX1-LABEL: ugt_46_v4i64:16813; AVX1: # %bb.0:16814; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]16815; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm216816; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]16817; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm216818; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm416819; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm416820; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm416821; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm216822; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm416823; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm216824; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm016825; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm516826; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm516827; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm016828; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm016829; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm016830; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm016831; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm016832; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [46,46]16833; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm016834; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm116835; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm016836; AVX1-NEXT: retq16837;16838; AVX2-LABEL: ugt_46_v4i64:16839; AVX2: # %bb.0:16840; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]16841; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm216842; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]16843; AVX2-NEXT: # ymm3 = mem[0,1,0,1]16844; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm216845; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm016846; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm016847; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm016848; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm016849; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm116850; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm016851; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [46,46,46,46]16852; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016853; AVX2-NEXT: retq16854;16855; AVX512VPOPCNTDQ-LABEL: ugt_46_v4i64:16856; AVX512VPOPCNTDQ: # %bb.0:16857; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm016858; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm016859; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [46,46,46,46]16860; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016861; AVX512VPOPCNTDQ-NEXT: retq16862;16863; AVX512VPOPCNTDQVL-LABEL: ugt_46_v4i64:16864; AVX512VPOPCNTDQVL: # %bb.0:16865; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm016866; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [46,46,46,46]16867; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016868; AVX512VPOPCNTDQVL-NEXT: retq16869;16870; BITALG_NOVLX-LABEL: ugt_46_v4i64:16871; BITALG_NOVLX: # %bb.0:16872; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm016873; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm016874; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm116875; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm016876; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [46,46,46,46]16877; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016878; BITALG_NOVLX-NEXT: retq16879;16880; BITALG-LABEL: ugt_46_v4i64:16881; BITALG: # %bb.0:16882; BITALG-NEXT: vpopcntb %ymm0, %ymm016883; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm116884; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm016885; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [46,46,46,46]16886; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm016887; BITALG-NEXT: retq16888 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)16889 %3 = icmp ugt <4 x i64> %2, <i64 46, i64 46, i64 46, i64 46>16890 %4 = sext <4 x i1> %3 to <4 x i64>16891 ret <4 x i64> %416892}16893 16894define <4 x i64> @ult_47_v4i64(<4 x i64> %0) {16895; AVX1-LABEL: ult_47_v4i64:16896; AVX1: # %bb.0:16897; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]16898; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm216899; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]16900; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm216901; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm416902; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm416903; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm416904; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm216905; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm416906; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm216907; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm016908; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm516909; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm516910; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm016911; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm016912; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm016913; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm016914; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm016915; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [47,47]16916; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm016917; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm116918; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm016919; AVX1-NEXT: retq16920;16921; AVX2-LABEL: ult_47_v4i64:16922; AVX2: # %bb.0:16923; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]16924; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm216925; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]16926; AVX2-NEXT: # ymm3 = mem[0,1,0,1]16927; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm216928; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm016929; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm016930; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm016931; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm016932; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm116933; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm016934; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [47,47,47,47]16935; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016936; AVX2-NEXT: retq16937;16938; AVX512VPOPCNTDQ-LABEL: ult_47_v4i64:16939; AVX512VPOPCNTDQ: # %bb.0:16940; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm016941; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm016942; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [47,47,47,47]16943; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016944; AVX512VPOPCNTDQ-NEXT: retq16945;16946; AVX512VPOPCNTDQVL-LABEL: ult_47_v4i64:16947; AVX512VPOPCNTDQVL: # %bb.0:16948; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm016949; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [47,47,47,47]16950; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016951; AVX512VPOPCNTDQVL-NEXT: retq16952;16953; BITALG_NOVLX-LABEL: ult_47_v4i64:16954; BITALG_NOVLX: # %bb.0:16955; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm016956; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm016957; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm116958; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm016959; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [47,47,47,47]16960; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016961; BITALG_NOVLX-NEXT: retq16962;16963; BITALG-LABEL: ult_47_v4i64:16964; BITALG: # %bb.0:16965; BITALG-NEXT: vpopcntb %ymm0, %ymm016966; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm116967; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm016968; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [47,47,47,47]16969; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm016970; BITALG-NEXT: retq16971 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)16972 %3 = icmp ult <4 x i64> %2, <i64 47, i64 47, i64 47, i64 47>16973 %4 = sext <4 x i1> %3 to <4 x i64>16974 ret <4 x i64> %416975}16976 16977define <4 x i64> @ugt_47_v4i64(<4 x i64> %0) {16978; AVX1-LABEL: ugt_47_v4i64:16979; AVX1: # %bb.0:16980; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]16981; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm216982; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]16983; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm216984; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm416985; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm416986; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm416987; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm216988; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm416989; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm216990; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm016991; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm516992; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm516993; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm016994; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm016995; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm016996; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm016997; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm016998; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [47,47]16999; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm017000; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm117001; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm017002; AVX1-NEXT: retq17003;17004; AVX2-LABEL: ugt_47_v4i64:17005; AVX2: # %bb.0:17006; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]17007; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm217008; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]17009; AVX2-NEXT: # ymm3 = mem[0,1,0,1]17010; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm217011; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm017012; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm017013; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm017014; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm017015; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm117016; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm017017; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [47,47,47,47]17018; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017019; AVX2-NEXT: retq17020;17021; AVX512VPOPCNTDQ-LABEL: ugt_47_v4i64:17022; AVX512VPOPCNTDQ: # %bb.0:17023; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm017024; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm017025; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [47,47,47,47]17026; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017027; AVX512VPOPCNTDQ-NEXT: retq17028;17029; AVX512VPOPCNTDQVL-LABEL: ugt_47_v4i64:17030; AVX512VPOPCNTDQVL: # %bb.0:17031; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm017032; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [47,47,47,47]17033; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017034; AVX512VPOPCNTDQVL-NEXT: retq17035;17036; BITALG_NOVLX-LABEL: ugt_47_v4i64:17037; BITALG_NOVLX: # %bb.0:17038; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm017039; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm017040; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm117041; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm017042; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [47,47,47,47]17043; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017044; BITALG_NOVLX-NEXT: retq17045;17046; BITALG-LABEL: ugt_47_v4i64:17047; BITALG: # %bb.0:17048; BITALG-NEXT: vpopcntb %ymm0, %ymm017049; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm117050; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm017051; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [47,47,47,47]17052; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017053; BITALG-NEXT: retq17054 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)17055 %3 = icmp ugt <4 x i64> %2, <i64 47, i64 47, i64 47, i64 47>17056 %4 = sext <4 x i1> %3 to <4 x i64>17057 ret <4 x i64> %417058}17059 17060define <4 x i64> @ult_48_v4i64(<4 x i64> %0) {17061; AVX1-LABEL: ult_48_v4i64:17062; AVX1: # %bb.0:17063; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]17064; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm217065; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]17066; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm217067; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm417068; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm417069; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm417070; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm217071; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm417072; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm217073; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm017074; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm517075; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm517076; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm017077; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm017078; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm017079; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm017080; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm017081; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [48,48]17082; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm017083; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm117084; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm017085; AVX1-NEXT: retq17086;17087; AVX2-LABEL: ult_48_v4i64:17088; AVX2: # %bb.0:17089; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]17090; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm217091; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]17092; AVX2-NEXT: # ymm3 = mem[0,1,0,1]17093; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm217094; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm017095; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm017096; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm017097; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm017098; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm117099; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm017100; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [48,48,48,48]17101; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017102; AVX2-NEXT: retq17103;17104; AVX512VPOPCNTDQ-LABEL: ult_48_v4i64:17105; AVX512VPOPCNTDQ: # %bb.0:17106; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm017107; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm017108; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [48,48,48,48]17109; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017110; AVX512VPOPCNTDQ-NEXT: retq17111;17112; AVX512VPOPCNTDQVL-LABEL: ult_48_v4i64:17113; AVX512VPOPCNTDQVL: # %bb.0:17114; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm017115; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [48,48,48,48]17116; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017117; AVX512VPOPCNTDQVL-NEXT: retq17118;17119; BITALG_NOVLX-LABEL: ult_48_v4i64:17120; BITALG_NOVLX: # %bb.0:17121; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm017122; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm017123; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm117124; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm017125; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [48,48,48,48]17126; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017127; BITALG_NOVLX-NEXT: retq17128;17129; BITALG-LABEL: ult_48_v4i64:17130; BITALG: # %bb.0:17131; BITALG-NEXT: vpopcntb %ymm0, %ymm017132; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm117133; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm017134; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [48,48,48,48]17135; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017136; BITALG-NEXT: retq17137 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)17138 %3 = icmp ult <4 x i64> %2, <i64 48, i64 48, i64 48, i64 48>17139 %4 = sext <4 x i1> %3 to <4 x i64>17140 ret <4 x i64> %417141}17142 17143define <4 x i64> @ugt_48_v4i64(<4 x i64> %0) {17144; AVX1-LABEL: ugt_48_v4i64:17145; AVX1: # %bb.0:17146; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]17147; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm217148; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]17149; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm217150; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm417151; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm417152; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm417153; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm217154; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm417155; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm217156; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm017157; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm517158; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm517159; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm017160; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm017161; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm017162; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm017163; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm017164; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [48,48]17165; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm017166; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm117167; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm017168; AVX1-NEXT: retq17169;17170; AVX2-LABEL: ugt_48_v4i64:17171; AVX2: # %bb.0:17172; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]17173; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm217174; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]17175; AVX2-NEXT: # ymm3 = mem[0,1,0,1]17176; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm217177; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm017178; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm017179; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm017180; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm017181; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm117182; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm017183; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [48,48,48,48]17184; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017185; AVX2-NEXT: retq17186;17187; AVX512VPOPCNTDQ-LABEL: ugt_48_v4i64:17188; AVX512VPOPCNTDQ: # %bb.0:17189; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm017190; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm017191; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [48,48,48,48]17192; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017193; AVX512VPOPCNTDQ-NEXT: retq17194;17195; AVX512VPOPCNTDQVL-LABEL: ugt_48_v4i64:17196; AVX512VPOPCNTDQVL: # %bb.0:17197; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm017198; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [48,48,48,48]17199; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017200; AVX512VPOPCNTDQVL-NEXT: retq17201;17202; BITALG_NOVLX-LABEL: ugt_48_v4i64:17203; BITALG_NOVLX: # %bb.0:17204; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm017205; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm017206; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm117207; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm017208; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [48,48,48,48]17209; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017210; BITALG_NOVLX-NEXT: retq17211;17212; BITALG-LABEL: ugt_48_v4i64:17213; BITALG: # %bb.0:17214; BITALG-NEXT: vpopcntb %ymm0, %ymm017215; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm117216; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm017217; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [48,48,48,48]17218; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017219; BITALG-NEXT: retq17220 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)17221 %3 = icmp ugt <4 x i64> %2, <i64 48, i64 48, i64 48, i64 48>17222 %4 = sext <4 x i1> %3 to <4 x i64>17223 ret <4 x i64> %417224}17225 17226define <4 x i64> @ult_49_v4i64(<4 x i64> %0) {17227; AVX1-LABEL: ult_49_v4i64:17228; AVX1: # %bb.0:17229; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]17230; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm217231; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]17232; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm217233; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm417234; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm417235; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm417236; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm217237; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm417238; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm217239; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm017240; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm517241; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm517242; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm017243; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm017244; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm017245; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm017246; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm017247; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [49,49]17248; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm017249; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm117250; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm017251; AVX1-NEXT: retq17252;17253; AVX2-LABEL: ult_49_v4i64:17254; AVX2: # %bb.0:17255; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]17256; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm217257; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]17258; AVX2-NEXT: # ymm3 = mem[0,1,0,1]17259; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm217260; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm017261; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm017262; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm017263; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm017264; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm117265; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm017266; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [49,49,49,49]17267; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017268; AVX2-NEXT: retq17269;17270; AVX512VPOPCNTDQ-LABEL: ult_49_v4i64:17271; AVX512VPOPCNTDQ: # %bb.0:17272; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm017273; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm017274; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [49,49,49,49]17275; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017276; AVX512VPOPCNTDQ-NEXT: retq17277;17278; AVX512VPOPCNTDQVL-LABEL: ult_49_v4i64:17279; AVX512VPOPCNTDQVL: # %bb.0:17280; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm017281; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [49,49,49,49]17282; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017283; AVX512VPOPCNTDQVL-NEXT: retq17284;17285; BITALG_NOVLX-LABEL: ult_49_v4i64:17286; BITALG_NOVLX: # %bb.0:17287; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm017288; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm017289; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm117290; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm017291; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [49,49,49,49]17292; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017293; BITALG_NOVLX-NEXT: retq17294;17295; BITALG-LABEL: ult_49_v4i64:17296; BITALG: # %bb.0:17297; BITALG-NEXT: vpopcntb %ymm0, %ymm017298; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm117299; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm017300; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [49,49,49,49]17301; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017302; BITALG-NEXT: retq17303 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)17304 %3 = icmp ult <4 x i64> %2, <i64 49, i64 49, i64 49, i64 49>17305 %4 = sext <4 x i1> %3 to <4 x i64>17306 ret <4 x i64> %417307}17308 17309define <4 x i64> @ugt_49_v4i64(<4 x i64> %0) {17310; AVX1-LABEL: ugt_49_v4i64:17311; AVX1: # %bb.0:17312; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]17313; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm217314; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]17315; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm217316; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm417317; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm417318; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm417319; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm217320; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm417321; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm217322; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm017323; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm517324; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm517325; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm017326; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm017327; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm017328; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm017329; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm017330; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [49,49]17331; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm017332; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm117333; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm017334; AVX1-NEXT: retq17335;17336; AVX2-LABEL: ugt_49_v4i64:17337; AVX2: # %bb.0:17338; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]17339; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm217340; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]17341; AVX2-NEXT: # ymm3 = mem[0,1,0,1]17342; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm217343; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm017344; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm017345; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm017346; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm017347; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm117348; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm017349; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [49,49,49,49]17350; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017351; AVX2-NEXT: retq17352;17353; AVX512VPOPCNTDQ-LABEL: ugt_49_v4i64:17354; AVX512VPOPCNTDQ: # %bb.0:17355; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm017356; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm017357; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [49,49,49,49]17358; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017359; AVX512VPOPCNTDQ-NEXT: retq17360;17361; AVX512VPOPCNTDQVL-LABEL: ugt_49_v4i64:17362; AVX512VPOPCNTDQVL: # %bb.0:17363; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm017364; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [49,49,49,49]17365; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017366; AVX512VPOPCNTDQVL-NEXT: retq17367;17368; BITALG_NOVLX-LABEL: ugt_49_v4i64:17369; BITALG_NOVLX: # %bb.0:17370; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm017371; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm017372; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm117373; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm017374; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [49,49,49,49]17375; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017376; BITALG_NOVLX-NEXT: retq17377;17378; BITALG-LABEL: ugt_49_v4i64:17379; BITALG: # %bb.0:17380; BITALG-NEXT: vpopcntb %ymm0, %ymm017381; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm117382; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm017383; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [49,49,49,49]17384; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017385; BITALG-NEXT: retq17386 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)17387 %3 = icmp ugt <4 x i64> %2, <i64 49, i64 49, i64 49, i64 49>17388 %4 = sext <4 x i1> %3 to <4 x i64>17389 ret <4 x i64> %417390}17391 17392define <4 x i64> @ult_50_v4i64(<4 x i64> %0) {17393; AVX1-LABEL: ult_50_v4i64:17394; AVX1: # %bb.0:17395; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]17396; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm217397; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]17398; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm217399; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm417400; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm417401; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm417402; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm217403; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm417404; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm217405; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm017406; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm517407; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm517408; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm017409; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm017410; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm017411; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm017412; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm017413; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [50,50]17414; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm017415; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm117416; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm017417; AVX1-NEXT: retq17418;17419; AVX2-LABEL: ult_50_v4i64:17420; AVX2: # %bb.0:17421; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]17422; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm217423; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]17424; AVX2-NEXT: # ymm3 = mem[0,1,0,1]17425; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm217426; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm017427; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm017428; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm017429; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm017430; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm117431; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm017432; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [50,50,50,50]17433; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017434; AVX2-NEXT: retq17435;17436; AVX512VPOPCNTDQ-LABEL: ult_50_v4i64:17437; AVX512VPOPCNTDQ: # %bb.0:17438; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm017439; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm017440; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [50,50,50,50]17441; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017442; AVX512VPOPCNTDQ-NEXT: retq17443;17444; AVX512VPOPCNTDQVL-LABEL: ult_50_v4i64:17445; AVX512VPOPCNTDQVL: # %bb.0:17446; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm017447; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [50,50,50,50]17448; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017449; AVX512VPOPCNTDQVL-NEXT: retq17450;17451; BITALG_NOVLX-LABEL: ult_50_v4i64:17452; BITALG_NOVLX: # %bb.0:17453; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm017454; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm017455; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm117456; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm017457; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [50,50,50,50]17458; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017459; BITALG_NOVLX-NEXT: retq17460;17461; BITALG-LABEL: ult_50_v4i64:17462; BITALG: # %bb.0:17463; BITALG-NEXT: vpopcntb %ymm0, %ymm017464; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm117465; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm017466; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [50,50,50,50]17467; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017468; BITALG-NEXT: retq17469 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)17470 %3 = icmp ult <4 x i64> %2, <i64 50, i64 50, i64 50, i64 50>17471 %4 = sext <4 x i1> %3 to <4 x i64>17472 ret <4 x i64> %417473}17474 17475define <4 x i64> @ugt_50_v4i64(<4 x i64> %0) {17476; AVX1-LABEL: ugt_50_v4i64:17477; AVX1: # %bb.0:17478; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]17479; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm217480; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]17481; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm217482; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm417483; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm417484; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm417485; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm217486; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm417487; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm217488; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm017489; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm517490; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm517491; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm017492; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm017493; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm017494; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm017495; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm017496; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [50,50]17497; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm017498; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm117499; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm017500; AVX1-NEXT: retq17501;17502; AVX2-LABEL: ugt_50_v4i64:17503; AVX2: # %bb.0:17504; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]17505; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm217506; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]17507; AVX2-NEXT: # ymm3 = mem[0,1,0,1]17508; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm217509; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm017510; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm017511; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm017512; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm017513; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm117514; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm017515; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [50,50,50,50]17516; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017517; AVX2-NEXT: retq17518;17519; AVX512VPOPCNTDQ-LABEL: ugt_50_v4i64:17520; AVX512VPOPCNTDQ: # %bb.0:17521; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm017522; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm017523; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [50,50,50,50]17524; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017525; AVX512VPOPCNTDQ-NEXT: retq17526;17527; AVX512VPOPCNTDQVL-LABEL: ugt_50_v4i64:17528; AVX512VPOPCNTDQVL: # %bb.0:17529; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm017530; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [50,50,50,50]17531; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017532; AVX512VPOPCNTDQVL-NEXT: retq17533;17534; BITALG_NOVLX-LABEL: ugt_50_v4i64:17535; BITALG_NOVLX: # %bb.0:17536; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm017537; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm017538; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm117539; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm017540; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [50,50,50,50]17541; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017542; BITALG_NOVLX-NEXT: retq17543;17544; BITALG-LABEL: ugt_50_v4i64:17545; BITALG: # %bb.0:17546; BITALG-NEXT: vpopcntb %ymm0, %ymm017547; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm117548; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm017549; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [50,50,50,50]17550; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017551; BITALG-NEXT: retq17552 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)17553 %3 = icmp ugt <4 x i64> %2, <i64 50, i64 50, i64 50, i64 50>17554 %4 = sext <4 x i1> %3 to <4 x i64>17555 ret <4 x i64> %417556}17557 17558define <4 x i64> @ult_51_v4i64(<4 x i64> %0) {17559; AVX1-LABEL: ult_51_v4i64:17560; AVX1: # %bb.0:17561; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]17562; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm217563; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]17564; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm217565; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm417566; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm417567; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm417568; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm217569; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm417570; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm217571; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm017572; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm517573; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm517574; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm017575; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm017576; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm017577; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm017578; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm017579; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [51,51]17580; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm017581; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm117582; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm017583; AVX1-NEXT: retq17584;17585; AVX2-LABEL: ult_51_v4i64:17586; AVX2: # %bb.0:17587; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]17588; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm217589; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]17590; AVX2-NEXT: # ymm3 = mem[0,1,0,1]17591; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm217592; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm017593; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm017594; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm017595; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm017596; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm117597; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm017598; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [51,51,51,51]17599; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017600; AVX2-NEXT: retq17601;17602; AVX512VPOPCNTDQ-LABEL: ult_51_v4i64:17603; AVX512VPOPCNTDQ: # %bb.0:17604; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm017605; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm017606; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [51,51,51,51]17607; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017608; AVX512VPOPCNTDQ-NEXT: retq17609;17610; AVX512VPOPCNTDQVL-LABEL: ult_51_v4i64:17611; AVX512VPOPCNTDQVL: # %bb.0:17612; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm017613; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [51,51,51,51]17614; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017615; AVX512VPOPCNTDQVL-NEXT: retq17616;17617; BITALG_NOVLX-LABEL: ult_51_v4i64:17618; BITALG_NOVLX: # %bb.0:17619; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm017620; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm017621; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm117622; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm017623; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [51,51,51,51]17624; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017625; BITALG_NOVLX-NEXT: retq17626;17627; BITALG-LABEL: ult_51_v4i64:17628; BITALG: # %bb.0:17629; BITALG-NEXT: vpopcntb %ymm0, %ymm017630; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm117631; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm017632; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [51,51,51,51]17633; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017634; BITALG-NEXT: retq17635 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)17636 %3 = icmp ult <4 x i64> %2, <i64 51, i64 51, i64 51, i64 51>17637 %4 = sext <4 x i1> %3 to <4 x i64>17638 ret <4 x i64> %417639}17640 17641define <4 x i64> @ugt_51_v4i64(<4 x i64> %0) {17642; AVX1-LABEL: ugt_51_v4i64:17643; AVX1: # %bb.0:17644; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]17645; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm217646; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]17647; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm217648; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm417649; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm417650; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm417651; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm217652; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm417653; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm217654; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm017655; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm517656; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm517657; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm017658; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm017659; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm017660; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm017661; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm017662; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [51,51]17663; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm017664; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm117665; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm017666; AVX1-NEXT: retq17667;17668; AVX2-LABEL: ugt_51_v4i64:17669; AVX2: # %bb.0:17670; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]17671; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm217672; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]17673; AVX2-NEXT: # ymm3 = mem[0,1,0,1]17674; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm217675; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm017676; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm017677; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm017678; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm017679; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm117680; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm017681; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [51,51,51,51]17682; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017683; AVX2-NEXT: retq17684;17685; AVX512VPOPCNTDQ-LABEL: ugt_51_v4i64:17686; AVX512VPOPCNTDQ: # %bb.0:17687; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm017688; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm017689; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [51,51,51,51]17690; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017691; AVX512VPOPCNTDQ-NEXT: retq17692;17693; AVX512VPOPCNTDQVL-LABEL: ugt_51_v4i64:17694; AVX512VPOPCNTDQVL: # %bb.0:17695; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm017696; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [51,51,51,51]17697; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017698; AVX512VPOPCNTDQVL-NEXT: retq17699;17700; BITALG_NOVLX-LABEL: ugt_51_v4i64:17701; BITALG_NOVLX: # %bb.0:17702; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm017703; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm017704; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm117705; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm017706; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [51,51,51,51]17707; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017708; BITALG_NOVLX-NEXT: retq17709;17710; BITALG-LABEL: ugt_51_v4i64:17711; BITALG: # %bb.0:17712; BITALG-NEXT: vpopcntb %ymm0, %ymm017713; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm117714; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm017715; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [51,51,51,51]17716; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017717; BITALG-NEXT: retq17718 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)17719 %3 = icmp ugt <4 x i64> %2, <i64 51, i64 51, i64 51, i64 51>17720 %4 = sext <4 x i1> %3 to <4 x i64>17721 ret <4 x i64> %417722}17723 17724define <4 x i64> @ult_52_v4i64(<4 x i64> %0) {17725; AVX1-LABEL: ult_52_v4i64:17726; AVX1: # %bb.0:17727; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]17728; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm217729; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]17730; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm217731; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm417732; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm417733; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm417734; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm217735; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm417736; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm217737; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm017738; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm517739; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm517740; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm017741; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm017742; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm017743; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm017744; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm017745; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [52,52]17746; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm017747; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm117748; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm017749; AVX1-NEXT: retq17750;17751; AVX2-LABEL: ult_52_v4i64:17752; AVX2: # %bb.0:17753; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]17754; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm217755; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]17756; AVX2-NEXT: # ymm3 = mem[0,1,0,1]17757; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm217758; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm017759; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm017760; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm017761; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm017762; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm117763; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm017764; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [52,52,52,52]17765; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017766; AVX2-NEXT: retq17767;17768; AVX512VPOPCNTDQ-LABEL: ult_52_v4i64:17769; AVX512VPOPCNTDQ: # %bb.0:17770; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm017771; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm017772; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [52,52,52,52]17773; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017774; AVX512VPOPCNTDQ-NEXT: retq17775;17776; AVX512VPOPCNTDQVL-LABEL: ult_52_v4i64:17777; AVX512VPOPCNTDQVL: # %bb.0:17778; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm017779; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [52,52,52,52]17780; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017781; AVX512VPOPCNTDQVL-NEXT: retq17782;17783; BITALG_NOVLX-LABEL: ult_52_v4i64:17784; BITALG_NOVLX: # %bb.0:17785; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm017786; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm017787; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm117788; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm017789; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [52,52,52,52]17790; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017791; BITALG_NOVLX-NEXT: retq17792;17793; BITALG-LABEL: ult_52_v4i64:17794; BITALG: # %bb.0:17795; BITALG-NEXT: vpopcntb %ymm0, %ymm017796; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm117797; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm017798; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [52,52,52,52]17799; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017800; BITALG-NEXT: retq17801 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)17802 %3 = icmp ult <4 x i64> %2, <i64 52, i64 52, i64 52, i64 52>17803 %4 = sext <4 x i1> %3 to <4 x i64>17804 ret <4 x i64> %417805}17806 17807define <4 x i64> @ugt_52_v4i64(<4 x i64> %0) {17808; AVX1-LABEL: ugt_52_v4i64:17809; AVX1: # %bb.0:17810; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]17811; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm217812; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]17813; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm217814; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm417815; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm417816; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm417817; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm217818; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm417819; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm217820; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm017821; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm517822; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm517823; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm017824; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm017825; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm017826; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm017827; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm017828; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [52,52]17829; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm017830; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm117831; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm017832; AVX1-NEXT: retq17833;17834; AVX2-LABEL: ugt_52_v4i64:17835; AVX2: # %bb.0:17836; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]17837; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm217838; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]17839; AVX2-NEXT: # ymm3 = mem[0,1,0,1]17840; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm217841; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm017842; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm017843; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm017844; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm017845; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm117846; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm017847; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [52,52,52,52]17848; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017849; AVX2-NEXT: retq17850;17851; AVX512VPOPCNTDQ-LABEL: ugt_52_v4i64:17852; AVX512VPOPCNTDQ: # %bb.0:17853; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm017854; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm017855; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [52,52,52,52]17856; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017857; AVX512VPOPCNTDQ-NEXT: retq17858;17859; AVX512VPOPCNTDQVL-LABEL: ugt_52_v4i64:17860; AVX512VPOPCNTDQVL: # %bb.0:17861; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm017862; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [52,52,52,52]17863; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017864; AVX512VPOPCNTDQVL-NEXT: retq17865;17866; BITALG_NOVLX-LABEL: ugt_52_v4i64:17867; BITALG_NOVLX: # %bb.0:17868; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm017869; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm017870; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm117871; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm017872; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [52,52,52,52]17873; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017874; BITALG_NOVLX-NEXT: retq17875;17876; BITALG-LABEL: ugt_52_v4i64:17877; BITALG: # %bb.0:17878; BITALG-NEXT: vpopcntb %ymm0, %ymm017879; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm117880; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm017881; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [52,52,52,52]17882; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm017883; BITALG-NEXT: retq17884 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)17885 %3 = icmp ugt <4 x i64> %2, <i64 52, i64 52, i64 52, i64 52>17886 %4 = sext <4 x i1> %3 to <4 x i64>17887 ret <4 x i64> %417888}17889 17890define <4 x i64> @ult_53_v4i64(<4 x i64> %0) {17891; AVX1-LABEL: ult_53_v4i64:17892; AVX1: # %bb.0:17893; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]17894; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm217895; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]17896; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm217897; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm417898; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm417899; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm417900; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm217901; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm417902; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm217903; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm017904; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm517905; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm517906; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm017907; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm017908; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm017909; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm017910; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm017911; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [53,53]17912; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm017913; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm117914; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm017915; AVX1-NEXT: retq17916;17917; AVX2-LABEL: ult_53_v4i64:17918; AVX2: # %bb.0:17919; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]17920; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm217921; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]17922; AVX2-NEXT: # ymm3 = mem[0,1,0,1]17923; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm217924; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm017925; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm017926; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm017927; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm017928; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm117929; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm017930; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [53,53,53,53]17931; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017932; AVX2-NEXT: retq17933;17934; AVX512VPOPCNTDQ-LABEL: ult_53_v4i64:17935; AVX512VPOPCNTDQ: # %bb.0:17936; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm017937; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm017938; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [53,53,53,53]17939; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017940; AVX512VPOPCNTDQ-NEXT: retq17941;17942; AVX512VPOPCNTDQVL-LABEL: ult_53_v4i64:17943; AVX512VPOPCNTDQVL: # %bb.0:17944; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm017945; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [53,53,53,53]17946; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017947; AVX512VPOPCNTDQVL-NEXT: retq17948;17949; BITALG_NOVLX-LABEL: ult_53_v4i64:17950; BITALG_NOVLX: # %bb.0:17951; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm017952; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm017953; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm117954; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm017955; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [53,53,53,53]17956; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017957; BITALG_NOVLX-NEXT: retq17958;17959; BITALG-LABEL: ult_53_v4i64:17960; BITALG: # %bb.0:17961; BITALG-NEXT: vpopcntb %ymm0, %ymm017962; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm117963; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm017964; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [53,53,53,53]17965; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm017966; BITALG-NEXT: retq17967 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)17968 %3 = icmp ult <4 x i64> %2, <i64 53, i64 53, i64 53, i64 53>17969 %4 = sext <4 x i1> %3 to <4 x i64>17970 ret <4 x i64> %417971}17972 17973define <4 x i64> @ugt_53_v4i64(<4 x i64> %0) {17974; AVX1-LABEL: ugt_53_v4i64:17975; AVX1: # %bb.0:17976; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]17977; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm217978; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]17979; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm217980; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm417981; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm417982; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm417983; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm217984; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm417985; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm217986; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm017987; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm517988; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm517989; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm017990; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm017991; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm017992; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm017993; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm017994; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [53,53]17995; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm017996; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm117997; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm017998; AVX1-NEXT: retq17999;18000; AVX2-LABEL: ugt_53_v4i64:18001; AVX2: # %bb.0:18002; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]18003; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm218004; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]18005; AVX2-NEXT: # ymm3 = mem[0,1,0,1]18006; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm218007; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm018008; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm018009; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm018010; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm018011; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm118012; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm018013; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [53,53,53,53]18014; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018015; AVX2-NEXT: retq18016;18017; AVX512VPOPCNTDQ-LABEL: ugt_53_v4i64:18018; AVX512VPOPCNTDQ: # %bb.0:18019; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm018020; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm018021; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [53,53,53,53]18022; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018023; AVX512VPOPCNTDQ-NEXT: retq18024;18025; AVX512VPOPCNTDQVL-LABEL: ugt_53_v4i64:18026; AVX512VPOPCNTDQVL: # %bb.0:18027; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm018028; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [53,53,53,53]18029; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018030; AVX512VPOPCNTDQVL-NEXT: retq18031;18032; BITALG_NOVLX-LABEL: ugt_53_v4i64:18033; BITALG_NOVLX: # %bb.0:18034; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm018035; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm018036; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm118037; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm018038; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [53,53,53,53]18039; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018040; BITALG_NOVLX-NEXT: retq18041;18042; BITALG-LABEL: ugt_53_v4i64:18043; BITALG: # %bb.0:18044; BITALG-NEXT: vpopcntb %ymm0, %ymm018045; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm118046; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm018047; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [53,53,53,53]18048; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018049; BITALG-NEXT: retq18050 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)18051 %3 = icmp ugt <4 x i64> %2, <i64 53, i64 53, i64 53, i64 53>18052 %4 = sext <4 x i1> %3 to <4 x i64>18053 ret <4 x i64> %418054}18055 18056define <4 x i64> @ult_54_v4i64(<4 x i64> %0) {18057; AVX1-LABEL: ult_54_v4i64:18058; AVX1: # %bb.0:18059; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]18060; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm218061; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]18062; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm218063; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm418064; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm418065; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm418066; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm218067; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm418068; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm218069; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm018070; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm518071; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm518072; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm018073; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm018074; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm018075; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm018076; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm018077; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [54,54]18078; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm018079; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm118080; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm018081; AVX1-NEXT: retq18082;18083; AVX2-LABEL: ult_54_v4i64:18084; AVX2: # %bb.0:18085; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]18086; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm218087; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]18088; AVX2-NEXT: # ymm3 = mem[0,1,0,1]18089; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm218090; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm018091; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm018092; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm018093; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm018094; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm118095; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm018096; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [54,54,54,54]18097; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018098; AVX2-NEXT: retq18099;18100; AVX512VPOPCNTDQ-LABEL: ult_54_v4i64:18101; AVX512VPOPCNTDQ: # %bb.0:18102; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm018103; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm018104; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [54,54,54,54]18105; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018106; AVX512VPOPCNTDQ-NEXT: retq18107;18108; AVX512VPOPCNTDQVL-LABEL: ult_54_v4i64:18109; AVX512VPOPCNTDQVL: # %bb.0:18110; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm018111; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [54,54,54,54]18112; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018113; AVX512VPOPCNTDQVL-NEXT: retq18114;18115; BITALG_NOVLX-LABEL: ult_54_v4i64:18116; BITALG_NOVLX: # %bb.0:18117; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm018118; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm018119; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm118120; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm018121; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [54,54,54,54]18122; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018123; BITALG_NOVLX-NEXT: retq18124;18125; BITALG-LABEL: ult_54_v4i64:18126; BITALG: # %bb.0:18127; BITALG-NEXT: vpopcntb %ymm0, %ymm018128; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm118129; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm018130; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [54,54,54,54]18131; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018132; BITALG-NEXT: retq18133 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)18134 %3 = icmp ult <4 x i64> %2, <i64 54, i64 54, i64 54, i64 54>18135 %4 = sext <4 x i1> %3 to <4 x i64>18136 ret <4 x i64> %418137}18138 18139define <4 x i64> @ugt_54_v4i64(<4 x i64> %0) {18140; AVX1-LABEL: ugt_54_v4i64:18141; AVX1: # %bb.0:18142; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]18143; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm218144; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]18145; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm218146; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm418147; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm418148; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm418149; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm218150; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm418151; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm218152; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm018153; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm518154; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm518155; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm018156; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm018157; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm018158; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm018159; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm018160; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [54,54]18161; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm018162; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm118163; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm018164; AVX1-NEXT: retq18165;18166; AVX2-LABEL: ugt_54_v4i64:18167; AVX2: # %bb.0:18168; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]18169; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm218170; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]18171; AVX2-NEXT: # ymm3 = mem[0,1,0,1]18172; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm218173; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm018174; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm018175; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm018176; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm018177; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm118178; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm018179; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [54,54,54,54]18180; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018181; AVX2-NEXT: retq18182;18183; AVX512VPOPCNTDQ-LABEL: ugt_54_v4i64:18184; AVX512VPOPCNTDQ: # %bb.0:18185; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm018186; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm018187; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [54,54,54,54]18188; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018189; AVX512VPOPCNTDQ-NEXT: retq18190;18191; AVX512VPOPCNTDQVL-LABEL: ugt_54_v4i64:18192; AVX512VPOPCNTDQVL: # %bb.0:18193; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm018194; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [54,54,54,54]18195; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018196; AVX512VPOPCNTDQVL-NEXT: retq18197;18198; BITALG_NOVLX-LABEL: ugt_54_v4i64:18199; BITALG_NOVLX: # %bb.0:18200; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm018201; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm018202; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm118203; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm018204; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [54,54,54,54]18205; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018206; BITALG_NOVLX-NEXT: retq18207;18208; BITALG-LABEL: ugt_54_v4i64:18209; BITALG: # %bb.0:18210; BITALG-NEXT: vpopcntb %ymm0, %ymm018211; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm118212; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm018213; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [54,54,54,54]18214; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018215; BITALG-NEXT: retq18216 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)18217 %3 = icmp ugt <4 x i64> %2, <i64 54, i64 54, i64 54, i64 54>18218 %4 = sext <4 x i1> %3 to <4 x i64>18219 ret <4 x i64> %418220}18221 18222define <4 x i64> @ult_55_v4i64(<4 x i64> %0) {18223; AVX1-LABEL: ult_55_v4i64:18224; AVX1: # %bb.0:18225; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]18226; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm218227; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]18228; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm218229; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm418230; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm418231; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm418232; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm218233; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm418234; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm218235; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm018236; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm518237; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm518238; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm018239; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm018240; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm018241; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm018242; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm018243; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [55,55]18244; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm018245; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm118246; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm018247; AVX1-NEXT: retq18248;18249; AVX2-LABEL: ult_55_v4i64:18250; AVX2: # %bb.0:18251; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]18252; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm218253; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]18254; AVX2-NEXT: # ymm3 = mem[0,1,0,1]18255; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm218256; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm018257; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm018258; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm018259; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm018260; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm118261; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm018262; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [55,55,55,55]18263; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018264; AVX2-NEXT: retq18265;18266; AVX512VPOPCNTDQ-LABEL: ult_55_v4i64:18267; AVX512VPOPCNTDQ: # %bb.0:18268; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm018269; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm018270; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [55,55,55,55]18271; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018272; AVX512VPOPCNTDQ-NEXT: retq18273;18274; AVX512VPOPCNTDQVL-LABEL: ult_55_v4i64:18275; AVX512VPOPCNTDQVL: # %bb.0:18276; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm018277; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [55,55,55,55]18278; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018279; AVX512VPOPCNTDQVL-NEXT: retq18280;18281; BITALG_NOVLX-LABEL: ult_55_v4i64:18282; BITALG_NOVLX: # %bb.0:18283; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm018284; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm018285; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm118286; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm018287; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [55,55,55,55]18288; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018289; BITALG_NOVLX-NEXT: retq18290;18291; BITALG-LABEL: ult_55_v4i64:18292; BITALG: # %bb.0:18293; BITALG-NEXT: vpopcntb %ymm0, %ymm018294; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm118295; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm018296; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [55,55,55,55]18297; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018298; BITALG-NEXT: retq18299 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)18300 %3 = icmp ult <4 x i64> %2, <i64 55, i64 55, i64 55, i64 55>18301 %4 = sext <4 x i1> %3 to <4 x i64>18302 ret <4 x i64> %418303}18304 18305define <4 x i64> @ugt_55_v4i64(<4 x i64> %0) {18306; AVX1-LABEL: ugt_55_v4i64:18307; AVX1: # %bb.0:18308; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]18309; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm218310; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]18311; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm218312; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm418313; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm418314; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm418315; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm218316; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm418317; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm218318; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm018319; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm518320; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm518321; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm018322; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm018323; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm018324; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm018325; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm018326; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [55,55]18327; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm018328; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm118329; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm018330; AVX1-NEXT: retq18331;18332; AVX2-LABEL: ugt_55_v4i64:18333; AVX2: # %bb.0:18334; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]18335; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm218336; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]18337; AVX2-NEXT: # ymm3 = mem[0,1,0,1]18338; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm218339; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm018340; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm018341; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm018342; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm018343; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm118344; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm018345; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [55,55,55,55]18346; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018347; AVX2-NEXT: retq18348;18349; AVX512VPOPCNTDQ-LABEL: ugt_55_v4i64:18350; AVX512VPOPCNTDQ: # %bb.0:18351; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm018352; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm018353; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [55,55,55,55]18354; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018355; AVX512VPOPCNTDQ-NEXT: retq18356;18357; AVX512VPOPCNTDQVL-LABEL: ugt_55_v4i64:18358; AVX512VPOPCNTDQVL: # %bb.0:18359; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm018360; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [55,55,55,55]18361; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018362; AVX512VPOPCNTDQVL-NEXT: retq18363;18364; BITALG_NOVLX-LABEL: ugt_55_v4i64:18365; BITALG_NOVLX: # %bb.0:18366; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm018367; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm018368; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm118369; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm018370; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [55,55,55,55]18371; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018372; BITALG_NOVLX-NEXT: retq18373;18374; BITALG-LABEL: ugt_55_v4i64:18375; BITALG: # %bb.0:18376; BITALG-NEXT: vpopcntb %ymm0, %ymm018377; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm118378; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm018379; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [55,55,55,55]18380; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018381; BITALG-NEXT: retq18382 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)18383 %3 = icmp ugt <4 x i64> %2, <i64 55, i64 55, i64 55, i64 55>18384 %4 = sext <4 x i1> %3 to <4 x i64>18385 ret <4 x i64> %418386}18387 18388define <4 x i64> @ult_56_v4i64(<4 x i64> %0) {18389; AVX1-LABEL: ult_56_v4i64:18390; AVX1: # %bb.0:18391; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]18392; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm218393; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]18394; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm218395; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm418396; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm418397; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm418398; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm218399; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm418400; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm218401; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm018402; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm518403; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm518404; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm018405; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm018406; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm018407; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm018408; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm018409; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [56,56]18410; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm018411; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm118412; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm018413; AVX1-NEXT: retq18414;18415; AVX2-LABEL: ult_56_v4i64:18416; AVX2: # %bb.0:18417; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]18418; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm218419; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]18420; AVX2-NEXT: # ymm3 = mem[0,1,0,1]18421; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm218422; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm018423; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm018424; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm018425; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm018426; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm118427; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm018428; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [56,56,56,56]18429; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018430; AVX2-NEXT: retq18431;18432; AVX512VPOPCNTDQ-LABEL: ult_56_v4i64:18433; AVX512VPOPCNTDQ: # %bb.0:18434; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm018435; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm018436; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [56,56,56,56]18437; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018438; AVX512VPOPCNTDQ-NEXT: retq18439;18440; AVX512VPOPCNTDQVL-LABEL: ult_56_v4i64:18441; AVX512VPOPCNTDQVL: # %bb.0:18442; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm018443; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [56,56,56,56]18444; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018445; AVX512VPOPCNTDQVL-NEXT: retq18446;18447; BITALG_NOVLX-LABEL: ult_56_v4i64:18448; BITALG_NOVLX: # %bb.0:18449; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm018450; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm018451; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm118452; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm018453; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [56,56,56,56]18454; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018455; BITALG_NOVLX-NEXT: retq18456;18457; BITALG-LABEL: ult_56_v4i64:18458; BITALG: # %bb.0:18459; BITALG-NEXT: vpopcntb %ymm0, %ymm018460; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm118461; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm018462; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [56,56,56,56]18463; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018464; BITALG-NEXT: retq18465 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)18466 %3 = icmp ult <4 x i64> %2, <i64 56, i64 56, i64 56, i64 56>18467 %4 = sext <4 x i1> %3 to <4 x i64>18468 ret <4 x i64> %418469}18470 18471define <4 x i64> @ugt_56_v4i64(<4 x i64> %0) {18472; AVX1-LABEL: ugt_56_v4i64:18473; AVX1: # %bb.0:18474; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]18475; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm218476; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]18477; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm218478; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm418479; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm418480; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm418481; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm218482; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm418483; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm218484; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm018485; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm518486; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm518487; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm018488; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm018489; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm018490; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm018491; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm018492; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [56,56]18493; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm018494; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm118495; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm018496; AVX1-NEXT: retq18497;18498; AVX2-LABEL: ugt_56_v4i64:18499; AVX2: # %bb.0:18500; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]18501; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm218502; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]18503; AVX2-NEXT: # ymm3 = mem[0,1,0,1]18504; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm218505; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm018506; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm018507; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm018508; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm018509; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm118510; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm018511; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [56,56,56,56]18512; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018513; AVX2-NEXT: retq18514;18515; AVX512VPOPCNTDQ-LABEL: ugt_56_v4i64:18516; AVX512VPOPCNTDQ: # %bb.0:18517; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm018518; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm018519; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [56,56,56,56]18520; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018521; AVX512VPOPCNTDQ-NEXT: retq18522;18523; AVX512VPOPCNTDQVL-LABEL: ugt_56_v4i64:18524; AVX512VPOPCNTDQVL: # %bb.0:18525; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm018526; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [56,56,56,56]18527; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018528; AVX512VPOPCNTDQVL-NEXT: retq18529;18530; BITALG_NOVLX-LABEL: ugt_56_v4i64:18531; BITALG_NOVLX: # %bb.0:18532; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm018533; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm018534; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm118535; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm018536; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [56,56,56,56]18537; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018538; BITALG_NOVLX-NEXT: retq18539;18540; BITALG-LABEL: ugt_56_v4i64:18541; BITALG: # %bb.0:18542; BITALG-NEXT: vpopcntb %ymm0, %ymm018543; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm118544; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm018545; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [56,56,56,56]18546; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018547; BITALG-NEXT: retq18548 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)18549 %3 = icmp ugt <4 x i64> %2, <i64 56, i64 56, i64 56, i64 56>18550 %4 = sext <4 x i1> %3 to <4 x i64>18551 ret <4 x i64> %418552}18553 18554define <4 x i64> @ult_57_v4i64(<4 x i64> %0) {18555; AVX1-LABEL: ult_57_v4i64:18556; AVX1: # %bb.0:18557; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]18558; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm218559; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]18560; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm218561; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm418562; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm418563; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm418564; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm218565; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm418566; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm218567; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm018568; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm518569; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm518570; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm018571; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm018572; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm018573; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm018574; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm018575; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [57,57]18576; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm018577; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm118578; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm018579; AVX1-NEXT: retq18580;18581; AVX2-LABEL: ult_57_v4i64:18582; AVX2: # %bb.0:18583; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]18584; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm218585; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]18586; AVX2-NEXT: # ymm3 = mem[0,1,0,1]18587; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm218588; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm018589; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm018590; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm018591; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm018592; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm118593; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm018594; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [57,57,57,57]18595; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018596; AVX2-NEXT: retq18597;18598; AVX512VPOPCNTDQ-LABEL: ult_57_v4i64:18599; AVX512VPOPCNTDQ: # %bb.0:18600; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm018601; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm018602; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [57,57,57,57]18603; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018604; AVX512VPOPCNTDQ-NEXT: retq18605;18606; AVX512VPOPCNTDQVL-LABEL: ult_57_v4i64:18607; AVX512VPOPCNTDQVL: # %bb.0:18608; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm018609; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [57,57,57,57]18610; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018611; AVX512VPOPCNTDQVL-NEXT: retq18612;18613; BITALG_NOVLX-LABEL: ult_57_v4i64:18614; BITALG_NOVLX: # %bb.0:18615; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm018616; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm018617; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm118618; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm018619; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [57,57,57,57]18620; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018621; BITALG_NOVLX-NEXT: retq18622;18623; BITALG-LABEL: ult_57_v4i64:18624; BITALG: # %bb.0:18625; BITALG-NEXT: vpopcntb %ymm0, %ymm018626; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm118627; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm018628; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [57,57,57,57]18629; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018630; BITALG-NEXT: retq18631 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)18632 %3 = icmp ult <4 x i64> %2, <i64 57, i64 57, i64 57, i64 57>18633 %4 = sext <4 x i1> %3 to <4 x i64>18634 ret <4 x i64> %418635}18636 18637define <4 x i64> @ugt_57_v4i64(<4 x i64> %0) {18638; AVX1-LABEL: ugt_57_v4i64:18639; AVX1: # %bb.0:18640; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]18641; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm218642; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]18643; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm218644; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm418645; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm418646; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm418647; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm218648; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm418649; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm218650; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm018651; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm518652; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm518653; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm018654; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm018655; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm018656; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm018657; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm018658; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [57,57]18659; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm018660; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm118661; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm018662; AVX1-NEXT: retq18663;18664; AVX2-LABEL: ugt_57_v4i64:18665; AVX2: # %bb.0:18666; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]18667; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm218668; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]18669; AVX2-NEXT: # ymm3 = mem[0,1,0,1]18670; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm218671; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm018672; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm018673; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm018674; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm018675; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm118676; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm018677; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [57,57,57,57]18678; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018679; AVX2-NEXT: retq18680;18681; AVX512VPOPCNTDQ-LABEL: ugt_57_v4i64:18682; AVX512VPOPCNTDQ: # %bb.0:18683; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm018684; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm018685; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [57,57,57,57]18686; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018687; AVX512VPOPCNTDQ-NEXT: retq18688;18689; AVX512VPOPCNTDQVL-LABEL: ugt_57_v4i64:18690; AVX512VPOPCNTDQVL: # %bb.0:18691; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm018692; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [57,57,57,57]18693; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018694; AVX512VPOPCNTDQVL-NEXT: retq18695;18696; BITALG_NOVLX-LABEL: ugt_57_v4i64:18697; BITALG_NOVLX: # %bb.0:18698; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm018699; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm018700; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm118701; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm018702; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [57,57,57,57]18703; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018704; BITALG_NOVLX-NEXT: retq18705;18706; BITALG-LABEL: ugt_57_v4i64:18707; BITALG: # %bb.0:18708; BITALG-NEXT: vpopcntb %ymm0, %ymm018709; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm118710; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm018711; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [57,57,57,57]18712; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018713; BITALG-NEXT: retq18714 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)18715 %3 = icmp ugt <4 x i64> %2, <i64 57, i64 57, i64 57, i64 57>18716 %4 = sext <4 x i1> %3 to <4 x i64>18717 ret <4 x i64> %418718}18719 18720define <4 x i64> @ult_58_v4i64(<4 x i64> %0) {18721; AVX1-LABEL: ult_58_v4i64:18722; AVX1: # %bb.0:18723; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]18724; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm218725; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]18726; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm218727; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm418728; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm418729; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm418730; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm218731; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm418732; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm218733; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm018734; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm518735; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm518736; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm018737; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm018738; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm018739; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm018740; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm018741; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [58,58]18742; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm018743; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm118744; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm018745; AVX1-NEXT: retq18746;18747; AVX2-LABEL: ult_58_v4i64:18748; AVX2: # %bb.0:18749; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]18750; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm218751; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]18752; AVX2-NEXT: # ymm3 = mem[0,1,0,1]18753; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm218754; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm018755; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm018756; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm018757; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm018758; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm118759; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm018760; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [58,58,58,58]18761; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018762; AVX2-NEXT: retq18763;18764; AVX512VPOPCNTDQ-LABEL: ult_58_v4i64:18765; AVX512VPOPCNTDQ: # %bb.0:18766; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm018767; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm018768; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [58,58,58,58]18769; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018770; AVX512VPOPCNTDQ-NEXT: retq18771;18772; AVX512VPOPCNTDQVL-LABEL: ult_58_v4i64:18773; AVX512VPOPCNTDQVL: # %bb.0:18774; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm018775; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [58,58,58,58]18776; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018777; AVX512VPOPCNTDQVL-NEXT: retq18778;18779; BITALG_NOVLX-LABEL: ult_58_v4i64:18780; BITALG_NOVLX: # %bb.0:18781; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm018782; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm018783; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm118784; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm018785; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [58,58,58,58]18786; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018787; BITALG_NOVLX-NEXT: retq18788;18789; BITALG-LABEL: ult_58_v4i64:18790; BITALG: # %bb.0:18791; BITALG-NEXT: vpopcntb %ymm0, %ymm018792; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm118793; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm018794; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [58,58,58,58]18795; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018796; BITALG-NEXT: retq18797 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)18798 %3 = icmp ult <4 x i64> %2, <i64 58, i64 58, i64 58, i64 58>18799 %4 = sext <4 x i1> %3 to <4 x i64>18800 ret <4 x i64> %418801}18802 18803define <4 x i64> @ugt_58_v4i64(<4 x i64> %0) {18804; AVX1-LABEL: ugt_58_v4i64:18805; AVX1: # %bb.0:18806; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]18807; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm218808; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]18809; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm218810; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm418811; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm418812; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm418813; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm218814; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm418815; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm218816; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm018817; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm518818; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm518819; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm018820; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm018821; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm018822; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm018823; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm018824; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [58,58]18825; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm018826; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm118827; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm018828; AVX1-NEXT: retq18829;18830; AVX2-LABEL: ugt_58_v4i64:18831; AVX2: # %bb.0:18832; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]18833; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm218834; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]18835; AVX2-NEXT: # ymm3 = mem[0,1,0,1]18836; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm218837; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm018838; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm018839; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm018840; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm018841; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm118842; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm018843; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [58,58,58,58]18844; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018845; AVX2-NEXT: retq18846;18847; AVX512VPOPCNTDQ-LABEL: ugt_58_v4i64:18848; AVX512VPOPCNTDQ: # %bb.0:18849; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm018850; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm018851; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [58,58,58,58]18852; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018853; AVX512VPOPCNTDQ-NEXT: retq18854;18855; AVX512VPOPCNTDQVL-LABEL: ugt_58_v4i64:18856; AVX512VPOPCNTDQVL: # %bb.0:18857; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm018858; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [58,58,58,58]18859; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018860; AVX512VPOPCNTDQVL-NEXT: retq18861;18862; BITALG_NOVLX-LABEL: ugt_58_v4i64:18863; BITALG_NOVLX: # %bb.0:18864; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm018865; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm018866; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm118867; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm018868; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [58,58,58,58]18869; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018870; BITALG_NOVLX-NEXT: retq18871;18872; BITALG-LABEL: ugt_58_v4i64:18873; BITALG: # %bb.0:18874; BITALG-NEXT: vpopcntb %ymm0, %ymm018875; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm118876; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm018877; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [58,58,58,58]18878; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm018879; BITALG-NEXT: retq18880 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)18881 %3 = icmp ugt <4 x i64> %2, <i64 58, i64 58, i64 58, i64 58>18882 %4 = sext <4 x i1> %3 to <4 x i64>18883 ret <4 x i64> %418884}18885 18886define <4 x i64> @ult_59_v4i64(<4 x i64> %0) {18887; AVX1-LABEL: ult_59_v4i64:18888; AVX1: # %bb.0:18889; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]18890; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm218891; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]18892; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm218893; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm418894; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm418895; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm418896; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm218897; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm418898; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm218899; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm018900; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm518901; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm518902; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm018903; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm018904; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm018905; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm018906; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm018907; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [59,59]18908; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm018909; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm118910; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm018911; AVX1-NEXT: retq18912;18913; AVX2-LABEL: ult_59_v4i64:18914; AVX2: # %bb.0:18915; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]18916; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm218917; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]18918; AVX2-NEXT: # ymm3 = mem[0,1,0,1]18919; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm218920; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm018921; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm018922; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm018923; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm018924; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm118925; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm018926; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [59,59,59,59]18927; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018928; AVX2-NEXT: retq18929;18930; AVX512VPOPCNTDQ-LABEL: ult_59_v4i64:18931; AVX512VPOPCNTDQ: # %bb.0:18932; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm018933; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm018934; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [59,59,59,59]18935; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018936; AVX512VPOPCNTDQ-NEXT: retq18937;18938; AVX512VPOPCNTDQVL-LABEL: ult_59_v4i64:18939; AVX512VPOPCNTDQVL: # %bb.0:18940; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm018941; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [59,59,59,59]18942; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018943; AVX512VPOPCNTDQVL-NEXT: retq18944;18945; BITALG_NOVLX-LABEL: ult_59_v4i64:18946; BITALG_NOVLX: # %bb.0:18947; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm018948; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm018949; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm118950; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm018951; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [59,59,59,59]18952; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018953; BITALG_NOVLX-NEXT: retq18954;18955; BITALG-LABEL: ult_59_v4i64:18956; BITALG: # %bb.0:18957; BITALG-NEXT: vpopcntb %ymm0, %ymm018958; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm118959; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm018960; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [59,59,59,59]18961; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm018962; BITALG-NEXT: retq18963 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)18964 %3 = icmp ult <4 x i64> %2, <i64 59, i64 59, i64 59, i64 59>18965 %4 = sext <4 x i1> %3 to <4 x i64>18966 ret <4 x i64> %418967}18968 18969define <4 x i64> @ugt_59_v4i64(<4 x i64> %0) {18970; AVX1-LABEL: ugt_59_v4i64:18971; AVX1: # %bb.0:18972; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]18973; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm218974; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]18975; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm218976; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm418977; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm418978; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm418979; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm218980; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm418981; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm218982; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm018983; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm518984; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm518985; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm018986; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm018987; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm018988; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm018989; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm018990; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [59,59]18991; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm018992; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm118993; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm018994; AVX1-NEXT: retq18995;18996; AVX2-LABEL: ugt_59_v4i64:18997; AVX2: # %bb.0:18998; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]18999; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm219000; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]19001; AVX2-NEXT: # ymm3 = mem[0,1,0,1]19002; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm219003; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm019004; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm019005; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm019006; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm019007; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm119008; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm019009; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [59,59,59,59]19010; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm019011; AVX2-NEXT: retq19012;19013; AVX512VPOPCNTDQ-LABEL: ugt_59_v4i64:19014; AVX512VPOPCNTDQ: # %bb.0:19015; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm019016; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm019017; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [59,59,59,59]19018; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm019019; AVX512VPOPCNTDQ-NEXT: retq19020;19021; AVX512VPOPCNTDQVL-LABEL: ugt_59_v4i64:19022; AVX512VPOPCNTDQVL: # %bb.0:19023; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm019024; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [59,59,59,59]19025; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm019026; AVX512VPOPCNTDQVL-NEXT: retq19027;19028; BITALG_NOVLX-LABEL: ugt_59_v4i64:19029; BITALG_NOVLX: # %bb.0:19030; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm019031; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm019032; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm119033; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm019034; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [59,59,59,59]19035; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm019036; BITALG_NOVLX-NEXT: retq19037;19038; BITALG-LABEL: ugt_59_v4i64:19039; BITALG: # %bb.0:19040; BITALG-NEXT: vpopcntb %ymm0, %ymm019041; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm119042; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm019043; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [59,59,59,59]19044; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm019045; BITALG-NEXT: retq19046 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)19047 %3 = icmp ugt <4 x i64> %2, <i64 59, i64 59, i64 59, i64 59>19048 %4 = sext <4 x i1> %3 to <4 x i64>19049 ret <4 x i64> %419050}19051 19052define <4 x i64> @ult_60_v4i64(<4 x i64> %0) {19053; AVX1-LABEL: ult_60_v4i64:19054; AVX1: # %bb.0:19055; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]19056; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm219057; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]19058; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm219059; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm419060; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm419061; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm419062; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm219063; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm419064; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm219065; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm019066; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm519067; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm519068; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm019069; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm019070; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm019071; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm019072; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm019073; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [60,60]19074; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm019075; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm119076; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm019077; AVX1-NEXT: retq19078;19079; AVX2-LABEL: ult_60_v4i64:19080; AVX2: # %bb.0:19081; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]19082; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm219083; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]19084; AVX2-NEXT: # ymm3 = mem[0,1,0,1]19085; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm219086; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm019087; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm019088; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm019089; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm019090; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm119091; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm019092; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [60,60,60,60]19093; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm019094; AVX2-NEXT: retq19095;19096; AVX512VPOPCNTDQ-LABEL: ult_60_v4i64:19097; AVX512VPOPCNTDQ: # %bb.0:19098; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm019099; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm019100; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [60,60,60,60]19101; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm019102; AVX512VPOPCNTDQ-NEXT: retq19103;19104; AVX512VPOPCNTDQVL-LABEL: ult_60_v4i64:19105; AVX512VPOPCNTDQVL: # %bb.0:19106; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm019107; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [60,60,60,60]19108; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm019109; AVX512VPOPCNTDQVL-NEXT: retq19110;19111; BITALG_NOVLX-LABEL: ult_60_v4i64:19112; BITALG_NOVLX: # %bb.0:19113; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm019114; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm019115; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm119116; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm019117; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [60,60,60,60]19118; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm019119; BITALG_NOVLX-NEXT: retq19120;19121; BITALG-LABEL: ult_60_v4i64:19122; BITALG: # %bb.0:19123; BITALG-NEXT: vpopcntb %ymm0, %ymm019124; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm119125; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm019126; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [60,60,60,60]19127; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm019128; BITALG-NEXT: retq19129 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)19130 %3 = icmp ult <4 x i64> %2, <i64 60, i64 60, i64 60, i64 60>19131 %4 = sext <4 x i1> %3 to <4 x i64>19132 ret <4 x i64> %419133}19134 19135define <4 x i64> @ugt_60_v4i64(<4 x i64> %0) {19136; AVX1-LABEL: ugt_60_v4i64:19137; AVX1: # %bb.0:19138; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]19139; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm219140; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]19141; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm219142; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm419143; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm419144; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm419145; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm219146; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm419147; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm219148; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm019149; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm519150; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm519151; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm019152; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm019153; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm019154; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm019155; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm019156; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [60,60]19157; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm019158; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm119159; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm019160; AVX1-NEXT: retq19161;19162; AVX2-LABEL: ugt_60_v4i64:19163; AVX2: # %bb.0:19164; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]19165; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm219166; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]19167; AVX2-NEXT: # ymm3 = mem[0,1,0,1]19168; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm219169; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm019170; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm019171; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm019172; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm019173; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm119174; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm019175; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [60,60,60,60]19176; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm019177; AVX2-NEXT: retq19178;19179; AVX512VPOPCNTDQ-LABEL: ugt_60_v4i64:19180; AVX512VPOPCNTDQ: # %bb.0:19181; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm019182; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm019183; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [60,60,60,60]19184; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm019185; AVX512VPOPCNTDQ-NEXT: retq19186;19187; AVX512VPOPCNTDQVL-LABEL: ugt_60_v4i64:19188; AVX512VPOPCNTDQVL: # %bb.0:19189; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm019190; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [60,60,60,60]19191; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm019192; AVX512VPOPCNTDQVL-NEXT: retq19193;19194; BITALG_NOVLX-LABEL: ugt_60_v4i64:19195; BITALG_NOVLX: # %bb.0:19196; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm019197; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm019198; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm119199; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm019200; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [60,60,60,60]19201; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm019202; BITALG_NOVLX-NEXT: retq19203;19204; BITALG-LABEL: ugt_60_v4i64:19205; BITALG: # %bb.0:19206; BITALG-NEXT: vpopcntb %ymm0, %ymm019207; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm119208; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm019209; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [60,60,60,60]19210; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm019211; BITALG-NEXT: retq19212 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)19213 %3 = icmp ugt <4 x i64> %2, <i64 60, i64 60, i64 60, i64 60>19214 %4 = sext <4 x i1> %3 to <4 x i64>19215 ret <4 x i64> %419216}19217 19218define <4 x i64> @ult_61_v4i64(<4 x i64> %0) {19219; AVX1-LABEL: ult_61_v4i64:19220; AVX1: # %bb.0:19221; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]19222; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm219223; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]19224; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm219225; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm419226; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm419227; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm419228; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm219229; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm419230; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm219231; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm019232; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm519233; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm519234; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm019235; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm019236; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm019237; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm019238; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm019239; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [61,61]19240; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm019241; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm119242; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm019243; AVX1-NEXT: retq19244;19245; AVX2-LABEL: ult_61_v4i64:19246; AVX2: # %bb.0:19247; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]19248; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm219249; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]19250; AVX2-NEXT: # ymm3 = mem[0,1,0,1]19251; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm219252; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm019253; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm019254; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm019255; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm019256; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm119257; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm019258; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [61,61,61,61]19259; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm019260; AVX2-NEXT: retq19261;19262; AVX512VPOPCNTDQ-LABEL: ult_61_v4i64:19263; AVX512VPOPCNTDQ: # %bb.0:19264; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm019265; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm019266; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [61,61,61,61]19267; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm019268; AVX512VPOPCNTDQ-NEXT: retq19269;19270; AVX512VPOPCNTDQVL-LABEL: ult_61_v4i64:19271; AVX512VPOPCNTDQVL: # %bb.0:19272; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm019273; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [61,61,61,61]19274; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm019275; AVX512VPOPCNTDQVL-NEXT: retq19276;19277; BITALG_NOVLX-LABEL: ult_61_v4i64:19278; BITALG_NOVLX: # %bb.0:19279; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm019280; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm019281; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm119282; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm019283; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [61,61,61,61]19284; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm019285; BITALG_NOVLX-NEXT: retq19286;19287; BITALG-LABEL: ult_61_v4i64:19288; BITALG: # %bb.0:19289; BITALG-NEXT: vpopcntb %ymm0, %ymm019290; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm119291; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm019292; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [61,61,61,61]19293; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm019294; BITALG-NEXT: retq19295 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)19296 %3 = icmp ult <4 x i64> %2, <i64 61, i64 61, i64 61, i64 61>19297 %4 = sext <4 x i1> %3 to <4 x i64>19298 ret <4 x i64> %419299}19300 19301define <4 x i64> @ugt_61_v4i64(<4 x i64> %0) {19302; AVX1-LABEL: ugt_61_v4i64:19303; AVX1: # %bb.0:19304; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]19305; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm219306; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]19307; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm219308; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm419309; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm419310; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm419311; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm219312; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm419313; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm219314; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm019315; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm519316; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm519317; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm019318; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm019319; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm019320; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm019321; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm019322; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [61,61]19323; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm019324; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm119325; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm019326; AVX1-NEXT: retq19327;19328; AVX2-LABEL: ugt_61_v4i64:19329; AVX2: # %bb.0:19330; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]19331; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm219332; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]19333; AVX2-NEXT: # ymm3 = mem[0,1,0,1]19334; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm219335; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm019336; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm019337; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm019338; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm019339; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm119340; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm019341; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [61,61,61,61]19342; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm019343; AVX2-NEXT: retq19344;19345; AVX512VPOPCNTDQ-LABEL: ugt_61_v4i64:19346; AVX512VPOPCNTDQ: # %bb.0:19347; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm019348; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm019349; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [61,61,61,61]19350; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm019351; AVX512VPOPCNTDQ-NEXT: retq19352;19353; AVX512VPOPCNTDQVL-LABEL: ugt_61_v4i64:19354; AVX512VPOPCNTDQVL: # %bb.0:19355; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm019356; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [61,61,61,61]19357; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm019358; AVX512VPOPCNTDQVL-NEXT: retq19359;19360; BITALG_NOVLX-LABEL: ugt_61_v4i64:19361; BITALG_NOVLX: # %bb.0:19362; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm019363; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm019364; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm119365; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm019366; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [61,61,61,61]19367; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm019368; BITALG_NOVLX-NEXT: retq19369;19370; BITALG-LABEL: ugt_61_v4i64:19371; BITALG: # %bb.0:19372; BITALG-NEXT: vpopcntb %ymm0, %ymm019373; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm119374; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm019375; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [61,61,61,61]19376; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm019377; BITALG-NEXT: retq19378 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)19379 %3 = icmp ugt <4 x i64> %2, <i64 61, i64 61, i64 61, i64 61>19380 %4 = sext <4 x i1> %3 to <4 x i64>19381 ret <4 x i64> %419382}19383 19384define <4 x i64> @ult_62_v4i64(<4 x i64> %0) {19385; AVX1-LABEL: ult_62_v4i64:19386; AVX1: # %bb.0:19387; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]19388; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm219389; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]19390; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm219391; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm419392; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm419393; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm419394; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm219395; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm419396; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm219397; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm019398; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm519399; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm519400; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm019401; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm019402; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm019403; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm019404; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm019405; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [62,62]19406; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm019407; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm119408; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm019409; AVX1-NEXT: retq19410;19411; AVX2-LABEL: ult_62_v4i64:19412; AVX2: # %bb.0:19413; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]19414; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm219415; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]19416; AVX2-NEXT: # ymm3 = mem[0,1,0,1]19417; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm219418; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm019419; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm019420; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm019421; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm019422; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm119423; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm019424; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [62,62,62,62]19425; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm019426; AVX2-NEXT: retq19427;19428; AVX512VPOPCNTDQ-LABEL: ult_62_v4i64:19429; AVX512VPOPCNTDQ: # %bb.0:19430; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm019431; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm019432; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [62,62,62,62]19433; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm019434; AVX512VPOPCNTDQ-NEXT: retq19435;19436; AVX512VPOPCNTDQVL-LABEL: ult_62_v4i64:19437; AVX512VPOPCNTDQVL: # %bb.0:19438; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm019439; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [62,62,62,62]19440; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm019441; AVX512VPOPCNTDQVL-NEXT: retq19442;19443; BITALG_NOVLX-LABEL: ult_62_v4i64:19444; BITALG_NOVLX: # %bb.0:19445; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm019446; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm019447; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm119448; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm019449; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [62,62,62,62]19450; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm019451; BITALG_NOVLX-NEXT: retq19452;19453; BITALG-LABEL: ult_62_v4i64:19454; BITALG: # %bb.0:19455; BITALG-NEXT: vpopcntb %ymm0, %ymm019456; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm119457; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm019458; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [62,62,62,62]19459; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm019460; BITALG-NEXT: retq19461 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)19462 %3 = icmp ult <4 x i64> %2, <i64 62, i64 62, i64 62, i64 62>19463 %4 = sext <4 x i1> %3 to <4 x i64>19464 ret <4 x i64> %419465}19466 19467define <4 x i64> @ugt_62_v4i64(<4 x i64> %0) {19468; AVX1-LABEL: ugt_62_v4i64:19469; AVX1: # %bb.0:19470; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]19471; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm219472; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]19473; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm219474; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm419475; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm419476; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm419477; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm219478; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm419479; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm219480; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm019481; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm519482; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm519483; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm019484; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm019485; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm019486; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm019487; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm019488; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [62,62]19489; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm019490; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm119491; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm019492; AVX1-NEXT: retq19493;19494; AVX2-LABEL: ugt_62_v4i64:19495; AVX2: # %bb.0:19496; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]19497; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm219498; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]19499; AVX2-NEXT: # ymm3 = mem[0,1,0,1]19500; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm219501; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm019502; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm019503; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm019504; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm019505; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm119506; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm019507; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [62,62,62,62]19508; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm019509; AVX2-NEXT: retq19510;19511; AVX512VPOPCNTDQ-LABEL: ugt_62_v4i64:19512; AVX512VPOPCNTDQ: # %bb.0:19513; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm019514; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm019515; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [62,62,62,62]19516; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm019517; AVX512VPOPCNTDQ-NEXT: retq19518;19519; AVX512VPOPCNTDQVL-LABEL: ugt_62_v4i64:19520; AVX512VPOPCNTDQVL: # %bb.0:19521; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm019522; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [62,62,62,62]19523; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm019524; AVX512VPOPCNTDQVL-NEXT: retq19525;19526; BITALG_NOVLX-LABEL: ugt_62_v4i64:19527; BITALG_NOVLX: # %bb.0:19528; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm019529; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm019530; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm119531; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm019532; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [62,62,62,62]19533; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm019534; BITALG_NOVLX-NEXT: retq19535;19536; BITALG-LABEL: ugt_62_v4i64:19537; BITALG: # %bb.0:19538; BITALG-NEXT: vpopcntb %ymm0, %ymm019539; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm119540; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm019541; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [62,62,62,62]19542; BITALG-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm019543; BITALG-NEXT: retq19544 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)19545 %3 = icmp ugt <4 x i64> %2, <i64 62, i64 62, i64 62, i64 62>19546 %4 = sext <4 x i1> %3 to <4 x i64>19547 ret <4 x i64> %419548}19549 19550define <4 x i64> @ult_63_v4i64(<4 x i64> %0) {19551; AVX1-LABEL: ult_63_v4i64:19552; AVX1: # %bb.0:19553; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]19554; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm219555; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]19556; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm219557; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm419558; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm419559; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm419560; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm219561; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm419562; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm219563; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm019564; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm519565; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm519566; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm019567; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm019568; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm019569; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm019570; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm019571; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm1 = [63,63]19572; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm019573; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm119574; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm019575; AVX1-NEXT: retq19576;19577; AVX2-LABEL: ult_63_v4i64:19578; AVX2: # %bb.0:19579; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm1 = [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]19580; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm219581; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [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]19582; AVX2-NEXT: # ymm3 = mem[0,1,0,1]19583; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm219584; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm019585; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm019586; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm019587; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm019588; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm119589; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm019590; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [63,63,63,63]19591; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm019592; AVX2-NEXT: retq19593;19594; AVX512VPOPCNTDQ-LABEL: ult_63_v4i64:19595; AVX512VPOPCNTDQ: # %bb.0:19596; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm019597; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm019598; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [63,63,63,63]19599; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm019600; AVX512VPOPCNTDQ-NEXT: retq19601;19602; AVX512VPOPCNTDQVL-LABEL: ult_63_v4i64:19603; AVX512VPOPCNTDQVL: # %bb.0:19604; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm019605; AVX512VPOPCNTDQVL-NEXT: vpbroadcastq {{.*#+}} ymm1 = [63,63,63,63]19606; AVX512VPOPCNTDQVL-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm019607; AVX512VPOPCNTDQVL-NEXT: retq19608;19609; BITALG_NOVLX-LABEL: ult_63_v4i64:19610; BITALG_NOVLX: # %bb.0:19611; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm019612; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm019613; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm119614; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm019615; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [63,63,63,63]19616; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm019617; BITALG_NOVLX-NEXT: retq19618;19619; BITALG-LABEL: ult_63_v4i64:19620; BITALG: # %bb.0:19621; BITALG-NEXT: vpopcntb %ymm0, %ymm019622; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm119623; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm019624; BITALG-NEXT: vpbroadcastq {{.*#+}} ymm1 = [63,63,63,63]19625; BITALG-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm019626; BITALG-NEXT: retq19627 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0)19628 %3 = icmp ult <4 x i64> %2, <i64 63, i64 63, i64 63, i64 63>19629 %4 = sext <4 x i1> %3 to <4 x i64>19630 ret <4 x i64> %419631}19632 19633declare <32 x i8> @llvm.ctpop.v32i8(<32 x i8>)19634declare <16 x i16> @llvm.ctpop.v16i16(<16 x i16>)19635declare <8 x i32> @llvm.ctpop.v8i32(<8 x i32>)19636declare <4 x i64> @llvm.ctpop.v4i64(<4 x i64>)19637