1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX1 3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=AVX2 4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vpopcntdq | FileCheck %s --check-prefix=AVX512VPOPCNTDQ 5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vpopcntdq,+avx512vl | FileCheck %s --check-prefix=AVX512VPOPCNTDQVL 6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bitalg | FileCheck %s --check-prefix=BITALG_NOVLX 7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bitalg,+avx512vl | FileCheck %s --check-prefix=BITALG 8 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: vextractf128 $1, %ymm0, %xmm1 14; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2 15; AVX1-NEXT: vpaddb %xmm2, %xmm1, %xmm3 16; AVX1-NEXT: vpand %xmm3, %xmm1, %xmm1 17; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3 18; AVX1-NEXT: vpcmpeqb %xmm3, %xmm1, %xmm1 19; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm1 20; AVX1-NEXT: vpaddb %xmm2, %xmm0, %xmm4 21; AVX1-NEXT: vpand %xmm4, %xmm0, %xmm0 22; AVX1-NEXT: vpcmpeqb %xmm3, %xmm0, %xmm0 23; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm0 24; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 25; AVX1-NEXT: retq 26; 27; AVX2-LABEL: ugt_1_v32i8: 28; AVX2: # %bb.0: 29; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 30; AVX2-NEXT: vpaddb %ymm1, %ymm0, %ymm2 31; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0 32; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2 33; AVX2-NEXT: vpcmpeqb %ymm2, %ymm0, %ymm0 34; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm0 35; AVX2-NEXT: retq 36; 37; AVX512VPOPCNTDQ-LABEL: ugt_1_v32i8: 38; AVX512VPOPCNTDQ: # %bb.0: 39; AVX512VPOPCNTDQ-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 40; AVX512VPOPCNTDQ-NEXT: vpaddb %ymm1, %ymm0, %ymm1 41; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm0 42; AVX512VPOPCNTDQ-NEXT: vpxor %xmm1, %xmm1, %xmm1 43; AVX512VPOPCNTDQ-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 44; AVX512VPOPCNTDQ-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm0 45; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 46; AVX512VPOPCNTDQ-NEXT: retq 47; 48; AVX512VPOPCNTDQVL-LABEL: ugt_1_v32i8: 49; AVX512VPOPCNTDQVL: # %bb.0: 50; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 51; AVX512VPOPCNTDQVL-NEXT: vpaddb %ymm1, %ymm0, %ymm1 52; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm0 53; AVX512VPOPCNTDQVL-NEXT: vpxor %xmm1, %xmm1, %xmm1 54; AVX512VPOPCNTDQVL-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 55; AVX512VPOPCNTDQVL-NEXT: vpternlogq $15, %ymm0, %ymm0, %ymm0 56; AVX512VPOPCNTDQVL-NEXT: retq 57; 58; BITALG_NOVLX-LABEL: ugt_1_v32i8: 59; BITALG_NOVLX: # %bb.0: 60; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 61; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 62; BITALG_NOVLX-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 63; BITALG_NOVLX-NEXT: retq 64; 65; BITALG-LABEL: ugt_1_v32i8: 66; BITALG: # %bb.0: 67; BITALG-NEXT: vpopcntb %ymm0, %ymm0 68; BITALG-NEXT: vpcmpnleub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 69; BITALG-NEXT: vpmovm2b %k0, %ymm0 70; BITALG-NEXT: retq 71 %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0) 72 %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> 73 %4 = sext <32 x i1> %3 to <32 x i8> 74 ret <32 x i8> %4 75} 76 77define <32 x i8> @ult_2_v32i8(<32 x i8> %0) { 78; AVX1-LABEL: ult_2_v32i8: 79; AVX1: # %bb.0: 80; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 81; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2 82; AVX1-NEXT: vpaddb %xmm2, %xmm1, %xmm3 83; AVX1-NEXT: vpand %xmm3, %xmm1, %xmm1 84; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3 85; AVX1-NEXT: vpcmpeqb %xmm3, %xmm1, %xmm1 86; AVX1-NEXT: vpaddb %xmm2, %xmm0, %xmm2 87; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm0 88; AVX1-NEXT: vpcmpeqb %xmm3, %xmm0, %xmm0 89; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 90; AVX1-NEXT: retq 91; 92; AVX2-LABEL: ult_2_v32i8: 93; AVX2: # %bb.0: 94; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 95; AVX2-NEXT: vpaddb %ymm1, %ymm0, %ymm1 96; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 97; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 98; AVX2-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 99; AVX2-NEXT: retq 100; 101; AVX512VPOPCNTDQ-LABEL: ult_2_v32i8: 102; AVX512VPOPCNTDQ: # %bb.0: 103; AVX512VPOPCNTDQ-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 104; AVX512VPOPCNTDQ-NEXT: vpaddb %ymm1, %ymm0, %ymm1 105; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm0 106; AVX512VPOPCNTDQ-NEXT: vpxor %xmm1, %xmm1, %xmm1 107; AVX512VPOPCNTDQ-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 108; AVX512VPOPCNTDQ-NEXT: retq 109; 110; AVX512VPOPCNTDQVL-LABEL: ult_2_v32i8: 111; AVX512VPOPCNTDQVL: # %bb.0: 112; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 113; AVX512VPOPCNTDQVL-NEXT: vpaddb %ymm1, %ymm0, %ymm1 114; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm0 115; AVX512VPOPCNTDQVL-NEXT: vpxor %xmm1, %xmm1, %xmm1 116; AVX512VPOPCNTDQVL-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 117; AVX512VPOPCNTDQVL-NEXT: retq 118; 119; BITALG_NOVLX-LABEL: ult_2_v32i8: 120; BITALG_NOVLX: # %bb.0: 121; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 122; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 123; BITALG_NOVLX-NEXT: vmovdqa {{.*#+}} 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] 124; BITALG_NOVLX-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0 125; BITALG_NOVLX-NEXT: retq 126; 127; BITALG-LABEL: ult_2_v32i8: 128; BITALG: # %bb.0: 129; BITALG-NEXT: vpopcntb %ymm0, %ymm0 130; BITALG-NEXT: vpcmpltub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 131; BITALG-NEXT: vpmovm2b %k0, %ymm0 132; BITALG-NEXT: retq 133 %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0) 134 %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> 135 %4 = sext <32 x i1> %3 to <32 x i8> 136 ret <32 x i8> %4 137} 138 139define <32 x i8> @ugt_2_v32i8(<32 x i8> %0) { 140; AVX1-LABEL: ugt_2_v32i8: 141; AVX1: # %bb.0: 142; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 143; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 144; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 145; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 146; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 147; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 148; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 149; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 150; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 151; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 152; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 153; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 154; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 155; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 156; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 157; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3] 158; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm3 159; AVX1-NEXT: vpcmpeqb %xmm3, %xmm0, %xmm0 160; AVX1-NEXT: vpmaxub %xmm1, %xmm2, %xmm1 161; AVX1-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm1 162; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 163; AVX1-NEXT: retq 164; 165; AVX2-LABEL: ugt_2_v32i8: 166; AVX2: # %bb.0: 167; AVX2-NEXT: vmovdqa {{.*#+}} 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] 168; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 169; AVX2-NEXT: vmovdqa {{.*#+}} 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] 170; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 171; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 172; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 173; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 174; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 175; AVX2-NEXT: vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 176; AVX2-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 177; AVX2-NEXT: retq 178; 179; AVX512VPOPCNTDQ-LABEL: ugt_2_v32i8: 180; AVX512VPOPCNTDQ: # %bb.0: 181; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} 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] 182; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm2 183; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} 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] 184; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm2, %ymm3, %ymm2 185; AVX512VPOPCNTDQ-NEXT: vpsrlw $4, %ymm0, %ymm0 186; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm0 187; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm0, %ymm3, %ymm0 188; AVX512VPOPCNTDQ-NEXT: vpaddb %ymm2, %ymm0, %ymm0 189; AVX512VPOPCNTDQ-NEXT: vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 190; AVX512VPOPCNTDQ-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 191; AVX512VPOPCNTDQ-NEXT: retq 192; 193; AVX512VPOPCNTDQVL-LABEL: ugt_2_v32i8: 194; AVX512VPOPCNTDQVL: # %bb.0: 195; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} 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] 196; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm2 197; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} 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] 198; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm2, %ymm3, %ymm2 199; AVX512VPOPCNTDQVL-NEXT: vpsrlw $4, %ymm0, %ymm0 200; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm0 201; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm0, %ymm3, %ymm0 202; AVX512VPOPCNTDQVL-NEXT: vpaddb %ymm2, %ymm0, %ymm0 203; AVX512VPOPCNTDQVL-NEXT: vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 204; AVX512VPOPCNTDQVL-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 205; AVX512VPOPCNTDQVL-NEXT: retq 206; 207; BITALG_NOVLX-LABEL: ugt_2_v32i8: 208; BITALG_NOVLX: # %bb.0: 209; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 210; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 211; BITALG_NOVLX-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 212; BITALG_NOVLX-NEXT: retq 213; 214; BITALG-LABEL: ugt_2_v32i8: 215; BITALG: # %bb.0: 216; BITALG-NEXT: vpopcntb %ymm0, %ymm0 217; BITALG-NEXT: vpcmpnleub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 218; BITALG-NEXT: vpmovm2b %k0, %ymm0 219; BITALG-NEXT: retq 220 %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0) 221 %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> 222 %4 = sext <32 x i1> %3 to <32 x i8> 223 ret <32 x i8> %4 224} 225 226define <32 x i8> @ult_3_v32i8(<32 x i8> %0) { 227; AVX1-LABEL: ult_3_v32i8: 228; AVX1: # %bb.0: 229; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 230; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 231; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 232; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 233; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 234; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 235; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 236; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 237; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 238; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 239; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 240; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 241; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 242; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 243; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 244; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2] 245; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm3 246; AVX1-NEXT: vpcmpeqb %xmm3, %xmm0, %xmm0 247; AVX1-NEXT: vpminub %xmm1, %xmm2, %xmm1 248; AVX1-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm1 249; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 250; AVX1-NEXT: retq 251; 252; AVX2-LABEL: ult_3_v32i8: 253; AVX2: # %bb.0: 254; AVX2-NEXT: vmovdqa {{.*#+}} 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] 255; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 256; AVX2-NEXT: vmovdqa {{.*#+}} 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] 257; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 258; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 259; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 260; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 261; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 262; AVX2-NEXT: vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 263; AVX2-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 264; AVX2-NEXT: retq 265; 266; AVX512VPOPCNTDQ-LABEL: ult_3_v32i8: 267; AVX512VPOPCNTDQ: # %bb.0: 268; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} 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] 269; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm2 270; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} 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] 271; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm2, %ymm3, %ymm2 272; AVX512VPOPCNTDQ-NEXT: vpsrlw $4, %ymm0, %ymm0 273; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm0 274; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm0, %ymm3, %ymm0 275; AVX512VPOPCNTDQ-NEXT: vpaddb %ymm2, %ymm0, %ymm0 276; AVX512VPOPCNTDQ-NEXT: vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 277; AVX512VPOPCNTDQ-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 278; AVX512VPOPCNTDQ-NEXT: retq 279; 280; AVX512VPOPCNTDQVL-LABEL: ult_3_v32i8: 281; AVX512VPOPCNTDQVL: # %bb.0: 282; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} 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] 283; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm2 284; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} 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] 285; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm2, %ymm3, %ymm2 286; AVX512VPOPCNTDQVL-NEXT: vpsrlw $4, %ymm0, %ymm0 287; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm0 288; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm0, %ymm3, %ymm0 289; AVX512VPOPCNTDQVL-NEXT: vpaddb %ymm2, %ymm0, %ymm0 290; AVX512VPOPCNTDQVL-NEXT: vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 291; AVX512VPOPCNTDQVL-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 292; AVX512VPOPCNTDQVL-NEXT: retq 293; 294; BITALG_NOVLX-LABEL: ult_3_v32i8: 295; BITALG_NOVLX: # %bb.0: 296; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 297; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 298; BITALG_NOVLX-NEXT: vmovdqa {{.*#+}} 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] 299; BITALG_NOVLX-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0 300; BITALG_NOVLX-NEXT: retq 301; 302; BITALG-LABEL: ult_3_v32i8: 303; BITALG: # %bb.0: 304; BITALG-NEXT: vpopcntb %ymm0, %ymm0 305; BITALG-NEXT: vpcmpltub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 306; BITALG-NEXT: vpmovm2b %k0, %ymm0 307; BITALG-NEXT: retq 308 %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0) 309 %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> 310 %4 = sext <32 x i1> %3 to <32 x i8> 311 ret <32 x i8> %4 312} 313 314define <32 x i8> @ugt_3_v32i8(<32 x i8> %0) { 315; AVX1-LABEL: ugt_3_v32i8: 316; AVX1: # %bb.0: 317; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 318; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 319; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 320; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 321; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 322; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 323; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 324; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 325; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 326; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 327; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 328; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 329; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 330; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 331; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 332; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4] 333; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm3 334; AVX1-NEXT: vpcmpeqb %xmm3, %xmm0, %xmm0 335; AVX1-NEXT: vpmaxub %xmm1, %xmm2, %xmm1 336; AVX1-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm1 337; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 338; AVX1-NEXT: retq 339; 340; AVX2-LABEL: ugt_3_v32i8: 341; AVX2: # %bb.0: 342; AVX2-NEXT: vmovdqa {{.*#+}} 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] 343; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 344; AVX2-NEXT: vmovdqa {{.*#+}} 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] 345; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 346; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 347; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 348; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 349; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 350; AVX2-NEXT: vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 351; AVX2-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 352; AVX2-NEXT: retq 353; 354; AVX512VPOPCNTDQ-LABEL: ugt_3_v32i8: 355; AVX512VPOPCNTDQ: # %bb.0: 356; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} 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] 357; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm2 358; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} 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] 359; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm2, %ymm3, %ymm2 360; AVX512VPOPCNTDQ-NEXT: vpsrlw $4, %ymm0, %ymm0 361; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm0 362; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm0, %ymm3, %ymm0 363; AVX512VPOPCNTDQ-NEXT: vpaddb %ymm2, %ymm0, %ymm0 364; AVX512VPOPCNTDQ-NEXT: vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 365; AVX512VPOPCNTDQ-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 366; AVX512VPOPCNTDQ-NEXT: retq 367; 368; AVX512VPOPCNTDQVL-LABEL: ugt_3_v32i8: 369; AVX512VPOPCNTDQVL: # %bb.0: 370; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} 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] 371; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm2 372; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} 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] 373; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm2, %ymm3, %ymm2 374; AVX512VPOPCNTDQVL-NEXT: vpsrlw $4, %ymm0, %ymm0 375; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm0 376; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm0, %ymm3, %ymm0 377; AVX512VPOPCNTDQVL-NEXT: vpaddb %ymm2, %ymm0, %ymm0 378; AVX512VPOPCNTDQVL-NEXT: vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 379; AVX512VPOPCNTDQVL-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 380; AVX512VPOPCNTDQVL-NEXT: retq 381; 382; BITALG_NOVLX-LABEL: ugt_3_v32i8: 383; BITALG_NOVLX: # %bb.0: 384; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 385; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 386; BITALG_NOVLX-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 387; BITALG_NOVLX-NEXT: retq 388; 389; BITALG-LABEL: ugt_3_v32i8: 390; BITALG: # %bb.0: 391; BITALG-NEXT: vpopcntb %ymm0, %ymm0 392; BITALG-NEXT: vpcmpnleub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 393; BITALG-NEXT: vpmovm2b %k0, %ymm0 394; BITALG-NEXT: retq 395 %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0) 396 %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> 397 %4 = sext <32 x i1> %3 to <32 x i8> 398 ret <32 x i8> %4 399} 400 401define <32 x i8> @ult_4_v32i8(<32 x i8> %0) { 402; AVX1-LABEL: ult_4_v32i8: 403; AVX1: # %bb.0: 404; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 405; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 406; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 407; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 408; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 409; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 410; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 411; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 412; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 413; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 414; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 415; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 416; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 417; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 418; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 419; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3] 420; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm3 421; AVX1-NEXT: vpcmpeqb %xmm3, %xmm0, %xmm0 422; AVX1-NEXT: vpminub %xmm1, %xmm2, %xmm1 423; AVX1-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm1 424; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 425; AVX1-NEXT: retq 426; 427; AVX2-LABEL: ult_4_v32i8: 428; AVX2: # %bb.0: 429; AVX2-NEXT: vmovdqa {{.*#+}} 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] 430; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 431; AVX2-NEXT: vmovdqa {{.*#+}} 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] 432; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 433; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 434; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 435; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 436; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 437; AVX2-NEXT: vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 438; AVX2-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 439; AVX2-NEXT: retq 440; 441; AVX512VPOPCNTDQ-LABEL: ult_4_v32i8: 442; AVX512VPOPCNTDQ: # %bb.0: 443; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} 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] 444; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm2 445; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} 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] 446; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm2, %ymm3, %ymm2 447; AVX512VPOPCNTDQ-NEXT: vpsrlw $4, %ymm0, %ymm0 448; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm0 449; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm0, %ymm3, %ymm0 450; AVX512VPOPCNTDQ-NEXT: vpaddb %ymm2, %ymm0, %ymm0 451; AVX512VPOPCNTDQ-NEXT: vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 452; AVX512VPOPCNTDQ-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 453; AVX512VPOPCNTDQ-NEXT: retq 454; 455; AVX512VPOPCNTDQVL-LABEL: ult_4_v32i8: 456; AVX512VPOPCNTDQVL: # %bb.0: 457; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} 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] 458; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm2 459; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} 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] 460; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm2, %ymm3, %ymm2 461; AVX512VPOPCNTDQVL-NEXT: vpsrlw $4, %ymm0, %ymm0 462; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm0 463; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm0, %ymm3, %ymm0 464; AVX512VPOPCNTDQVL-NEXT: vpaddb %ymm2, %ymm0, %ymm0 465; AVX512VPOPCNTDQVL-NEXT: vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 466; AVX512VPOPCNTDQVL-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 467; AVX512VPOPCNTDQVL-NEXT: retq 468; 469; BITALG_NOVLX-LABEL: ult_4_v32i8: 470; BITALG_NOVLX: # %bb.0: 471; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 472; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 473; BITALG_NOVLX-NEXT: vmovdqa {{.*#+}} 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] 474; BITALG_NOVLX-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0 475; BITALG_NOVLX-NEXT: retq 476; 477; BITALG-LABEL: ult_4_v32i8: 478; BITALG: # %bb.0: 479; BITALG-NEXT: vpopcntb %ymm0, %ymm0 480; BITALG-NEXT: vpcmpltub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 481; BITALG-NEXT: vpmovm2b %k0, %ymm0 482; BITALG-NEXT: retq 483 %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0) 484 %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> 485 %4 = sext <32 x i1> %3 to <32 x i8> 486 ret <32 x i8> %4 487} 488 489define <32 x i8> @ugt_4_v32i8(<32 x i8> %0) { 490; AVX1-LABEL: ugt_4_v32i8: 491; AVX1: # %bb.0: 492; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 493; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 494; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 495; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 496; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 497; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 498; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 499; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 500; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 501; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 502; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 503; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 504; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 505; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 506; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 507; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5] 508; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm3 509; AVX1-NEXT: vpcmpeqb %xmm3, %xmm0, %xmm0 510; AVX1-NEXT: vpmaxub %xmm1, %xmm2, %xmm1 511; AVX1-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm1 512; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 513; AVX1-NEXT: retq 514; 515; AVX2-LABEL: ugt_4_v32i8: 516; AVX2: # %bb.0: 517; AVX2-NEXT: vmovdqa {{.*#+}} 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] 518; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 519; AVX2-NEXT: vmovdqa {{.*#+}} 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] 520; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 521; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 522; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 523; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 524; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 525; AVX2-NEXT: vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 526; AVX2-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 527; AVX2-NEXT: retq 528; 529; AVX512VPOPCNTDQ-LABEL: ugt_4_v32i8: 530; AVX512VPOPCNTDQ: # %bb.0: 531; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} 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] 532; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm2 533; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} 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] 534; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm2, %ymm3, %ymm2 535; AVX512VPOPCNTDQ-NEXT: vpsrlw $4, %ymm0, %ymm0 536; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm0 537; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm0, %ymm3, %ymm0 538; AVX512VPOPCNTDQ-NEXT: vpaddb %ymm2, %ymm0, %ymm0 539; AVX512VPOPCNTDQ-NEXT: vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 540; AVX512VPOPCNTDQ-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 541; AVX512VPOPCNTDQ-NEXT: retq 542; 543; AVX512VPOPCNTDQVL-LABEL: ugt_4_v32i8: 544; AVX512VPOPCNTDQVL: # %bb.0: 545; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} 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] 546; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm2 547; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} 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] 548; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm2, %ymm3, %ymm2 549; AVX512VPOPCNTDQVL-NEXT: vpsrlw $4, %ymm0, %ymm0 550; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm0 551; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm0, %ymm3, %ymm0 552; AVX512VPOPCNTDQVL-NEXT: vpaddb %ymm2, %ymm0, %ymm0 553; AVX512VPOPCNTDQVL-NEXT: vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 554; AVX512VPOPCNTDQVL-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 555; AVX512VPOPCNTDQVL-NEXT: retq 556; 557; BITALG_NOVLX-LABEL: ugt_4_v32i8: 558; BITALG_NOVLX: # %bb.0: 559; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 560; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 561; BITALG_NOVLX-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 562; BITALG_NOVLX-NEXT: retq 563; 564; BITALG-LABEL: ugt_4_v32i8: 565; BITALG: # %bb.0: 566; BITALG-NEXT: vpopcntb %ymm0, %ymm0 567; BITALG-NEXT: vpcmpnleub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 568; BITALG-NEXT: vpmovm2b %k0, %ymm0 569; BITALG-NEXT: retq 570 %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0) 571 %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> 572 %4 = sext <32 x i1> %3 to <32 x i8> 573 ret <32 x i8> %4 574} 575 576define <32 x i8> @ult_5_v32i8(<32 x i8> %0) { 577; AVX1-LABEL: ult_5_v32i8: 578; AVX1: # %bb.0: 579; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 580; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 581; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 582; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 583; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 584; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 585; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 586; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 587; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 588; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 589; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 590; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 591; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 592; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 593; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 594; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4] 595; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm3 596; AVX1-NEXT: vpcmpeqb %xmm3, %xmm0, %xmm0 597; AVX1-NEXT: vpminub %xmm1, %xmm2, %xmm1 598; AVX1-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm1 599; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 600; AVX1-NEXT: retq 601; 602; AVX2-LABEL: ult_5_v32i8: 603; AVX2: # %bb.0: 604; AVX2-NEXT: vmovdqa {{.*#+}} 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] 605; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 606; AVX2-NEXT: vmovdqa {{.*#+}} 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] 607; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 608; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 609; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 610; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 611; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 612; AVX2-NEXT: vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 613; AVX2-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 614; AVX2-NEXT: retq 615; 616; AVX512VPOPCNTDQ-LABEL: ult_5_v32i8: 617; AVX512VPOPCNTDQ: # %bb.0: 618; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} 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] 619; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm2 620; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} 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] 621; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm2, %ymm3, %ymm2 622; AVX512VPOPCNTDQ-NEXT: vpsrlw $4, %ymm0, %ymm0 623; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm0 624; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm0, %ymm3, %ymm0 625; AVX512VPOPCNTDQ-NEXT: vpaddb %ymm2, %ymm0, %ymm0 626; AVX512VPOPCNTDQ-NEXT: vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 627; AVX512VPOPCNTDQ-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 628; AVX512VPOPCNTDQ-NEXT: retq 629; 630; AVX512VPOPCNTDQVL-LABEL: ult_5_v32i8: 631; AVX512VPOPCNTDQVL: # %bb.0: 632; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} 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] 633; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm2 634; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} 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] 635; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm2, %ymm3, %ymm2 636; AVX512VPOPCNTDQVL-NEXT: vpsrlw $4, %ymm0, %ymm0 637; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm0 638; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm0, %ymm3, %ymm0 639; AVX512VPOPCNTDQVL-NEXT: vpaddb %ymm2, %ymm0, %ymm0 640; AVX512VPOPCNTDQVL-NEXT: vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 641; AVX512VPOPCNTDQVL-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 642; AVX512VPOPCNTDQVL-NEXT: retq 643; 644; BITALG_NOVLX-LABEL: ult_5_v32i8: 645; BITALG_NOVLX: # %bb.0: 646; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 647; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 648; BITALG_NOVLX-NEXT: vmovdqa {{.*#+}} 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_NOVLX-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0 650; BITALG_NOVLX-NEXT: retq 651; 652; BITALG-LABEL: ult_5_v32i8: 653; BITALG: # %bb.0: 654; BITALG-NEXT: vpopcntb %ymm0, %ymm0 655; BITALG-NEXT: vpcmpltub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 656; BITALG-NEXT: vpmovm2b %k0, %ymm0 657; BITALG-NEXT: retq 658 %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0) 659 %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> 660 %4 = sext <32 x i1> %3 to <32 x i8> 661 ret <32 x i8> %4 662} 663 664define <32 x i8> @ugt_5_v32i8(<32 x i8> %0) { 665; AVX1-LABEL: ugt_5_v32i8: 666; AVX1: # %bb.0: 667; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 668; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 669; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 670; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 671; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 672; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 673; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 674; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 675; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 676; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 677; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 678; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 679; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 680; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 681; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 682; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6] 683; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm3 684; AVX1-NEXT: vpcmpeqb %xmm3, %xmm0, %xmm0 685; AVX1-NEXT: vpmaxub %xmm1, %xmm2, %xmm1 686; AVX1-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm1 687; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 688; AVX1-NEXT: retq 689; 690; AVX2-LABEL: ugt_5_v32i8: 691; AVX2: # %bb.0: 692; AVX2-NEXT: vmovdqa {{.*#+}} 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] 693; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 694; AVX2-NEXT: vmovdqa {{.*#+}} 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] 695; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 696; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 697; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 698; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 699; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 700; AVX2-NEXT: vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 701; AVX2-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 702; AVX2-NEXT: retq 703; 704; AVX512VPOPCNTDQ-LABEL: ugt_5_v32i8: 705; AVX512VPOPCNTDQ: # %bb.0: 706; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} 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] 707; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm2 708; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} 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] 709; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm2, %ymm3, %ymm2 710; AVX512VPOPCNTDQ-NEXT: vpsrlw $4, %ymm0, %ymm0 711; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm0 712; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm0, %ymm3, %ymm0 713; AVX512VPOPCNTDQ-NEXT: vpaddb %ymm2, %ymm0, %ymm0 714; AVX512VPOPCNTDQ-NEXT: vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 715; AVX512VPOPCNTDQ-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 716; AVX512VPOPCNTDQ-NEXT: retq 717; 718; AVX512VPOPCNTDQVL-LABEL: ugt_5_v32i8: 719; AVX512VPOPCNTDQVL: # %bb.0: 720; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} 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] 721; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm2 722; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} 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] 723; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm2, %ymm3, %ymm2 724; AVX512VPOPCNTDQVL-NEXT: vpsrlw $4, %ymm0, %ymm0 725; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm0 726; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm0, %ymm3, %ymm0 727; AVX512VPOPCNTDQVL-NEXT: vpaddb %ymm2, %ymm0, %ymm0 728; AVX512VPOPCNTDQVL-NEXT: vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 729; AVX512VPOPCNTDQVL-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 730; AVX512VPOPCNTDQVL-NEXT: retq 731; 732; BITALG_NOVLX-LABEL: ugt_5_v32i8: 733; BITALG_NOVLX: # %bb.0: 734; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 735; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 736; BITALG_NOVLX-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 737; BITALG_NOVLX-NEXT: retq 738; 739; BITALG-LABEL: ugt_5_v32i8: 740; BITALG: # %bb.0: 741; BITALG-NEXT: vpopcntb %ymm0, %ymm0 742; BITALG-NEXT: vpcmpnleub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 743; BITALG-NEXT: vpmovm2b %k0, %ymm0 744; BITALG-NEXT: retq 745 %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0) 746 %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> 747 %4 = sext <32 x i1> %3 to <32 x i8> 748 ret <32 x i8> %4 749} 750 751define <32 x i8> @ult_6_v32i8(<32 x i8> %0) { 752; AVX1-LABEL: ult_6_v32i8: 753; AVX1: # %bb.0: 754; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 755; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 756; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 757; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 758; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 759; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 760; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 761; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 762; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 763; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 764; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 765; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 766; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 767; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 768; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 769; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5] 770; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm3 771; AVX1-NEXT: vpcmpeqb %xmm3, %xmm0, %xmm0 772; AVX1-NEXT: vpminub %xmm1, %xmm2, %xmm1 773; AVX1-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm1 774; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 775; AVX1-NEXT: retq 776; 777; AVX2-LABEL: ult_6_v32i8: 778; AVX2: # %bb.0: 779; AVX2-NEXT: vmovdqa {{.*#+}} 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] 780; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 781; AVX2-NEXT: vmovdqa {{.*#+}} 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] 782; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 783; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 784; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 785; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 786; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 787; AVX2-NEXT: vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 788; AVX2-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 789; AVX2-NEXT: retq 790; 791; AVX512VPOPCNTDQ-LABEL: ult_6_v32i8: 792; AVX512VPOPCNTDQ: # %bb.0: 793; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} 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] 794; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm2 795; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} 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] 796; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm2, %ymm3, %ymm2 797; AVX512VPOPCNTDQ-NEXT: vpsrlw $4, %ymm0, %ymm0 798; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm0 799; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm0, %ymm3, %ymm0 800; AVX512VPOPCNTDQ-NEXT: vpaddb %ymm2, %ymm0, %ymm0 801; AVX512VPOPCNTDQ-NEXT: vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 802; AVX512VPOPCNTDQ-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 803; AVX512VPOPCNTDQ-NEXT: retq 804; 805; AVX512VPOPCNTDQVL-LABEL: ult_6_v32i8: 806; AVX512VPOPCNTDQVL: # %bb.0: 807; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} 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] 808; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm2 809; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} 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] 810; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm2, %ymm3, %ymm2 811; AVX512VPOPCNTDQVL-NEXT: vpsrlw $4, %ymm0, %ymm0 812; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm0 813; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm0, %ymm3, %ymm0 814; AVX512VPOPCNTDQVL-NEXT: vpaddb %ymm2, %ymm0, %ymm0 815; AVX512VPOPCNTDQVL-NEXT: vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 816; AVX512VPOPCNTDQVL-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 817; AVX512VPOPCNTDQVL-NEXT: retq 818; 819; BITALG_NOVLX-LABEL: ult_6_v32i8: 820; BITALG_NOVLX: # %bb.0: 821; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 822; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 823; BITALG_NOVLX-NEXT: vmovdqa {{.*#+}} 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] 824; BITALG_NOVLX-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0 825; BITALG_NOVLX-NEXT: retq 826; 827; BITALG-LABEL: ult_6_v32i8: 828; BITALG: # %bb.0: 829; BITALG-NEXT: vpopcntb %ymm0, %ymm0 830; BITALG-NEXT: vpcmpltub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 831; BITALG-NEXT: vpmovm2b %k0, %ymm0 832; BITALG-NEXT: retq 833 %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0) 834 %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> 835 %4 = sext <32 x i1> %3 to <32 x i8> 836 ret <32 x i8> %4 837} 838 839define <32 x i8> @ugt_6_v32i8(<32 x i8> %0) { 840; AVX1-LABEL: ugt_6_v32i8: 841; AVX1: # %bb.0: 842; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 843; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 844; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 845; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 846; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 847; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 848; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 849; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 850; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 851; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 852; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 853; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 854; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 855; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 856; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 857; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7] 858; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm3 859; AVX1-NEXT: vpcmpeqb %xmm3, %xmm0, %xmm0 860; AVX1-NEXT: vpmaxub %xmm1, %xmm2, %xmm1 861; AVX1-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm1 862; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 863; AVX1-NEXT: retq 864; 865; AVX2-LABEL: ugt_6_v32i8: 866; AVX2: # %bb.0: 867; AVX2-NEXT: vmovdqa {{.*#+}} 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] 868; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 869; AVX2-NEXT: vmovdqa {{.*#+}} 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] 870; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 871; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 872; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 873; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 874; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 875; AVX2-NEXT: vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 876; AVX2-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 877; AVX2-NEXT: retq 878; 879; AVX512VPOPCNTDQ-LABEL: ugt_6_v32i8: 880; AVX512VPOPCNTDQ: # %bb.0: 881; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} 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] 882; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm2 883; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} 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] 884; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm2, %ymm3, %ymm2 885; AVX512VPOPCNTDQ-NEXT: vpsrlw $4, %ymm0, %ymm0 886; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm0 887; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm0, %ymm3, %ymm0 888; AVX512VPOPCNTDQ-NEXT: vpaddb %ymm2, %ymm0, %ymm0 889; AVX512VPOPCNTDQ-NEXT: vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 890; AVX512VPOPCNTDQ-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 891; AVX512VPOPCNTDQ-NEXT: retq 892; 893; AVX512VPOPCNTDQVL-LABEL: ugt_6_v32i8: 894; AVX512VPOPCNTDQVL: # %bb.0: 895; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} 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] 896; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm2 897; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} 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] 898; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm2, %ymm3, %ymm2 899; AVX512VPOPCNTDQVL-NEXT: vpsrlw $4, %ymm0, %ymm0 900; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm0 901; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm0, %ymm3, %ymm0 902; AVX512VPOPCNTDQVL-NEXT: vpaddb %ymm2, %ymm0, %ymm0 903; AVX512VPOPCNTDQVL-NEXT: vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 904; AVX512VPOPCNTDQVL-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 905; AVX512VPOPCNTDQVL-NEXT: retq 906; 907; BITALG_NOVLX-LABEL: ugt_6_v32i8: 908; BITALG_NOVLX: # %bb.0: 909; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 910; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 911; BITALG_NOVLX-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 912; BITALG_NOVLX-NEXT: retq 913; 914; BITALG-LABEL: ugt_6_v32i8: 915; BITALG: # %bb.0: 916; BITALG-NEXT: vpopcntb %ymm0, %ymm0 917; BITALG-NEXT: vpcmpnleub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 918; BITALG-NEXT: vpmovm2b %k0, %ymm0 919; BITALG-NEXT: retq 920 %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0) 921 %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> 922 %4 = sext <32 x i1> %3 to <32 x i8> 923 ret <32 x i8> %4 924} 925 926define <32 x i8> @ult_7_v32i8(<32 x i8> %0) { 927; AVX1-LABEL: ult_7_v32i8: 928; AVX1: # %bb.0: 929; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 930; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 931; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 932; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 933; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 934; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 935; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 936; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 937; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 938; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 939; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 940; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 941; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 942; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 943; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 944; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6] 945; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm3 946; AVX1-NEXT: vpcmpeqb %xmm3, %xmm0, %xmm0 947; AVX1-NEXT: vpminub %xmm1, %xmm2, %xmm1 948; AVX1-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm1 949; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 950; AVX1-NEXT: retq 951; 952; AVX2-LABEL: ult_7_v32i8: 953; AVX2: # %bb.0: 954; AVX2-NEXT: vmovdqa {{.*#+}} 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] 955; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 956; AVX2-NEXT: vmovdqa {{.*#+}} 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] 957; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 958; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 959; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 960; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 961; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 962; AVX2-NEXT: vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 963; AVX2-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 964; AVX2-NEXT: retq 965; 966; AVX512VPOPCNTDQ-LABEL: ult_7_v32i8: 967; AVX512VPOPCNTDQ: # %bb.0: 968; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} 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] 969; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm2 970; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} 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] 971; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm2, %ymm3, %ymm2 972; AVX512VPOPCNTDQ-NEXT: vpsrlw $4, %ymm0, %ymm0 973; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm0 974; AVX512VPOPCNTDQ-NEXT: vpshufb %ymm0, %ymm3, %ymm0 975; AVX512VPOPCNTDQ-NEXT: vpaddb %ymm2, %ymm0, %ymm0 976; AVX512VPOPCNTDQ-NEXT: vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 977; AVX512VPOPCNTDQ-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 978; AVX512VPOPCNTDQ-NEXT: retq 979; 980; AVX512VPOPCNTDQVL-LABEL: ult_7_v32i8: 981; AVX512VPOPCNTDQVL: # %bb.0: 982; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} 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] 983; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm2 984; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} 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] 985; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm2, %ymm3, %ymm2 986; AVX512VPOPCNTDQVL-NEXT: vpsrlw $4, %ymm0, %ymm0 987; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm0 988; AVX512VPOPCNTDQVL-NEXT: vpshufb %ymm0, %ymm3, %ymm0 989; AVX512VPOPCNTDQVL-NEXT: vpaddb %ymm2, %ymm0, %ymm0 990; AVX512VPOPCNTDQVL-NEXT: vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 991; AVX512VPOPCNTDQVL-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 992; AVX512VPOPCNTDQVL-NEXT: retq 993; 994; BITALG_NOVLX-LABEL: ult_7_v32i8: 995; BITALG_NOVLX: # %bb.0: 996; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 997; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 998; BITALG_NOVLX-NEXT: vmovdqa {{.*#+}} 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] 999; BITALG_NOVLX-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0 1000; BITALG_NOVLX-NEXT: retq 1001; 1002; BITALG-LABEL: ult_7_v32i8: 1003; BITALG: # %bb.0: 1004; BITALG-NEXT: vpopcntb %ymm0, %ymm0 1005; BITALG-NEXT: vpcmpltub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 1006; BITALG-NEXT: vpmovm2b %k0, %ymm0 1007; BITALG-NEXT: retq 1008 %2 = tail call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %0) 1009 %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> 1010 %4 = sext <32 x i1> %3 to <32 x i8> 1011 ret <32 x i8> %4 1012} 1013 1014define <16 x i16> @ugt_1_v16i16(<16 x i16> %0) { 1015; AVX1-LABEL: ugt_1_v16i16: 1016; AVX1: # %bb.0: 1017; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 1018; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2 1019; AVX1-NEXT: vpaddw %xmm2, %xmm1, %xmm3 1020; AVX1-NEXT: vpand %xmm3, %xmm1, %xmm1 1021; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3 1022; AVX1-NEXT: vpcmpeqw %xmm3, %xmm1, %xmm1 1023; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm1 1024; AVX1-NEXT: vpaddw %xmm2, %xmm0, %xmm4 1025; AVX1-NEXT: vpand %xmm4, %xmm0, %xmm0 1026; AVX1-NEXT: vpcmpeqw %xmm3, %xmm0, %xmm0 1027; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm0 1028; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 1029; AVX1-NEXT: retq 1030; 1031; AVX2-LABEL: ugt_1_v16i16: 1032; AVX2: # %bb.0: 1033; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 1034; AVX2-NEXT: vpaddw %ymm1, %ymm0, %ymm2 1035; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0 1036; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2 1037; AVX2-NEXT: vpcmpeqw %ymm2, %ymm0, %ymm0 1038; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm0 1039; AVX2-NEXT: retq 1040; 1041; AVX512VPOPCNTDQ-LABEL: ugt_1_v16i16: 1042; AVX512VPOPCNTDQ: # %bb.0: 1043; AVX512VPOPCNTDQ-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 1044; AVX512VPOPCNTDQ-NEXT: vpaddw %ymm1, %ymm0, %ymm1 1045; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm0 1046; AVX512VPOPCNTDQ-NEXT: vpxor %xmm1, %xmm1, %xmm1 1047; AVX512VPOPCNTDQ-NEXT: vpcmpeqw %ymm1, %ymm0, %ymm0 1048; AVX512VPOPCNTDQ-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm0 1049; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1050; AVX512VPOPCNTDQ-NEXT: retq 1051; 1052; AVX512VPOPCNTDQVL-LABEL: ugt_1_v16i16: 1053; AVX512VPOPCNTDQVL: # %bb.0: 1054; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 1055; AVX512VPOPCNTDQVL-NEXT: vpaddw %ymm1, %ymm0, %ymm1 1056; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm0 1057; AVX512VPOPCNTDQVL-NEXT: vpxor %xmm1, %xmm1, %xmm1 1058; AVX512VPOPCNTDQVL-NEXT: vpcmpeqw %ymm1, %ymm0, %ymm0 1059; AVX512VPOPCNTDQVL-NEXT: vpternlogq $15, %ymm0, %ymm0, %ymm0 1060; AVX512VPOPCNTDQVL-NEXT: retq 1061; 1062; BITALG_NOVLX-LABEL: ugt_1_v16i16: 1063; BITALG_NOVLX: # %bb.0: 1064; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1065; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 1066; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 1067; BITALG_NOVLX-NEXT: retq 1068; 1069; BITALG-LABEL: ugt_1_v16i16: 1070; BITALG: # %bb.0: 1071; BITALG-NEXT: vpopcntw %ymm0, %ymm0 1072; BITALG-NEXT: vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 1073; BITALG-NEXT: vpmovm2w %k0, %ymm0 1074; BITALG-NEXT: retq 1075 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0) 1076 %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> 1077 %4 = sext <16 x i1> %3 to <16 x i16> 1078 ret <16 x i16> %4 1079} 1080 1081define <16 x i16> @ult_2_v16i16(<16 x i16> %0) { 1082; AVX1-LABEL: ult_2_v16i16: 1083; AVX1: # %bb.0: 1084; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 1085; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2 1086; AVX1-NEXT: vpaddw %xmm2, %xmm1, %xmm3 1087; AVX1-NEXT: vpand %xmm3, %xmm1, %xmm1 1088; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3 1089; AVX1-NEXT: vpcmpeqw %xmm3, %xmm1, %xmm1 1090; AVX1-NEXT: vpaddw %xmm2, %xmm0, %xmm2 1091; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm0 1092; AVX1-NEXT: vpcmpeqw %xmm3, %xmm0, %xmm0 1093; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 1094; AVX1-NEXT: retq 1095; 1096; AVX2-LABEL: ult_2_v16i16: 1097; AVX2: # %bb.0: 1098; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 1099; AVX2-NEXT: vpaddw %ymm1, %ymm0, %ymm1 1100; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 1101; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 1102; AVX2-NEXT: vpcmpeqw %ymm1, %ymm0, %ymm0 1103; AVX2-NEXT: retq 1104; 1105; AVX512VPOPCNTDQ-LABEL: ult_2_v16i16: 1106; AVX512VPOPCNTDQ: # %bb.0: 1107; AVX512VPOPCNTDQ-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 1108; AVX512VPOPCNTDQ-NEXT: vpaddw %ymm1, %ymm0, %ymm1 1109; AVX512VPOPCNTDQ-NEXT: vpand %ymm1, %ymm0, %ymm0 1110; AVX512VPOPCNTDQ-NEXT: vpxor %xmm1, %xmm1, %xmm1 1111; AVX512VPOPCNTDQ-NEXT: vpcmpeqw %ymm1, %ymm0, %ymm0 1112; AVX512VPOPCNTDQ-NEXT: retq 1113; 1114; AVX512VPOPCNTDQVL-LABEL: ult_2_v16i16: 1115; AVX512VPOPCNTDQVL: # %bb.0: 1116; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 1117; AVX512VPOPCNTDQVL-NEXT: vpaddw %ymm1, %ymm0, %ymm1 1118; AVX512VPOPCNTDQVL-NEXT: vpand %ymm1, %ymm0, %ymm0 1119; AVX512VPOPCNTDQVL-NEXT: vpxor %xmm1, %xmm1, %xmm1 1120; AVX512VPOPCNTDQVL-NEXT: vpcmpeqw %ymm1, %ymm0, %ymm0 1121; AVX512VPOPCNTDQVL-NEXT: retq 1122; 1123; BITALG_NOVLX-LABEL: ult_2_v16i16: 1124; BITALG_NOVLX: # %bb.0: 1125; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1126; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 1127; BITALG_NOVLX-NEXT: vmovdqa {{.*#+}} ymm1 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2] 1128; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 1129; BITALG_NOVLX-NEXT: retq 1130; 1131; BITALG-LABEL: ult_2_v16i16: 1132; BITALG: # %bb.0: 1133; BITALG-NEXT: vpopcntw %ymm0, %ymm0 1134; BITALG-NEXT: vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 1135; BITALG-NEXT: vpmovm2w %k0, %ymm0 1136; BITALG-NEXT: retq 1137 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0) 1138 %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> 1139 %4 = sext <16 x i1> %3 to <16 x i16> 1140 ret <16 x i16> %4 1141} 1142 1143define <16 x i16> @ugt_2_v16i16(<16 x i16> %0) { 1144; AVX1-LABEL: ugt_2_v16i16: 1145; AVX1: # %bb.0: 1146; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 1147; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 1148; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 1149; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 1150; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 1151; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 1152; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 1153; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 1154; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 1155; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 1156; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 1157; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1158; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 1159; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 1160; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 1161; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 1162; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 1163; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 1164; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 1165; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 1166; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 1167; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [2,2,2,2,2,2,2,2] 1168; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm0 1169; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm1 1170; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 1171; AVX1-NEXT: retq 1172; 1173; AVX2-LABEL: ugt_2_v16i16: 1174; AVX2: # %bb.0: 1175; AVX2-NEXT: vmovdqa {{.*#+}} 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] 1176; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 1177; AVX2-NEXT: vmovdqa {{.*#+}} 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] 1178; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 1179; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 1180; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 1181; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 1182; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 1183; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 1184; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 1185; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 1186; AVX2-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 1187; AVX2-NEXT: retq 1188; 1189; AVX512VPOPCNTDQ-LABEL: ugt_2_v16i16: 1190; AVX512VPOPCNTDQ: # %bb.0: 1191; 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],zero 1192; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 1193; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm0 1194; AVX512VPOPCNTDQ-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 1195; AVX512VPOPCNTDQ-NEXT: retq 1196; 1197; AVX512VPOPCNTDQVL-LABEL: ugt_2_v16i16: 1198; AVX512VPOPCNTDQVL: # %bb.0: 1199; 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],zero 1200; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm0 1201; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm0 1202; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 1203; AVX512VPOPCNTDQVL-NEXT: retq 1204; 1205; BITALG_NOVLX-LABEL: ugt_2_v16i16: 1206; BITALG_NOVLX: # %bb.0: 1207; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1208; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 1209; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 1210; BITALG_NOVLX-NEXT: retq 1211; 1212; BITALG-LABEL: ugt_2_v16i16: 1213; BITALG: # %bb.0: 1214; BITALG-NEXT: vpopcntw %ymm0, %ymm0 1215; BITALG-NEXT: vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 1216; BITALG-NEXT: vpmovm2w %k0, %ymm0 1217; BITALG-NEXT: retq 1218 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0) 1219 %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> 1220 %4 = sext <16 x i1> %3 to <16 x i16> 1221 ret <16 x i16> %4 1222} 1223 1224define <16 x i16> @ult_3_v16i16(<16 x i16> %0) { 1225; AVX1-LABEL: ult_3_v16i16: 1226; AVX1: # %bb.0: 1227; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 1228; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 1229; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 1230; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 1231; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 1232; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 1233; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 1234; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 1235; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 1236; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 1237; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 1238; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1239; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 1240; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 1241; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 1242; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 1243; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 1244; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 1245; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 1246; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 1247; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 1248; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [3,3,3,3,3,3,3,3] 1249; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm0 1250; AVX1-NEXT: vpcmpgtw %xmm2, %xmm1, %xmm1 1251; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 1252; AVX1-NEXT: retq 1253; 1254; AVX2-LABEL: ult_3_v16i16: 1255; AVX2: # %bb.0: 1256; AVX2-NEXT: vmovdqa {{.*#+}} 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] 1257; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 1258; AVX2-NEXT: vmovdqa {{.*#+}} 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] 1259; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 1260; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 1261; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 1262; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 1263; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 1264; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 1265; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 1266; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 1267; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3] 1268; AVX2-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 1269; AVX2-NEXT: retq 1270; 1271; AVX512VPOPCNTDQ-LABEL: ult_3_v16i16: 1272; AVX512VPOPCNTDQ: # %bb.0: 1273; 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],zero 1274; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 1275; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm0 1276; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3] 1277; AVX512VPOPCNTDQ-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 1278; AVX512VPOPCNTDQ-NEXT: retq 1279; 1280; AVX512VPOPCNTDQVL-LABEL: ult_3_v16i16: 1281; AVX512VPOPCNTDQVL: # %bb.0: 1282; 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],zero 1283; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm0 1284; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm0 1285; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3] 1286; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 1287; AVX512VPOPCNTDQVL-NEXT: retq 1288; 1289; BITALG_NOVLX-LABEL: ult_3_v16i16: 1290; BITALG_NOVLX: # %bb.0: 1291; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1292; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 1293; BITALG_NOVLX-NEXT: vmovdqa {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3] 1294; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 1295; BITALG_NOVLX-NEXT: retq 1296; 1297; BITALG-LABEL: ult_3_v16i16: 1298; BITALG: # %bb.0: 1299; BITALG-NEXT: vpopcntw %ymm0, %ymm0 1300; BITALG-NEXT: vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 1301; BITALG-NEXT: vpmovm2w %k0, %ymm0 1302; BITALG-NEXT: retq 1303 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0) 1304 %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> 1305 %4 = sext <16 x i1> %3 to <16 x i16> 1306 ret <16 x i16> %4 1307} 1308 1309define <16 x i16> @ugt_3_v16i16(<16 x i16> %0) { 1310; AVX1-LABEL: ugt_3_v16i16: 1311; AVX1: # %bb.0: 1312; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 1313; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 1314; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 1315; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 1316; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 1317; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 1318; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 1319; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 1320; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 1321; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 1322; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 1323; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1324; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 1325; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 1326; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 1327; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 1328; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 1329; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 1330; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 1331; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 1332; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 1333; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [3,3,3,3,3,3,3,3] 1334; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm0 1335; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm1 1336; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 1337; AVX1-NEXT: retq 1338; 1339; AVX2-LABEL: ugt_3_v16i16: 1340; AVX2: # %bb.0: 1341; AVX2-NEXT: vmovdqa {{.*#+}} 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] 1342; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 1343; AVX2-NEXT: vmovdqa {{.*#+}} 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] 1344; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 1345; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 1346; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 1347; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 1348; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 1349; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 1350; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 1351; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 1352; AVX2-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 1353; AVX2-NEXT: retq 1354; 1355; AVX512VPOPCNTDQ-LABEL: ugt_3_v16i16: 1356; AVX512VPOPCNTDQ: # %bb.0: 1357; 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],zero 1358; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 1359; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm0 1360; AVX512VPOPCNTDQ-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 1361; AVX512VPOPCNTDQ-NEXT: retq 1362; 1363; AVX512VPOPCNTDQVL-LABEL: ugt_3_v16i16: 1364; AVX512VPOPCNTDQVL: # %bb.0: 1365; 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],zero 1366; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm0 1367; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm0 1368; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 1369; AVX512VPOPCNTDQVL-NEXT: retq 1370; 1371; BITALG_NOVLX-LABEL: ugt_3_v16i16: 1372; BITALG_NOVLX: # %bb.0: 1373; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1374; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 1375; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 1376; BITALG_NOVLX-NEXT: retq 1377; 1378; BITALG-LABEL: ugt_3_v16i16: 1379; BITALG: # %bb.0: 1380; BITALG-NEXT: vpopcntw %ymm0, %ymm0 1381; BITALG-NEXT: vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 1382; BITALG-NEXT: vpmovm2w %k0, %ymm0 1383; BITALG-NEXT: retq 1384 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0) 1385 %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> 1386 %4 = sext <16 x i1> %3 to <16 x i16> 1387 ret <16 x i16> %4 1388} 1389 1390define <16 x i16> @ult_4_v16i16(<16 x i16> %0) { 1391; AVX1-LABEL: ult_4_v16i16: 1392; AVX1: # %bb.0: 1393; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 1394; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 1395; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 1396; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 1397; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 1398; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 1399; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 1400; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 1401; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 1402; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 1403; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 1404; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1405; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 1406; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 1407; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 1408; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 1409; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 1410; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 1411; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 1412; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 1413; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 1414; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4] 1415; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm0 1416; AVX1-NEXT: vpcmpgtw %xmm2, %xmm1, %xmm1 1417; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 1418; AVX1-NEXT: retq 1419; 1420; AVX2-LABEL: ult_4_v16i16: 1421; AVX2: # %bb.0: 1422; AVX2-NEXT: vmovdqa {{.*#+}} 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] 1423; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 1424; AVX2-NEXT: vmovdqa {{.*#+}} 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] 1425; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 1426; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 1427; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 1428; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 1429; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 1430; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 1431; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 1432; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 1433; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4] 1434; AVX2-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 1435; AVX2-NEXT: retq 1436; 1437; AVX512VPOPCNTDQ-LABEL: ult_4_v16i16: 1438; AVX512VPOPCNTDQ: # %bb.0: 1439; 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],zero 1440; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 1441; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm0 1442; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4] 1443; AVX512VPOPCNTDQ-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 1444; AVX512VPOPCNTDQ-NEXT: retq 1445; 1446; AVX512VPOPCNTDQVL-LABEL: ult_4_v16i16: 1447; AVX512VPOPCNTDQVL: # %bb.0: 1448; 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],zero 1449; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm0 1450; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm0 1451; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4] 1452; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 1453; AVX512VPOPCNTDQVL-NEXT: retq 1454; 1455; BITALG_NOVLX-LABEL: ult_4_v16i16: 1456; BITALG_NOVLX: # %bb.0: 1457; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1458; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 1459; BITALG_NOVLX-NEXT: vmovdqa {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4] 1460; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 1461; BITALG_NOVLX-NEXT: retq 1462; 1463; BITALG-LABEL: ult_4_v16i16: 1464; BITALG: # %bb.0: 1465; BITALG-NEXT: vpopcntw %ymm0, %ymm0 1466; BITALG-NEXT: vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 1467; BITALG-NEXT: vpmovm2w %k0, %ymm0 1468; BITALG-NEXT: retq 1469 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0) 1470 %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> 1471 %4 = sext <16 x i1> %3 to <16 x i16> 1472 ret <16 x i16> %4 1473} 1474 1475define <16 x i16> @ugt_4_v16i16(<16 x i16> %0) { 1476; AVX1-LABEL: ugt_4_v16i16: 1477; AVX1: # %bb.0: 1478; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 1479; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 1480; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 1481; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 1482; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 1483; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 1484; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 1485; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 1486; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 1487; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 1488; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 1489; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1490; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 1491; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 1492; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 1493; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 1494; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 1495; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 1496; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 1497; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 1498; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 1499; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4] 1500; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm0 1501; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm1 1502; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 1503; AVX1-NEXT: retq 1504; 1505; AVX2-LABEL: ugt_4_v16i16: 1506; AVX2: # %bb.0: 1507; AVX2-NEXT: vmovdqa {{.*#+}} 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] 1508; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 1509; AVX2-NEXT: vmovdqa {{.*#+}} 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] 1510; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 1511; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 1512; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 1513; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 1514; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 1515; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 1516; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 1517; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 1518; AVX2-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 1519; AVX2-NEXT: retq 1520; 1521; AVX512VPOPCNTDQ-LABEL: ugt_4_v16i16: 1522; AVX512VPOPCNTDQ: # %bb.0: 1523; 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],zero 1524; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 1525; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm0 1526; AVX512VPOPCNTDQ-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 1527; AVX512VPOPCNTDQ-NEXT: retq 1528; 1529; AVX512VPOPCNTDQVL-LABEL: ugt_4_v16i16: 1530; AVX512VPOPCNTDQVL: # %bb.0: 1531; 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],zero 1532; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm0 1533; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm0 1534; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 1535; AVX512VPOPCNTDQVL-NEXT: retq 1536; 1537; BITALG_NOVLX-LABEL: ugt_4_v16i16: 1538; BITALG_NOVLX: # %bb.0: 1539; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1540; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 1541; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 1542; BITALG_NOVLX-NEXT: retq 1543; 1544; BITALG-LABEL: ugt_4_v16i16: 1545; BITALG: # %bb.0: 1546; BITALG-NEXT: vpopcntw %ymm0, %ymm0 1547; BITALG-NEXT: vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 1548; BITALG-NEXT: vpmovm2w %k0, %ymm0 1549; BITALG-NEXT: retq 1550 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0) 1551 %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> 1552 %4 = sext <16 x i1> %3 to <16 x i16> 1553 ret <16 x i16> %4 1554} 1555 1556define <16 x i16> @ult_5_v16i16(<16 x i16> %0) { 1557; AVX1-LABEL: ult_5_v16i16: 1558; AVX1: # %bb.0: 1559; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 1560; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 1561; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 1562; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 1563; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 1564; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 1565; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 1566; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 1567; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 1568; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 1569; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 1570; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1571; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 1572; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 1573; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 1574; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 1575; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 1576; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 1577; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 1578; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 1579; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 1580; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [5,5,5,5,5,5,5,5] 1581; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm0 1582; AVX1-NEXT: vpcmpgtw %xmm2, %xmm1, %xmm1 1583; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 1584; AVX1-NEXT: retq 1585; 1586; AVX2-LABEL: ult_5_v16i16: 1587; AVX2: # %bb.0: 1588; AVX2-NEXT: vmovdqa {{.*#+}} 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] 1589; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 1590; AVX2-NEXT: vmovdqa {{.*#+}} 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] 1591; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 1592; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 1593; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 1594; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 1595; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 1596; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 1597; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 1598; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 1599; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5] 1600; AVX2-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 1601; AVX2-NEXT: retq 1602; 1603; AVX512VPOPCNTDQ-LABEL: ult_5_v16i16: 1604; AVX512VPOPCNTDQ: # %bb.0: 1605; 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],zero 1606; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 1607; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm0 1608; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5] 1609; AVX512VPOPCNTDQ-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 1610; AVX512VPOPCNTDQ-NEXT: retq 1611; 1612; AVX512VPOPCNTDQVL-LABEL: ult_5_v16i16: 1613; AVX512VPOPCNTDQVL: # %bb.0: 1614; 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],zero 1615; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm0 1616; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm0 1617; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5] 1618; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 1619; AVX512VPOPCNTDQVL-NEXT: retq 1620; 1621; BITALG_NOVLX-LABEL: ult_5_v16i16: 1622; BITALG_NOVLX: # %bb.0: 1623; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1624; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 1625; BITALG_NOVLX-NEXT: vmovdqa {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5] 1626; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 1627; BITALG_NOVLX-NEXT: retq 1628; 1629; BITALG-LABEL: ult_5_v16i16: 1630; BITALG: # %bb.0: 1631; BITALG-NEXT: vpopcntw %ymm0, %ymm0 1632; BITALG-NEXT: vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 1633; BITALG-NEXT: vpmovm2w %k0, %ymm0 1634; BITALG-NEXT: retq 1635 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0) 1636 %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> 1637 %4 = sext <16 x i1> %3 to <16 x i16> 1638 ret <16 x i16> %4 1639} 1640 1641define <16 x i16> @ugt_5_v16i16(<16 x i16> %0) { 1642; AVX1-LABEL: ugt_5_v16i16: 1643; AVX1: # %bb.0: 1644; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 1645; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 1646; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 1647; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 1648; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 1649; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 1650; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 1651; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 1652; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 1653; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 1654; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 1655; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1656; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 1657; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 1658; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 1659; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 1660; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 1661; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 1662; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 1663; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 1664; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 1665; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [5,5,5,5,5,5,5,5] 1666; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm0 1667; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm1 1668; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 1669; AVX1-NEXT: retq 1670; 1671; AVX2-LABEL: ugt_5_v16i16: 1672; AVX2: # %bb.0: 1673; AVX2-NEXT: vmovdqa {{.*#+}} 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] 1674; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 1675; AVX2-NEXT: vmovdqa {{.*#+}} 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] 1676; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 1677; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 1678; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 1679; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 1680; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 1681; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 1682; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 1683; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 1684; AVX2-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 1685; AVX2-NEXT: retq 1686; 1687; AVX512VPOPCNTDQ-LABEL: ugt_5_v16i16: 1688; AVX512VPOPCNTDQ: # %bb.0: 1689; 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],zero 1690; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 1691; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm0 1692; AVX512VPOPCNTDQ-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 1693; AVX512VPOPCNTDQ-NEXT: retq 1694; 1695; AVX512VPOPCNTDQVL-LABEL: ugt_5_v16i16: 1696; AVX512VPOPCNTDQVL: # %bb.0: 1697; 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],zero 1698; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm0 1699; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm0 1700; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 1701; AVX512VPOPCNTDQVL-NEXT: retq 1702; 1703; BITALG_NOVLX-LABEL: ugt_5_v16i16: 1704; BITALG_NOVLX: # %bb.0: 1705; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1706; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 1707; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 1708; BITALG_NOVLX-NEXT: retq 1709; 1710; BITALG-LABEL: ugt_5_v16i16: 1711; BITALG: # %bb.0: 1712; BITALG-NEXT: vpopcntw %ymm0, %ymm0 1713; BITALG-NEXT: vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 1714; BITALG-NEXT: vpmovm2w %k0, %ymm0 1715; BITALG-NEXT: retq 1716 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0) 1717 %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> 1718 %4 = sext <16 x i1> %3 to <16 x i16> 1719 ret <16 x i16> %4 1720} 1721 1722define <16 x i16> @ult_6_v16i16(<16 x i16> %0) { 1723; AVX1-LABEL: ult_6_v16i16: 1724; AVX1: # %bb.0: 1725; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 1726; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 1727; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 1728; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 1729; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 1730; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 1731; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 1732; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 1733; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 1734; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 1735; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 1736; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1737; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 1738; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 1739; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 1740; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 1741; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 1742; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 1743; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 1744; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 1745; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 1746; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [6,6,6,6,6,6,6,6] 1747; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm0 1748; AVX1-NEXT: vpcmpgtw %xmm2, %xmm1, %xmm1 1749; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 1750; AVX1-NEXT: retq 1751; 1752; AVX2-LABEL: ult_6_v16i16: 1753; AVX2: # %bb.0: 1754; AVX2-NEXT: vmovdqa {{.*#+}} 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] 1755; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 1756; AVX2-NEXT: vmovdqa {{.*#+}} 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] 1757; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 1758; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 1759; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 1760; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 1761; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 1762; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 1763; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 1764; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 1765; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6] 1766; AVX2-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 1767; AVX2-NEXT: retq 1768; 1769; AVX512VPOPCNTDQ-LABEL: ult_6_v16i16: 1770; AVX512VPOPCNTDQ: # %bb.0: 1771; 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],zero 1772; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 1773; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm0 1774; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6] 1775; AVX512VPOPCNTDQ-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 1776; AVX512VPOPCNTDQ-NEXT: retq 1777; 1778; AVX512VPOPCNTDQVL-LABEL: ult_6_v16i16: 1779; AVX512VPOPCNTDQVL: # %bb.0: 1780; 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],zero 1781; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm0 1782; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm0 1783; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6] 1784; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 1785; AVX512VPOPCNTDQVL-NEXT: retq 1786; 1787; BITALG_NOVLX-LABEL: ult_6_v16i16: 1788; BITALG_NOVLX: # %bb.0: 1789; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1790; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 1791; BITALG_NOVLX-NEXT: vmovdqa {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6] 1792; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 1793; BITALG_NOVLX-NEXT: retq 1794; 1795; BITALG-LABEL: ult_6_v16i16: 1796; BITALG: # %bb.0: 1797; BITALG-NEXT: vpopcntw %ymm0, %ymm0 1798; BITALG-NEXT: vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 1799; BITALG-NEXT: vpmovm2w %k0, %ymm0 1800; BITALG-NEXT: retq 1801 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0) 1802 %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> 1803 %4 = sext <16 x i1> %3 to <16 x i16> 1804 ret <16 x i16> %4 1805} 1806 1807define <16 x i16> @ugt_6_v16i16(<16 x i16> %0) { 1808; AVX1-LABEL: ugt_6_v16i16: 1809; AVX1: # %bb.0: 1810; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 1811; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 1812; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 1813; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 1814; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 1815; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 1816; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 1817; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 1818; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 1819; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 1820; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 1821; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1822; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 1823; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 1824; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 1825; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 1826; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 1827; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 1828; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 1829; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 1830; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 1831; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [6,6,6,6,6,6,6,6] 1832; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm0 1833; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm1 1834; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 1835; AVX1-NEXT: retq 1836; 1837; AVX2-LABEL: ugt_6_v16i16: 1838; AVX2: # %bb.0: 1839; AVX2-NEXT: vmovdqa {{.*#+}} 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] 1840; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 1841; AVX2-NEXT: vmovdqa {{.*#+}} 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] 1842; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 1843; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 1844; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 1845; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 1846; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 1847; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 1848; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 1849; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 1850; AVX2-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 1851; AVX2-NEXT: retq 1852; 1853; AVX512VPOPCNTDQ-LABEL: ugt_6_v16i16: 1854; AVX512VPOPCNTDQ: # %bb.0: 1855; 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],zero 1856; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 1857; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm0 1858; AVX512VPOPCNTDQ-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 1859; AVX512VPOPCNTDQ-NEXT: retq 1860; 1861; AVX512VPOPCNTDQVL-LABEL: ugt_6_v16i16: 1862; AVX512VPOPCNTDQVL: # %bb.0: 1863; 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],zero 1864; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm0 1865; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm0 1866; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 1867; AVX512VPOPCNTDQVL-NEXT: retq 1868; 1869; BITALG_NOVLX-LABEL: ugt_6_v16i16: 1870; BITALG_NOVLX: # %bb.0: 1871; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1872; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 1873; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 1874; BITALG_NOVLX-NEXT: retq 1875; 1876; BITALG-LABEL: ugt_6_v16i16: 1877; BITALG: # %bb.0: 1878; BITALG-NEXT: vpopcntw %ymm0, %ymm0 1879; BITALG-NEXT: vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 1880; BITALG-NEXT: vpmovm2w %k0, %ymm0 1881; BITALG-NEXT: retq 1882 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0) 1883 %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> 1884 %4 = sext <16 x i1> %3 to <16 x i16> 1885 ret <16 x i16> %4 1886} 1887 1888define <16 x i16> @ult_7_v16i16(<16 x i16> %0) { 1889; AVX1-LABEL: ult_7_v16i16: 1890; AVX1: # %bb.0: 1891; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 1892; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 1893; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 1894; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 1895; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 1896; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 1897; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 1898; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 1899; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 1900; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 1901; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 1902; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1903; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 1904; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 1905; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 1906; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 1907; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 1908; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 1909; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 1910; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 1911; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 1912; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [7,7,7,7,7,7,7,7] 1913; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm0 1914; AVX1-NEXT: vpcmpgtw %xmm2, %xmm1, %xmm1 1915; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 1916; AVX1-NEXT: retq 1917; 1918; AVX2-LABEL: ult_7_v16i16: 1919; AVX2: # %bb.0: 1920; AVX2-NEXT: vmovdqa {{.*#+}} 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] 1921; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 1922; AVX2-NEXT: vmovdqa {{.*#+}} 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] 1923; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 1924; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 1925; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 1926; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 1927; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 1928; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 1929; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 1930; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 1931; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7] 1932; AVX2-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 1933; AVX2-NEXT: retq 1934; 1935; AVX512VPOPCNTDQ-LABEL: ult_7_v16i16: 1936; AVX512VPOPCNTDQ: # %bb.0: 1937; 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],zero 1938; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 1939; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm0 1940; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7] 1941; AVX512VPOPCNTDQ-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 1942; AVX512VPOPCNTDQ-NEXT: retq 1943; 1944; AVX512VPOPCNTDQVL-LABEL: ult_7_v16i16: 1945; AVX512VPOPCNTDQVL: # %bb.0: 1946; 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],zero 1947; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm0 1948; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm0 1949; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7] 1950; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 1951; AVX512VPOPCNTDQVL-NEXT: retq 1952; 1953; BITALG_NOVLX-LABEL: ult_7_v16i16: 1954; BITALG_NOVLX: # %bb.0: 1955; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1956; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 1957; BITALG_NOVLX-NEXT: vmovdqa {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7] 1958; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 1959; BITALG_NOVLX-NEXT: retq 1960; 1961; BITALG-LABEL: ult_7_v16i16: 1962; BITALG: # %bb.0: 1963; BITALG-NEXT: vpopcntw %ymm0, %ymm0 1964; BITALG-NEXT: vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 1965; BITALG-NEXT: vpmovm2w %k0, %ymm0 1966; BITALG-NEXT: retq 1967 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0) 1968 %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> 1969 %4 = sext <16 x i1> %3 to <16 x i16> 1970 ret <16 x i16> %4 1971} 1972 1973define <16 x i16> @ugt_7_v16i16(<16 x i16> %0) { 1974; AVX1-LABEL: ugt_7_v16i16: 1975; AVX1: # %bb.0: 1976; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 1977; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 1978; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 1979; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 1980; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 1981; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 1982; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 1983; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 1984; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 1985; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 1986; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 1987; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1988; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 1989; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 1990; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 1991; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 1992; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 1993; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 1994; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 1995; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 1996; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 1997; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [7,7,7,7,7,7,7,7] 1998; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm0 1999; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm1 2000; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 2001; AVX1-NEXT: retq 2002; 2003; AVX2-LABEL: ugt_7_v16i16: 2004; AVX2: # %bb.0: 2005; AVX2-NEXT: vmovdqa {{.*#+}} 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] 2006; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 2007; AVX2-NEXT: vmovdqa {{.*#+}} 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] 2008; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 2009; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 2010; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 2011; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 2012; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 2013; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 2014; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 2015; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 2016; AVX2-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 2017; AVX2-NEXT: retq 2018; 2019; AVX512VPOPCNTDQ-LABEL: ugt_7_v16i16: 2020; AVX512VPOPCNTDQ: # %bb.0: 2021; 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],zero 2022; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 2023; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm0 2024; AVX512VPOPCNTDQ-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 2025; AVX512VPOPCNTDQ-NEXT: retq 2026; 2027; AVX512VPOPCNTDQVL-LABEL: ugt_7_v16i16: 2028; AVX512VPOPCNTDQVL: # %bb.0: 2029; 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],zero 2030; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm0 2031; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm0 2032; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 2033; AVX512VPOPCNTDQVL-NEXT: retq 2034; 2035; BITALG_NOVLX-LABEL: ugt_7_v16i16: 2036; BITALG_NOVLX: # %bb.0: 2037; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2038; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 2039; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 2040; BITALG_NOVLX-NEXT: retq 2041; 2042; BITALG-LABEL: ugt_7_v16i16: 2043; BITALG: # %bb.0: 2044; BITALG-NEXT: vpopcntw %ymm0, %ymm0 2045; BITALG-NEXT: vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 2046; BITALG-NEXT: vpmovm2w %k0, %ymm0 2047; BITALG-NEXT: retq 2048 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0) 2049 %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> 2050 %4 = sext <16 x i1> %3 to <16 x i16> 2051 ret <16 x i16> %4 2052} 2053 2054define <16 x i16> @ult_8_v16i16(<16 x i16> %0) { 2055; AVX1-LABEL: ult_8_v16i16: 2056; AVX1: # %bb.0: 2057; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 2058; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 2059; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 2060; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 2061; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 2062; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 2063; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 2064; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 2065; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 2066; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 2067; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 2068; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2069; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 2070; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 2071; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 2072; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 2073; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 2074; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 2075; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 2076; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 2077; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 2078; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [8,8,8,8,8,8,8,8] 2079; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm0 2080; AVX1-NEXT: vpcmpgtw %xmm2, %xmm1, %xmm1 2081; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 2082; AVX1-NEXT: retq 2083; 2084; AVX2-LABEL: ult_8_v16i16: 2085; AVX2: # %bb.0: 2086; AVX2-NEXT: vmovdqa {{.*#+}} 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] 2087; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 2088; AVX2-NEXT: vmovdqa {{.*#+}} 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] 2089; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 2090; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 2091; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 2092; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 2093; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 2094; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 2095; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 2096; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 2097; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8] 2098; AVX2-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 2099; AVX2-NEXT: retq 2100; 2101; AVX512VPOPCNTDQ-LABEL: ult_8_v16i16: 2102; AVX512VPOPCNTDQ: # %bb.0: 2103; 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],zero 2104; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 2105; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm0 2106; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8] 2107; AVX512VPOPCNTDQ-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 2108; AVX512VPOPCNTDQ-NEXT: retq 2109; 2110; AVX512VPOPCNTDQVL-LABEL: ult_8_v16i16: 2111; AVX512VPOPCNTDQVL: # %bb.0: 2112; 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],zero 2113; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm0 2114; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm0 2115; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8] 2116; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 2117; AVX512VPOPCNTDQVL-NEXT: retq 2118; 2119; BITALG_NOVLX-LABEL: ult_8_v16i16: 2120; BITALG_NOVLX: # %bb.0: 2121; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2122; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 2123; BITALG_NOVLX-NEXT: vmovdqa {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8] 2124; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 2125; BITALG_NOVLX-NEXT: retq 2126; 2127; BITALG-LABEL: ult_8_v16i16: 2128; BITALG: # %bb.0: 2129; BITALG-NEXT: vpopcntw %ymm0, %ymm0 2130; BITALG-NEXT: vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 2131; BITALG-NEXT: vpmovm2w %k0, %ymm0 2132; BITALG-NEXT: retq 2133 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0) 2134 %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> 2135 %4 = sext <16 x i1> %3 to <16 x i16> 2136 ret <16 x i16> %4 2137} 2138 2139define <16 x i16> @ugt_8_v16i16(<16 x i16> %0) { 2140; AVX1-LABEL: ugt_8_v16i16: 2141; AVX1: # %bb.0: 2142; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 2143; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 2144; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 2145; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 2146; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 2147; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 2148; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 2149; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 2150; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 2151; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 2152; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 2153; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2154; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 2155; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 2156; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 2157; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 2158; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 2159; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 2160; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 2161; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 2162; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 2163; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [8,8,8,8,8,8,8,8] 2164; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm0 2165; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm1 2166; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 2167; AVX1-NEXT: retq 2168; 2169; AVX2-LABEL: ugt_8_v16i16: 2170; AVX2: # %bb.0: 2171; AVX2-NEXT: vmovdqa {{.*#+}} 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] 2172; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 2173; AVX2-NEXT: vmovdqa {{.*#+}} 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] 2174; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 2175; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 2176; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 2177; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 2178; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 2179; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 2180; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 2181; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 2182; AVX2-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 2183; AVX2-NEXT: retq 2184; 2185; AVX512VPOPCNTDQ-LABEL: ugt_8_v16i16: 2186; AVX512VPOPCNTDQ: # %bb.0: 2187; 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],zero 2188; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 2189; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm0 2190; AVX512VPOPCNTDQ-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 2191; AVX512VPOPCNTDQ-NEXT: retq 2192; 2193; AVX512VPOPCNTDQVL-LABEL: ugt_8_v16i16: 2194; AVX512VPOPCNTDQVL: # %bb.0: 2195; 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],zero 2196; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm0 2197; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm0 2198; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 2199; AVX512VPOPCNTDQVL-NEXT: retq 2200; 2201; BITALG_NOVLX-LABEL: ugt_8_v16i16: 2202; BITALG_NOVLX: # %bb.0: 2203; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2204; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 2205; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 2206; BITALG_NOVLX-NEXT: retq 2207; 2208; BITALG-LABEL: ugt_8_v16i16: 2209; BITALG: # %bb.0: 2210; BITALG-NEXT: vpopcntw %ymm0, %ymm0 2211; BITALG-NEXT: vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 2212; BITALG-NEXT: vpmovm2w %k0, %ymm0 2213; BITALG-NEXT: retq 2214 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0) 2215 %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> 2216 %4 = sext <16 x i1> %3 to <16 x i16> 2217 ret <16 x i16> %4 2218} 2219 2220define <16 x i16> @ult_9_v16i16(<16 x i16> %0) { 2221; AVX1-LABEL: ult_9_v16i16: 2222; AVX1: # %bb.0: 2223; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 2224; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 2225; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 2226; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 2227; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 2228; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 2229; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 2230; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 2231; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 2232; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 2233; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 2234; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2235; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 2236; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 2237; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 2238; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 2239; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 2240; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 2241; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 2242; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 2243; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 2244; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [9,9,9,9,9,9,9,9] 2245; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm0 2246; AVX1-NEXT: vpcmpgtw %xmm2, %xmm1, %xmm1 2247; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 2248; AVX1-NEXT: retq 2249; 2250; AVX2-LABEL: ult_9_v16i16: 2251; AVX2: # %bb.0: 2252; AVX2-NEXT: vmovdqa {{.*#+}} 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] 2253; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 2254; AVX2-NEXT: vmovdqa {{.*#+}} 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] 2255; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 2256; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 2257; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 2258; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 2259; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 2260; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 2261; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 2262; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 2263; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9] 2264; AVX2-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 2265; AVX2-NEXT: retq 2266; 2267; AVX512VPOPCNTDQ-LABEL: ult_9_v16i16: 2268; AVX512VPOPCNTDQ: # %bb.0: 2269; 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],zero 2270; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 2271; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm0 2272; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9] 2273; AVX512VPOPCNTDQ-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 2274; AVX512VPOPCNTDQ-NEXT: retq 2275; 2276; AVX512VPOPCNTDQVL-LABEL: ult_9_v16i16: 2277; AVX512VPOPCNTDQVL: # %bb.0: 2278; 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],zero 2279; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm0 2280; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm0 2281; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9] 2282; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 2283; AVX512VPOPCNTDQVL-NEXT: retq 2284; 2285; BITALG_NOVLX-LABEL: ult_9_v16i16: 2286; BITALG_NOVLX: # %bb.0: 2287; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2288; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 2289; BITALG_NOVLX-NEXT: vmovdqa {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9] 2290; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 2291; BITALG_NOVLX-NEXT: retq 2292; 2293; BITALG-LABEL: ult_9_v16i16: 2294; BITALG: # %bb.0: 2295; BITALG-NEXT: vpopcntw %ymm0, %ymm0 2296; BITALG-NEXT: vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 2297; BITALG-NEXT: vpmovm2w %k0, %ymm0 2298; BITALG-NEXT: retq 2299 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0) 2300 %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> 2301 %4 = sext <16 x i1> %3 to <16 x i16> 2302 ret <16 x i16> %4 2303} 2304 2305define <16 x i16> @ugt_9_v16i16(<16 x i16> %0) { 2306; AVX1-LABEL: ugt_9_v16i16: 2307; AVX1: # %bb.0: 2308; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 2309; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 2310; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 2311; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 2312; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 2313; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 2314; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 2315; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 2316; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 2317; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 2318; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 2319; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2320; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 2321; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 2322; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 2323; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 2324; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 2325; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 2326; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 2327; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 2328; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 2329; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [9,9,9,9,9,9,9,9] 2330; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm0 2331; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm1 2332; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 2333; AVX1-NEXT: retq 2334; 2335; AVX2-LABEL: ugt_9_v16i16: 2336; AVX2: # %bb.0: 2337; AVX2-NEXT: vmovdqa {{.*#+}} 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] 2338; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 2339; AVX2-NEXT: vmovdqa {{.*#+}} 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] 2340; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 2341; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 2342; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 2343; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 2344; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 2345; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 2346; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 2347; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 2348; AVX2-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 2349; AVX2-NEXT: retq 2350; 2351; AVX512VPOPCNTDQ-LABEL: ugt_9_v16i16: 2352; AVX512VPOPCNTDQ: # %bb.0: 2353; 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],zero 2354; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 2355; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm0 2356; AVX512VPOPCNTDQ-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 2357; AVX512VPOPCNTDQ-NEXT: retq 2358; 2359; AVX512VPOPCNTDQVL-LABEL: ugt_9_v16i16: 2360; AVX512VPOPCNTDQVL: # %bb.0: 2361; 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],zero 2362; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm0 2363; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm0 2364; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 2365; AVX512VPOPCNTDQVL-NEXT: retq 2366; 2367; BITALG_NOVLX-LABEL: ugt_9_v16i16: 2368; BITALG_NOVLX: # %bb.0: 2369; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2370; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 2371; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 2372; BITALG_NOVLX-NEXT: retq 2373; 2374; BITALG-LABEL: ugt_9_v16i16: 2375; BITALG: # %bb.0: 2376; BITALG-NEXT: vpopcntw %ymm0, %ymm0 2377; BITALG-NEXT: vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 2378; BITALG-NEXT: vpmovm2w %k0, %ymm0 2379; BITALG-NEXT: retq 2380 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0) 2381 %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> 2382 %4 = sext <16 x i1> %3 to <16 x i16> 2383 ret <16 x i16> %4 2384} 2385 2386define <16 x i16> @ult_10_v16i16(<16 x i16> %0) { 2387; AVX1-LABEL: ult_10_v16i16: 2388; AVX1: # %bb.0: 2389; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 2390; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 2391; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 2392; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 2393; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 2394; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 2395; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 2396; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 2397; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 2398; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 2399; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 2400; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2401; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 2402; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 2403; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 2404; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 2405; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 2406; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 2407; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 2408; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 2409; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 2410; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [10,10,10,10,10,10,10,10] 2411; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm0 2412; AVX1-NEXT: vpcmpgtw %xmm2, %xmm1, %xmm1 2413; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 2414; AVX1-NEXT: retq 2415; 2416; AVX2-LABEL: ult_10_v16i16: 2417; AVX2: # %bb.0: 2418; AVX2-NEXT: vmovdqa {{.*#+}} 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] 2419; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 2420; AVX2-NEXT: vmovdqa {{.*#+}} 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] 2421; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 2422; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 2423; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 2424; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 2425; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 2426; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 2427; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 2428; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 2429; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10] 2430; AVX2-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 2431; AVX2-NEXT: retq 2432; 2433; AVX512VPOPCNTDQ-LABEL: ult_10_v16i16: 2434; AVX512VPOPCNTDQ: # %bb.0: 2435; 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],zero 2436; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 2437; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm0 2438; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10] 2439; AVX512VPOPCNTDQ-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 2440; AVX512VPOPCNTDQ-NEXT: retq 2441; 2442; AVX512VPOPCNTDQVL-LABEL: ult_10_v16i16: 2443; AVX512VPOPCNTDQVL: # %bb.0: 2444; 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],zero 2445; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm0 2446; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm0 2447; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10] 2448; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 2449; AVX512VPOPCNTDQVL-NEXT: retq 2450; 2451; BITALG_NOVLX-LABEL: ult_10_v16i16: 2452; BITALG_NOVLX: # %bb.0: 2453; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2454; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 2455; BITALG_NOVLX-NEXT: vmovdqa {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10] 2456; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 2457; BITALG_NOVLX-NEXT: retq 2458; 2459; BITALG-LABEL: ult_10_v16i16: 2460; BITALG: # %bb.0: 2461; BITALG-NEXT: vpopcntw %ymm0, %ymm0 2462; BITALG-NEXT: vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 2463; BITALG-NEXT: vpmovm2w %k0, %ymm0 2464; BITALG-NEXT: retq 2465 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0) 2466 %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> 2467 %4 = sext <16 x i1> %3 to <16 x i16> 2468 ret <16 x i16> %4 2469} 2470 2471define <16 x i16> @ugt_10_v16i16(<16 x i16> %0) { 2472; AVX1-LABEL: ugt_10_v16i16: 2473; AVX1: # %bb.0: 2474; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 2475; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 2476; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 2477; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 2478; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 2479; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 2480; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 2481; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 2482; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 2483; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 2484; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 2485; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2486; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 2487; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 2488; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 2489; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 2490; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 2491; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 2492; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 2493; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 2494; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 2495; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [10,10,10,10,10,10,10,10] 2496; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm0 2497; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm1 2498; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 2499; AVX1-NEXT: retq 2500; 2501; AVX2-LABEL: ugt_10_v16i16: 2502; AVX2: # %bb.0: 2503; AVX2-NEXT: vmovdqa {{.*#+}} 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] 2504; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 2505; AVX2-NEXT: vmovdqa {{.*#+}} 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] 2506; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 2507; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 2508; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 2509; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 2510; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 2511; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 2512; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 2513; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 2514; AVX2-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 2515; AVX2-NEXT: retq 2516; 2517; AVX512VPOPCNTDQ-LABEL: ugt_10_v16i16: 2518; AVX512VPOPCNTDQ: # %bb.0: 2519; 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],zero 2520; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 2521; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm0 2522; AVX512VPOPCNTDQ-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 2523; AVX512VPOPCNTDQ-NEXT: retq 2524; 2525; AVX512VPOPCNTDQVL-LABEL: ugt_10_v16i16: 2526; AVX512VPOPCNTDQVL: # %bb.0: 2527; 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],zero 2528; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm0 2529; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm0 2530; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 2531; AVX512VPOPCNTDQVL-NEXT: retq 2532; 2533; BITALG_NOVLX-LABEL: ugt_10_v16i16: 2534; BITALG_NOVLX: # %bb.0: 2535; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2536; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 2537; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 2538; BITALG_NOVLX-NEXT: retq 2539; 2540; BITALG-LABEL: ugt_10_v16i16: 2541; BITALG: # %bb.0: 2542; BITALG-NEXT: vpopcntw %ymm0, %ymm0 2543; BITALG-NEXT: vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 2544; BITALG-NEXT: vpmovm2w %k0, %ymm0 2545; BITALG-NEXT: retq 2546 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0) 2547 %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> 2548 %4 = sext <16 x i1> %3 to <16 x i16> 2549 ret <16 x i16> %4 2550} 2551 2552define <16 x i16> @ult_11_v16i16(<16 x i16> %0) { 2553; AVX1-LABEL: ult_11_v16i16: 2554; AVX1: # %bb.0: 2555; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 2556; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 2557; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 2558; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 2559; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 2560; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 2561; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 2562; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 2563; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 2564; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 2565; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 2566; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2567; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 2568; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 2569; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 2570; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 2571; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 2572; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 2573; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 2574; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 2575; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 2576; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [11,11,11,11,11,11,11,11] 2577; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm0 2578; AVX1-NEXT: vpcmpgtw %xmm2, %xmm1, %xmm1 2579; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 2580; AVX1-NEXT: retq 2581; 2582; AVX2-LABEL: ult_11_v16i16: 2583; AVX2: # %bb.0: 2584; AVX2-NEXT: vmovdqa {{.*#+}} 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] 2585; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 2586; AVX2-NEXT: vmovdqa {{.*#+}} 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] 2587; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 2588; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 2589; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 2590; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 2591; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 2592; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 2593; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 2594; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 2595; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11] 2596; AVX2-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 2597; AVX2-NEXT: retq 2598; 2599; AVX512VPOPCNTDQ-LABEL: ult_11_v16i16: 2600; AVX512VPOPCNTDQ: # %bb.0: 2601; 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],zero 2602; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 2603; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm0 2604; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11] 2605; AVX512VPOPCNTDQ-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 2606; AVX512VPOPCNTDQ-NEXT: retq 2607; 2608; AVX512VPOPCNTDQVL-LABEL: ult_11_v16i16: 2609; AVX512VPOPCNTDQVL: # %bb.0: 2610; 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],zero 2611; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm0 2612; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm0 2613; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11] 2614; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 2615; AVX512VPOPCNTDQVL-NEXT: retq 2616; 2617; BITALG_NOVLX-LABEL: ult_11_v16i16: 2618; BITALG_NOVLX: # %bb.0: 2619; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2620; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 2621; BITALG_NOVLX-NEXT: vmovdqa {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11] 2622; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 2623; BITALG_NOVLX-NEXT: retq 2624; 2625; BITALG-LABEL: ult_11_v16i16: 2626; BITALG: # %bb.0: 2627; BITALG-NEXT: vpopcntw %ymm0, %ymm0 2628; BITALG-NEXT: vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 2629; BITALG-NEXT: vpmovm2w %k0, %ymm0 2630; BITALG-NEXT: retq 2631 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0) 2632 %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> 2633 %4 = sext <16 x i1> %3 to <16 x i16> 2634 ret <16 x i16> %4 2635} 2636 2637define <16 x i16> @ugt_11_v16i16(<16 x i16> %0) { 2638; AVX1-LABEL: ugt_11_v16i16: 2639; AVX1: # %bb.0: 2640; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 2641; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 2642; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 2643; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 2644; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 2645; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 2646; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 2647; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 2648; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 2649; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 2650; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 2651; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2652; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 2653; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 2654; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 2655; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 2656; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 2657; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 2658; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 2659; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 2660; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 2661; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [11,11,11,11,11,11,11,11] 2662; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm0 2663; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm1 2664; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 2665; AVX1-NEXT: retq 2666; 2667; AVX2-LABEL: ugt_11_v16i16: 2668; AVX2: # %bb.0: 2669; AVX2-NEXT: vmovdqa {{.*#+}} 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] 2670; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 2671; AVX2-NEXT: vmovdqa {{.*#+}} 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] 2672; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 2673; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 2674; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 2675; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 2676; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 2677; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 2678; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 2679; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 2680; AVX2-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 2681; AVX2-NEXT: retq 2682; 2683; AVX512VPOPCNTDQ-LABEL: ugt_11_v16i16: 2684; AVX512VPOPCNTDQ: # %bb.0: 2685; 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],zero 2686; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 2687; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm0 2688; AVX512VPOPCNTDQ-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 2689; AVX512VPOPCNTDQ-NEXT: retq 2690; 2691; AVX512VPOPCNTDQVL-LABEL: ugt_11_v16i16: 2692; AVX512VPOPCNTDQVL: # %bb.0: 2693; 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],zero 2694; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm0 2695; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm0 2696; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 2697; AVX512VPOPCNTDQVL-NEXT: retq 2698; 2699; BITALG_NOVLX-LABEL: ugt_11_v16i16: 2700; BITALG_NOVLX: # %bb.0: 2701; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2702; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 2703; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 2704; BITALG_NOVLX-NEXT: retq 2705; 2706; BITALG-LABEL: ugt_11_v16i16: 2707; BITALG: # %bb.0: 2708; BITALG-NEXT: vpopcntw %ymm0, %ymm0 2709; BITALG-NEXT: vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 2710; BITALG-NEXT: vpmovm2w %k0, %ymm0 2711; BITALG-NEXT: retq 2712 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0) 2713 %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> 2714 %4 = sext <16 x i1> %3 to <16 x i16> 2715 ret <16 x i16> %4 2716} 2717 2718define <16 x i16> @ult_12_v16i16(<16 x i16> %0) { 2719; AVX1-LABEL: ult_12_v16i16: 2720; AVX1: # %bb.0: 2721; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 2722; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 2723; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 2724; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 2725; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 2726; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 2727; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 2728; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 2729; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 2730; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 2731; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 2732; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2733; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 2734; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 2735; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 2736; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 2737; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 2738; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 2739; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 2740; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 2741; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 2742; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [12,12,12,12,12,12,12,12] 2743; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm0 2744; AVX1-NEXT: vpcmpgtw %xmm2, %xmm1, %xmm1 2745; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 2746; AVX1-NEXT: retq 2747; 2748; AVX2-LABEL: ult_12_v16i16: 2749; AVX2: # %bb.0: 2750; AVX2-NEXT: vmovdqa {{.*#+}} 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] 2751; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 2752; AVX2-NEXT: vmovdqa {{.*#+}} 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] 2753; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 2754; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 2755; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 2756; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 2757; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 2758; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 2759; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 2760; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 2761; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12] 2762; AVX2-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 2763; AVX2-NEXT: retq 2764; 2765; AVX512VPOPCNTDQ-LABEL: ult_12_v16i16: 2766; AVX512VPOPCNTDQ: # %bb.0: 2767; 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],zero 2768; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 2769; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm0 2770; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12] 2771; AVX512VPOPCNTDQ-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 2772; AVX512VPOPCNTDQ-NEXT: retq 2773; 2774; AVX512VPOPCNTDQVL-LABEL: ult_12_v16i16: 2775; AVX512VPOPCNTDQVL: # %bb.0: 2776; 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],zero 2777; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm0 2778; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm0 2779; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12] 2780; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 2781; AVX512VPOPCNTDQVL-NEXT: retq 2782; 2783; BITALG_NOVLX-LABEL: ult_12_v16i16: 2784; BITALG_NOVLX: # %bb.0: 2785; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2786; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 2787; BITALG_NOVLX-NEXT: vmovdqa {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12] 2788; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 2789; BITALG_NOVLX-NEXT: retq 2790; 2791; BITALG-LABEL: ult_12_v16i16: 2792; BITALG: # %bb.0: 2793; BITALG-NEXT: vpopcntw %ymm0, %ymm0 2794; BITALG-NEXT: vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 2795; BITALG-NEXT: vpmovm2w %k0, %ymm0 2796; BITALG-NEXT: retq 2797 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0) 2798 %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> 2799 %4 = sext <16 x i1> %3 to <16 x i16> 2800 ret <16 x i16> %4 2801} 2802 2803define <16 x i16> @ugt_12_v16i16(<16 x i16> %0) { 2804; AVX1-LABEL: ugt_12_v16i16: 2805; AVX1: # %bb.0: 2806; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 2807; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 2808; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 2809; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 2810; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 2811; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 2812; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 2813; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 2814; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 2815; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 2816; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 2817; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2818; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 2819; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 2820; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 2821; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 2822; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 2823; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 2824; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 2825; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 2826; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 2827; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [12,12,12,12,12,12,12,12] 2828; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm0 2829; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm1 2830; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 2831; AVX1-NEXT: retq 2832; 2833; AVX2-LABEL: ugt_12_v16i16: 2834; AVX2: # %bb.0: 2835; AVX2-NEXT: vmovdqa {{.*#+}} 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] 2836; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 2837; AVX2-NEXT: vmovdqa {{.*#+}} 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] 2838; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 2839; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 2840; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 2841; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 2842; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 2843; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 2844; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 2845; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 2846; AVX2-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 2847; AVX2-NEXT: retq 2848; 2849; AVX512VPOPCNTDQ-LABEL: ugt_12_v16i16: 2850; AVX512VPOPCNTDQ: # %bb.0: 2851; 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],zero 2852; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 2853; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm0 2854; AVX512VPOPCNTDQ-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 2855; AVX512VPOPCNTDQ-NEXT: retq 2856; 2857; AVX512VPOPCNTDQVL-LABEL: ugt_12_v16i16: 2858; AVX512VPOPCNTDQVL: # %bb.0: 2859; 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],zero 2860; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm0 2861; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm0 2862; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 2863; AVX512VPOPCNTDQVL-NEXT: retq 2864; 2865; BITALG_NOVLX-LABEL: ugt_12_v16i16: 2866; BITALG_NOVLX: # %bb.0: 2867; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2868; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 2869; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 2870; BITALG_NOVLX-NEXT: retq 2871; 2872; BITALG-LABEL: ugt_12_v16i16: 2873; BITALG: # %bb.0: 2874; BITALG-NEXT: vpopcntw %ymm0, %ymm0 2875; BITALG-NEXT: vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 2876; BITALG-NEXT: vpmovm2w %k0, %ymm0 2877; BITALG-NEXT: retq 2878 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0) 2879 %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> 2880 %4 = sext <16 x i1> %3 to <16 x i16> 2881 ret <16 x i16> %4 2882} 2883 2884define <16 x i16> @ult_13_v16i16(<16 x i16> %0) { 2885; AVX1-LABEL: ult_13_v16i16: 2886; AVX1: # %bb.0: 2887; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 2888; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 2889; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 2890; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 2891; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 2892; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 2893; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 2894; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 2895; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 2896; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 2897; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 2898; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2899; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 2900; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 2901; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 2902; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 2903; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 2904; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 2905; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 2906; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 2907; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 2908; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [13,13,13,13,13,13,13,13] 2909; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm0 2910; AVX1-NEXT: vpcmpgtw %xmm2, %xmm1, %xmm1 2911; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 2912; AVX1-NEXT: retq 2913; 2914; AVX2-LABEL: ult_13_v16i16: 2915; AVX2: # %bb.0: 2916; AVX2-NEXT: vmovdqa {{.*#+}} 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] 2917; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 2918; AVX2-NEXT: vmovdqa {{.*#+}} 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] 2919; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 2920; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 2921; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 2922; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 2923; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 2924; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 2925; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 2926; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 2927; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13] 2928; AVX2-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 2929; AVX2-NEXT: retq 2930; 2931; AVX512VPOPCNTDQ-LABEL: ult_13_v16i16: 2932; AVX512VPOPCNTDQ: # %bb.0: 2933; 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],zero 2934; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 2935; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm0 2936; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13] 2937; AVX512VPOPCNTDQ-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 2938; AVX512VPOPCNTDQ-NEXT: retq 2939; 2940; AVX512VPOPCNTDQVL-LABEL: ult_13_v16i16: 2941; AVX512VPOPCNTDQVL: # %bb.0: 2942; 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],zero 2943; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm0 2944; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm0 2945; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13] 2946; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 2947; AVX512VPOPCNTDQVL-NEXT: retq 2948; 2949; BITALG_NOVLX-LABEL: ult_13_v16i16: 2950; BITALG_NOVLX: # %bb.0: 2951; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2952; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 2953; BITALG_NOVLX-NEXT: vmovdqa {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13] 2954; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 2955; BITALG_NOVLX-NEXT: retq 2956; 2957; BITALG-LABEL: ult_13_v16i16: 2958; BITALG: # %bb.0: 2959; BITALG-NEXT: vpopcntw %ymm0, %ymm0 2960; BITALG-NEXT: vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 2961; BITALG-NEXT: vpmovm2w %k0, %ymm0 2962; BITALG-NEXT: retq 2963 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0) 2964 %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> 2965 %4 = sext <16 x i1> %3 to <16 x i16> 2966 ret <16 x i16> %4 2967} 2968 2969define <16 x i16> @ugt_13_v16i16(<16 x i16> %0) { 2970; AVX1-LABEL: ugt_13_v16i16: 2971; AVX1: # %bb.0: 2972; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 2973; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 2974; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 2975; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 2976; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 2977; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 2978; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 2979; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 2980; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 2981; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 2982; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 2983; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2984; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 2985; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 2986; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 2987; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 2988; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 2989; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 2990; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 2991; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 2992; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 2993; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [13,13,13,13,13,13,13,13] 2994; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm0 2995; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm1 2996; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 2997; AVX1-NEXT: retq 2998; 2999; AVX2-LABEL: ugt_13_v16i16: 3000; AVX2: # %bb.0: 3001; AVX2-NEXT: vmovdqa {{.*#+}} 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] 3002; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 3003; AVX2-NEXT: vmovdqa {{.*#+}} 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] 3004; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 3005; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 3006; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 3007; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 3008; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 3009; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 3010; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 3011; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 3012; AVX2-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 3013; AVX2-NEXT: retq 3014; 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],zero 3018; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 3019; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm0 3020; AVX512VPOPCNTDQ-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 3021; AVX512VPOPCNTDQ-NEXT: retq 3022; 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],zero 3026; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm0 3027; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm0 3028; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 3029; AVX512VPOPCNTDQVL-NEXT: retq 3030; 3031; BITALG_NOVLX-LABEL: ugt_13_v16i16: 3032; BITALG_NOVLX: # %bb.0: 3033; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3034; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 3035; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 3036; BITALG_NOVLX-NEXT: retq 3037; 3038; BITALG-LABEL: ugt_13_v16i16: 3039; BITALG: # %bb.0: 3040; BITALG-NEXT: vpopcntw %ymm0, %ymm0 3041; BITALG-NEXT: vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 3042; BITALG-NEXT: vpmovm2w %k0, %ymm0 3043; BITALG-NEXT: retq 3044 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0) 3045 %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> 3046 %4 = sext <16 x i1> %3 to <16 x i16> 3047 ret <16 x i16> %4 3048} 3049 3050define <16 x i16> @ult_14_v16i16(<16 x i16> %0) { 3051; AVX1-LABEL: ult_14_v16i16: 3052; AVX1: # %bb.0: 3053; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 3054; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 3055; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 3056; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 3057; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 3058; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 3059; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 3060; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 3061; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 3062; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 3063; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 3064; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 3065; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 3066; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 3067; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 3068; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 3069; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 3070; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 3071; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 3072; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 3073; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 3074; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [14,14,14,14,14,14,14,14] 3075; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm0 3076; AVX1-NEXT: vpcmpgtw %xmm2, %xmm1, %xmm1 3077; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 3078; AVX1-NEXT: retq 3079; 3080; AVX2-LABEL: ult_14_v16i16: 3081; AVX2: # %bb.0: 3082; AVX2-NEXT: vmovdqa {{.*#+}} 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] 3083; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 3084; AVX2-NEXT: vmovdqa {{.*#+}} 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] 3085; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 3086; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 3087; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 3088; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 3089; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 3090; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 3091; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 3092; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 3093; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14] 3094; AVX2-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 3095; AVX2-NEXT: retq 3096; 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],zero 3100; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 3101; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm0 3102; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14] 3103; AVX512VPOPCNTDQ-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 3104; AVX512VPOPCNTDQ-NEXT: retq 3105; 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],zero 3109; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm0 3110; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm0 3111; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14] 3112; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 3113; AVX512VPOPCNTDQVL-NEXT: retq 3114; 3115; BITALG_NOVLX-LABEL: ult_14_v16i16: 3116; BITALG_NOVLX: # %bb.0: 3117; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3118; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 3119; BITALG_NOVLX-NEXT: vmovdqa {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14] 3120; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 3121; BITALG_NOVLX-NEXT: retq 3122; 3123; BITALG-LABEL: ult_14_v16i16: 3124; BITALG: # %bb.0: 3125; BITALG-NEXT: vpopcntw %ymm0, %ymm0 3126; BITALG-NEXT: vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 3127; BITALG-NEXT: vpmovm2w %k0, %ymm0 3128; BITALG-NEXT: retq 3129 %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> %4 3133} 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: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 3139; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 3140; 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, %xmm2 3142; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 3143; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 3144; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 3145; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 3146; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 3147; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 3148; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 3149; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 3150; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 3151; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 3152; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 3153; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 3154; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 3155; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 3156; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 3157; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 3158; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 3159; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [14,14,14,14,14,14,14,14] 3160; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm0 3161; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm1 3162; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 3163; AVX1-NEXT: retq 3164; 3165; AVX2-LABEL: ugt_14_v16i16: 3166; AVX2: # %bb.0: 3167; AVX2-NEXT: vmovdqa {{.*#+}} 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, %ymm2 3169; AVX2-NEXT: vmovdqa {{.*#+}} 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: vpshufb %ymm2, %ymm3, %ymm2 3171; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 3172; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 3173; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 3174; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 3175; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 3176; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 3177; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 3178; AVX2-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 3179; AVX2-NEXT: retq 3180; 3181; AVX512VPOPCNTDQ-LABEL: ugt_14_v16i16: 3182; AVX512VPOPCNTDQ: # %bb.0: 3183; 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],zero 3184; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 3185; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm0 3186; AVX512VPOPCNTDQ-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 3187; AVX512VPOPCNTDQ-NEXT: retq 3188; 3189; AVX512VPOPCNTDQVL-LABEL: ugt_14_v16i16: 3190; AVX512VPOPCNTDQVL: # %bb.0: 3191; 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],zero 3192; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm0 3193; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm0 3194; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 3195; AVX512VPOPCNTDQVL-NEXT: retq 3196; 3197; BITALG_NOVLX-LABEL: ugt_14_v16i16: 3198; BITALG_NOVLX: # %bb.0: 3199; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3200; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 3201; BITALG_NOVLX-NEXT: vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 3202; BITALG_NOVLX-NEXT: retq 3203; 3204; BITALG-LABEL: ugt_14_v16i16: 3205; BITALG: # %bb.0: 3206; BITALG-NEXT: vpopcntw %ymm0, %ymm0 3207; BITALG-NEXT: vpcmpnleuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 3208; BITALG-NEXT: vpmovm2w %k0, %ymm0 3209; BITALG-NEXT: retq 3210 %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> %4 3214} 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: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 3220; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 3221; 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, %xmm2 3223; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 3224; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 3225; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 3226; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 3227; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 3228; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 3229; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 3230; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 3231; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm4 3232; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 3233; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 3234; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 3235; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 3236; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 3237; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 3238; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 3239; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 3240; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15] 3241; AVX1-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm0 3242; AVX1-NEXT: vpcmpgtw %xmm2, %xmm1, %xmm1 3243; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 3244; AVX1-NEXT: retq 3245; 3246; AVX2-LABEL: ult_15_v16i16: 3247; AVX2: # %bb.0: 3248; AVX2-NEXT: vmovdqa {{.*#+}} 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, %ymm2 3250; AVX2-NEXT: vmovdqa {{.*#+}} 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: vpshufb %ymm2, %ymm3, %ymm2 3252; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 3253; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 3254; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 3255; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 3256; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 3257; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 3258; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 3259; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 3260; AVX2-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 3261; AVX2-NEXT: retq 3262; 3263; AVX512VPOPCNTDQ-LABEL: ult_15_v16i16: 3264; AVX512VPOPCNTDQ: # %bb.0: 3265; 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],zero 3266; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 3267; AVX512VPOPCNTDQ-NEXT: vpmovdw %zmm0, %ymm0 3268; AVX512VPOPCNTDQ-NEXT: vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 3269; AVX512VPOPCNTDQ-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 3270; AVX512VPOPCNTDQ-NEXT: retq 3271; 3272; AVX512VPOPCNTDQVL-LABEL: ult_15_v16i16: 3273; AVX512VPOPCNTDQVL: # %bb.0: 3274; 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],zero 3275; AVX512VPOPCNTDQVL-NEXT: vpopcntd %zmm0, %zmm0 3276; AVX512VPOPCNTDQVL-NEXT: vpmovdw %zmm0, %ymm0 3277; AVX512VPOPCNTDQVL-NEXT: vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 3278; AVX512VPOPCNTDQVL-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 3279; AVX512VPOPCNTDQVL-NEXT: retq 3280; 3281; BITALG_NOVLX-LABEL: ult_15_v16i16: 3282; BITALG_NOVLX: # %bb.0: 3283; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3284; BITALG_NOVLX-NEXT: vpopcntw %zmm0, %zmm0 3285; BITALG_NOVLX-NEXT: vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 3286; BITALG_NOVLX-NEXT: vpcmpgtw %ymm0, %ymm1, %ymm0 3287; BITALG_NOVLX-NEXT: retq 3288; 3289; BITALG-LABEL: ult_15_v16i16: 3290; BITALG: # %bb.0: 3291; BITALG-NEXT: vpopcntw %ymm0, %ymm0 3292; BITALG-NEXT: vpcmpltuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0 3293; BITALG-NEXT: vpmovm2w %k0, %ymm0 3294; BITALG-NEXT: retq 3295 %2 = tail call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %0) 3296 %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> 3297 %4 = sext <16 x i1> %3 to <16 x i16> 3298 ret <16 x i16> %4 3299} 3300 3301define <8 x i32> @ugt_1_v8i32(<8 x i32> %0) { 3302; AVX1-LABEL: ugt_1_v8i32: 3303; AVX1: # %bb.0: 3304; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 3305; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2 3306; AVX1-NEXT: vpaddd %xmm2, %xmm1, %xmm3 3307; AVX1-NEXT: vpand %xmm3, %xmm1, %xmm1 3308; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3 3309; AVX1-NEXT: vpcmpeqd %xmm3, %xmm1, %xmm1 3310; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm1 3311; AVX1-NEXT: vpaddd %xmm2, %xmm0, %xmm4 3312; AVX1-NEXT: vpand %xmm4, %xmm0, %xmm0 3313; AVX1-NEXT: vpcmpeqd %xmm3, %xmm0, %xmm0 3314; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm0 3315; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 3316; AVX1-NEXT: retq 3317; 3318; AVX2-LABEL: ugt_1_v8i32: 3319; AVX2: # %bb.0: 3320; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 3321; AVX2-NEXT: vpaddd %ymm1, %ymm0, %ymm2 3322; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0 3323; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2 3324; AVX2-NEXT: vpcmpeqd %ymm2, %ymm0, %ymm0 3325; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm0 3326; AVX2-NEXT: retq 3327; 3328; AVX512VPOPCNTDQ-LABEL: ugt_1_v8i32: 3329; AVX512VPOPCNTDQ: # %bb.0: 3330; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3331; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 3332; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [1,1,1,1,1,1,1,1] 3333; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 3334; AVX512VPOPCNTDQ-NEXT: retq 3335; 3336; AVX512VPOPCNTDQVL-LABEL: ugt_1_v8i32: 3337; AVX512VPOPCNTDQVL: # %bb.0: 3338; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 3339; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 3340; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 3341; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 3342; AVX512VPOPCNTDQVL-NEXT: retq 3343; 3344; BITALG_NOVLX-LABEL: ugt_1_v8i32: 3345; BITALG_NOVLX: # %bb.0: 3346; BITALG_NOVLX-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 3347; BITALG_NOVLX-NEXT: vpaddd %ymm1, %ymm0, %ymm1 3348; BITALG_NOVLX-NEXT: vpand %ymm1, %ymm0, %ymm0 3349; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 3350; BITALG_NOVLX-NEXT: vpcmpeqd %ymm1, %ymm0, %ymm0 3351; BITALG_NOVLX-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm0 3352; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3353; BITALG_NOVLX-NEXT: retq 3354; 3355; BITALG-LABEL: ugt_1_v8i32: 3356; BITALG: # %bb.0: 3357; BITALG-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 3358; BITALG-NEXT: vpaddd %ymm1, %ymm0, %ymm1 3359; BITALG-NEXT: vpand %ymm1, %ymm0, %ymm0 3360; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 3361; BITALG-NEXT: vpcmpeqd %ymm1, %ymm0, %ymm0 3362; BITALG-NEXT: vpternlogq $15, %ymm0, %ymm0, %ymm0 3363; BITALG-NEXT: retq 3364 %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> %4 3368} 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: vextractf128 $1, %ymm0, %xmm1 3374; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2 3375; AVX1-NEXT: vpaddd %xmm2, %xmm1, %xmm3 3376; AVX1-NEXT: vpand %xmm3, %xmm1, %xmm1 3377; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3 3378; AVX1-NEXT: vpcmpeqd %xmm3, %xmm1, %xmm1 3379; AVX1-NEXT: vpaddd %xmm2, %xmm0, %xmm2 3380; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm0 3381; AVX1-NEXT: vpcmpeqd %xmm3, %xmm0, %xmm0 3382; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 3383; AVX1-NEXT: retq 3384; 3385; AVX2-LABEL: ult_2_v8i32: 3386; AVX2: # %bb.0: 3387; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 3388; AVX2-NEXT: vpaddd %ymm1, %ymm0, %ymm1 3389; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 3390; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 3391; AVX2-NEXT: vpcmpeqd %ymm1, %ymm0, %ymm0 3392; AVX2-NEXT: retq 3393; 3394; AVX512VPOPCNTDQ-LABEL: ult_2_v8i32: 3395; AVX512VPOPCNTDQ: # %bb.0: 3396; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3397; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 3398; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [2,2,2,2,2,2,2,2] 3399; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 3400; AVX512VPOPCNTDQ-NEXT: retq 3401; 3402; AVX512VPOPCNTDQVL-LABEL: ult_2_v8i32: 3403; AVX512VPOPCNTDQVL: # %bb.0: 3404; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 3405; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 3406; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 3407; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 3408; AVX512VPOPCNTDQVL-NEXT: retq 3409; 3410; BITALG_NOVLX-LABEL: ult_2_v8i32: 3411; BITALG_NOVLX: # %bb.0: 3412; BITALG_NOVLX-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 3413; BITALG_NOVLX-NEXT: vpaddd %ymm1, %ymm0, %ymm1 3414; BITALG_NOVLX-NEXT: vpand %ymm1, %ymm0, %ymm0 3415; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 3416; BITALG_NOVLX-NEXT: vpcmpeqd %ymm1, %ymm0, %ymm0 3417; BITALG_NOVLX-NEXT: retq 3418; 3419; BITALG-LABEL: ult_2_v8i32: 3420; BITALG: # %bb.0: 3421; BITALG-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 3422; BITALG-NEXT: vpaddd %ymm1, %ymm0, %ymm1 3423; BITALG-NEXT: vpand %ymm1, %ymm0, %ymm0 3424; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 3425; BITALG-NEXT: vpcmpeqd %ymm1, %ymm0, %ymm0 3426; BITALG-NEXT: retq 3427 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 3428 %3 = icmp ult <8 x i32> %2, <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2> 3429 %4 = sext <8 x i1> %3 to <8 x i32> 3430 ret <8 x i32> %4 3431} 3432 3433define <8 x i32> @ugt_2_v8i32(<8 x i32> %0) { 3434; AVX1-LABEL: ugt_2_v8i32: 3435; AVX1: # %bb.0: 3436; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 3437; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 3438; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 3439; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 3440; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 3441; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 3442; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 3443; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 3444; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 3445; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 3446; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 3447; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 3448; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 3449; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 3450; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 3451; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 3452; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 3453; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 3454; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 3455; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 3456; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 3457; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 3458; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 3459; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 3460; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 3461; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 3462; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [2,2,2,2] 3463; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 3464; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 3465; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 3466; AVX1-NEXT: retq 3467; 3468; AVX2-LABEL: ugt_2_v8i32: 3469; AVX2: # %bb.0: 3470; AVX2-NEXT: vmovdqa {{.*#+}} 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] 3471; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 3472; AVX2-NEXT: vmovdqa {{.*#+}} 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] 3473; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 3474; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 3475; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 3476; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 3477; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 3478; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 3479; 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, %ymm2 3481; 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, %ymm0 3483; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 3484; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [2,2,2,2,2,2,2,2] 3485; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 3486; AVX2-NEXT: retq 3487; 3488; AVX512VPOPCNTDQ-LABEL: ugt_2_v8i32: 3489; AVX512VPOPCNTDQ: # %bb.0: 3490; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3491; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 3492; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [2,2,2,2,2,2,2,2] 3493; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 3494; AVX512VPOPCNTDQ-NEXT: retq 3495; 3496; AVX512VPOPCNTDQVL-LABEL: ugt_2_v8i32: 3497; AVX512VPOPCNTDQVL: # %bb.0: 3498; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 3499; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 3500; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 3501; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 3502; AVX512VPOPCNTDQVL-NEXT: retq 3503; 3504; BITALG_NOVLX-LABEL: ugt_2_v8i32: 3505; BITALG_NOVLX: # %bb.0: 3506; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3507; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 3508; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 3509; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 3510; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 3511; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 3512; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 3513; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 3514; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [2,2,2,2,2,2,2,2] 3515; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 3516; BITALG_NOVLX-NEXT: retq 3517; 3518; BITALG-LABEL: ugt_2_v8i32: 3519; BITALG: # %bb.0: 3520; BITALG-NEXT: vpopcntb %ymm0, %ymm0 3521; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 3522; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 3523; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 3524; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 3525; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 3526; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 3527; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 3528; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 3529; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 3530; BITALG-NEXT: retq 3531 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 3532 %3 = icmp ugt <8 x i32> %2, <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2> 3533 %4 = sext <8 x i1> %3 to <8 x i32> 3534 ret <8 x i32> %4 3535} 3536 3537define <8 x i32> @ult_3_v8i32(<8 x i32> %0) { 3538; AVX1-LABEL: ult_3_v8i32: 3539; AVX1: # %bb.0: 3540; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 3541; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 3542; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 3543; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 3544; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 3545; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 3546; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 3547; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 3548; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 3549; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 3550; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 3551; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 3552; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 3553; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 3554; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 3555; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 3556; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 3557; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 3558; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 3559; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 3560; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 3561; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 3562; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 3563; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 3564; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 3565; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 3566; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [3,3,3,3] 3567; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 3568; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 3569; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 3570; AVX1-NEXT: retq 3571; 3572; AVX2-LABEL: ult_3_v8i32: 3573; AVX2: # %bb.0: 3574; AVX2-NEXT: vmovdqa {{.*#+}} 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] 3575; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 3576; AVX2-NEXT: vmovdqa {{.*#+}} 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] 3577; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 3578; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 3579; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 3580; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 3581; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 3582; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 3583; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 3584; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 3585; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 3586; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 3587; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 3588; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3] 3589; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 3590; AVX2-NEXT: retq 3591; 3592; AVX512VPOPCNTDQ-LABEL: ult_3_v8i32: 3593; AVX512VPOPCNTDQ: # %bb.0: 3594; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3595; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 3596; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3] 3597; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 3598; AVX512VPOPCNTDQ-NEXT: retq 3599; 3600; AVX512VPOPCNTDQVL-LABEL: ult_3_v8i32: 3601; AVX512VPOPCNTDQVL: # %bb.0: 3602; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 3603; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 3604; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 3605; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 3606; AVX512VPOPCNTDQVL-NEXT: retq 3607; 3608; BITALG_NOVLX-LABEL: ult_3_v8i32: 3609; BITALG_NOVLX: # %bb.0: 3610; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3611; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 3612; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 3613; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 3614; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 3615; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 3616; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 3617; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 3618; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3] 3619; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 3620; BITALG_NOVLX-NEXT: retq 3621; 3622; BITALG-LABEL: ult_3_v8i32: 3623; BITALG: # %bb.0: 3624; BITALG-NEXT: vpopcntb %ymm0, %ymm0 3625; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 3626; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 3627; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 3628; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 3629; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 3630; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 3631; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 3632; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 3633; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 3634; BITALG-NEXT: retq 3635 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 3636 %3 = icmp ult <8 x i32> %2, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3> 3637 %4 = sext <8 x i1> %3 to <8 x i32> 3638 ret <8 x i32> %4 3639} 3640 3641define <8 x i32> @ugt_3_v8i32(<8 x i32> %0) { 3642; AVX1-LABEL: ugt_3_v8i32: 3643; AVX1: # %bb.0: 3644; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 3645; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 3646; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 3647; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 3648; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 3649; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 3650; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 3651; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 3652; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 3653; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 3654; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 3655; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 3656; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 3657; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 3658; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 3659; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 3660; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 3661; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 3662; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 3663; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 3664; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 3665; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 3666; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 3667; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 3668; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 3669; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 3670; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [3,3,3,3] 3671; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 3672; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 3673; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 3674; AVX1-NEXT: retq 3675; 3676; AVX2-LABEL: ugt_3_v8i32: 3677; AVX2: # %bb.0: 3678; AVX2-NEXT: vmovdqa {{.*#+}} 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] 3679; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 3680; AVX2-NEXT: vmovdqa {{.*#+}} 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] 3681; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 3682; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 3683; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 3684; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 3685; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 3686; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 3687; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 3688; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 3689; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 3690; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 3691; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 3692; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3] 3693; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 3694; AVX2-NEXT: retq 3695; 3696; AVX512VPOPCNTDQ-LABEL: ugt_3_v8i32: 3697; AVX512VPOPCNTDQ: # %bb.0: 3698; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3699; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 3700; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3] 3701; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 3702; AVX512VPOPCNTDQ-NEXT: retq 3703; 3704; AVX512VPOPCNTDQVL-LABEL: ugt_3_v8i32: 3705; AVX512VPOPCNTDQVL: # %bb.0: 3706; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 3707; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 3708; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 3709; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 3710; AVX512VPOPCNTDQVL-NEXT: retq 3711; 3712; BITALG_NOVLX-LABEL: ugt_3_v8i32: 3713; BITALG_NOVLX: # %bb.0: 3714; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3715; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 3716; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 3717; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 3718; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 3719; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 3720; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 3721; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 3722; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [3,3,3,3,3,3,3,3] 3723; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 3724; BITALG_NOVLX-NEXT: retq 3725; 3726; BITALG-LABEL: ugt_3_v8i32: 3727; BITALG: # %bb.0: 3728; BITALG-NEXT: vpopcntb %ymm0, %ymm0 3729; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 3730; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 3731; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 3732; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 3733; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 3734; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 3735; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 3736; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 3737; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 3738; BITALG-NEXT: retq 3739 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 3740 %3 = icmp ugt <8 x i32> %2, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3> 3741 %4 = sext <8 x i1> %3 to <8 x i32> 3742 ret <8 x i32> %4 3743} 3744 3745define <8 x i32> @ult_4_v8i32(<8 x i32> %0) { 3746; AVX1-LABEL: ult_4_v8i32: 3747; AVX1: # %bb.0: 3748; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 3749; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 3750; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 3751; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 3752; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 3753; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 3754; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 3755; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 3756; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 3757; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 3758; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 3759; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 3760; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 3761; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 3762; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 3763; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 3764; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 3765; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 3766; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 3767; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 3768; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 3769; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 3770; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 3771; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 3772; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 3773; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 3774; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [4,4,4,4] 3775; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 3776; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 3777; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 3778; AVX1-NEXT: retq 3779; 3780; AVX2-LABEL: ult_4_v8i32: 3781; AVX2: # %bb.0: 3782; AVX2-NEXT: vmovdqa {{.*#+}} 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] 3783; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 3784; AVX2-NEXT: vmovdqa {{.*#+}} 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] 3785; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 3786; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 3787; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 3788; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 3789; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 3790; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 3791; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 3792; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 3793; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 3794; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 3795; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 3796; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4] 3797; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 3798; AVX2-NEXT: retq 3799; 3800; AVX512VPOPCNTDQ-LABEL: ult_4_v8i32: 3801; AVX512VPOPCNTDQ: # %bb.0: 3802; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3803; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 3804; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4] 3805; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 3806; AVX512VPOPCNTDQ-NEXT: retq 3807; 3808; AVX512VPOPCNTDQVL-LABEL: ult_4_v8i32: 3809; AVX512VPOPCNTDQVL: # %bb.0: 3810; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 3811; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 3812; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 3813; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 3814; AVX512VPOPCNTDQVL-NEXT: retq 3815; 3816; BITALG_NOVLX-LABEL: ult_4_v8i32: 3817; BITALG_NOVLX: # %bb.0: 3818; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3819; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 3820; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 3821; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 3822; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 3823; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 3824; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 3825; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 3826; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4] 3827; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 3828; BITALG_NOVLX-NEXT: retq 3829; 3830; BITALG-LABEL: ult_4_v8i32: 3831; BITALG: # %bb.0: 3832; BITALG-NEXT: vpopcntb %ymm0, %ymm0 3833; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 3834; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 3835; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 3836; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 3837; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 3838; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 3839; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 3840; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 3841; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 3842; BITALG-NEXT: retq 3843 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 3844 %3 = icmp ult <8 x i32> %2, <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4> 3845 %4 = sext <8 x i1> %3 to <8 x i32> 3846 ret <8 x i32> %4 3847} 3848 3849define <8 x i32> @ugt_4_v8i32(<8 x i32> %0) { 3850; AVX1-LABEL: ugt_4_v8i32: 3851; AVX1: # %bb.0: 3852; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 3853; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 3854; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 3855; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 3856; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 3857; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 3858; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 3859; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 3860; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 3861; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 3862; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 3863; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 3864; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 3865; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 3866; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 3867; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 3868; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 3869; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 3870; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 3871; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 3872; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 3873; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 3874; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 3875; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 3876; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 3877; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 3878; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [4,4,4,4] 3879; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 3880; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 3881; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 3882; AVX1-NEXT: retq 3883; 3884; AVX2-LABEL: ugt_4_v8i32: 3885; AVX2: # %bb.0: 3886; AVX2-NEXT: vmovdqa {{.*#+}} 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] 3887; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 3888; AVX2-NEXT: vmovdqa {{.*#+}} 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] 3889; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 3890; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 3891; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 3892; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 3893; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 3894; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 3895; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 3896; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 3897; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 3898; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 3899; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 3900; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4] 3901; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 3902; AVX2-NEXT: retq 3903; 3904; AVX512VPOPCNTDQ-LABEL: ugt_4_v8i32: 3905; AVX512VPOPCNTDQ: # %bb.0: 3906; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3907; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 3908; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4] 3909; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 3910; AVX512VPOPCNTDQ-NEXT: retq 3911; 3912; AVX512VPOPCNTDQVL-LABEL: ugt_4_v8i32: 3913; AVX512VPOPCNTDQVL: # %bb.0: 3914; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 3915; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 3916; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 3917; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 3918; AVX512VPOPCNTDQVL-NEXT: retq 3919; 3920; BITALG_NOVLX-LABEL: ugt_4_v8i32: 3921; BITALG_NOVLX: # %bb.0: 3922; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3923; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 3924; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 3925; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 3926; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 3927; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 3928; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 3929; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 3930; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4] 3931; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 3932; BITALG_NOVLX-NEXT: retq 3933; 3934; BITALG-LABEL: ugt_4_v8i32: 3935; BITALG: # %bb.0: 3936; BITALG-NEXT: vpopcntb %ymm0, %ymm0 3937; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 3938; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 3939; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 3940; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 3941; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 3942; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 3943; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 3944; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 3945; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 3946; BITALG-NEXT: retq 3947 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 3948 %3 = icmp ugt <8 x i32> %2, <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4> 3949 %4 = sext <8 x i1> %3 to <8 x i32> 3950 ret <8 x i32> %4 3951} 3952 3953define <8 x i32> @ult_5_v8i32(<8 x i32> %0) { 3954; AVX1-LABEL: ult_5_v8i32: 3955; AVX1: # %bb.0: 3956; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 3957; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 3958; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 3959; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 3960; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 3961; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 3962; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 3963; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 3964; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 3965; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 3966; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 3967; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 3968; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 3969; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 3970; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 3971; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 3972; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 3973; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 3974; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 3975; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 3976; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 3977; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 3978; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 3979; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 3980; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 3981; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 3982; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [5,5,5,5] 3983; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 3984; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 3985; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 3986; AVX1-NEXT: retq 3987; 3988; AVX2-LABEL: ult_5_v8i32: 3989; AVX2: # %bb.0: 3990; AVX2-NEXT: vmovdqa {{.*#+}} 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] 3991; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 3992; AVX2-NEXT: vmovdqa {{.*#+}} 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] 3993; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 3994; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 3995; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 3996; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 3997; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 3998; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 3999; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4000; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4001; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4002; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4003; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4004; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5] 4005; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 4006; AVX2-NEXT: retq 4007; 4008; AVX512VPOPCNTDQ-LABEL: ult_5_v8i32: 4009; AVX512VPOPCNTDQ: # %bb.0: 4010; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 4011; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 4012; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5] 4013; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 4014; AVX512VPOPCNTDQ-NEXT: retq 4015; 4016; AVX512VPOPCNTDQVL-LABEL: ult_5_v8i32: 4017; AVX512VPOPCNTDQVL: # %bb.0: 4018; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 4019; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 4020; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 4021; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 4022; AVX512VPOPCNTDQVL-NEXT: retq 4023; 4024; BITALG_NOVLX-LABEL: ult_5_v8i32: 4025; BITALG_NOVLX: # %bb.0: 4026; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 4027; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 4028; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 4029; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4030; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4031; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4032; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4033; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4034; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5] 4035; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 4036; BITALG_NOVLX-NEXT: retq 4037; 4038; BITALG-LABEL: ult_5_v8i32: 4039; BITALG: # %bb.0: 4040; BITALG-NEXT: vpopcntb %ymm0, %ymm0 4041; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 4042; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4043; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4044; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4045; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4046; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4047; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 4048; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 4049; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 4050; BITALG-NEXT: retq 4051 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 4052 %3 = icmp ult <8 x i32> %2, <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5> 4053 %4 = sext <8 x i1> %3 to <8 x i32> 4054 ret <8 x i32> %4 4055} 4056 4057define <8 x i32> @ugt_5_v8i32(<8 x i32> %0) { 4058; AVX1-LABEL: ugt_5_v8i32: 4059; AVX1: # %bb.0: 4060; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 4061; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 4062; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 4063; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 4064; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 4065; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 4066; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 4067; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 4068; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 4069; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 4070; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 4071; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 4072; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 4073; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 4074; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 4075; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 4076; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 4077; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 4078; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 4079; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 4080; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 4081; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 4082; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 4083; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 4084; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 4085; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 4086; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [5,5,5,5] 4087; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 4088; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 4089; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 4090; AVX1-NEXT: retq 4091; 4092; AVX2-LABEL: ugt_5_v8i32: 4093; AVX2: # %bb.0: 4094; AVX2-NEXT: vmovdqa {{.*#+}} 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] 4095; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 4096; AVX2-NEXT: vmovdqa {{.*#+}} 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] 4097; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 4098; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 4099; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 4100; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 4101; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 4102; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 4103; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4104; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4105; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4106; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4107; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4108; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5] 4109; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 4110; AVX2-NEXT: retq 4111; 4112; AVX512VPOPCNTDQ-LABEL: ugt_5_v8i32: 4113; AVX512VPOPCNTDQ: # %bb.0: 4114; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 4115; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 4116; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5] 4117; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 4118; AVX512VPOPCNTDQ-NEXT: retq 4119; 4120; AVX512VPOPCNTDQVL-LABEL: ugt_5_v8i32: 4121; AVX512VPOPCNTDQVL: # %bb.0: 4122; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 4123; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 4124; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 4125; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 4126; AVX512VPOPCNTDQVL-NEXT: retq 4127; 4128; BITALG_NOVLX-LABEL: ugt_5_v8i32: 4129; BITALG_NOVLX: # %bb.0: 4130; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 4131; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 4132; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 4133; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4134; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4135; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4136; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4137; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4138; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [5,5,5,5,5,5,5,5] 4139; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 4140; BITALG_NOVLX-NEXT: retq 4141; 4142; BITALG-LABEL: ugt_5_v8i32: 4143; BITALG: # %bb.0: 4144; BITALG-NEXT: vpopcntb %ymm0, %ymm0 4145; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 4146; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4147; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4148; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4149; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4150; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4151; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 4152; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 4153; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 4154; BITALG-NEXT: retq 4155 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 4156 %3 = icmp ugt <8 x i32> %2, <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5> 4157 %4 = sext <8 x i1> %3 to <8 x i32> 4158 ret <8 x i32> %4 4159} 4160 4161define <8 x i32> @ult_6_v8i32(<8 x i32> %0) { 4162; AVX1-LABEL: ult_6_v8i32: 4163; AVX1: # %bb.0: 4164; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 4165; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 4166; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 4167; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 4168; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 4169; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 4170; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 4171; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 4172; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 4173; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 4174; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 4175; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 4176; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 4177; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 4178; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 4179; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 4180; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 4181; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 4182; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 4183; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 4184; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 4185; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 4186; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 4187; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 4188; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 4189; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 4190; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [6,6,6,6] 4191; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 4192; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 4193; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 4194; AVX1-NEXT: retq 4195; 4196; AVX2-LABEL: ult_6_v8i32: 4197; AVX2: # %bb.0: 4198; AVX2-NEXT: vmovdqa {{.*#+}} 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] 4199; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 4200; AVX2-NEXT: vmovdqa {{.*#+}} 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] 4201; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 4202; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 4203; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 4204; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 4205; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 4206; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 4207; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4208; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4209; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4210; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4211; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4212; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6] 4213; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 4214; AVX2-NEXT: retq 4215; 4216; AVX512VPOPCNTDQ-LABEL: ult_6_v8i32: 4217; AVX512VPOPCNTDQ: # %bb.0: 4218; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 4219; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 4220; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6] 4221; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 4222; AVX512VPOPCNTDQ-NEXT: retq 4223; 4224; AVX512VPOPCNTDQVL-LABEL: ult_6_v8i32: 4225; AVX512VPOPCNTDQVL: # %bb.0: 4226; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 4227; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 4228; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 4229; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 4230; AVX512VPOPCNTDQVL-NEXT: retq 4231; 4232; BITALG_NOVLX-LABEL: ult_6_v8i32: 4233; BITALG_NOVLX: # %bb.0: 4234; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 4235; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 4236; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 4237; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4238; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4239; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4240; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4241; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4242; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6] 4243; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 4244; BITALG_NOVLX-NEXT: retq 4245; 4246; BITALG-LABEL: ult_6_v8i32: 4247; BITALG: # %bb.0: 4248; BITALG-NEXT: vpopcntb %ymm0, %ymm0 4249; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 4250; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4251; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4252; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4253; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4254; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4255; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 4256; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 4257; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 4258; BITALG-NEXT: retq 4259 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 4260 %3 = icmp ult <8 x i32> %2, <i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6> 4261 %4 = sext <8 x i1> %3 to <8 x i32> 4262 ret <8 x i32> %4 4263} 4264 4265define <8 x i32> @ugt_6_v8i32(<8 x i32> %0) { 4266; AVX1-LABEL: ugt_6_v8i32: 4267; AVX1: # %bb.0: 4268; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 4269; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 4270; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 4271; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 4272; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 4273; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 4274; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 4275; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 4276; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 4277; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 4278; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 4279; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 4280; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 4281; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 4282; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 4283; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 4284; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 4285; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 4286; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 4287; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 4288; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 4289; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 4290; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 4291; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 4292; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 4293; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 4294; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [6,6,6,6] 4295; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 4296; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 4297; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 4298; AVX1-NEXT: retq 4299; 4300; AVX2-LABEL: ugt_6_v8i32: 4301; AVX2: # %bb.0: 4302; AVX2-NEXT: vmovdqa {{.*#+}} 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] 4303; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 4304; AVX2-NEXT: vmovdqa {{.*#+}} 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] 4305; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 4306; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 4307; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 4308; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 4309; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 4310; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 4311; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4312; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4313; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4314; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4315; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4316; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6] 4317; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 4318; AVX2-NEXT: retq 4319; 4320; AVX512VPOPCNTDQ-LABEL: ugt_6_v8i32: 4321; AVX512VPOPCNTDQ: # %bb.0: 4322; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 4323; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 4324; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6] 4325; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 4326; AVX512VPOPCNTDQ-NEXT: retq 4327; 4328; AVX512VPOPCNTDQVL-LABEL: ugt_6_v8i32: 4329; AVX512VPOPCNTDQVL: # %bb.0: 4330; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 4331; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 4332; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 4333; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 4334; AVX512VPOPCNTDQVL-NEXT: retq 4335; 4336; BITALG_NOVLX-LABEL: ugt_6_v8i32: 4337; BITALG_NOVLX: # %bb.0: 4338; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 4339; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 4340; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 4341; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4342; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4343; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4344; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4345; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4346; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6] 4347; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 4348; BITALG_NOVLX-NEXT: retq 4349; 4350; BITALG-LABEL: ugt_6_v8i32: 4351; BITALG: # %bb.0: 4352; BITALG-NEXT: vpopcntb %ymm0, %ymm0 4353; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 4354; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4355; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4356; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4357; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4358; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4359; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 4360; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 4361; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 4362; BITALG-NEXT: retq 4363 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 4364 %3 = icmp ugt <8 x i32> %2, <i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6> 4365 %4 = sext <8 x i1> %3 to <8 x i32> 4366 ret <8 x i32> %4 4367} 4368 4369define <8 x i32> @ult_7_v8i32(<8 x i32> %0) { 4370; AVX1-LABEL: ult_7_v8i32: 4371; AVX1: # %bb.0: 4372; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 4373; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 4374; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 4375; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 4376; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 4377; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 4378; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 4379; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 4380; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 4381; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 4382; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 4383; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 4384; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 4385; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 4386; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 4387; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 4388; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 4389; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 4390; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 4391; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 4392; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 4393; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 4394; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 4395; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 4396; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 4397; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 4398; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [7,7,7,7] 4399; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 4400; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 4401; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 4402; AVX1-NEXT: retq 4403; 4404; AVX2-LABEL: ult_7_v8i32: 4405; AVX2: # %bb.0: 4406; AVX2-NEXT: vmovdqa {{.*#+}} 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] 4407; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 4408; AVX2-NEXT: vmovdqa {{.*#+}} 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] 4409; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 4410; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 4411; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 4412; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 4413; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 4414; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 4415; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4416; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4417; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4418; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4419; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4420; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7] 4421; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 4422; AVX2-NEXT: retq 4423; 4424; AVX512VPOPCNTDQ-LABEL: ult_7_v8i32: 4425; AVX512VPOPCNTDQ: # %bb.0: 4426; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 4427; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 4428; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7] 4429; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 4430; AVX512VPOPCNTDQ-NEXT: retq 4431; 4432; AVX512VPOPCNTDQVL-LABEL: ult_7_v8i32: 4433; AVX512VPOPCNTDQVL: # %bb.0: 4434; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 4435; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 4436; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 4437; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 4438; AVX512VPOPCNTDQVL-NEXT: retq 4439; 4440; BITALG_NOVLX-LABEL: ult_7_v8i32: 4441; BITALG_NOVLX: # %bb.0: 4442; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 4443; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 4444; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 4445; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4446; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4447; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4448; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4449; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4450; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7] 4451; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 4452; BITALG_NOVLX-NEXT: retq 4453; 4454; BITALG-LABEL: ult_7_v8i32: 4455; BITALG: # %bb.0: 4456; BITALG-NEXT: vpopcntb %ymm0, %ymm0 4457; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 4458; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4459; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4460; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4461; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4462; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4463; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 4464; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 4465; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 4466; BITALG-NEXT: retq 4467 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 4468 %3 = icmp ult <8 x i32> %2, <i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7> 4469 %4 = sext <8 x i1> %3 to <8 x i32> 4470 ret <8 x i32> %4 4471} 4472 4473define <8 x i32> @ugt_7_v8i32(<8 x i32> %0) { 4474; AVX1-LABEL: ugt_7_v8i32: 4475; AVX1: # %bb.0: 4476; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 4477; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 4478; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 4479; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 4480; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 4481; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 4482; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 4483; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 4484; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 4485; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 4486; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 4487; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 4488; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 4489; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 4490; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 4491; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 4492; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 4493; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 4494; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 4495; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 4496; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 4497; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 4498; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 4499; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 4500; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 4501; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 4502; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [7,7,7,7] 4503; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 4504; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 4505; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 4506; AVX1-NEXT: retq 4507; 4508; AVX2-LABEL: ugt_7_v8i32: 4509; AVX2: # %bb.0: 4510; AVX2-NEXT: vmovdqa {{.*#+}} 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] 4511; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 4512; AVX2-NEXT: vmovdqa {{.*#+}} 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] 4513; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 4514; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 4515; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 4516; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 4517; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 4518; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 4519; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4520; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4521; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4522; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4523; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4524; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7] 4525; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 4526; AVX2-NEXT: retq 4527; 4528; AVX512VPOPCNTDQ-LABEL: ugt_7_v8i32: 4529; AVX512VPOPCNTDQ: # %bb.0: 4530; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 4531; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 4532; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7] 4533; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 4534; AVX512VPOPCNTDQ-NEXT: retq 4535; 4536; AVX512VPOPCNTDQVL-LABEL: ugt_7_v8i32: 4537; AVX512VPOPCNTDQVL: # %bb.0: 4538; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 4539; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 4540; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 4541; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 4542; AVX512VPOPCNTDQVL-NEXT: retq 4543; 4544; BITALG_NOVLX-LABEL: ugt_7_v8i32: 4545; BITALG_NOVLX: # %bb.0: 4546; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 4547; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 4548; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 4549; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4550; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4551; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4552; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4553; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4554; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [7,7,7,7,7,7,7,7] 4555; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 4556; BITALG_NOVLX-NEXT: retq 4557; 4558; BITALG-LABEL: ugt_7_v8i32: 4559; BITALG: # %bb.0: 4560; BITALG-NEXT: vpopcntb %ymm0, %ymm0 4561; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 4562; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4563; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4564; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4565; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4566; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4567; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 4568; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 4569; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 4570; BITALG-NEXT: retq 4571 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 4572 %3 = icmp ugt <8 x i32> %2, <i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7> 4573 %4 = sext <8 x i1> %3 to <8 x i32> 4574 ret <8 x i32> %4 4575} 4576 4577define <8 x i32> @ult_8_v8i32(<8 x i32> %0) { 4578; AVX1-LABEL: ult_8_v8i32: 4579; AVX1: # %bb.0: 4580; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 4581; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 4582; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 4583; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 4584; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 4585; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 4586; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 4587; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 4588; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 4589; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 4590; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 4591; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 4592; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 4593; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 4594; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 4595; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 4596; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 4597; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 4598; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 4599; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 4600; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 4601; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 4602; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 4603; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 4604; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 4605; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 4606; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [8,8,8,8] 4607; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 4608; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 4609; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 4610; AVX1-NEXT: retq 4611; 4612; AVX2-LABEL: ult_8_v8i32: 4613; AVX2: # %bb.0: 4614; AVX2-NEXT: vmovdqa {{.*#+}} 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] 4615; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 4616; AVX2-NEXT: vmovdqa {{.*#+}} 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] 4617; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 4618; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 4619; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 4620; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 4621; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 4622; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 4623; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4624; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4625; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4626; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4627; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4628; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8] 4629; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 4630; AVX2-NEXT: retq 4631; 4632; AVX512VPOPCNTDQ-LABEL: ult_8_v8i32: 4633; AVX512VPOPCNTDQ: # %bb.0: 4634; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 4635; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 4636; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8] 4637; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 4638; AVX512VPOPCNTDQ-NEXT: retq 4639; 4640; AVX512VPOPCNTDQVL-LABEL: ult_8_v8i32: 4641; AVX512VPOPCNTDQVL: # %bb.0: 4642; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 4643; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 4644; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 4645; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 4646; AVX512VPOPCNTDQVL-NEXT: retq 4647; 4648; BITALG_NOVLX-LABEL: ult_8_v8i32: 4649; BITALG_NOVLX: # %bb.0: 4650; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 4651; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 4652; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 4653; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4654; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4655; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4656; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4657; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4658; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8] 4659; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 4660; BITALG_NOVLX-NEXT: retq 4661; 4662; BITALG-LABEL: ult_8_v8i32: 4663; BITALG: # %bb.0: 4664; BITALG-NEXT: vpopcntb %ymm0, %ymm0 4665; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 4666; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4667; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4668; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4669; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4670; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4671; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 4672; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 4673; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 4674; BITALG-NEXT: retq 4675 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 4676 %3 = icmp ult <8 x i32> %2, <i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8> 4677 %4 = sext <8 x i1> %3 to <8 x i32> 4678 ret <8 x i32> %4 4679} 4680 4681define <8 x i32> @ugt_8_v8i32(<8 x i32> %0) { 4682; AVX1-LABEL: ugt_8_v8i32: 4683; AVX1: # %bb.0: 4684; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 4685; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 4686; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 4687; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 4688; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 4689; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 4690; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 4691; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 4692; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 4693; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 4694; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 4695; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 4696; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 4697; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 4698; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 4699; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 4700; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 4701; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 4702; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 4703; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 4704; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 4705; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 4706; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 4707; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 4708; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 4709; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 4710; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [8,8,8,8] 4711; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 4712; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 4713; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 4714; AVX1-NEXT: retq 4715; 4716; AVX2-LABEL: ugt_8_v8i32: 4717; AVX2: # %bb.0: 4718; AVX2-NEXT: vmovdqa {{.*#+}} 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] 4719; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 4720; AVX2-NEXT: vmovdqa {{.*#+}} 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] 4721; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 4722; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 4723; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 4724; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 4725; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 4726; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 4727; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4728; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4729; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4730; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4731; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4732; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8] 4733; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 4734; AVX2-NEXT: retq 4735; 4736; AVX512VPOPCNTDQ-LABEL: ugt_8_v8i32: 4737; AVX512VPOPCNTDQ: # %bb.0: 4738; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 4739; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 4740; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8] 4741; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 4742; AVX512VPOPCNTDQ-NEXT: retq 4743; 4744; AVX512VPOPCNTDQVL-LABEL: ugt_8_v8i32: 4745; AVX512VPOPCNTDQVL: # %bb.0: 4746; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 4747; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 4748; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 4749; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 4750; AVX512VPOPCNTDQVL-NEXT: retq 4751; 4752; BITALG_NOVLX-LABEL: ugt_8_v8i32: 4753; BITALG_NOVLX: # %bb.0: 4754; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 4755; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 4756; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 4757; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4758; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4759; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4760; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4761; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4762; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8] 4763; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 4764; BITALG_NOVLX-NEXT: retq 4765; 4766; BITALG-LABEL: ugt_8_v8i32: 4767; BITALG: # %bb.0: 4768; BITALG-NEXT: vpopcntb %ymm0, %ymm0 4769; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 4770; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4771; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4772; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4773; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4774; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4775; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 4776; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 4777; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 4778; BITALG-NEXT: retq 4779 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 4780 %3 = icmp ugt <8 x i32> %2, <i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8> 4781 %4 = sext <8 x i1> %3 to <8 x i32> 4782 ret <8 x i32> %4 4783} 4784 4785define <8 x i32> @ult_9_v8i32(<8 x i32> %0) { 4786; AVX1-LABEL: ult_9_v8i32: 4787; AVX1: # %bb.0: 4788; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 4789; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 4790; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 4791; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 4792; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 4793; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 4794; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 4795; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 4796; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 4797; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 4798; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 4799; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 4800; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 4801; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 4802; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 4803; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 4804; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 4805; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 4806; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 4807; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 4808; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 4809; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 4810; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 4811; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 4812; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 4813; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 4814; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [9,9,9,9] 4815; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 4816; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 4817; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 4818; AVX1-NEXT: retq 4819; 4820; AVX2-LABEL: ult_9_v8i32: 4821; AVX2: # %bb.0: 4822; AVX2-NEXT: vmovdqa {{.*#+}} 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] 4823; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 4824; AVX2-NEXT: vmovdqa {{.*#+}} 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] 4825; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 4826; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 4827; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 4828; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 4829; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 4830; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 4831; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4832; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4833; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4834; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4835; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4836; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9] 4837; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 4838; AVX2-NEXT: retq 4839; 4840; AVX512VPOPCNTDQ-LABEL: ult_9_v8i32: 4841; AVX512VPOPCNTDQ: # %bb.0: 4842; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 4843; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 4844; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9] 4845; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 4846; AVX512VPOPCNTDQ-NEXT: retq 4847; 4848; AVX512VPOPCNTDQVL-LABEL: ult_9_v8i32: 4849; AVX512VPOPCNTDQVL: # %bb.0: 4850; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 4851; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 4852; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 4853; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 4854; AVX512VPOPCNTDQVL-NEXT: retq 4855; 4856; BITALG_NOVLX-LABEL: ult_9_v8i32: 4857; BITALG_NOVLX: # %bb.0: 4858; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 4859; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 4860; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 4861; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4862; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4863; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4864; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4865; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4866; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9] 4867; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 4868; BITALG_NOVLX-NEXT: retq 4869; 4870; BITALG-LABEL: ult_9_v8i32: 4871; BITALG: # %bb.0: 4872; BITALG-NEXT: vpopcntb %ymm0, %ymm0 4873; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 4874; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4875; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4876; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4877; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4878; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4879; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 4880; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 4881; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 4882; BITALG-NEXT: retq 4883 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 4884 %3 = icmp ult <8 x i32> %2, <i32 9, i32 9, i32 9, i32 9, i32 9, i32 9, i32 9, i32 9> 4885 %4 = sext <8 x i1> %3 to <8 x i32> 4886 ret <8 x i32> %4 4887} 4888 4889define <8 x i32> @ugt_9_v8i32(<8 x i32> %0) { 4890; AVX1-LABEL: ugt_9_v8i32: 4891; AVX1: # %bb.0: 4892; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 4893; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 4894; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 4895; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 4896; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 4897; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 4898; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 4899; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 4900; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 4901; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 4902; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 4903; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 4904; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 4905; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 4906; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 4907; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 4908; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 4909; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 4910; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 4911; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 4912; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 4913; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 4914; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 4915; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 4916; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 4917; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 4918; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [9,9,9,9] 4919; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 4920; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 4921; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 4922; AVX1-NEXT: retq 4923; 4924; AVX2-LABEL: ugt_9_v8i32: 4925; AVX2: # %bb.0: 4926; AVX2-NEXT: vmovdqa {{.*#+}} 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] 4927; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 4928; AVX2-NEXT: vmovdqa {{.*#+}} 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] 4929; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 4930; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 4931; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 4932; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 4933; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 4934; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 4935; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4936; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4937; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4938; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4939; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4940; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9] 4941; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 4942; AVX2-NEXT: retq 4943; 4944; AVX512VPOPCNTDQ-LABEL: ugt_9_v8i32: 4945; AVX512VPOPCNTDQ: # %bb.0: 4946; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 4947; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 4948; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9] 4949; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 4950; AVX512VPOPCNTDQ-NEXT: retq 4951; 4952; AVX512VPOPCNTDQVL-LABEL: ugt_9_v8i32: 4953; AVX512VPOPCNTDQVL: # %bb.0: 4954; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 4955; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 4956; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 4957; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 4958; AVX512VPOPCNTDQVL-NEXT: retq 4959; 4960; BITALG_NOVLX-LABEL: ugt_9_v8i32: 4961; BITALG_NOVLX: # %bb.0: 4962; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 4963; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 4964; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 4965; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4966; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4967; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4968; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4969; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4970; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [9,9,9,9,9,9,9,9] 4971; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 4972; BITALG_NOVLX-NEXT: retq 4973; 4974; BITALG-LABEL: ugt_9_v8i32: 4975; BITALG: # %bb.0: 4976; BITALG-NEXT: vpopcntb %ymm0, %ymm0 4977; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 4978; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 4979; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 4980; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 4981; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 4982; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 4983; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 4984; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 4985; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 4986; BITALG-NEXT: retq 4987 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 4988 %3 = icmp ugt <8 x i32> %2, <i32 9, i32 9, i32 9, i32 9, i32 9, i32 9, i32 9, i32 9> 4989 %4 = sext <8 x i1> %3 to <8 x i32> 4990 ret <8 x i32> %4 4991} 4992 4993define <8 x i32> @ult_10_v8i32(<8 x i32> %0) { 4994; AVX1-LABEL: ult_10_v8i32: 4995; AVX1: # %bb.0: 4996; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 4997; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 4998; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 4999; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 5000; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 5001; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 5002; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 5003; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 5004; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 5005; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 5006; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 5007; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 5008; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 5009; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 5010; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 5011; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 5012; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 5013; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 5014; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 5015; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 5016; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 5017; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 5018; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 5019; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 5020; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 5021; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 5022; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [10,10,10,10] 5023; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 5024; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 5025; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 5026; AVX1-NEXT: retq 5027; 5028; AVX2-LABEL: ult_10_v8i32: 5029; AVX2: # %bb.0: 5030; AVX2-NEXT: vmovdqa {{.*#+}} 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] 5031; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 5032; AVX2-NEXT: vmovdqa {{.*#+}} 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] 5033; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 5034; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 5035; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 5036; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 5037; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 5038; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 5039; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5040; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5041; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5042; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5043; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5044; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10] 5045; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 5046; AVX2-NEXT: retq 5047; 5048; AVX512VPOPCNTDQ-LABEL: ult_10_v8i32: 5049; AVX512VPOPCNTDQ: # %bb.0: 5050; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 5051; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 5052; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10] 5053; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 5054; AVX512VPOPCNTDQ-NEXT: retq 5055; 5056; AVX512VPOPCNTDQVL-LABEL: ult_10_v8i32: 5057; AVX512VPOPCNTDQVL: # %bb.0: 5058; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 5059; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 5060; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 5061; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 5062; AVX512VPOPCNTDQVL-NEXT: retq 5063; 5064; BITALG_NOVLX-LABEL: ult_10_v8i32: 5065; BITALG_NOVLX: # %bb.0: 5066; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 5067; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 5068; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 5069; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5070; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5071; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5072; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5073; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5074; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10] 5075; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 5076; BITALG_NOVLX-NEXT: retq 5077; 5078; BITALG-LABEL: ult_10_v8i32: 5079; BITALG: # %bb.0: 5080; BITALG-NEXT: vpopcntb %ymm0, %ymm0 5081; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 5082; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5083; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5084; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5085; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5086; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5087; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 5088; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 5089; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 5090; BITALG-NEXT: retq 5091 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 5092 %3 = icmp ult <8 x i32> %2, <i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10> 5093 %4 = sext <8 x i1> %3 to <8 x i32> 5094 ret <8 x i32> %4 5095} 5096 5097define <8 x i32> @ugt_10_v8i32(<8 x i32> %0) { 5098; AVX1-LABEL: ugt_10_v8i32: 5099; AVX1: # %bb.0: 5100; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 5101; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 5102; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 5103; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 5104; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 5105; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 5106; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 5107; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 5108; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 5109; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 5110; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 5111; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 5112; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 5113; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 5114; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 5115; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 5116; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 5117; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 5118; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 5119; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 5120; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 5121; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 5122; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 5123; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 5124; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 5125; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 5126; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [10,10,10,10] 5127; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 5128; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 5129; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 5130; AVX1-NEXT: retq 5131; 5132; AVX2-LABEL: ugt_10_v8i32: 5133; AVX2: # %bb.0: 5134; AVX2-NEXT: vmovdqa {{.*#+}} 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] 5135; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 5136; AVX2-NEXT: vmovdqa {{.*#+}} 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] 5137; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 5138; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 5139; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 5140; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 5141; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 5142; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 5143; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5144; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5145; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5146; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5147; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5148; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10] 5149; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 5150; AVX2-NEXT: retq 5151; 5152; AVX512VPOPCNTDQ-LABEL: ugt_10_v8i32: 5153; AVX512VPOPCNTDQ: # %bb.0: 5154; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 5155; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 5156; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10] 5157; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 5158; AVX512VPOPCNTDQ-NEXT: retq 5159; 5160; AVX512VPOPCNTDQVL-LABEL: ugt_10_v8i32: 5161; AVX512VPOPCNTDQVL: # %bb.0: 5162; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 5163; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 5164; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 5165; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 5166; AVX512VPOPCNTDQVL-NEXT: retq 5167; 5168; BITALG_NOVLX-LABEL: ugt_10_v8i32: 5169; BITALG_NOVLX: # %bb.0: 5170; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 5171; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 5172; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 5173; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5174; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5175; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5176; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5177; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5178; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [10,10,10,10,10,10,10,10] 5179; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 5180; BITALG_NOVLX-NEXT: retq 5181; 5182; BITALG-LABEL: ugt_10_v8i32: 5183; BITALG: # %bb.0: 5184; BITALG-NEXT: vpopcntb %ymm0, %ymm0 5185; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 5186; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5187; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5188; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5189; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5190; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5191; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 5192; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 5193; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 5194; BITALG-NEXT: retq 5195 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 5196 %3 = icmp ugt <8 x i32> %2, <i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10> 5197 %4 = sext <8 x i1> %3 to <8 x i32> 5198 ret <8 x i32> %4 5199} 5200 5201define <8 x i32> @ult_11_v8i32(<8 x i32> %0) { 5202; AVX1-LABEL: ult_11_v8i32: 5203; AVX1: # %bb.0: 5204; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 5205; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 5206; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 5207; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 5208; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 5209; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 5210; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 5211; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 5212; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 5213; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 5214; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 5215; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 5216; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 5217; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 5218; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 5219; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 5220; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 5221; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 5222; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 5223; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 5224; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 5225; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 5226; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 5227; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 5228; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 5229; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 5230; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [11,11,11,11] 5231; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 5232; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 5233; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 5234; AVX1-NEXT: retq 5235; 5236; AVX2-LABEL: ult_11_v8i32: 5237; AVX2: # %bb.0: 5238; AVX2-NEXT: vmovdqa {{.*#+}} 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] 5239; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 5240; AVX2-NEXT: vmovdqa {{.*#+}} 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] 5241; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 5242; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 5243; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 5244; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 5245; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 5246; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 5247; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5248; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5249; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5250; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5251; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5252; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11] 5253; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 5254; AVX2-NEXT: retq 5255; 5256; AVX512VPOPCNTDQ-LABEL: ult_11_v8i32: 5257; AVX512VPOPCNTDQ: # %bb.0: 5258; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 5259; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 5260; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11] 5261; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 5262; AVX512VPOPCNTDQ-NEXT: retq 5263; 5264; AVX512VPOPCNTDQVL-LABEL: ult_11_v8i32: 5265; AVX512VPOPCNTDQVL: # %bb.0: 5266; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 5267; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 5268; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 5269; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 5270; AVX512VPOPCNTDQVL-NEXT: retq 5271; 5272; BITALG_NOVLX-LABEL: ult_11_v8i32: 5273; BITALG_NOVLX: # %bb.0: 5274; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 5275; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 5276; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 5277; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5278; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5279; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5280; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5281; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5282; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11] 5283; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 5284; BITALG_NOVLX-NEXT: retq 5285; 5286; BITALG-LABEL: ult_11_v8i32: 5287; BITALG: # %bb.0: 5288; BITALG-NEXT: vpopcntb %ymm0, %ymm0 5289; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 5290; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5291; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5292; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5293; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5294; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5295; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 5296; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 5297; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 5298; BITALG-NEXT: retq 5299 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 5300 %3 = icmp ult <8 x i32> %2, <i32 11, i32 11, i32 11, i32 11, i32 11, i32 11, i32 11, i32 11> 5301 %4 = sext <8 x i1> %3 to <8 x i32> 5302 ret <8 x i32> %4 5303} 5304 5305define <8 x i32> @ugt_11_v8i32(<8 x i32> %0) { 5306; AVX1-LABEL: ugt_11_v8i32: 5307; AVX1: # %bb.0: 5308; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 5309; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 5310; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 5311; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 5312; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 5313; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 5314; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 5315; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 5316; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 5317; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 5318; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 5319; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 5320; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 5321; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 5322; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 5323; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 5324; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 5325; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 5326; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 5327; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 5328; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 5329; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 5330; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 5331; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 5332; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 5333; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 5334; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [11,11,11,11] 5335; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 5336; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 5337; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 5338; AVX1-NEXT: retq 5339; 5340; AVX2-LABEL: ugt_11_v8i32: 5341; AVX2: # %bb.0: 5342; AVX2-NEXT: vmovdqa {{.*#+}} 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] 5343; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 5344; AVX2-NEXT: vmovdqa {{.*#+}} 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] 5345; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 5346; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 5347; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 5348; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 5349; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 5350; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 5351; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5352; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5353; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5354; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5355; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5356; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11] 5357; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 5358; AVX2-NEXT: retq 5359; 5360; AVX512VPOPCNTDQ-LABEL: ugt_11_v8i32: 5361; AVX512VPOPCNTDQ: # %bb.0: 5362; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 5363; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 5364; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11] 5365; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 5366; AVX512VPOPCNTDQ-NEXT: retq 5367; 5368; AVX512VPOPCNTDQVL-LABEL: ugt_11_v8i32: 5369; AVX512VPOPCNTDQVL: # %bb.0: 5370; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 5371; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 5372; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 5373; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 5374; AVX512VPOPCNTDQVL-NEXT: retq 5375; 5376; BITALG_NOVLX-LABEL: ugt_11_v8i32: 5377; BITALG_NOVLX: # %bb.0: 5378; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 5379; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 5380; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 5381; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5382; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5383; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5384; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5385; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5386; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11] 5387; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 5388; BITALG_NOVLX-NEXT: retq 5389; 5390; BITALG-LABEL: ugt_11_v8i32: 5391; BITALG: # %bb.0: 5392; BITALG-NEXT: vpopcntb %ymm0, %ymm0 5393; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 5394; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5395; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5396; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5397; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5398; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5399; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 5400; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 5401; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 5402; BITALG-NEXT: retq 5403 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 5404 %3 = icmp ugt <8 x i32> %2, <i32 11, i32 11, i32 11, i32 11, i32 11, i32 11, i32 11, i32 11> 5405 %4 = sext <8 x i1> %3 to <8 x i32> 5406 ret <8 x i32> %4 5407} 5408 5409define <8 x i32> @ult_12_v8i32(<8 x i32> %0) { 5410; AVX1-LABEL: ult_12_v8i32: 5411; AVX1: # %bb.0: 5412; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 5413; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 5414; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 5415; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 5416; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 5417; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 5418; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 5419; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 5420; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 5421; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 5422; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 5423; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 5424; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 5425; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 5426; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 5427; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 5428; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 5429; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 5430; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 5431; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 5432; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 5433; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 5434; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 5435; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 5436; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 5437; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 5438; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [12,12,12,12] 5439; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 5440; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 5441; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 5442; AVX1-NEXT: retq 5443; 5444; AVX2-LABEL: ult_12_v8i32: 5445; AVX2: # %bb.0: 5446; AVX2-NEXT: vmovdqa {{.*#+}} 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] 5447; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 5448; AVX2-NEXT: vmovdqa {{.*#+}} 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] 5449; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 5450; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 5451; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 5452; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 5453; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 5454; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 5455; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5456; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5457; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5458; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5459; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5460; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12] 5461; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 5462; AVX2-NEXT: retq 5463; 5464; AVX512VPOPCNTDQ-LABEL: ult_12_v8i32: 5465; AVX512VPOPCNTDQ: # %bb.0: 5466; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 5467; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 5468; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12] 5469; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 5470; AVX512VPOPCNTDQ-NEXT: retq 5471; 5472; AVX512VPOPCNTDQVL-LABEL: ult_12_v8i32: 5473; AVX512VPOPCNTDQVL: # %bb.0: 5474; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 5475; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 5476; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 5477; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 5478; AVX512VPOPCNTDQVL-NEXT: retq 5479; 5480; BITALG_NOVLX-LABEL: ult_12_v8i32: 5481; BITALG_NOVLX: # %bb.0: 5482; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 5483; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 5484; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 5485; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5486; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5487; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5488; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5489; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5490; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12] 5491; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 5492; BITALG_NOVLX-NEXT: retq 5493; 5494; BITALG-LABEL: ult_12_v8i32: 5495; BITALG: # %bb.0: 5496; BITALG-NEXT: vpopcntb %ymm0, %ymm0 5497; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 5498; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5499; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5500; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5501; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5502; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5503; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 5504; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 5505; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 5506; BITALG-NEXT: retq 5507 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 5508 %3 = icmp ult <8 x i32> %2, <i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12> 5509 %4 = sext <8 x i1> %3 to <8 x i32> 5510 ret <8 x i32> %4 5511} 5512 5513define <8 x i32> @ugt_12_v8i32(<8 x i32> %0) { 5514; AVX1-LABEL: ugt_12_v8i32: 5515; AVX1: # %bb.0: 5516; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 5517; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 5518; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 5519; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 5520; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 5521; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 5522; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 5523; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 5524; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 5525; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 5526; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 5527; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 5528; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 5529; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 5530; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 5531; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 5532; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 5533; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 5534; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 5535; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 5536; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 5537; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 5538; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 5539; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 5540; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 5541; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 5542; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [12,12,12,12] 5543; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 5544; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 5545; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 5546; AVX1-NEXT: retq 5547; 5548; AVX2-LABEL: ugt_12_v8i32: 5549; AVX2: # %bb.0: 5550; AVX2-NEXT: vmovdqa {{.*#+}} 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] 5551; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 5552; AVX2-NEXT: vmovdqa {{.*#+}} 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] 5553; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 5554; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 5555; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 5556; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 5557; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 5558; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 5559; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5560; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5561; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5562; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5563; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5564; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12] 5565; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 5566; AVX2-NEXT: retq 5567; 5568; AVX512VPOPCNTDQ-LABEL: ugt_12_v8i32: 5569; AVX512VPOPCNTDQ: # %bb.0: 5570; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 5571; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 5572; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12] 5573; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 5574; AVX512VPOPCNTDQ-NEXT: retq 5575; 5576; AVX512VPOPCNTDQVL-LABEL: ugt_12_v8i32: 5577; AVX512VPOPCNTDQVL: # %bb.0: 5578; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 5579; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 5580; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 5581; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 5582; AVX512VPOPCNTDQVL-NEXT: retq 5583; 5584; BITALG_NOVLX-LABEL: ugt_12_v8i32: 5585; BITALG_NOVLX: # %bb.0: 5586; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 5587; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 5588; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 5589; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5590; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5591; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5592; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5593; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5594; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [12,12,12,12,12,12,12,12] 5595; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 5596; BITALG_NOVLX-NEXT: retq 5597; 5598; BITALG-LABEL: ugt_12_v8i32: 5599; BITALG: # %bb.0: 5600; BITALG-NEXT: vpopcntb %ymm0, %ymm0 5601; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 5602; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5603; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5604; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5605; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5606; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5607; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 5608; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 5609; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 5610; BITALG-NEXT: retq 5611 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 5612 %3 = icmp ugt <8 x i32> %2, <i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12> 5613 %4 = sext <8 x i1> %3 to <8 x i32> 5614 ret <8 x i32> %4 5615} 5616 5617define <8 x i32> @ult_13_v8i32(<8 x i32> %0) { 5618; AVX1-LABEL: ult_13_v8i32: 5619; AVX1: # %bb.0: 5620; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 5621; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 5622; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 5623; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 5624; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 5625; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 5626; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 5627; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 5628; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 5629; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 5630; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 5631; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 5632; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 5633; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 5634; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 5635; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 5636; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 5637; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 5638; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 5639; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 5640; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 5641; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 5642; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 5643; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 5644; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 5645; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 5646; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [13,13,13,13] 5647; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 5648; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 5649; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 5650; AVX1-NEXT: retq 5651; 5652; AVX2-LABEL: ult_13_v8i32: 5653; AVX2: # %bb.0: 5654; AVX2-NEXT: vmovdqa {{.*#+}} 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] 5655; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 5656; AVX2-NEXT: vmovdqa {{.*#+}} 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] 5657; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 5658; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 5659; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 5660; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 5661; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 5662; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 5663; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5664; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5665; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5666; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5667; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5668; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13] 5669; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 5670; AVX2-NEXT: retq 5671; 5672; AVX512VPOPCNTDQ-LABEL: ult_13_v8i32: 5673; AVX512VPOPCNTDQ: # %bb.0: 5674; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 5675; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 5676; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13] 5677; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 5678; AVX512VPOPCNTDQ-NEXT: retq 5679; 5680; AVX512VPOPCNTDQVL-LABEL: ult_13_v8i32: 5681; AVX512VPOPCNTDQVL: # %bb.0: 5682; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 5683; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 5684; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 5685; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 5686; AVX512VPOPCNTDQVL-NEXT: retq 5687; 5688; BITALG_NOVLX-LABEL: ult_13_v8i32: 5689; BITALG_NOVLX: # %bb.0: 5690; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 5691; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 5692; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 5693; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5694; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5695; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5696; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5697; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5698; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13] 5699; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 5700; BITALG_NOVLX-NEXT: retq 5701; 5702; BITALG-LABEL: ult_13_v8i32: 5703; BITALG: # %bb.0: 5704; BITALG-NEXT: vpopcntb %ymm0, %ymm0 5705; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 5706; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5707; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5708; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5709; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5710; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5711; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 5712; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 5713; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 5714; BITALG-NEXT: retq 5715 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 5716 %3 = icmp ult <8 x i32> %2, <i32 13, i32 13, i32 13, i32 13, i32 13, i32 13, i32 13, i32 13> 5717 %4 = sext <8 x i1> %3 to <8 x i32> 5718 ret <8 x i32> %4 5719} 5720 5721define <8 x i32> @ugt_13_v8i32(<8 x i32> %0) { 5722; AVX1-LABEL: ugt_13_v8i32: 5723; AVX1: # %bb.0: 5724; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 5725; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 5726; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 5727; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 5728; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 5729; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 5730; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 5731; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 5732; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 5733; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 5734; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 5735; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 5736; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 5737; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 5738; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 5739; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 5740; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 5741; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 5742; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 5743; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 5744; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 5745; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 5746; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 5747; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 5748; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 5749; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 5750; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [13,13,13,13] 5751; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 5752; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 5753; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 5754; AVX1-NEXT: retq 5755; 5756; AVX2-LABEL: ugt_13_v8i32: 5757; AVX2: # %bb.0: 5758; AVX2-NEXT: vmovdqa {{.*#+}} 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] 5759; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 5760; AVX2-NEXT: vmovdqa {{.*#+}} 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] 5761; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 5762; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 5763; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 5764; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 5765; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 5766; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 5767; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5768; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5769; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5770; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5771; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5772; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13] 5773; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 5774; AVX2-NEXT: retq 5775; 5776; AVX512VPOPCNTDQ-LABEL: ugt_13_v8i32: 5777; AVX512VPOPCNTDQ: # %bb.0: 5778; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 5779; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 5780; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13] 5781; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 5782; AVX512VPOPCNTDQ-NEXT: retq 5783; 5784; AVX512VPOPCNTDQVL-LABEL: ugt_13_v8i32: 5785; AVX512VPOPCNTDQVL: # %bb.0: 5786; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 5787; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 5788; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 5789; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 5790; AVX512VPOPCNTDQVL-NEXT: retq 5791; 5792; BITALG_NOVLX-LABEL: ugt_13_v8i32: 5793; BITALG_NOVLX: # %bb.0: 5794; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 5795; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 5796; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 5797; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5798; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5799; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5800; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5801; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5802; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [13,13,13,13,13,13,13,13] 5803; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 5804; BITALG_NOVLX-NEXT: retq 5805; 5806; BITALG-LABEL: ugt_13_v8i32: 5807; BITALG: # %bb.0: 5808; BITALG-NEXT: vpopcntb %ymm0, %ymm0 5809; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 5810; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5811; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5812; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5813; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5814; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5815; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 5816; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 5817; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 5818; BITALG-NEXT: retq 5819 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 5820 %3 = icmp ugt <8 x i32> %2, <i32 13, i32 13, i32 13, i32 13, i32 13, i32 13, i32 13, i32 13> 5821 %4 = sext <8 x i1> %3 to <8 x i32> 5822 ret <8 x i32> %4 5823} 5824 5825define <8 x i32> @ult_14_v8i32(<8 x i32> %0) { 5826; AVX1-LABEL: ult_14_v8i32: 5827; AVX1: # %bb.0: 5828; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 5829; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 5830; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 5831; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 5832; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 5833; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 5834; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 5835; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 5836; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 5837; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 5838; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 5839; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 5840; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 5841; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 5842; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 5843; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 5844; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 5845; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 5846; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 5847; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 5848; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 5849; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 5850; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 5851; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 5852; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 5853; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 5854; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [14,14,14,14] 5855; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 5856; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 5857; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 5858; AVX1-NEXT: retq 5859; 5860; AVX2-LABEL: ult_14_v8i32: 5861; AVX2: # %bb.0: 5862; AVX2-NEXT: vmovdqa {{.*#+}} 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] 5863; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 5864; AVX2-NEXT: vmovdqa {{.*#+}} 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] 5865; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 5866; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 5867; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 5868; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 5869; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 5870; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 5871; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5872; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5873; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5874; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5875; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5876; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14] 5877; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 5878; AVX2-NEXT: retq 5879; 5880; AVX512VPOPCNTDQ-LABEL: ult_14_v8i32: 5881; AVX512VPOPCNTDQ: # %bb.0: 5882; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 5883; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 5884; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14] 5885; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 5886; AVX512VPOPCNTDQ-NEXT: retq 5887; 5888; AVX512VPOPCNTDQVL-LABEL: ult_14_v8i32: 5889; AVX512VPOPCNTDQVL: # %bb.0: 5890; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 5891; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 5892; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 5893; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 5894; AVX512VPOPCNTDQVL-NEXT: retq 5895; 5896; BITALG_NOVLX-LABEL: ult_14_v8i32: 5897; BITALG_NOVLX: # %bb.0: 5898; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 5899; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 5900; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 5901; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5902; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5903; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5904; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5905; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5906; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14] 5907; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 5908; BITALG_NOVLX-NEXT: retq 5909; 5910; BITALG-LABEL: ult_14_v8i32: 5911; BITALG: # %bb.0: 5912; BITALG-NEXT: vpopcntb %ymm0, %ymm0 5913; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 5914; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5915; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5916; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5917; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5918; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5919; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 5920; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 5921; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 5922; BITALG-NEXT: retq 5923 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 5924 %3 = icmp ult <8 x i32> %2, <i32 14, i32 14, i32 14, i32 14, i32 14, i32 14, i32 14, i32 14> 5925 %4 = sext <8 x i1> %3 to <8 x i32> 5926 ret <8 x i32> %4 5927} 5928 5929define <8 x i32> @ugt_14_v8i32(<8 x i32> %0) { 5930; AVX1-LABEL: ugt_14_v8i32: 5931; AVX1: # %bb.0: 5932; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 5933; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 5934; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 5935; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 5936; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 5937; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 5938; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 5939; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 5940; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 5941; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 5942; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 5943; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 5944; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 5945; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 5946; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 5947; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 5948; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 5949; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 5950; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 5951; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 5952; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 5953; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 5954; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 5955; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 5956; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 5957; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 5958; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [14,14,14,14] 5959; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 5960; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 5961; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 5962; AVX1-NEXT: retq 5963; 5964; AVX2-LABEL: ugt_14_v8i32: 5965; AVX2: # %bb.0: 5966; AVX2-NEXT: vmovdqa {{.*#+}} 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] 5967; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 5968; AVX2-NEXT: vmovdqa {{.*#+}} 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] 5969; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 5970; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 5971; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 5972; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 5973; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 5974; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 5975; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 5976; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 5977; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 5978; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 5979; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 5980; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14] 5981; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 5982; AVX2-NEXT: retq 5983; 5984; AVX512VPOPCNTDQ-LABEL: ugt_14_v8i32: 5985; AVX512VPOPCNTDQ: # %bb.0: 5986; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 5987; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 5988; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14] 5989; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 5990; AVX512VPOPCNTDQ-NEXT: retq 5991; 5992; AVX512VPOPCNTDQVL-LABEL: ugt_14_v8i32: 5993; AVX512VPOPCNTDQVL: # %bb.0: 5994; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 5995; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 5996; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 5997; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 5998; AVX512VPOPCNTDQVL-NEXT: retq 5999; 6000; BITALG_NOVLX-LABEL: ugt_14_v8i32: 6001; BITALG_NOVLX: # %bb.0: 6002; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 6003; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 6004; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 6005; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6006; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6007; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6008; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6009; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6010; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [14,14,14,14,14,14,14,14] 6011; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 6012; BITALG_NOVLX-NEXT: retq 6013; 6014; BITALG-LABEL: ugt_14_v8i32: 6015; BITALG: # %bb.0: 6016; BITALG-NEXT: vpopcntb %ymm0, %ymm0 6017; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 6018; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6019; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6020; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6021; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6022; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6023; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 6024; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 6025; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 6026; BITALG-NEXT: retq 6027 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 6028 %3 = icmp ugt <8 x i32> %2, <i32 14, i32 14, i32 14, i32 14, i32 14, i32 14, i32 14, i32 14> 6029 %4 = sext <8 x i1> %3 to <8 x i32> 6030 ret <8 x i32> %4 6031} 6032 6033define <8 x i32> @ult_15_v8i32(<8 x i32> %0) { 6034; AVX1-LABEL: ult_15_v8i32: 6035; AVX1: # %bb.0: 6036; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 6037; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 6038; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 6039; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 6040; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 6041; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 6042; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 6043; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 6044; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 6045; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 6046; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 6047; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 6048; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 6049; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 6050; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 6051; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 6052; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 6053; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 6054; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 6055; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 6056; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 6057; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 6058; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 6059; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 6060; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 6061; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 6062; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15] 6063; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 6064; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 6065; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 6066; AVX1-NEXT: retq 6067; 6068; AVX2-LABEL: ult_15_v8i32: 6069; AVX2: # %bb.0: 6070; AVX2-NEXT: vmovdqa {{.*#+}} 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] 6071; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 6072; AVX2-NEXT: vmovdqa {{.*#+}} 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] 6073; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 6074; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 6075; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 6076; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 6077; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 6078; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 6079; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6080; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6081; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6082; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6083; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6084; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15] 6085; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 6086; AVX2-NEXT: retq 6087; 6088; AVX512VPOPCNTDQ-LABEL: ult_15_v8i32: 6089; AVX512VPOPCNTDQ: # %bb.0: 6090; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 6091; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 6092; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15] 6093; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 6094; AVX512VPOPCNTDQ-NEXT: retq 6095; 6096; AVX512VPOPCNTDQVL-LABEL: ult_15_v8i32: 6097; AVX512VPOPCNTDQVL: # %bb.0: 6098; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 6099; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 6100; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 6101; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 6102; AVX512VPOPCNTDQVL-NEXT: retq 6103; 6104; BITALG_NOVLX-LABEL: ult_15_v8i32: 6105; BITALG_NOVLX: # %bb.0: 6106; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 6107; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 6108; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 6109; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6110; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6111; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6112; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6113; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6114; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15] 6115; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 6116; BITALG_NOVLX-NEXT: retq 6117; 6118; BITALG-LABEL: ult_15_v8i32: 6119; BITALG: # %bb.0: 6120; BITALG-NEXT: vpopcntb %ymm0, %ymm0 6121; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 6122; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6123; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6124; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6125; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6126; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6127; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 6128; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 6129; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 6130; BITALG-NEXT: retq 6131 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 6132 %3 = icmp ult <8 x i32> %2, <i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15> 6133 %4 = sext <8 x i1> %3 to <8 x i32> 6134 ret <8 x i32> %4 6135} 6136 6137define <8 x i32> @ugt_15_v8i32(<8 x i32> %0) { 6138; AVX1-LABEL: ugt_15_v8i32: 6139; AVX1: # %bb.0: 6140; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 6141; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 6142; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 6143; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 6144; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 6145; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 6146; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 6147; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 6148; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 6149; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 6150; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 6151; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 6152; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 6153; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 6154; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 6155; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 6156; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 6157; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 6158; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 6159; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 6160; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 6161; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 6162; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 6163; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 6164; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 6165; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 6166; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15] 6167; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 6168; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 6169; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 6170; AVX1-NEXT: retq 6171; 6172; AVX2-LABEL: ugt_15_v8i32: 6173; AVX2: # %bb.0: 6174; AVX2-NEXT: vmovdqa {{.*#+}} 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] 6175; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 6176; AVX2-NEXT: vmovdqa {{.*#+}} 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] 6177; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 6178; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 6179; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 6180; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 6181; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 6182; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 6183; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6184; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6185; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6186; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6187; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6188; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15] 6189; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 6190; AVX2-NEXT: retq 6191; 6192; AVX512VPOPCNTDQ-LABEL: ugt_15_v8i32: 6193; AVX512VPOPCNTDQ: # %bb.0: 6194; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 6195; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 6196; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15] 6197; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 6198; AVX512VPOPCNTDQ-NEXT: retq 6199; 6200; AVX512VPOPCNTDQVL-LABEL: ugt_15_v8i32: 6201; AVX512VPOPCNTDQVL: # %bb.0: 6202; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 6203; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 6204; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 6205; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 6206; AVX512VPOPCNTDQVL-NEXT: retq 6207; 6208; BITALG_NOVLX-LABEL: ugt_15_v8i32: 6209; BITALG_NOVLX: # %bb.0: 6210; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 6211; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 6212; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 6213; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6214; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6215; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6216; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6217; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6218; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15] 6219; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 6220; BITALG_NOVLX-NEXT: retq 6221; 6222; BITALG-LABEL: ugt_15_v8i32: 6223; BITALG: # %bb.0: 6224; BITALG-NEXT: vpopcntb %ymm0, %ymm0 6225; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 6226; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6227; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6228; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6229; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6230; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6231; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 6232; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 6233; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 6234; BITALG-NEXT: retq 6235 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 6236 %3 = icmp ugt <8 x i32> %2, <i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15> 6237 %4 = sext <8 x i1> %3 to <8 x i32> 6238 ret <8 x i32> %4 6239} 6240 6241define <8 x i32> @ult_16_v8i32(<8 x i32> %0) { 6242; AVX1-LABEL: ult_16_v8i32: 6243; AVX1: # %bb.0: 6244; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 6245; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 6246; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 6247; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 6248; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 6249; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 6250; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 6251; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 6252; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 6253; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 6254; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 6255; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 6256; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 6257; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 6258; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 6259; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 6260; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 6261; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 6262; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 6263; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 6264; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 6265; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 6266; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 6267; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 6268; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 6269; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 6270; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [16,16,16,16] 6271; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 6272; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 6273; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 6274; AVX1-NEXT: retq 6275; 6276; AVX2-LABEL: ult_16_v8i32: 6277; AVX2: # %bb.0: 6278; AVX2-NEXT: vmovdqa {{.*#+}} 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] 6279; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 6280; AVX2-NEXT: vmovdqa {{.*#+}} 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] 6281; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 6282; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 6283; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 6284; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 6285; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 6286; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 6287; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6288; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6289; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6290; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6291; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6292; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16] 6293; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 6294; AVX2-NEXT: retq 6295; 6296; AVX512VPOPCNTDQ-LABEL: ult_16_v8i32: 6297; AVX512VPOPCNTDQ: # %bb.0: 6298; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 6299; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 6300; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16] 6301; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 6302; AVX512VPOPCNTDQ-NEXT: retq 6303; 6304; AVX512VPOPCNTDQVL-LABEL: ult_16_v8i32: 6305; AVX512VPOPCNTDQVL: # %bb.0: 6306; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 6307; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 6308; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 6309; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 6310; AVX512VPOPCNTDQVL-NEXT: retq 6311; 6312; BITALG_NOVLX-LABEL: ult_16_v8i32: 6313; BITALG_NOVLX: # %bb.0: 6314; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 6315; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 6316; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 6317; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6318; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6319; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6320; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6321; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6322; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16] 6323; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 6324; BITALG_NOVLX-NEXT: retq 6325; 6326; BITALG-LABEL: ult_16_v8i32: 6327; BITALG: # %bb.0: 6328; BITALG-NEXT: vpopcntb %ymm0, %ymm0 6329; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 6330; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6331; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6332; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6333; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6334; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6335; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 6336; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 6337; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 6338; BITALG-NEXT: retq 6339 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 6340 %3 = icmp ult <8 x i32> %2, <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16> 6341 %4 = sext <8 x i1> %3 to <8 x i32> 6342 ret <8 x i32> %4 6343} 6344 6345define <8 x i32> @ugt_16_v8i32(<8 x i32> %0) { 6346; AVX1-LABEL: ugt_16_v8i32: 6347; AVX1: # %bb.0: 6348; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 6349; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 6350; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 6351; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 6352; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 6353; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 6354; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 6355; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 6356; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 6357; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 6358; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 6359; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 6360; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 6361; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 6362; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 6363; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 6364; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 6365; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 6366; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 6367; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 6368; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 6369; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 6370; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 6371; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 6372; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 6373; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 6374; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [16,16,16,16] 6375; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 6376; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 6377; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 6378; AVX1-NEXT: retq 6379; 6380; AVX2-LABEL: ugt_16_v8i32: 6381; AVX2: # %bb.0: 6382; AVX2-NEXT: vmovdqa {{.*#+}} 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] 6383; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 6384; AVX2-NEXT: vmovdqa {{.*#+}} 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] 6385; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 6386; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 6387; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 6388; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 6389; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 6390; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 6391; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6392; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6393; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6394; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6395; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6396; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16] 6397; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 6398; AVX2-NEXT: retq 6399; 6400; AVX512VPOPCNTDQ-LABEL: ugt_16_v8i32: 6401; AVX512VPOPCNTDQ: # %bb.0: 6402; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 6403; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 6404; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16] 6405; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 6406; AVX512VPOPCNTDQ-NEXT: retq 6407; 6408; AVX512VPOPCNTDQVL-LABEL: ugt_16_v8i32: 6409; AVX512VPOPCNTDQVL: # %bb.0: 6410; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 6411; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 6412; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 6413; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 6414; AVX512VPOPCNTDQVL-NEXT: retq 6415; 6416; BITALG_NOVLX-LABEL: ugt_16_v8i32: 6417; BITALG_NOVLX: # %bb.0: 6418; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 6419; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 6420; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 6421; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6422; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6423; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6424; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6425; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6426; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16] 6427; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 6428; BITALG_NOVLX-NEXT: retq 6429; 6430; BITALG-LABEL: ugt_16_v8i32: 6431; BITALG: # %bb.0: 6432; BITALG-NEXT: vpopcntb %ymm0, %ymm0 6433; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 6434; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6435; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6436; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6437; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6438; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6439; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 6440; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 6441; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 6442; BITALG-NEXT: retq 6443 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 6444 %3 = icmp ugt <8 x i32> %2, <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16> 6445 %4 = sext <8 x i1> %3 to <8 x i32> 6446 ret <8 x i32> %4 6447} 6448 6449define <8 x i32> @ult_17_v8i32(<8 x i32> %0) { 6450; AVX1-LABEL: ult_17_v8i32: 6451; AVX1: # %bb.0: 6452; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 6453; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 6454; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 6455; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 6456; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 6457; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 6458; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 6459; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 6460; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 6461; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 6462; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 6463; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 6464; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 6465; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 6466; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 6467; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 6468; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 6469; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 6470; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 6471; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 6472; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 6473; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 6474; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 6475; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 6476; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 6477; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 6478; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [17,17,17,17] 6479; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 6480; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 6481; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 6482; AVX1-NEXT: retq 6483; 6484; AVX2-LABEL: ult_17_v8i32: 6485; AVX2: # %bb.0: 6486; AVX2-NEXT: vmovdqa {{.*#+}} 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] 6487; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 6488; AVX2-NEXT: vmovdqa {{.*#+}} 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] 6489; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 6490; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 6491; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 6492; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 6493; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 6494; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 6495; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6496; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6497; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6498; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6499; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6500; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [17,17,17,17,17,17,17,17] 6501; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 6502; AVX2-NEXT: retq 6503; 6504; AVX512VPOPCNTDQ-LABEL: ult_17_v8i32: 6505; AVX512VPOPCNTDQ: # %bb.0: 6506; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 6507; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 6508; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [17,17,17,17,17,17,17,17] 6509; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 6510; AVX512VPOPCNTDQ-NEXT: retq 6511; 6512; AVX512VPOPCNTDQVL-LABEL: ult_17_v8i32: 6513; AVX512VPOPCNTDQVL: # %bb.0: 6514; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 6515; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 6516; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 6517; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 6518; AVX512VPOPCNTDQVL-NEXT: retq 6519; 6520; BITALG_NOVLX-LABEL: ult_17_v8i32: 6521; BITALG_NOVLX: # %bb.0: 6522; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 6523; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 6524; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 6525; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6526; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6527; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6528; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6529; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6530; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [17,17,17,17,17,17,17,17] 6531; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 6532; BITALG_NOVLX-NEXT: retq 6533; 6534; BITALG-LABEL: ult_17_v8i32: 6535; BITALG: # %bb.0: 6536; BITALG-NEXT: vpopcntb %ymm0, %ymm0 6537; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 6538; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6539; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6540; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6541; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6542; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6543; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 6544; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 6545; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 6546; BITALG-NEXT: retq 6547 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 6548 %3 = icmp ult <8 x i32> %2, <i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17> 6549 %4 = sext <8 x i1> %3 to <8 x i32> 6550 ret <8 x i32> %4 6551} 6552 6553define <8 x i32> @ugt_17_v8i32(<8 x i32> %0) { 6554; AVX1-LABEL: ugt_17_v8i32: 6555; AVX1: # %bb.0: 6556; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 6557; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 6558; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 6559; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 6560; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 6561; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 6562; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 6563; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 6564; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 6565; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 6566; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 6567; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 6568; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 6569; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 6570; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 6571; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 6572; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 6573; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 6574; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 6575; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 6576; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 6577; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 6578; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 6579; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 6580; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 6581; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 6582; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [17,17,17,17] 6583; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 6584; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 6585; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 6586; AVX1-NEXT: retq 6587; 6588; AVX2-LABEL: ugt_17_v8i32: 6589; AVX2: # %bb.0: 6590; AVX2-NEXT: vmovdqa {{.*#+}} 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] 6591; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 6592; AVX2-NEXT: vmovdqa {{.*#+}} 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] 6593; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 6594; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 6595; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 6596; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 6597; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 6598; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 6599; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6600; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6601; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6602; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6603; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6604; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [17,17,17,17,17,17,17,17] 6605; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 6606; AVX2-NEXT: retq 6607; 6608; AVX512VPOPCNTDQ-LABEL: ugt_17_v8i32: 6609; AVX512VPOPCNTDQ: # %bb.0: 6610; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 6611; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 6612; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [17,17,17,17,17,17,17,17] 6613; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 6614; AVX512VPOPCNTDQ-NEXT: retq 6615; 6616; AVX512VPOPCNTDQVL-LABEL: ugt_17_v8i32: 6617; AVX512VPOPCNTDQVL: # %bb.0: 6618; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 6619; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 6620; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 6621; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 6622; AVX512VPOPCNTDQVL-NEXT: retq 6623; 6624; BITALG_NOVLX-LABEL: ugt_17_v8i32: 6625; BITALG_NOVLX: # %bb.0: 6626; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 6627; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 6628; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 6629; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6630; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6631; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6632; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6633; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6634; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [17,17,17,17,17,17,17,17] 6635; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 6636; BITALG_NOVLX-NEXT: retq 6637; 6638; BITALG-LABEL: ugt_17_v8i32: 6639; BITALG: # %bb.0: 6640; BITALG-NEXT: vpopcntb %ymm0, %ymm0 6641; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 6642; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6643; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6644; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6645; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6646; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6647; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 6648; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 6649; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 6650; BITALG-NEXT: retq 6651 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 6652 %3 = icmp ugt <8 x i32> %2, <i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17> 6653 %4 = sext <8 x i1> %3 to <8 x i32> 6654 ret <8 x i32> %4 6655} 6656 6657define <8 x i32> @ult_18_v8i32(<8 x i32> %0) { 6658; AVX1-LABEL: ult_18_v8i32: 6659; AVX1: # %bb.0: 6660; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 6661; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 6662; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 6663; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 6664; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 6665; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 6666; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 6667; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 6668; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 6669; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 6670; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 6671; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 6672; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 6673; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 6674; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 6675; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 6676; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 6677; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 6678; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 6679; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 6680; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 6681; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 6682; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 6683; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 6684; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 6685; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 6686; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [18,18,18,18] 6687; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 6688; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 6689; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 6690; AVX1-NEXT: retq 6691; 6692; AVX2-LABEL: ult_18_v8i32: 6693; AVX2: # %bb.0: 6694; AVX2-NEXT: vmovdqa {{.*#+}} 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] 6695; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 6696; AVX2-NEXT: vmovdqa {{.*#+}} 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] 6697; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 6698; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 6699; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 6700; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 6701; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 6702; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 6703; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6704; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6705; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6706; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6707; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6708; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [18,18,18,18,18,18,18,18] 6709; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 6710; AVX2-NEXT: retq 6711; 6712; AVX512VPOPCNTDQ-LABEL: ult_18_v8i32: 6713; AVX512VPOPCNTDQ: # %bb.0: 6714; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 6715; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 6716; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [18,18,18,18,18,18,18,18] 6717; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 6718; AVX512VPOPCNTDQ-NEXT: retq 6719; 6720; AVX512VPOPCNTDQVL-LABEL: ult_18_v8i32: 6721; AVX512VPOPCNTDQVL: # %bb.0: 6722; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 6723; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 6724; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 6725; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 6726; AVX512VPOPCNTDQVL-NEXT: retq 6727; 6728; BITALG_NOVLX-LABEL: ult_18_v8i32: 6729; BITALG_NOVLX: # %bb.0: 6730; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 6731; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 6732; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 6733; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6734; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6735; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6736; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6737; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6738; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [18,18,18,18,18,18,18,18] 6739; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 6740; BITALG_NOVLX-NEXT: retq 6741; 6742; BITALG-LABEL: ult_18_v8i32: 6743; BITALG: # %bb.0: 6744; BITALG-NEXT: vpopcntb %ymm0, %ymm0 6745; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 6746; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6747; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6748; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6749; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6750; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6751; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 6752; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 6753; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 6754; BITALG-NEXT: retq 6755 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 6756 %3 = icmp ult <8 x i32> %2, <i32 18, i32 18, i32 18, i32 18, i32 18, i32 18, i32 18, i32 18> 6757 %4 = sext <8 x i1> %3 to <8 x i32> 6758 ret <8 x i32> %4 6759} 6760 6761define <8 x i32> @ugt_18_v8i32(<8 x i32> %0) { 6762; AVX1-LABEL: ugt_18_v8i32: 6763; AVX1: # %bb.0: 6764; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 6765; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 6766; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 6767; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 6768; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 6769; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 6770; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 6771; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 6772; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 6773; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 6774; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 6775; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 6776; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 6777; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 6778; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 6779; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 6780; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 6781; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 6782; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 6783; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 6784; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 6785; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 6786; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 6787; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 6788; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 6789; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 6790; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [18,18,18,18] 6791; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 6792; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 6793; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 6794; AVX1-NEXT: retq 6795; 6796; AVX2-LABEL: ugt_18_v8i32: 6797; AVX2: # %bb.0: 6798; AVX2-NEXT: vmovdqa {{.*#+}} 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] 6799; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 6800; AVX2-NEXT: vmovdqa {{.*#+}} 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] 6801; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 6802; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 6803; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 6804; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 6805; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 6806; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 6807; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6808; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6809; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6810; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6811; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6812; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [18,18,18,18,18,18,18,18] 6813; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 6814; AVX2-NEXT: retq 6815; 6816; AVX512VPOPCNTDQ-LABEL: ugt_18_v8i32: 6817; AVX512VPOPCNTDQ: # %bb.0: 6818; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 6819; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 6820; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [18,18,18,18,18,18,18,18] 6821; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 6822; AVX512VPOPCNTDQ-NEXT: retq 6823; 6824; AVX512VPOPCNTDQVL-LABEL: ugt_18_v8i32: 6825; AVX512VPOPCNTDQVL: # %bb.0: 6826; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 6827; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 6828; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 6829; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 6830; AVX512VPOPCNTDQVL-NEXT: retq 6831; 6832; BITALG_NOVLX-LABEL: ugt_18_v8i32: 6833; BITALG_NOVLX: # %bb.0: 6834; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 6835; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 6836; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 6837; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6838; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6839; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6840; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6841; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6842; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [18,18,18,18,18,18,18,18] 6843; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 6844; BITALG_NOVLX-NEXT: retq 6845; 6846; BITALG-LABEL: ugt_18_v8i32: 6847; BITALG: # %bb.0: 6848; BITALG-NEXT: vpopcntb %ymm0, %ymm0 6849; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 6850; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6851; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6852; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6853; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6854; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6855; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 6856; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 6857; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 6858; BITALG-NEXT: retq 6859 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 6860 %3 = icmp ugt <8 x i32> %2, <i32 18, i32 18, i32 18, i32 18, i32 18, i32 18, i32 18, i32 18> 6861 %4 = sext <8 x i1> %3 to <8 x i32> 6862 ret <8 x i32> %4 6863} 6864 6865define <8 x i32> @ult_19_v8i32(<8 x i32> %0) { 6866; AVX1-LABEL: ult_19_v8i32: 6867; AVX1: # %bb.0: 6868; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 6869; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 6870; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 6871; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 6872; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 6873; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 6874; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 6875; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 6876; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 6877; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 6878; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 6879; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 6880; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 6881; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 6882; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 6883; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 6884; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 6885; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 6886; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 6887; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 6888; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 6889; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 6890; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 6891; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 6892; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 6893; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 6894; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [19,19,19,19] 6895; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 6896; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 6897; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 6898; AVX1-NEXT: retq 6899; 6900; AVX2-LABEL: ult_19_v8i32: 6901; AVX2: # %bb.0: 6902; AVX2-NEXT: vmovdqa {{.*#+}} 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] 6903; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 6904; AVX2-NEXT: vmovdqa {{.*#+}} 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] 6905; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 6906; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 6907; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 6908; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 6909; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 6910; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 6911; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6912; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6913; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6914; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6915; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6916; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [19,19,19,19,19,19,19,19] 6917; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 6918; AVX2-NEXT: retq 6919; 6920; AVX512VPOPCNTDQ-LABEL: ult_19_v8i32: 6921; AVX512VPOPCNTDQ: # %bb.0: 6922; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 6923; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 6924; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [19,19,19,19,19,19,19,19] 6925; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 6926; AVX512VPOPCNTDQ-NEXT: retq 6927; 6928; AVX512VPOPCNTDQVL-LABEL: ult_19_v8i32: 6929; AVX512VPOPCNTDQVL: # %bb.0: 6930; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 6931; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 6932; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 6933; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 6934; AVX512VPOPCNTDQVL-NEXT: retq 6935; 6936; BITALG_NOVLX-LABEL: ult_19_v8i32: 6937; BITALG_NOVLX: # %bb.0: 6938; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 6939; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 6940; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 6941; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6942; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6943; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6944; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6945; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6946; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [19,19,19,19,19,19,19,19] 6947; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 6948; BITALG_NOVLX-NEXT: retq 6949; 6950; BITALG-LABEL: ult_19_v8i32: 6951; BITALG: # %bb.0: 6952; BITALG-NEXT: vpopcntb %ymm0, %ymm0 6953; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 6954; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 6955; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 6956; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 6957; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 6958; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 6959; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 6960; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 6961; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 6962; BITALG-NEXT: retq 6963 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 6964 %3 = icmp ult <8 x i32> %2, <i32 19, i32 19, i32 19, i32 19, i32 19, i32 19, i32 19, i32 19> 6965 %4 = sext <8 x i1> %3 to <8 x i32> 6966 ret <8 x i32> %4 6967} 6968 6969define <8 x i32> @ugt_19_v8i32(<8 x i32> %0) { 6970; AVX1-LABEL: ugt_19_v8i32: 6971; AVX1: # %bb.0: 6972; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 6973; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 6974; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 6975; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 6976; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 6977; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 6978; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 6979; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 6980; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 6981; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 6982; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 6983; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 6984; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 6985; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 6986; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 6987; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 6988; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 6989; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 6990; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 6991; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 6992; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 6993; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 6994; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 6995; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 6996; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 6997; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 6998; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [19,19,19,19] 6999; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 7000; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 7001; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 7002; AVX1-NEXT: retq 7003; 7004; AVX2-LABEL: ugt_19_v8i32: 7005; AVX2: # %bb.0: 7006; AVX2-NEXT: vmovdqa {{.*#+}} 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] 7007; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 7008; AVX2-NEXT: vmovdqa {{.*#+}} 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] 7009; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 7010; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 7011; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 7012; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 7013; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 7014; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 7015; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7016; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7017; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7018; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7019; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7020; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [19,19,19,19,19,19,19,19] 7021; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 7022; AVX2-NEXT: retq 7023; 7024; AVX512VPOPCNTDQ-LABEL: ugt_19_v8i32: 7025; AVX512VPOPCNTDQ: # %bb.0: 7026; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 7027; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 7028; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [19,19,19,19,19,19,19,19] 7029; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 7030; AVX512VPOPCNTDQ-NEXT: retq 7031; 7032; AVX512VPOPCNTDQVL-LABEL: ugt_19_v8i32: 7033; AVX512VPOPCNTDQVL: # %bb.0: 7034; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 7035; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 7036; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 7037; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 7038; AVX512VPOPCNTDQVL-NEXT: retq 7039; 7040; BITALG_NOVLX-LABEL: ugt_19_v8i32: 7041; BITALG_NOVLX: # %bb.0: 7042; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 7043; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 7044; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 7045; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7046; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7047; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7048; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7049; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7050; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [19,19,19,19,19,19,19,19] 7051; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 7052; BITALG_NOVLX-NEXT: retq 7053; 7054; BITALG-LABEL: ugt_19_v8i32: 7055; BITALG: # %bb.0: 7056; BITALG-NEXT: vpopcntb %ymm0, %ymm0 7057; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 7058; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7059; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7060; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7061; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7062; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7063; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 7064; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 7065; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 7066; BITALG-NEXT: retq 7067 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 7068 %3 = icmp ugt <8 x i32> %2, <i32 19, i32 19, i32 19, i32 19, i32 19, i32 19, i32 19, i32 19> 7069 %4 = sext <8 x i1> %3 to <8 x i32> 7070 ret <8 x i32> %4 7071} 7072 7073define <8 x i32> @ult_20_v8i32(<8 x i32> %0) { 7074; AVX1-LABEL: ult_20_v8i32: 7075; AVX1: # %bb.0: 7076; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 7077; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 7078; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 7079; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 7080; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 7081; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 7082; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 7083; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 7084; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 7085; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 7086; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 7087; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 7088; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 7089; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 7090; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 7091; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 7092; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 7093; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 7094; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 7095; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 7096; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 7097; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 7098; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 7099; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 7100; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 7101; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 7102; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [20,20,20,20] 7103; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 7104; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 7105; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 7106; AVX1-NEXT: retq 7107; 7108; AVX2-LABEL: ult_20_v8i32: 7109; AVX2: # %bb.0: 7110; AVX2-NEXT: vmovdqa {{.*#+}} 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] 7111; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 7112; AVX2-NEXT: vmovdqa {{.*#+}} 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] 7113; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 7114; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 7115; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 7116; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 7117; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 7118; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 7119; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7120; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7121; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7122; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7123; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7124; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [20,20,20,20,20,20,20,20] 7125; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 7126; AVX2-NEXT: retq 7127; 7128; AVX512VPOPCNTDQ-LABEL: ult_20_v8i32: 7129; AVX512VPOPCNTDQ: # %bb.0: 7130; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 7131; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 7132; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [20,20,20,20,20,20,20,20] 7133; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 7134; AVX512VPOPCNTDQ-NEXT: retq 7135; 7136; AVX512VPOPCNTDQVL-LABEL: ult_20_v8i32: 7137; AVX512VPOPCNTDQVL: # %bb.0: 7138; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 7139; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 7140; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 7141; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 7142; AVX512VPOPCNTDQVL-NEXT: retq 7143; 7144; BITALG_NOVLX-LABEL: ult_20_v8i32: 7145; BITALG_NOVLX: # %bb.0: 7146; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 7147; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 7148; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 7149; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7150; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7151; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7152; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7153; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7154; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [20,20,20,20,20,20,20,20] 7155; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 7156; BITALG_NOVLX-NEXT: retq 7157; 7158; BITALG-LABEL: ult_20_v8i32: 7159; BITALG: # %bb.0: 7160; BITALG-NEXT: vpopcntb %ymm0, %ymm0 7161; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 7162; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7163; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7164; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7165; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7166; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7167; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 7168; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 7169; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 7170; BITALG-NEXT: retq 7171 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 7172 %3 = icmp ult <8 x i32> %2, <i32 20, i32 20, i32 20, i32 20, i32 20, i32 20, i32 20, i32 20> 7173 %4 = sext <8 x i1> %3 to <8 x i32> 7174 ret <8 x i32> %4 7175} 7176 7177define <8 x i32> @ugt_20_v8i32(<8 x i32> %0) { 7178; AVX1-LABEL: ugt_20_v8i32: 7179; AVX1: # %bb.0: 7180; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 7181; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 7182; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 7183; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 7184; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 7185; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 7186; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 7187; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 7188; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 7189; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 7190; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 7191; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 7192; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 7193; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 7194; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 7195; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 7196; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 7197; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 7198; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 7199; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 7200; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 7201; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 7202; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 7203; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 7204; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 7205; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 7206; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [20,20,20,20] 7207; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 7208; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 7209; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 7210; AVX1-NEXT: retq 7211; 7212; AVX2-LABEL: ugt_20_v8i32: 7213; AVX2: # %bb.0: 7214; AVX2-NEXT: vmovdqa {{.*#+}} 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] 7215; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 7216; AVX2-NEXT: vmovdqa {{.*#+}} 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] 7217; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 7218; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 7219; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 7220; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 7221; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 7222; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 7223; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7224; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7225; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7226; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7227; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7228; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [20,20,20,20,20,20,20,20] 7229; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 7230; AVX2-NEXT: retq 7231; 7232; AVX512VPOPCNTDQ-LABEL: ugt_20_v8i32: 7233; AVX512VPOPCNTDQ: # %bb.0: 7234; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 7235; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 7236; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [20,20,20,20,20,20,20,20] 7237; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 7238; AVX512VPOPCNTDQ-NEXT: retq 7239; 7240; AVX512VPOPCNTDQVL-LABEL: ugt_20_v8i32: 7241; AVX512VPOPCNTDQVL: # %bb.0: 7242; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 7243; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 7244; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 7245; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 7246; AVX512VPOPCNTDQVL-NEXT: retq 7247; 7248; BITALG_NOVLX-LABEL: ugt_20_v8i32: 7249; BITALG_NOVLX: # %bb.0: 7250; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 7251; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 7252; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 7253; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7254; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7255; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7256; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7257; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7258; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [20,20,20,20,20,20,20,20] 7259; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 7260; BITALG_NOVLX-NEXT: retq 7261; 7262; BITALG-LABEL: ugt_20_v8i32: 7263; BITALG: # %bb.0: 7264; BITALG-NEXT: vpopcntb %ymm0, %ymm0 7265; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 7266; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7267; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7268; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7269; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7270; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7271; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 7272; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 7273; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 7274; BITALG-NEXT: retq 7275 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 7276 %3 = icmp ugt <8 x i32> %2, <i32 20, i32 20, i32 20, i32 20, i32 20, i32 20, i32 20, i32 20> 7277 %4 = sext <8 x i1> %3 to <8 x i32> 7278 ret <8 x i32> %4 7279} 7280 7281define <8 x i32> @ult_21_v8i32(<8 x i32> %0) { 7282; AVX1-LABEL: ult_21_v8i32: 7283; AVX1: # %bb.0: 7284; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 7285; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 7286; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 7287; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 7288; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 7289; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 7290; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 7291; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 7292; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 7293; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 7294; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 7295; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 7296; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 7297; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 7298; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 7299; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 7300; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 7301; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 7302; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 7303; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 7304; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 7305; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 7306; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 7307; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 7308; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 7309; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 7310; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [21,21,21,21] 7311; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 7312; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 7313; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 7314; AVX1-NEXT: retq 7315; 7316; AVX2-LABEL: ult_21_v8i32: 7317; AVX2: # %bb.0: 7318; AVX2-NEXT: vmovdqa {{.*#+}} 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] 7319; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 7320; AVX2-NEXT: vmovdqa {{.*#+}} 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] 7321; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 7322; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 7323; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 7324; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 7325; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 7326; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 7327; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7328; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7329; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7330; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7331; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7332; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [21,21,21,21,21,21,21,21] 7333; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 7334; AVX2-NEXT: retq 7335; 7336; AVX512VPOPCNTDQ-LABEL: ult_21_v8i32: 7337; AVX512VPOPCNTDQ: # %bb.0: 7338; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 7339; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 7340; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [21,21,21,21,21,21,21,21] 7341; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 7342; AVX512VPOPCNTDQ-NEXT: retq 7343; 7344; AVX512VPOPCNTDQVL-LABEL: ult_21_v8i32: 7345; AVX512VPOPCNTDQVL: # %bb.0: 7346; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 7347; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 7348; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 7349; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 7350; AVX512VPOPCNTDQVL-NEXT: retq 7351; 7352; BITALG_NOVLX-LABEL: ult_21_v8i32: 7353; BITALG_NOVLX: # %bb.0: 7354; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 7355; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 7356; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 7357; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7358; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7359; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7360; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7361; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7362; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [21,21,21,21,21,21,21,21] 7363; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 7364; BITALG_NOVLX-NEXT: retq 7365; 7366; BITALG-LABEL: ult_21_v8i32: 7367; BITALG: # %bb.0: 7368; BITALG-NEXT: vpopcntb %ymm0, %ymm0 7369; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 7370; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7371; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7372; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7373; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7374; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7375; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 7376; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 7377; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 7378; BITALG-NEXT: retq 7379 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 7380 %3 = icmp ult <8 x i32> %2, <i32 21, i32 21, i32 21, i32 21, i32 21, i32 21, i32 21, i32 21> 7381 %4 = sext <8 x i1> %3 to <8 x i32> 7382 ret <8 x i32> %4 7383} 7384 7385define <8 x i32> @ugt_21_v8i32(<8 x i32> %0) { 7386; AVX1-LABEL: ugt_21_v8i32: 7387; AVX1: # %bb.0: 7388; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 7389; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 7390; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 7391; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 7392; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 7393; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 7394; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 7395; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 7396; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 7397; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 7398; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 7399; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 7400; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 7401; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 7402; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 7403; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 7404; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 7405; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 7406; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 7407; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 7408; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 7409; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 7410; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 7411; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 7412; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 7413; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 7414; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [21,21,21,21] 7415; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 7416; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 7417; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 7418; AVX1-NEXT: retq 7419; 7420; AVX2-LABEL: ugt_21_v8i32: 7421; AVX2: # %bb.0: 7422; AVX2-NEXT: vmovdqa {{.*#+}} 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] 7423; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 7424; AVX2-NEXT: vmovdqa {{.*#+}} 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] 7425; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 7426; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 7427; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 7428; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 7429; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 7430; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 7431; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7432; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7433; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7434; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7435; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7436; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [21,21,21,21,21,21,21,21] 7437; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 7438; AVX2-NEXT: retq 7439; 7440; AVX512VPOPCNTDQ-LABEL: ugt_21_v8i32: 7441; AVX512VPOPCNTDQ: # %bb.0: 7442; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 7443; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 7444; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [21,21,21,21,21,21,21,21] 7445; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 7446; AVX512VPOPCNTDQ-NEXT: retq 7447; 7448; AVX512VPOPCNTDQVL-LABEL: ugt_21_v8i32: 7449; AVX512VPOPCNTDQVL: # %bb.0: 7450; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 7451; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 7452; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 7453; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 7454; AVX512VPOPCNTDQVL-NEXT: retq 7455; 7456; BITALG_NOVLX-LABEL: ugt_21_v8i32: 7457; BITALG_NOVLX: # %bb.0: 7458; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 7459; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 7460; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 7461; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7462; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7463; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7464; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7465; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7466; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [21,21,21,21,21,21,21,21] 7467; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 7468; BITALG_NOVLX-NEXT: retq 7469; 7470; BITALG-LABEL: ugt_21_v8i32: 7471; BITALG: # %bb.0: 7472; BITALG-NEXT: vpopcntb %ymm0, %ymm0 7473; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 7474; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7475; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7476; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7477; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7478; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7479; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 7480; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 7481; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 7482; BITALG-NEXT: retq 7483 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 7484 %3 = icmp ugt <8 x i32> %2, <i32 21, i32 21, i32 21, i32 21, i32 21, i32 21, i32 21, i32 21> 7485 %4 = sext <8 x i1> %3 to <8 x i32> 7486 ret <8 x i32> %4 7487} 7488 7489define <8 x i32> @ult_22_v8i32(<8 x i32> %0) { 7490; AVX1-LABEL: ult_22_v8i32: 7491; AVX1: # %bb.0: 7492; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 7493; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 7494; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 7495; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 7496; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 7497; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 7498; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 7499; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 7500; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 7501; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 7502; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 7503; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 7504; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 7505; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 7506; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 7507; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 7508; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 7509; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 7510; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 7511; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 7512; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 7513; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 7514; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 7515; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 7516; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 7517; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 7518; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [22,22,22,22] 7519; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 7520; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 7521; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 7522; AVX1-NEXT: retq 7523; 7524; AVX2-LABEL: ult_22_v8i32: 7525; AVX2: # %bb.0: 7526; AVX2-NEXT: vmovdqa {{.*#+}} 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] 7527; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 7528; AVX2-NEXT: vmovdqa {{.*#+}} 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] 7529; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 7530; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 7531; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 7532; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 7533; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 7534; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 7535; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7536; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7537; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7538; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7539; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7540; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [22,22,22,22,22,22,22,22] 7541; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 7542; AVX2-NEXT: retq 7543; 7544; AVX512VPOPCNTDQ-LABEL: ult_22_v8i32: 7545; AVX512VPOPCNTDQ: # %bb.0: 7546; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 7547; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 7548; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [22,22,22,22,22,22,22,22] 7549; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 7550; AVX512VPOPCNTDQ-NEXT: retq 7551; 7552; AVX512VPOPCNTDQVL-LABEL: ult_22_v8i32: 7553; AVX512VPOPCNTDQVL: # %bb.0: 7554; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 7555; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 7556; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 7557; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 7558; AVX512VPOPCNTDQVL-NEXT: retq 7559; 7560; BITALG_NOVLX-LABEL: ult_22_v8i32: 7561; BITALG_NOVLX: # %bb.0: 7562; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 7563; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 7564; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 7565; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7566; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7567; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7568; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7569; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7570; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [22,22,22,22,22,22,22,22] 7571; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 7572; BITALG_NOVLX-NEXT: retq 7573; 7574; BITALG-LABEL: ult_22_v8i32: 7575; BITALG: # %bb.0: 7576; BITALG-NEXT: vpopcntb %ymm0, %ymm0 7577; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 7578; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7579; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7580; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7581; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7582; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7583; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 7584; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 7585; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 7586; BITALG-NEXT: retq 7587 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 7588 %3 = icmp ult <8 x i32> %2, <i32 22, i32 22, i32 22, i32 22, i32 22, i32 22, i32 22, i32 22> 7589 %4 = sext <8 x i1> %3 to <8 x i32> 7590 ret <8 x i32> %4 7591} 7592 7593define <8 x i32> @ugt_22_v8i32(<8 x i32> %0) { 7594; AVX1-LABEL: ugt_22_v8i32: 7595; AVX1: # %bb.0: 7596; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 7597; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 7598; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 7599; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 7600; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 7601; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 7602; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 7603; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 7604; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 7605; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 7606; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 7607; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 7608; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 7609; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 7610; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 7611; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 7612; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 7613; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 7614; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 7615; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 7616; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 7617; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 7618; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 7619; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 7620; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 7621; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 7622; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [22,22,22,22] 7623; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 7624; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 7625; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 7626; AVX1-NEXT: retq 7627; 7628; AVX2-LABEL: ugt_22_v8i32: 7629; AVX2: # %bb.0: 7630; AVX2-NEXT: vmovdqa {{.*#+}} 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] 7631; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 7632; AVX2-NEXT: vmovdqa {{.*#+}} 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] 7633; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 7634; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 7635; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 7636; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 7637; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 7638; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 7639; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7640; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7641; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7642; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7643; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7644; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [22,22,22,22,22,22,22,22] 7645; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 7646; AVX2-NEXT: retq 7647; 7648; AVX512VPOPCNTDQ-LABEL: ugt_22_v8i32: 7649; AVX512VPOPCNTDQ: # %bb.0: 7650; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 7651; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 7652; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [22,22,22,22,22,22,22,22] 7653; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 7654; AVX512VPOPCNTDQ-NEXT: retq 7655; 7656; AVX512VPOPCNTDQVL-LABEL: ugt_22_v8i32: 7657; AVX512VPOPCNTDQVL: # %bb.0: 7658; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 7659; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 7660; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 7661; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 7662; AVX512VPOPCNTDQVL-NEXT: retq 7663; 7664; BITALG_NOVLX-LABEL: ugt_22_v8i32: 7665; BITALG_NOVLX: # %bb.0: 7666; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 7667; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 7668; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 7669; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7670; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7671; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7672; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7673; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7674; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [22,22,22,22,22,22,22,22] 7675; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 7676; BITALG_NOVLX-NEXT: retq 7677; 7678; BITALG-LABEL: ugt_22_v8i32: 7679; BITALG: # %bb.0: 7680; BITALG-NEXT: vpopcntb %ymm0, %ymm0 7681; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 7682; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7683; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7684; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7685; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7686; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7687; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 7688; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 7689; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 7690; BITALG-NEXT: retq 7691 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 7692 %3 = icmp ugt <8 x i32> %2, <i32 22, i32 22, i32 22, i32 22, i32 22, i32 22, i32 22, i32 22> 7693 %4 = sext <8 x i1> %3 to <8 x i32> 7694 ret <8 x i32> %4 7695} 7696 7697define <8 x i32> @ult_23_v8i32(<8 x i32> %0) { 7698; AVX1-LABEL: ult_23_v8i32: 7699; AVX1: # %bb.0: 7700; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 7701; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 7702; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 7703; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 7704; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 7705; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 7706; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 7707; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 7708; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 7709; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 7710; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 7711; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 7712; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 7713; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 7714; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 7715; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 7716; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 7717; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 7718; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 7719; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 7720; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 7721; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 7722; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 7723; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 7724; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 7725; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 7726; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [23,23,23,23] 7727; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 7728; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 7729; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 7730; AVX1-NEXT: retq 7731; 7732; AVX2-LABEL: ult_23_v8i32: 7733; AVX2: # %bb.0: 7734; AVX2-NEXT: vmovdqa {{.*#+}} 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] 7735; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 7736; AVX2-NEXT: vmovdqa {{.*#+}} 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] 7737; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 7738; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 7739; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 7740; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 7741; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 7742; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 7743; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7744; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7745; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7746; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7747; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7748; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [23,23,23,23,23,23,23,23] 7749; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 7750; AVX2-NEXT: retq 7751; 7752; AVX512VPOPCNTDQ-LABEL: ult_23_v8i32: 7753; AVX512VPOPCNTDQ: # %bb.0: 7754; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 7755; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 7756; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [23,23,23,23,23,23,23,23] 7757; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 7758; AVX512VPOPCNTDQ-NEXT: retq 7759; 7760; AVX512VPOPCNTDQVL-LABEL: ult_23_v8i32: 7761; AVX512VPOPCNTDQVL: # %bb.0: 7762; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 7763; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 7764; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 7765; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 7766; AVX512VPOPCNTDQVL-NEXT: retq 7767; 7768; BITALG_NOVLX-LABEL: ult_23_v8i32: 7769; BITALG_NOVLX: # %bb.0: 7770; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 7771; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 7772; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 7773; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7774; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7775; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7776; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7777; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7778; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [23,23,23,23,23,23,23,23] 7779; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 7780; BITALG_NOVLX-NEXT: retq 7781; 7782; BITALG-LABEL: ult_23_v8i32: 7783; BITALG: # %bb.0: 7784; BITALG-NEXT: vpopcntb %ymm0, %ymm0 7785; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 7786; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7787; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7788; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7789; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7790; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7791; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 7792; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 7793; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 7794; BITALG-NEXT: retq 7795 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 7796 %3 = icmp ult <8 x i32> %2, <i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23> 7797 %4 = sext <8 x i1> %3 to <8 x i32> 7798 ret <8 x i32> %4 7799} 7800 7801define <8 x i32> @ugt_23_v8i32(<8 x i32> %0) { 7802; AVX1-LABEL: ugt_23_v8i32: 7803; AVX1: # %bb.0: 7804; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 7805; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 7806; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 7807; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 7808; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 7809; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 7810; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 7811; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 7812; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 7813; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 7814; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 7815; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 7816; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 7817; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 7818; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 7819; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 7820; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 7821; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 7822; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 7823; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 7824; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 7825; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 7826; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 7827; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 7828; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 7829; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 7830; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [23,23,23,23] 7831; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 7832; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 7833; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 7834; AVX1-NEXT: retq 7835; 7836; AVX2-LABEL: ugt_23_v8i32: 7837; AVX2: # %bb.0: 7838; AVX2-NEXT: vmovdqa {{.*#+}} 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] 7839; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 7840; AVX2-NEXT: vmovdqa {{.*#+}} 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] 7841; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 7842; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 7843; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 7844; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 7845; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 7846; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 7847; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7848; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7849; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7850; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7851; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7852; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [23,23,23,23,23,23,23,23] 7853; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 7854; AVX2-NEXT: retq 7855; 7856; AVX512VPOPCNTDQ-LABEL: ugt_23_v8i32: 7857; AVX512VPOPCNTDQ: # %bb.0: 7858; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 7859; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 7860; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [23,23,23,23,23,23,23,23] 7861; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 7862; AVX512VPOPCNTDQ-NEXT: retq 7863; 7864; AVX512VPOPCNTDQVL-LABEL: ugt_23_v8i32: 7865; AVX512VPOPCNTDQVL: # %bb.0: 7866; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 7867; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 7868; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 7869; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 7870; AVX512VPOPCNTDQVL-NEXT: retq 7871; 7872; BITALG_NOVLX-LABEL: ugt_23_v8i32: 7873; BITALG_NOVLX: # %bb.0: 7874; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 7875; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 7876; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 7877; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7878; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7879; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7880; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7881; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7882; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [23,23,23,23,23,23,23,23] 7883; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 7884; BITALG_NOVLX-NEXT: retq 7885; 7886; BITALG-LABEL: ugt_23_v8i32: 7887; BITALG: # %bb.0: 7888; BITALG-NEXT: vpopcntb %ymm0, %ymm0 7889; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 7890; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7891; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7892; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7893; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7894; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7895; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 7896; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 7897; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 7898; BITALG-NEXT: retq 7899 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 7900 %3 = icmp ugt <8 x i32> %2, <i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23> 7901 %4 = sext <8 x i1> %3 to <8 x i32> 7902 ret <8 x i32> %4 7903} 7904 7905define <8 x i32> @ult_24_v8i32(<8 x i32> %0) { 7906; AVX1-LABEL: ult_24_v8i32: 7907; AVX1: # %bb.0: 7908; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 7909; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 7910; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 7911; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 7912; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 7913; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 7914; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 7915; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 7916; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 7917; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 7918; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 7919; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 7920; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 7921; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 7922; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 7923; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 7924; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 7925; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 7926; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 7927; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 7928; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 7929; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 7930; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 7931; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 7932; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 7933; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 7934; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [24,24,24,24] 7935; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 7936; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 7937; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 7938; AVX1-NEXT: retq 7939; 7940; AVX2-LABEL: ult_24_v8i32: 7941; AVX2: # %bb.0: 7942; AVX2-NEXT: vmovdqa {{.*#+}} 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] 7943; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 7944; AVX2-NEXT: vmovdqa {{.*#+}} 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] 7945; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 7946; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 7947; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 7948; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 7949; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 7950; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 7951; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7952; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7953; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7954; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7955; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7956; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [24,24,24,24,24,24,24,24] 7957; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 7958; AVX2-NEXT: retq 7959; 7960; AVX512VPOPCNTDQ-LABEL: ult_24_v8i32: 7961; AVX512VPOPCNTDQ: # %bb.0: 7962; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 7963; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 7964; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [24,24,24,24,24,24,24,24] 7965; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 7966; AVX512VPOPCNTDQ-NEXT: retq 7967; 7968; AVX512VPOPCNTDQVL-LABEL: ult_24_v8i32: 7969; AVX512VPOPCNTDQVL: # %bb.0: 7970; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 7971; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 7972; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 7973; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 7974; AVX512VPOPCNTDQVL-NEXT: retq 7975; 7976; BITALG_NOVLX-LABEL: ult_24_v8i32: 7977; BITALG_NOVLX: # %bb.0: 7978; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 7979; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 7980; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 7981; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7982; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7983; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7984; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7985; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7986; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [24,24,24,24,24,24,24,24] 7987; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 7988; BITALG_NOVLX-NEXT: retq 7989; 7990; BITALG-LABEL: ult_24_v8i32: 7991; BITALG: # %bb.0: 7992; BITALG-NEXT: vpopcntb %ymm0, %ymm0 7993; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 7994; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 7995; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 7996; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 7997; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 7998; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 7999; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 8000; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 8001; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 8002; BITALG-NEXT: retq 8003 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 8004 %3 = icmp ult <8 x i32> %2, <i32 24, i32 24, i32 24, i32 24, i32 24, i32 24, i32 24, i32 24> 8005 %4 = sext <8 x i1> %3 to <8 x i32> 8006 ret <8 x i32> %4 8007} 8008 8009define <8 x i32> @ugt_24_v8i32(<8 x i32> %0) { 8010; AVX1-LABEL: ugt_24_v8i32: 8011; AVX1: # %bb.0: 8012; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 8013; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 8014; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 8015; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 8016; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 8017; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 8018; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 8019; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 8020; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 8021; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 8022; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 8023; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 8024; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 8025; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 8026; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 8027; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 8028; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 8029; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 8030; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 8031; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 8032; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 8033; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 8034; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 8035; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 8036; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 8037; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 8038; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [24,24,24,24] 8039; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 8040; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 8041; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 8042; AVX1-NEXT: retq 8043; 8044; AVX2-LABEL: ugt_24_v8i32: 8045; AVX2: # %bb.0: 8046; AVX2-NEXT: vmovdqa {{.*#+}} 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] 8047; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 8048; AVX2-NEXT: vmovdqa {{.*#+}} 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] 8049; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 8050; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 8051; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 8052; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 8053; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 8054; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 8055; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8056; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8057; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8058; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8059; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8060; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [24,24,24,24,24,24,24,24] 8061; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 8062; AVX2-NEXT: retq 8063; 8064; AVX512VPOPCNTDQ-LABEL: ugt_24_v8i32: 8065; AVX512VPOPCNTDQ: # %bb.0: 8066; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8067; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 8068; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [24,24,24,24,24,24,24,24] 8069; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 8070; AVX512VPOPCNTDQ-NEXT: retq 8071; 8072; AVX512VPOPCNTDQVL-LABEL: ugt_24_v8i32: 8073; AVX512VPOPCNTDQVL: # %bb.0: 8074; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 8075; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 8076; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 8077; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 8078; AVX512VPOPCNTDQVL-NEXT: retq 8079; 8080; BITALG_NOVLX-LABEL: ugt_24_v8i32: 8081; BITALG_NOVLX: # %bb.0: 8082; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8083; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 8084; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 8085; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8086; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8087; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8088; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8089; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8090; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [24,24,24,24,24,24,24,24] 8091; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 8092; BITALG_NOVLX-NEXT: retq 8093; 8094; BITALG-LABEL: ugt_24_v8i32: 8095; BITALG: # %bb.0: 8096; BITALG-NEXT: vpopcntb %ymm0, %ymm0 8097; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 8098; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8099; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8100; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8101; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8102; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8103; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 8104; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 8105; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 8106; BITALG-NEXT: retq 8107 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 8108 %3 = icmp ugt <8 x i32> %2, <i32 24, i32 24, i32 24, i32 24, i32 24, i32 24, i32 24, i32 24> 8109 %4 = sext <8 x i1> %3 to <8 x i32> 8110 ret <8 x i32> %4 8111} 8112 8113define <8 x i32> @ult_25_v8i32(<8 x i32> %0) { 8114; AVX1-LABEL: ult_25_v8i32: 8115; AVX1: # %bb.0: 8116; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 8117; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 8118; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 8119; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 8120; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 8121; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 8122; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 8123; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 8124; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 8125; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 8126; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 8127; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 8128; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 8129; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 8130; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 8131; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 8132; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 8133; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 8134; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 8135; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 8136; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 8137; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 8138; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 8139; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 8140; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 8141; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 8142; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [25,25,25,25] 8143; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 8144; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 8145; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 8146; AVX1-NEXT: retq 8147; 8148; AVX2-LABEL: ult_25_v8i32: 8149; AVX2: # %bb.0: 8150; AVX2-NEXT: vmovdqa {{.*#+}} 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] 8151; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 8152; AVX2-NEXT: vmovdqa {{.*#+}} 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] 8153; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 8154; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 8155; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 8156; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 8157; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 8158; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 8159; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8160; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8161; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8162; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8163; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8164; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [25,25,25,25,25,25,25,25] 8165; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 8166; AVX2-NEXT: retq 8167; 8168; AVX512VPOPCNTDQ-LABEL: ult_25_v8i32: 8169; AVX512VPOPCNTDQ: # %bb.0: 8170; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8171; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 8172; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [25,25,25,25,25,25,25,25] 8173; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 8174; AVX512VPOPCNTDQ-NEXT: retq 8175; 8176; AVX512VPOPCNTDQVL-LABEL: ult_25_v8i32: 8177; AVX512VPOPCNTDQVL: # %bb.0: 8178; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 8179; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 8180; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 8181; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 8182; AVX512VPOPCNTDQVL-NEXT: retq 8183; 8184; BITALG_NOVLX-LABEL: ult_25_v8i32: 8185; BITALG_NOVLX: # %bb.0: 8186; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8187; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 8188; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 8189; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8190; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8191; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8192; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8193; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8194; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [25,25,25,25,25,25,25,25] 8195; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 8196; BITALG_NOVLX-NEXT: retq 8197; 8198; BITALG-LABEL: ult_25_v8i32: 8199; BITALG: # %bb.0: 8200; BITALG-NEXT: vpopcntb %ymm0, %ymm0 8201; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 8202; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8203; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8204; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8205; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8206; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8207; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 8208; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 8209; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 8210; BITALG-NEXT: retq 8211 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 8212 %3 = icmp ult <8 x i32> %2, <i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25> 8213 %4 = sext <8 x i1> %3 to <8 x i32> 8214 ret <8 x i32> %4 8215} 8216 8217define <8 x i32> @ugt_25_v8i32(<8 x i32> %0) { 8218; AVX1-LABEL: ugt_25_v8i32: 8219; AVX1: # %bb.0: 8220; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 8221; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 8222; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 8223; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 8224; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 8225; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 8226; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 8227; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 8228; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 8229; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 8230; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 8231; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 8232; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 8233; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 8234; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 8235; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 8236; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 8237; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 8238; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 8239; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 8240; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 8241; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 8242; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 8243; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 8244; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 8245; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 8246; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [25,25,25,25] 8247; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 8248; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 8249; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 8250; AVX1-NEXT: retq 8251; 8252; AVX2-LABEL: ugt_25_v8i32: 8253; AVX2: # %bb.0: 8254; AVX2-NEXT: vmovdqa {{.*#+}} 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] 8255; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 8256; AVX2-NEXT: vmovdqa {{.*#+}} 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] 8257; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 8258; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 8259; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 8260; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 8261; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 8262; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 8263; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8264; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8265; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8266; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8267; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8268; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [25,25,25,25,25,25,25,25] 8269; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 8270; AVX2-NEXT: retq 8271; 8272; AVX512VPOPCNTDQ-LABEL: ugt_25_v8i32: 8273; AVX512VPOPCNTDQ: # %bb.0: 8274; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8275; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 8276; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [25,25,25,25,25,25,25,25] 8277; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 8278; AVX512VPOPCNTDQ-NEXT: retq 8279; 8280; AVX512VPOPCNTDQVL-LABEL: ugt_25_v8i32: 8281; AVX512VPOPCNTDQVL: # %bb.0: 8282; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 8283; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 8284; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 8285; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 8286; AVX512VPOPCNTDQVL-NEXT: retq 8287; 8288; BITALG_NOVLX-LABEL: ugt_25_v8i32: 8289; BITALG_NOVLX: # %bb.0: 8290; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8291; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 8292; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 8293; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8294; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8295; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8296; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8297; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8298; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [25,25,25,25,25,25,25,25] 8299; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 8300; BITALG_NOVLX-NEXT: retq 8301; 8302; BITALG-LABEL: ugt_25_v8i32: 8303; BITALG: # %bb.0: 8304; BITALG-NEXT: vpopcntb %ymm0, %ymm0 8305; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 8306; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8307; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8308; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8309; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8310; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8311; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 8312; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 8313; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 8314; BITALG-NEXT: retq 8315 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 8316 %3 = icmp ugt <8 x i32> %2, <i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25> 8317 %4 = sext <8 x i1> %3 to <8 x i32> 8318 ret <8 x i32> %4 8319} 8320 8321define <8 x i32> @ult_26_v8i32(<8 x i32> %0) { 8322; AVX1-LABEL: ult_26_v8i32: 8323; AVX1: # %bb.0: 8324; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 8325; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 8326; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 8327; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 8328; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 8329; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 8330; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 8331; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 8332; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 8333; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 8334; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 8335; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 8336; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 8337; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 8338; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 8339; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 8340; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 8341; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 8342; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 8343; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 8344; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 8345; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 8346; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 8347; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 8348; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 8349; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 8350; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [26,26,26,26] 8351; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 8352; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 8353; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 8354; AVX1-NEXT: retq 8355; 8356; AVX2-LABEL: ult_26_v8i32: 8357; AVX2: # %bb.0: 8358; AVX2-NEXT: vmovdqa {{.*#+}} 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] 8359; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 8360; AVX2-NEXT: vmovdqa {{.*#+}} 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] 8361; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 8362; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 8363; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 8364; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 8365; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 8366; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 8367; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8368; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8369; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8370; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8371; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8372; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [26,26,26,26,26,26,26,26] 8373; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 8374; AVX2-NEXT: retq 8375; 8376; AVX512VPOPCNTDQ-LABEL: ult_26_v8i32: 8377; AVX512VPOPCNTDQ: # %bb.0: 8378; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8379; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 8380; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [26,26,26,26,26,26,26,26] 8381; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 8382; AVX512VPOPCNTDQ-NEXT: retq 8383; 8384; AVX512VPOPCNTDQVL-LABEL: ult_26_v8i32: 8385; AVX512VPOPCNTDQVL: # %bb.0: 8386; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 8387; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 8388; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 8389; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 8390; AVX512VPOPCNTDQVL-NEXT: retq 8391; 8392; BITALG_NOVLX-LABEL: ult_26_v8i32: 8393; BITALG_NOVLX: # %bb.0: 8394; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8395; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 8396; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 8397; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8398; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8399; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8400; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8401; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8402; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [26,26,26,26,26,26,26,26] 8403; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 8404; BITALG_NOVLX-NEXT: retq 8405; 8406; BITALG-LABEL: ult_26_v8i32: 8407; BITALG: # %bb.0: 8408; BITALG-NEXT: vpopcntb %ymm0, %ymm0 8409; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 8410; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8411; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8412; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8413; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8414; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8415; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 8416; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 8417; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 8418; BITALG-NEXT: retq 8419 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 8420 %3 = icmp ult <8 x i32> %2, <i32 26, i32 26, i32 26, i32 26, i32 26, i32 26, i32 26, i32 26> 8421 %4 = sext <8 x i1> %3 to <8 x i32> 8422 ret <8 x i32> %4 8423} 8424 8425define <8 x i32> @ugt_26_v8i32(<8 x i32> %0) { 8426; AVX1-LABEL: ugt_26_v8i32: 8427; AVX1: # %bb.0: 8428; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 8429; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 8430; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 8431; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 8432; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 8433; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 8434; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 8435; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 8436; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 8437; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 8438; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 8439; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 8440; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 8441; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 8442; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 8443; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 8444; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 8445; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 8446; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 8447; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 8448; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 8449; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 8450; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 8451; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 8452; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 8453; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 8454; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [26,26,26,26] 8455; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 8456; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 8457; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 8458; AVX1-NEXT: retq 8459; 8460; AVX2-LABEL: ugt_26_v8i32: 8461; AVX2: # %bb.0: 8462; AVX2-NEXT: vmovdqa {{.*#+}} 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] 8463; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 8464; AVX2-NEXT: vmovdqa {{.*#+}} 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] 8465; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 8466; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 8467; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 8468; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 8469; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 8470; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 8471; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8472; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8473; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8474; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8475; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8476; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [26,26,26,26,26,26,26,26] 8477; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 8478; AVX2-NEXT: retq 8479; 8480; AVX512VPOPCNTDQ-LABEL: ugt_26_v8i32: 8481; AVX512VPOPCNTDQ: # %bb.0: 8482; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8483; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 8484; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [26,26,26,26,26,26,26,26] 8485; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 8486; AVX512VPOPCNTDQ-NEXT: retq 8487; 8488; AVX512VPOPCNTDQVL-LABEL: ugt_26_v8i32: 8489; AVX512VPOPCNTDQVL: # %bb.0: 8490; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 8491; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 8492; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 8493; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 8494; AVX512VPOPCNTDQVL-NEXT: retq 8495; 8496; BITALG_NOVLX-LABEL: ugt_26_v8i32: 8497; BITALG_NOVLX: # %bb.0: 8498; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8499; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 8500; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 8501; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8502; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8503; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8504; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8505; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8506; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [26,26,26,26,26,26,26,26] 8507; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 8508; BITALG_NOVLX-NEXT: retq 8509; 8510; BITALG-LABEL: ugt_26_v8i32: 8511; BITALG: # %bb.0: 8512; BITALG-NEXT: vpopcntb %ymm0, %ymm0 8513; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 8514; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8515; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8516; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8517; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8518; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8519; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 8520; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 8521; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 8522; BITALG-NEXT: retq 8523 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 8524 %3 = icmp ugt <8 x i32> %2, <i32 26, i32 26, i32 26, i32 26, i32 26, i32 26, i32 26, i32 26> 8525 %4 = sext <8 x i1> %3 to <8 x i32> 8526 ret <8 x i32> %4 8527} 8528 8529define <8 x i32> @ult_27_v8i32(<8 x i32> %0) { 8530; AVX1-LABEL: ult_27_v8i32: 8531; AVX1: # %bb.0: 8532; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 8533; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 8534; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 8535; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 8536; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 8537; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 8538; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 8539; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 8540; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 8541; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 8542; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 8543; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 8544; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 8545; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 8546; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 8547; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 8548; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 8549; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 8550; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 8551; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 8552; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 8553; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 8554; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 8555; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 8556; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 8557; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 8558; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [27,27,27,27] 8559; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 8560; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 8561; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 8562; AVX1-NEXT: retq 8563; 8564; AVX2-LABEL: ult_27_v8i32: 8565; AVX2: # %bb.0: 8566; AVX2-NEXT: vmovdqa {{.*#+}} 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] 8567; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 8568; AVX2-NEXT: vmovdqa {{.*#+}} 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] 8569; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 8570; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 8571; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 8572; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 8573; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 8574; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 8575; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8576; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8577; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8578; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8579; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8580; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [27,27,27,27,27,27,27,27] 8581; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 8582; AVX2-NEXT: retq 8583; 8584; AVX512VPOPCNTDQ-LABEL: ult_27_v8i32: 8585; AVX512VPOPCNTDQ: # %bb.0: 8586; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8587; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 8588; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [27,27,27,27,27,27,27,27] 8589; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 8590; AVX512VPOPCNTDQ-NEXT: retq 8591; 8592; AVX512VPOPCNTDQVL-LABEL: ult_27_v8i32: 8593; AVX512VPOPCNTDQVL: # %bb.0: 8594; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 8595; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 8596; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 8597; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 8598; AVX512VPOPCNTDQVL-NEXT: retq 8599; 8600; BITALG_NOVLX-LABEL: ult_27_v8i32: 8601; BITALG_NOVLX: # %bb.0: 8602; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8603; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 8604; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 8605; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8606; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8607; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8608; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8609; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8610; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [27,27,27,27,27,27,27,27] 8611; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 8612; BITALG_NOVLX-NEXT: retq 8613; 8614; BITALG-LABEL: ult_27_v8i32: 8615; BITALG: # %bb.0: 8616; BITALG-NEXT: vpopcntb %ymm0, %ymm0 8617; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 8618; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8619; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8620; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8621; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8622; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8623; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 8624; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 8625; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 8626; BITALG-NEXT: retq 8627 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 8628 %3 = icmp ult <8 x i32> %2, <i32 27, i32 27, i32 27, i32 27, i32 27, i32 27, i32 27, i32 27> 8629 %4 = sext <8 x i1> %3 to <8 x i32> 8630 ret <8 x i32> %4 8631} 8632 8633define <8 x i32> @ugt_27_v8i32(<8 x i32> %0) { 8634; AVX1-LABEL: ugt_27_v8i32: 8635; AVX1: # %bb.0: 8636; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 8637; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 8638; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 8639; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 8640; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 8641; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 8642; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 8643; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 8644; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 8645; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 8646; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 8647; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 8648; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 8649; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 8650; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 8651; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 8652; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 8653; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 8654; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 8655; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 8656; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 8657; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 8658; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 8659; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 8660; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 8661; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 8662; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [27,27,27,27] 8663; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 8664; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 8665; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 8666; AVX1-NEXT: retq 8667; 8668; AVX2-LABEL: ugt_27_v8i32: 8669; AVX2: # %bb.0: 8670; AVX2-NEXT: vmovdqa {{.*#+}} 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] 8671; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 8672; AVX2-NEXT: vmovdqa {{.*#+}} 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] 8673; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 8674; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 8675; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 8676; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 8677; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 8678; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 8679; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8680; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8681; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8682; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8683; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8684; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [27,27,27,27,27,27,27,27] 8685; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 8686; AVX2-NEXT: retq 8687; 8688; AVX512VPOPCNTDQ-LABEL: ugt_27_v8i32: 8689; AVX512VPOPCNTDQ: # %bb.0: 8690; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8691; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 8692; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [27,27,27,27,27,27,27,27] 8693; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 8694; AVX512VPOPCNTDQ-NEXT: retq 8695; 8696; AVX512VPOPCNTDQVL-LABEL: ugt_27_v8i32: 8697; AVX512VPOPCNTDQVL: # %bb.0: 8698; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 8699; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 8700; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 8701; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 8702; AVX512VPOPCNTDQVL-NEXT: retq 8703; 8704; BITALG_NOVLX-LABEL: ugt_27_v8i32: 8705; BITALG_NOVLX: # %bb.0: 8706; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8707; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 8708; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 8709; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8710; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8711; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8712; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8713; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8714; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [27,27,27,27,27,27,27,27] 8715; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 8716; BITALG_NOVLX-NEXT: retq 8717; 8718; BITALG-LABEL: ugt_27_v8i32: 8719; BITALG: # %bb.0: 8720; BITALG-NEXT: vpopcntb %ymm0, %ymm0 8721; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 8722; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8723; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8724; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8725; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8726; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8727; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 8728; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 8729; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 8730; BITALG-NEXT: retq 8731 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 8732 %3 = icmp ugt <8 x i32> %2, <i32 27, i32 27, i32 27, i32 27, i32 27, i32 27, i32 27, i32 27> 8733 %4 = sext <8 x i1> %3 to <8 x i32> 8734 ret <8 x i32> %4 8735} 8736 8737define <8 x i32> @ult_28_v8i32(<8 x i32> %0) { 8738; AVX1-LABEL: ult_28_v8i32: 8739; AVX1: # %bb.0: 8740; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 8741; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 8742; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 8743; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 8744; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 8745; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 8746; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 8747; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 8748; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 8749; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 8750; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 8751; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 8752; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 8753; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 8754; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 8755; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 8756; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 8757; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 8758; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 8759; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 8760; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 8761; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 8762; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 8763; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 8764; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 8765; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 8766; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [28,28,28,28] 8767; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 8768; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 8769; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 8770; AVX1-NEXT: retq 8771; 8772; AVX2-LABEL: ult_28_v8i32: 8773; AVX2: # %bb.0: 8774; AVX2-NEXT: vmovdqa {{.*#+}} 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] 8775; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 8776; AVX2-NEXT: vmovdqa {{.*#+}} 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] 8777; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 8778; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 8779; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 8780; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 8781; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 8782; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 8783; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8784; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8785; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8786; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8787; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8788; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [28,28,28,28,28,28,28,28] 8789; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 8790; AVX2-NEXT: retq 8791; 8792; AVX512VPOPCNTDQ-LABEL: ult_28_v8i32: 8793; AVX512VPOPCNTDQ: # %bb.0: 8794; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8795; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 8796; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [28,28,28,28,28,28,28,28] 8797; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 8798; AVX512VPOPCNTDQ-NEXT: retq 8799; 8800; AVX512VPOPCNTDQVL-LABEL: ult_28_v8i32: 8801; AVX512VPOPCNTDQVL: # %bb.0: 8802; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 8803; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 8804; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 8805; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 8806; AVX512VPOPCNTDQVL-NEXT: retq 8807; 8808; BITALG_NOVLX-LABEL: ult_28_v8i32: 8809; BITALG_NOVLX: # %bb.0: 8810; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8811; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 8812; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 8813; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8814; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8815; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8816; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8817; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8818; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [28,28,28,28,28,28,28,28] 8819; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 8820; BITALG_NOVLX-NEXT: retq 8821; 8822; BITALG-LABEL: ult_28_v8i32: 8823; BITALG: # %bb.0: 8824; BITALG-NEXT: vpopcntb %ymm0, %ymm0 8825; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 8826; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8827; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8828; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8829; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8830; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8831; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 8832; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 8833; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 8834; BITALG-NEXT: retq 8835 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 8836 %3 = icmp ult <8 x i32> %2, <i32 28, i32 28, i32 28, i32 28, i32 28, i32 28, i32 28, i32 28> 8837 %4 = sext <8 x i1> %3 to <8 x i32> 8838 ret <8 x i32> %4 8839} 8840 8841define <8 x i32> @ugt_28_v8i32(<8 x i32> %0) { 8842; AVX1-LABEL: ugt_28_v8i32: 8843; AVX1: # %bb.0: 8844; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 8845; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 8846; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 8847; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 8848; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 8849; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 8850; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 8851; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 8852; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 8853; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 8854; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 8855; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 8856; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 8857; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 8858; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 8859; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 8860; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 8861; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 8862; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 8863; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 8864; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 8865; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 8866; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 8867; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 8868; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 8869; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 8870; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [28,28,28,28] 8871; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 8872; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 8873; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 8874; AVX1-NEXT: retq 8875; 8876; AVX2-LABEL: ugt_28_v8i32: 8877; AVX2: # %bb.0: 8878; AVX2-NEXT: vmovdqa {{.*#+}} 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] 8879; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 8880; AVX2-NEXT: vmovdqa {{.*#+}} 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] 8881; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 8882; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 8883; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 8884; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 8885; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 8886; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 8887; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8888; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8889; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8890; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8891; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8892; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [28,28,28,28,28,28,28,28] 8893; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 8894; AVX2-NEXT: retq 8895; 8896; AVX512VPOPCNTDQ-LABEL: ugt_28_v8i32: 8897; AVX512VPOPCNTDQ: # %bb.0: 8898; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8899; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 8900; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [28,28,28,28,28,28,28,28] 8901; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 8902; AVX512VPOPCNTDQ-NEXT: retq 8903; 8904; AVX512VPOPCNTDQVL-LABEL: ugt_28_v8i32: 8905; AVX512VPOPCNTDQVL: # %bb.0: 8906; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 8907; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 8908; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 8909; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 8910; AVX512VPOPCNTDQVL-NEXT: retq 8911; 8912; BITALG_NOVLX-LABEL: ugt_28_v8i32: 8913; BITALG_NOVLX: # %bb.0: 8914; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8915; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 8916; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 8917; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8918; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8919; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8920; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8921; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8922; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [28,28,28,28,28,28,28,28] 8923; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 8924; BITALG_NOVLX-NEXT: retq 8925; 8926; BITALG-LABEL: ugt_28_v8i32: 8927; BITALG: # %bb.0: 8928; BITALG-NEXT: vpopcntb %ymm0, %ymm0 8929; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 8930; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8931; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8932; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8933; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8934; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8935; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 8936; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 8937; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 8938; BITALG-NEXT: retq 8939 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 8940 %3 = icmp ugt <8 x i32> %2, <i32 28, i32 28, i32 28, i32 28, i32 28, i32 28, i32 28, i32 28> 8941 %4 = sext <8 x i1> %3 to <8 x i32> 8942 ret <8 x i32> %4 8943} 8944 8945define <8 x i32> @ult_29_v8i32(<8 x i32> %0) { 8946; AVX1-LABEL: ult_29_v8i32: 8947; AVX1: # %bb.0: 8948; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 8949; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 8950; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 8951; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 8952; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 8953; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 8954; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 8955; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 8956; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 8957; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 8958; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 8959; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 8960; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 8961; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 8962; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 8963; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 8964; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 8965; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 8966; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 8967; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 8968; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 8969; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 8970; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 8971; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 8972; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 8973; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 8974; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [29,29,29,29] 8975; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 8976; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 8977; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 8978; AVX1-NEXT: retq 8979; 8980; AVX2-LABEL: ult_29_v8i32: 8981; AVX2: # %bb.0: 8982; AVX2-NEXT: vmovdqa {{.*#+}} 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] 8983; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 8984; AVX2-NEXT: vmovdqa {{.*#+}} 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] 8985; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 8986; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 8987; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 8988; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 8989; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 8990; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 8991; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 8992; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 8993; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 8994; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 8995; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 8996; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [29,29,29,29,29,29,29,29] 8997; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 8998; AVX2-NEXT: retq 8999; 9000; AVX512VPOPCNTDQ-LABEL: ult_29_v8i32: 9001; AVX512VPOPCNTDQ: # %bb.0: 9002; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9003; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 9004; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [29,29,29,29,29,29,29,29] 9005; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 9006; AVX512VPOPCNTDQ-NEXT: retq 9007; 9008; AVX512VPOPCNTDQVL-LABEL: ult_29_v8i32: 9009; AVX512VPOPCNTDQVL: # %bb.0: 9010; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 9011; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 9012; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 9013; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 9014; AVX512VPOPCNTDQVL-NEXT: retq 9015; 9016; BITALG_NOVLX-LABEL: ult_29_v8i32: 9017; BITALG_NOVLX: # %bb.0: 9018; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9019; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 9020; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 9021; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 9022; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 9023; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 9024; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9025; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 9026; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [29,29,29,29,29,29,29,29] 9027; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 9028; BITALG_NOVLX-NEXT: retq 9029; 9030; BITALG-LABEL: ult_29_v8i32: 9031; BITALG: # %bb.0: 9032; BITALG-NEXT: vpopcntb %ymm0, %ymm0 9033; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 9034; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 9035; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 9036; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 9037; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9038; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 9039; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 9040; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 9041; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 9042; BITALG-NEXT: retq 9043 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 9044 %3 = icmp ult <8 x i32> %2, <i32 29, i32 29, i32 29, i32 29, i32 29, i32 29, i32 29, i32 29> 9045 %4 = sext <8 x i1> %3 to <8 x i32> 9046 ret <8 x i32> %4 9047} 9048 9049define <8 x i32> @ugt_29_v8i32(<8 x i32> %0) { 9050; AVX1-LABEL: ugt_29_v8i32: 9051; AVX1: # %bb.0: 9052; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 9053; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 9054; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 9055; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 9056; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 9057; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 9058; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 9059; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 9060; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 9061; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 9062; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 9063; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 9064; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 9065; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 9066; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 9067; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 9068; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 9069; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 9070; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 9071; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 9072; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 9073; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 9074; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 9075; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 9076; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 9077; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 9078; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [29,29,29,29] 9079; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 9080; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 9081; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 9082; AVX1-NEXT: retq 9083; 9084; AVX2-LABEL: ugt_29_v8i32: 9085; AVX2: # %bb.0: 9086; AVX2-NEXT: vmovdqa {{.*#+}} 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] 9087; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 9088; AVX2-NEXT: vmovdqa {{.*#+}} 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] 9089; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 9090; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 9091; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 9092; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 9093; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 9094; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 9095; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 9096; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 9097; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 9098; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9099; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 9100; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [29,29,29,29,29,29,29,29] 9101; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 9102; AVX2-NEXT: retq 9103; 9104; AVX512VPOPCNTDQ-LABEL: ugt_29_v8i32: 9105; AVX512VPOPCNTDQ: # %bb.0: 9106; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9107; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 9108; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [29,29,29,29,29,29,29,29] 9109; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 9110; AVX512VPOPCNTDQ-NEXT: retq 9111; 9112; AVX512VPOPCNTDQVL-LABEL: ugt_29_v8i32: 9113; AVX512VPOPCNTDQVL: # %bb.0: 9114; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 9115; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 9116; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 9117; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 9118; AVX512VPOPCNTDQVL-NEXT: retq 9119; 9120; BITALG_NOVLX-LABEL: ugt_29_v8i32: 9121; BITALG_NOVLX: # %bb.0: 9122; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9123; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 9124; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 9125; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 9126; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 9127; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 9128; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9129; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 9130; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [29,29,29,29,29,29,29,29] 9131; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 9132; BITALG_NOVLX-NEXT: retq 9133; 9134; BITALG-LABEL: ugt_29_v8i32: 9135; BITALG: # %bb.0: 9136; BITALG-NEXT: vpopcntb %ymm0, %ymm0 9137; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 9138; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 9139; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 9140; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 9141; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9142; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 9143; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 9144; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 9145; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 9146; BITALG-NEXT: retq 9147 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 9148 %3 = icmp ugt <8 x i32> %2, <i32 29, i32 29, i32 29, i32 29, i32 29, i32 29, i32 29, i32 29> 9149 %4 = sext <8 x i1> %3 to <8 x i32> 9150 ret <8 x i32> %4 9151} 9152 9153define <8 x i32> @ult_30_v8i32(<8 x i32> %0) { 9154; AVX1-LABEL: ult_30_v8i32: 9155; AVX1: # %bb.0: 9156; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 9157; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 9158; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 9159; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 9160; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 9161; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 9162; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 9163; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 9164; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 9165; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 9166; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 9167; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 9168; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 9169; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 9170; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 9171; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 9172; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 9173; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 9174; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 9175; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 9176; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 9177; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 9178; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 9179; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 9180; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 9181; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 9182; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [30,30,30,30] 9183; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 9184; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 9185; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 9186; AVX1-NEXT: retq 9187; 9188; AVX2-LABEL: ult_30_v8i32: 9189; AVX2: # %bb.0: 9190; AVX2-NEXT: vmovdqa {{.*#+}} 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] 9191; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 9192; AVX2-NEXT: vmovdqa {{.*#+}} 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] 9193; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 9194; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 9195; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 9196; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 9197; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 9198; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 9199; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 9200; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 9201; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 9202; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9203; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 9204; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [30,30,30,30,30,30,30,30] 9205; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 9206; AVX2-NEXT: retq 9207; 9208; AVX512VPOPCNTDQ-LABEL: ult_30_v8i32: 9209; AVX512VPOPCNTDQ: # %bb.0: 9210; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9211; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 9212; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [30,30,30,30,30,30,30,30] 9213; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 9214; AVX512VPOPCNTDQ-NEXT: retq 9215; 9216; AVX512VPOPCNTDQVL-LABEL: ult_30_v8i32: 9217; AVX512VPOPCNTDQVL: # %bb.0: 9218; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 9219; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 9220; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 9221; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 9222; AVX512VPOPCNTDQVL-NEXT: retq 9223; 9224; BITALG_NOVLX-LABEL: ult_30_v8i32: 9225; BITALG_NOVLX: # %bb.0: 9226; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9227; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 9228; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 9229; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 9230; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 9231; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 9232; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9233; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 9234; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [30,30,30,30,30,30,30,30] 9235; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 9236; BITALG_NOVLX-NEXT: retq 9237; 9238; BITALG-LABEL: ult_30_v8i32: 9239; BITALG: # %bb.0: 9240; BITALG-NEXT: vpopcntb %ymm0, %ymm0 9241; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 9242; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 9243; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 9244; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 9245; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9246; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 9247; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 9248; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 9249; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 9250; BITALG-NEXT: retq 9251 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 9252 %3 = icmp ult <8 x i32> %2, <i32 30, i32 30, i32 30, i32 30, i32 30, i32 30, i32 30, i32 30> 9253 %4 = sext <8 x i1> %3 to <8 x i32> 9254 ret <8 x i32> %4 9255} 9256 9257define <8 x i32> @ugt_30_v8i32(<8 x i32> %0) { 9258; AVX1-LABEL: ugt_30_v8i32: 9259; AVX1: # %bb.0: 9260; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 9261; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 9262; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 9263; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 9264; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 9265; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 9266; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 9267; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 9268; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 9269; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 9270; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 9271; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 9272; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 9273; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 9274; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 9275; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 9276; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 9277; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 9278; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 9279; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 9280; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 9281; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 9282; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 9283; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 9284; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 9285; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 9286; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [30,30,30,30] 9287; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 9288; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1 9289; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 9290; AVX1-NEXT: retq 9291; 9292; AVX2-LABEL: ugt_30_v8i32: 9293; AVX2: # %bb.0: 9294; AVX2-NEXT: vmovdqa {{.*#+}} 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] 9295; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 9296; AVX2-NEXT: vmovdqa {{.*#+}} 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] 9297; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 9298; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 9299; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 9300; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 9301; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 9302; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 9303; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 9304; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 9305; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 9306; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9307; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 9308; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [30,30,30,30,30,30,30,30] 9309; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 9310; AVX2-NEXT: retq 9311; 9312; AVX512VPOPCNTDQ-LABEL: ugt_30_v8i32: 9313; AVX512VPOPCNTDQ: # %bb.0: 9314; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9315; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 9316; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [30,30,30,30,30,30,30,30] 9317; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 9318; AVX512VPOPCNTDQ-NEXT: retq 9319; 9320; AVX512VPOPCNTDQVL-LABEL: ugt_30_v8i32: 9321; AVX512VPOPCNTDQVL: # %bb.0: 9322; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 9323; AVX512VPOPCNTDQVL-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 9324; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 9325; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 9326; AVX512VPOPCNTDQVL-NEXT: retq 9327; 9328; BITALG_NOVLX-LABEL: ugt_30_v8i32: 9329; BITALG_NOVLX: # %bb.0: 9330; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9331; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 9332; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 9333; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 9334; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 9335; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 9336; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9337; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 9338; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [30,30,30,30,30,30,30,30] 9339; BITALG_NOVLX-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 9340; BITALG_NOVLX-NEXT: retq 9341; 9342; BITALG-LABEL: ugt_30_v8i32: 9343; BITALG: # %bb.0: 9344; BITALG-NEXT: vpopcntb %ymm0, %ymm0 9345; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 9346; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 9347; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 9348; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 9349; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9350; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 9351; BITALG-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 9352; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 9353; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 9354; BITALG-NEXT: retq 9355 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 9356 %3 = icmp ugt <8 x i32> %2, <i32 30, i32 30, i32 30, i32 30, i32 30, i32 30, i32 30, i32 30> 9357 %4 = sext <8 x i1> %3 to <8 x i32> 9358 ret <8 x i32> %4 9359} 9360 9361define <8 x i32> @ult_31_v8i32(<8 x i32> %0) { 9362; AVX1-LABEL: ult_31_v8i32: 9363; AVX1: # %bb.0: 9364; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 9365; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 9366; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 9367; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 9368; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 9369; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 9370; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 9371; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 9372; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 9373; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm4[2],xmm2[3],xmm4[3] 9374; AVX1-NEXT: vpsadbw %xmm4, %xmm5, %xmm5 9375; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 9376; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 9377; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 9378; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 9379; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 9380; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 9381; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 9382; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 9383; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 9384; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 9385; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm4[2],xmm0[3],xmm4[3] 9386; AVX1-NEXT: vpsadbw %xmm4, %xmm1, %xmm1 9387; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 9388; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 9389; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 9390; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [31,31,31,31] 9391; AVX1-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 9392; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1 9393; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 9394; AVX1-NEXT: retq 9395; 9396; AVX2-LABEL: ult_31_v8i32: 9397; AVX2: # %bb.0: 9398; AVX2-NEXT: vmovdqa {{.*#+}} 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] 9399; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 9400; AVX2-NEXT: vmovdqa {{.*#+}} 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] 9401; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 9402; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 9403; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 9404; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 9405; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 9406; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 9407; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 9408; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 9409; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 9410; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9411; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 9412; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [31,31,31,31,31,31,31,31] 9413; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 9414; AVX2-NEXT: retq 9415; 9416; AVX512VPOPCNTDQ-LABEL: ult_31_v8i32: 9417; AVX512VPOPCNTDQ: # %bb.0: 9418; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9419; AVX512VPOPCNTDQ-NEXT: vpopcntd %zmm0, %zmm0 9420; AVX512VPOPCNTDQ-NEXT: vpbroadcastd {{.*#+}} ymm1 = [31,31,31,31,31,31,31,31] 9421; AVX512VPOPCNTDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 9422; AVX512VPOPCNTDQ-NEXT: retq 9423; 9424; AVX512VPOPCNTDQVL-LABEL: ult_31_v8i32: 9425; AVX512VPOPCNTDQVL: # %bb.0: 9426; AVX512VPOPCNTDQVL-NEXT: vpopcntd %ymm0, %ymm0 9427; AVX512VPOPCNTDQVL-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 9428; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 9429; AVX512VPOPCNTDQVL-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 9430; AVX512VPOPCNTDQVL-NEXT: retq 9431; 9432; BITALG_NOVLX-LABEL: ult_31_v8i32: 9433; BITALG_NOVLX: # %bb.0: 9434; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9435; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 9436; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 9437; BITALG_NOVLX-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 9438; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 9439; BITALG_NOVLX-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 9440; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9441; BITALG_NOVLX-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 9442; BITALG_NOVLX-NEXT: vpbroadcastd {{.*#+}} ymm1 = [31,31,31,31,31,31,31,31] 9443; BITALG_NOVLX-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0 9444; BITALG_NOVLX-NEXT: retq 9445; 9446; BITALG-LABEL: ult_31_v8i32: 9447; BITALG: # %bb.0: 9448; BITALG-NEXT: vpopcntb %ymm0, %ymm0 9449; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 9450; BITALG-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 9451; BITALG-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 9452; BITALG-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 9453; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9454; BITALG-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 9455; BITALG-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 9456; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 9457; BITALG-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 9458; BITALG-NEXT: retq 9459 %2 = tail call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %0) 9460 %3 = icmp ult <8 x i32> %2, <i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31> 9461 %4 = sext <8 x i1> %3 to <8 x i32> 9462 ret <8 x i32> %4 9463} 9464 9465define <4 x i64> @ugt_1_v4i64(<4 x i64> %0) { 9466; AVX1-LABEL: ugt_1_v4i64: 9467; AVX1: # %bb.0: 9468; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 9469; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2 9470; AVX1-NEXT: vpaddq %xmm2, %xmm1, %xmm3 9471; AVX1-NEXT: vpand %xmm3, %xmm1, %xmm1 9472; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3 9473; AVX1-NEXT: vpcmpeqq %xmm3, %xmm1, %xmm1 9474; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm1 9475; AVX1-NEXT: vpaddq %xmm2, %xmm0, %xmm4 9476; AVX1-NEXT: vpand %xmm4, %xmm0, %xmm0 9477; AVX1-NEXT: vpcmpeqq %xmm3, %xmm0, %xmm0 9478; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm0 9479; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 9480; AVX1-NEXT: retq 9481; 9482; AVX2-LABEL: ugt_1_v4i64: 9483; AVX2: # %bb.0: 9484; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 9485; AVX2-NEXT: vpaddq %ymm1, %ymm0, %ymm2 9486; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0 9487; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2 9488; AVX2-NEXT: vpcmpeqq %ymm2, %ymm0, %ymm0 9489; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm0 9490; AVX2-NEXT: retq 9491; 9492; AVX512VPOPCNTDQ-LABEL: ugt_1_v4i64: 9493; AVX512VPOPCNTDQ: # %bb.0: 9494; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9495; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 9496; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [1,1,1,1] 9497; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 9498; AVX512VPOPCNTDQ-NEXT: retq 9499; 9500; AVX512VPOPCNTDQVL-LABEL: ugt_1_v4i64: 9501; AVX512VPOPCNTDQVL: # %bb.0: 9502; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 9503; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 9504; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 9505; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 9506; AVX512VPOPCNTDQVL-NEXT: retq 9507; 9508; BITALG_NOVLX-LABEL: ugt_1_v4i64: 9509; BITALG_NOVLX: # %bb.0: 9510; BITALG_NOVLX-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 9511; BITALG_NOVLX-NEXT: vpaddq %ymm1, %ymm0, %ymm1 9512; BITALG_NOVLX-NEXT: vpand %ymm1, %ymm0, %ymm0 9513; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 9514; BITALG_NOVLX-NEXT: vpcmpeqq %ymm1, %ymm0, %ymm0 9515; BITALG_NOVLX-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm0 9516; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 9517; BITALG_NOVLX-NEXT: retq 9518; 9519; BITALG-LABEL: ugt_1_v4i64: 9520; BITALG: # %bb.0: 9521; BITALG-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 9522; BITALG-NEXT: vpaddq %ymm1, %ymm0, %ymm1 9523; BITALG-NEXT: vpand %ymm1, %ymm0, %ymm0 9524; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 9525; BITALG-NEXT: vpcmpeqq %ymm1, %ymm0, %ymm0 9526; BITALG-NEXT: vpternlogq $15, %ymm0, %ymm0, %ymm0 9527; BITALG-NEXT: retq 9528 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 9529 %3 = icmp ugt <4 x i64> %2, <i64 1, i64 1, i64 1, i64 1> 9530 %4 = sext <4 x i1> %3 to <4 x i64> 9531 ret <4 x i64> %4 9532} 9533 9534define <4 x i64> @ult_2_v4i64(<4 x i64> %0) { 9535; AVX1-LABEL: ult_2_v4i64: 9536; AVX1: # %bb.0: 9537; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 9538; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2 9539; AVX1-NEXT: vpaddq %xmm2, %xmm1, %xmm3 9540; AVX1-NEXT: vpand %xmm3, %xmm1, %xmm1 9541; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3 9542; AVX1-NEXT: vpcmpeqq %xmm3, %xmm1, %xmm1 9543; AVX1-NEXT: vpaddq %xmm2, %xmm0, %xmm2 9544; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm0 9545; AVX1-NEXT: vpcmpeqq %xmm3, %xmm0, %xmm0 9546; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 9547; AVX1-NEXT: retq 9548; 9549; AVX2-LABEL: ult_2_v4i64: 9550; AVX2: # %bb.0: 9551; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 9552; AVX2-NEXT: vpaddq %ymm1, %ymm0, %ymm1 9553; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 9554; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 9555; AVX2-NEXT: vpcmpeqq %ymm1, %ymm0, %ymm0 9556; AVX2-NEXT: retq 9557; 9558; AVX512VPOPCNTDQ-LABEL: ult_2_v4i64: 9559; AVX512VPOPCNTDQ: # %bb.0: 9560; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9561; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 9562; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [2,2,2,2] 9563; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 9564; AVX512VPOPCNTDQ-NEXT: retq 9565; 9566; AVX512VPOPCNTDQVL-LABEL: ult_2_v4i64: 9567; AVX512VPOPCNTDQVL: # %bb.0: 9568; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 9569; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 9570; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 9571; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 9572; AVX512VPOPCNTDQVL-NEXT: retq 9573; 9574; BITALG_NOVLX-LABEL: ult_2_v4i64: 9575; BITALG_NOVLX: # %bb.0: 9576; BITALG_NOVLX-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 9577; BITALG_NOVLX-NEXT: vpaddq %ymm1, %ymm0, %ymm1 9578; BITALG_NOVLX-NEXT: vpand %ymm1, %ymm0, %ymm0 9579; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 9580; BITALG_NOVLX-NEXT: vpcmpeqq %ymm1, %ymm0, %ymm0 9581; BITALG_NOVLX-NEXT: retq 9582; 9583; BITALG-LABEL: ult_2_v4i64: 9584; BITALG: # %bb.0: 9585; BITALG-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 9586; BITALG-NEXT: vpaddq %ymm1, %ymm0, %ymm1 9587; BITALG-NEXT: vpand %ymm1, %ymm0, %ymm0 9588; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 9589; BITALG-NEXT: vpcmpeqq %ymm1, %ymm0, %ymm0 9590; BITALG-NEXT: retq 9591 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 9592 %3 = icmp ult <4 x i64> %2, <i64 2, i64 2, i64 2, i64 2> 9593 %4 = sext <4 x i1> %3 to <4 x i64> 9594 ret <4 x i64> %4 9595} 9596 9597define <4 x i64> @ugt_2_v4i64(<4 x i64> %0) { 9598; AVX1-LABEL: ugt_2_v4i64: 9599; AVX1: # %bb.0: 9600; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 9601; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 9602; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 9603; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 9604; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 9605; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 9606; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 9607; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 9608; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 9609; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 9610; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 9611; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 9612; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 9613; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 9614; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 9615; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 9616; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 9617; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 9618; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [2,2] 9619; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 9620; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 9621; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 9622; AVX1-NEXT: retq 9623; 9624; AVX2-LABEL: ugt_2_v4i64: 9625; AVX2: # %bb.0: 9626; AVX2-NEXT: vmovdqa {{.*#+}} 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] 9627; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 9628; AVX2-NEXT: vmovdqa {{.*#+}} 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] 9629; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 9630; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 9631; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 9632; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 9633; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 9634; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 9635; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9636; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [2,2,2,2] 9637; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 9638; AVX2-NEXT: retq 9639; 9640; AVX512VPOPCNTDQ-LABEL: ugt_2_v4i64: 9641; AVX512VPOPCNTDQ: # %bb.0: 9642; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9643; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 9644; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [2,2,2,2] 9645; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 9646; AVX512VPOPCNTDQ-NEXT: retq 9647; 9648; AVX512VPOPCNTDQVL-LABEL: ugt_2_v4i64: 9649; AVX512VPOPCNTDQVL: # %bb.0: 9650; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 9651; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 9652; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 9653; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 9654; AVX512VPOPCNTDQVL-NEXT: retq 9655; 9656; BITALG_NOVLX-LABEL: ugt_2_v4i64: 9657; BITALG_NOVLX: # %bb.0: 9658; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9659; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 9660; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 9661; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9662; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [2,2,2,2] 9663; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 9664; BITALG_NOVLX-NEXT: retq 9665; 9666; BITALG-LABEL: ugt_2_v4i64: 9667; BITALG: # %bb.0: 9668; BITALG-NEXT: vpopcntb %ymm0, %ymm0 9669; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 9670; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9671; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 9672; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 9673; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 9674; BITALG-NEXT: retq 9675 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 9676 %3 = icmp ugt <4 x i64> %2, <i64 2, i64 2, i64 2, i64 2> 9677 %4 = sext <4 x i1> %3 to <4 x i64> 9678 ret <4 x i64> %4 9679} 9680 9681define <4 x i64> @ult_3_v4i64(<4 x i64> %0) { 9682; AVX1-LABEL: ult_3_v4i64: 9683; AVX1: # %bb.0: 9684; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 9685; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 9686; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 9687; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 9688; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 9689; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 9690; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 9691; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 9692; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 9693; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 9694; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 9695; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 9696; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 9697; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 9698; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 9699; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 9700; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 9701; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 9702; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [3,3] 9703; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 9704; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 9705; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 9706; AVX1-NEXT: retq 9707; 9708; AVX2-LABEL: ult_3_v4i64: 9709; AVX2: # %bb.0: 9710; AVX2-NEXT: vmovdqa {{.*#+}} 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] 9711; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 9712; AVX2-NEXT: vmovdqa {{.*#+}} 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] 9713; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 9714; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 9715; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 9716; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 9717; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 9718; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 9719; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9720; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [3,3,3,3] 9721; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 9722; AVX2-NEXT: retq 9723; 9724; AVX512VPOPCNTDQ-LABEL: ult_3_v4i64: 9725; AVX512VPOPCNTDQ: # %bb.0: 9726; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9727; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 9728; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [3,3,3,3] 9729; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 9730; AVX512VPOPCNTDQ-NEXT: retq 9731; 9732; AVX512VPOPCNTDQVL-LABEL: ult_3_v4i64: 9733; AVX512VPOPCNTDQVL: # %bb.0: 9734; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 9735; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 9736; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 9737; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 9738; AVX512VPOPCNTDQVL-NEXT: retq 9739; 9740; BITALG_NOVLX-LABEL: ult_3_v4i64: 9741; BITALG_NOVLX: # %bb.0: 9742; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9743; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 9744; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 9745; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9746; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [3,3,3,3] 9747; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 9748; BITALG_NOVLX-NEXT: retq 9749; 9750; BITALG-LABEL: ult_3_v4i64: 9751; BITALG: # %bb.0: 9752; BITALG-NEXT: vpopcntb %ymm0, %ymm0 9753; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 9754; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9755; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 9756; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 9757; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 9758; BITALG-NEXT: retq 9759 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 9760 %3 = icmp ult <4 x i64> %2, <i64 3, i64 3, i64 3, i64 3> 9761 %4 = sext <4 x i1> %3 to <4 x i64> 9762 ret <4 x i64> %4 9763} 9764 9765define <4 x i64> @ugt_3_v4i64(<4 x i64> %0) { 9766; AVX1-LABEL: ugt_3_v4i64: 9767; AVX1: # %bb.0: 9768; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 9769; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 9770; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 9771; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 9772; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 9773; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 9774; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 9775; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 9776; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 9777; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 9778; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 9779; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 9780; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 9781; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 9782; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 9783; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 9784; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 9785; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 9786; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [3,3] 9787; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 9788; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 9789; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 9790; AVX1-NEXT: retq 9791; 9792; AVX2-LABEL: ugt_3_v4i64: 9793; AVX2: # %bb.0: 9794; AVX2-NEXT: vmovdqa {{.*#+}} 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] 9795; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 9796; AVX2-NEXT: vmovdqa {{.*#+}} 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] 9797; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 9798; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 9799; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 9800; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 9801; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 9802; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 9803; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9804; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [3,3,3,3] 9805; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 9806; AVX2-NEXT: retq 9807; 9808; AVX512VPOPCNTDQ-LABEL: ugt_3_v4i64: 9809; AVX512VPOPCNTDQ: # %bb.0: 9810; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9811; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 9812; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [3,3,3,3] 9813; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 9814; AVX512VPOPCNTDQ-NEXT: retq 9815; 9816; AVX512VPOPCNTDQVL-LABEL: ugt_3_v4i64: 9817; AVX512VPOPCNTDQVL: # %bb.0: 9818; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 9819; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 9820; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 9821; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 9822; AVX512VPOPCNTDQVL-NEXT: retq 9823; 9824; BITALG_NOVLX-LABEL: ugt_3_v4i64: 9825; BITALG_NOVLX: # %bb.0: 9826; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9827; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 9828; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 9829; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9830; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [3,3,3,3] 9831; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 9832; BITALG_NOVLX-NEXT: retq 9833; 9834; BITALG-LABEL: ugt_3_v4i64: 9835; BITALG: # %bb.0: 9836; BITALG-NEXT: vpopcntb %ymm0, %ymm0 9837; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 9838; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9839; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 9840; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 9841; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 9842; BITALG-NEXT: retq 9843 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 9844 %3 = icmp ugt <4 x i64> %2, <i64 3, i64 3, i64 3, i64 3> 9845 %4 = sext <4 x i1> %3 to <4 x i64> 9846 ret <4 x i64> %4 9847} 9848 9849define <4 x i64> @ult_4_v4i64(<4 x i64> %0) { 9850; AVX1-LABEL: ult_4_v4i64: 9851; AVX1: # %bb.0: 9852; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 9853; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 9854; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 9855; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 9856; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 9857; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 9858; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 9859; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 9860; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 9861; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 9862; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 9863; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 9864; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 9865; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 9866; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 9867; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 9868; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 9869; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 9870; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [4,4] 9871; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 9872; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 9873; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 9874; AVX1-NEXT: retq 9875; 9876; AVX2-LABEL: ult_4_v4i64: 9877; AVX2: # %bb.0: 9878; AVX2-NEXT: vmovdqa {{.*#+}} 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] 9879; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 9880; AVX2-NEXT: vmovdqa {{.*#+}} 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] 9881; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 9882; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 9883; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 9884; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 9885; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 9886; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 9887; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9888; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [4,4,4,4] 9889; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 9890; AVX2-NEXT: retq 9891; 9892; AVX512VPOPCNTDQ-LABEL: ult_4_v4i64: 9893; AVX512VPOPCNTDQ: # %bb.0: 9894; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9895; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 9896; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [4,4,4,4] 9897; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 9898; AVX512VPOPCNTDQ-NEXT: retq 9899; 9900; AVX512VPOPCNTDQVL-LABEL: ult_4_v4i64: 9901; AVX512VPOPCNTDQVL: # %bb.0: 9902; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 9903; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 9904; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 9905; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 9906; AVX512VPOPCNTDQVL-NEXT: retq 9907; 9908; BITALG_NOVLX-LABEL: ult_4_v4i64: 9909; BITALG_NOVLX: # %bb.0: 9910; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9911; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 9912; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 9913; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9914; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [4,4,4,4] 9915; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 9916; BITALG_NOVLX-NEXT: retq 9917; 9918; BITALG-LABEL: ult_4_v4i64: 9919; BITALG: # %bb.0: 9920; BITALG-NEXT: vpopcntb %ymm0, %ymm0 9921; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 9922; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9923; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 9924; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 9925; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 9926; BITALG-NEXT: retq 9927 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 9928 %3 = icmp ult <4 x i64> %2, <i64 4, i64 4, i64 4, i64 4> 9929 %4 = sext <4 x i1> %3 to <4 x i64> 9930 ret <4 x i64> %4 9931} 9932 9933define <4 x i64> @ugt_4_v4i64(<4 x i64> %0) { 9934; AVX1-LABEL: ugt_4_v4i64: 9935; AVX1: # %bb.0: 9936; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 9937; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 9938; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 9939; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 9940; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 9941; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 9942; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 9943; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 9944; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 9945; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 9946; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 9947; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 9948; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 9949; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 9950; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 9951; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 9952; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 9953; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 9954; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [4,4] 9955; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 9956; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 9957; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 9958; AVX1-NEXT: retq 9959; 9960; AVX2-LABEL: ugt_4_v4i64: 9961; AVX2: # %bb.0: 9962; AVX2-NEXT: vmovdqa {{.*#+}} 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] 9963; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 9964; AVX2-NEXT: vmovdqa {{.*#+}} 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] 9965; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 9966; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 9967; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 9968; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 9969; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 9970; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 9971; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9972; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [4,4,4,4] 9973; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 9974; AVX2-NEXT: retq 9975; 9976; AVX512VPOPCNTDQ-LABEL: ugt_4_v4i64: 9977; AVX512VPOPCNTDQ: # %bb.0: 9978; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9979; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 9980; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [4,4,4,4] 9981; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 9982; AVX512VPOPCNTDQ-NEXT: retq 9983; 9984; AVX512VPOPCNTDQVL-LABEL: ugt_4_v4i64: 9985; AVX512VPOPCNTDQVL: # %bb.0: 9986; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 9987; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 9988; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 9989; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 9990; AVX512VPOPCNTDQVL-NEXT: retq 9991; 9992; BITALG_NOVLX-LABEL: ugt_4_v4i64: 9993; BITALG_NOVLX: # %bb.0: 9994; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9995; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 9996; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 9997; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 9998; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [4,4,4,4] 9999; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 10000; BITALG_NOVLX-NEXT: retq 10001; 10002; BITALG-LABEL: ugt_4_v4i64: 10003; BITALG: # %bb.0: 10004; BITALG-NEXT: vpopcntb %ymm0, %ymm0 10005; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 10006; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10007; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 10008; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 10009; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 10010; BITALG-NEXT: retq 10011 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 10012 %3 = icmp ugt <4 x i64> %2, <i64 4, i64 4, i64 4, i64 4> 10013 %4 = sext <4 x i1> %3 to <4 x i64> 10014 ret <4 x i64> %4 10015} 10016 10017define <4 x i64> @ult_5_v4i64(<4 x i64> %0) { 10018; AVX1-LABEL: ult_5_v4i64: 10019; AVX1: # %bb.0: 10020; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 10021; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 10022; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 10023; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 10024; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 10025; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 10026; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 10027; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 10028; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 10029; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 10030; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 10031; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 10032; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 10033; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 10034; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 10035; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 10036; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 10037; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 10038; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [5,5] 10039; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 10040; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 10041; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 10042; AVX1-NEXT: retq 10043; 10044; AVX2-LABEL: ult_5_v4i64: 10045; AVX2: # %bb.0: 10046; AVX2-NEXT: vmovdqa {{.*#+}} 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] 10047; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 10048; AVX2-NEXT: vmovdqa {{.*#+}} 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] 10049; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 10050; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 10051; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 10052; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 10053; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 10054; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 10055; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10056; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [5,5,5,5] 10057; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 10058; AVX2-NEXT: retq 10059; 10060; AVX512VPOPCNTDQ-LABEL: ult_5_v4i64: 10061; AVX512VPOPCNTDQ: # %bb.0: 10062; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 10063; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 10064; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [5,5,5,5] 10065; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 10066; AVX512VPOPCNTDQ-NEXT: retq 10067; 10068; AVX512VPOPCNTDQVL-LABEL: ult_5_v4i64: 10069; AVX512VPOPCNTDQVL: # %bb.0: 10070; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 10071; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 10072; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 10073; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 10074; AVX512VPOPCNTDQVL-NEXT: retq 10075; 10076; BITALG_NOVLX-LABEL: ult_5_v4i64: 10077; BITALG_NOVLX: # %bb.0: 10078; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 10079; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 10080; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 10081; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10082; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [5,5,5,5] 10083; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 10084; BITALG_NOVLX-NEXT: retq 10085; 10086; BITALG-LABEL: ult_5_v4i64: 10087; BITALG: # %bb.0: 10088; BITALG-NEXT: vpopcntb %ymm0, %ymm0 10089; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 10090; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10091; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 10092; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 10093; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 10094; BITALG-NEXT: retq 10095 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 10096 %3 = icmp ult <4 x i64> %2, <i64 5, i64 5, i64 5, i64 5> 10097 %4 = sext <4 x i1> %3 to <4 x i64> 10098 ret <4 x i64> %4 10099} 10100 10101define <4 x i64> @ugt_5_v4i64(<4 x i64> %0) { 10102; AVX1-LABEL: ugt_5_v4i64: 10103; AVX1: # %bb.0: 10104; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 10105; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 10106; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 10107; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 10108; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 10109; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 10110; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 10111; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 10112; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 10113; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 10114; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 10115; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 10116; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 10117; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 10118; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 10119; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 10120; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 10121; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 10122; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [5,5] 10123; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 10124; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 10125; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 10126; AVX1-NEXT: retq 10127; 10128; AVX2-LABEL: ugt_5_v4i64: 10129; AVX2: # %bb.0: 10130; AVX2-NEXT: vmovdqa {{.*#+}} 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] 10131; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 10132; AVX2-NEXT: vmovdqa {{.*#+}} 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] 10133; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 10134; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 10135; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 10136; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 10137; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 10138; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 10139; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10140; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [5,5,5,5] 10141; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 10142; AVX2-NEXT: retq 10143; 10144; AVX512VPOPCNTDQ-LABEL: ugt_5_v4i64: 10145; AVX512VPOPCNTDQ: # %bb.0: 10146; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 10147; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 10148; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [5,5,5,5] 10149; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 10150; AVX512VPOPCNTDQ-NEXT: retq 10151; 10152; AVX512VPOPCNTDQVL-LABEL: ugt_5_v4i64: 10153; AVX512VPOPCNTDQVL: # %bb.0: 10154; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 10155; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 10156; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 10157; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 10158; AVX512VPOPCNTDQVL-NEXT: retq 10159; 10160; BITALG_NOVLX-LABEL: ugt_5_v4i64: 10161; BITALG_NOVLX: # %bb.0: 10162; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 10163; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 10164; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 10165; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10166; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [5,5,5,5] 10167; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 10168; BITALG_NOVLX-NEXT: retq 10169; 10170; BITALG-LABEL: ugt_5_v4i64: 10171; BITALG: # %bb.0: 10172; BITALG-NEXT: vpopcntb %ymm0, %ymm0 10173; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 10174; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10175; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 10176; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 10177; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 10178; BITALG-NEXT: retq 10179 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 10180 %3 = icmp ugt <4 x i64> %2, <i64 5, i64 5, i64 5, i64 5> 10181 %4 = sext <4 x i1> %3 to <4 x i64> 10182 ret <4 x i64> %4 10183} 10184 10185define <4 x i64> @ult_6_v4i64(<4 x i64> %0) { 10186; AVX1-LABEL: ult_6_v4i64: 10187; AVX1: # %bb.0: 10188; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 10189; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 10190; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 10191; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 10192; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 10193; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 10194; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 10195; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 10196; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 10197; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 10198; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 10199; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 10200; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 10201; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 10202; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 10203; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 10204; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 10205; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 10206; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [6,6] 10207; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 10208; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 10209; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 10210; AVX1-NEXT: retq 10211; 10212; AVX2-LABEL: ult_6_v4i64: 10213; AVX2: # %bb.0: 10214; AVX2-NEXT: vmovdqa {{.*#+}} 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] 10215; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 10216; AVX2-NEXT: vmovdqa {{.*#+}} 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] 10217; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 10218; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 10219; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 10220; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 10221; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 10222; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 10223; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10224; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [6,6,6,6] 10225; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 10226; AVX2-NEXT: retq 10227; 10228; AVX512VPOPCNTDQ-LABEL: ult_6_v4i64: 10229; AVX512VPOPCNTDQ: # %bb.0: 10230; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 10231; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 10232; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [6,6,6,6] 10233; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 10234; AVX512VPOPCNTDQ-NEXT: retq 10235; 10236; AVX512VPOPCNTDQVL-LABEL: ult_6_v4i64: 10237; AVX512VPOPCNTDQVL: # %bb.0: 10238; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 10239; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 10240; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 10241; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 10242; AVX512VPOPCNTDQVL-NEXT: retq 10243; 10244; BITALG_NOVLX-LABEL: ult_6_v4i64: 10245; BITALG_NOVLX: # %bb.0: 10246; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 10247; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 10248; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 10249; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10250; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [6,6,6,6] 10251; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 10252; BITALG_NOVLX-NEXT: retq 10253; 10254; BITALG-LABEL: ult_6_v4i64: 10255; BITALG: # %bb.0: 10256; BITALG-NEXT: vpopcntb %ymm0, %ymm0 10257; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 10258; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10259; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 10260; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 10261; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 10262; BITALG-NEXT: retq 10263 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 10264 %3 = icmp ult <4 x i64> %2, <i64 6, i64 6, i64 6, i64 6> 10265 %4 = sext <4 x i1> %3 to <4 x i64> 10266 ret <4 x i64> %4 10267} 10268 10269define <4 x i64> @ugt_6_v4i64(<4 x i64> %0) { 10270; AVX1-LABEL: ugt_6_v4i64: 10271; AVX1: # %bb.0: 10272; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 10273; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 10274; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 10275; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 10276; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 10277; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 10278; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 10279; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 10280; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 10281; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 10282; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 10283; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 10284; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 10285; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 10286; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 10287; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 10288; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 10289; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 10290; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [6,6] 10291; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 10292; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 10293; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 10294; AVX1-NEXT: retq 10295; 10296; AVX2-LABEL: ugt_6_v4i64: 10297; AVX2: # %bb.0: 10298; AVX2-NEXT: vmovdqa {{.*#+}} 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] 10299; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 10300; AVX2-NEXT: vmovdqa {{.*#+}} 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] 10301; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 10302; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 10303; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 10304; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 10305; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 10306; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 10307; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10308; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [6,6,6,6] 10309; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 10310; AVX2-NEXT: retq 10311; 10312; AVX512VPOPCNTDQ-LABEL: ugt_6_v4i64: 10313; AVX512VPOPCNTDQ: # %bb.0: 10314; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 10315; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 10316; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [6,6,6,6] 10317; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 10318; AVX512VPOPCNTDQ-NEXT: retq 10319; 10320; AVX512VPOPCNTDQVL-LABEL: ugt_6_v4i64: 10321; AVX512VPOPCNTDQVL: # %bb.0: 10322; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 10323; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 10324; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 10325; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 10326; AVX512VPOPCNTDQVL-NEXT: retq 10327; 10328; BITALG_NOVLX-LABEL: ugt_6_v4i64: 10329; BITALG_NOVLX: # %bb.0: 10330; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 10331; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 10332; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 10333; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10334; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [6,6,6,6] 10335; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 10336; BITALG_NOVLX-NEXT: retq 10337; 10338; BITALG-LABEL: ugt_6_v4i64: 10339; BITALG: # %bb.0: 10340; BITALG-NEXT: vpopcntb %ymm0, %ymm0 10341; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 10342; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10343; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 10344; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 10345; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 10346; BITALG-NEXT: retq 10347 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 10348 %3 = icmp ugt <4 x i64> %2, <i64 6, i64 6, i64 6, i64 6> 10349 %4 = sext <4 x i1> %3 to <4 x i64> 10350 ret <4 x i64> %4 10351} 10352 10353define <4 x i64> @ult_7_v4i64(<4 x i64> %0) { 10354; AVX1-LABEL: ult_7_v4i64: 10355; AVX1: # %bb.0: 10356; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 10357; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 10358; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 10359; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 10360; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 10361; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 10362; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 10363; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 10364; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 10365; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 10366; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 10367; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 10368; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 10369; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 10370; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 10371; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 10372; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 10373; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 10374; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [7,7] 10375; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 10376; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 10377; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 10378; AVX1-NEXT: retq 10379; 10380; AVX2-LABEL: ult_7_v4i64: 10381; AVX2: # %bb.0: 10382; AVX2-NEXT: vmovdqa {{.*#+}} 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] 10383; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 10384; AVX2-NEXT: vmovdqa {{.*#+}} 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] 10385; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 10386; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 10387; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 10388; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 10389; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 10390; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 10391; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10392; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [7,7,7,7] 10393; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 10394; AVX2-NEXT: retq 10395; 10396; AVX512VPOPCNTDQ-LABEL: ult_7_v4i64: 10397; AVX512VPOPCNTDQ: # %bb.0: 10398; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 10399; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 10400; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [7,7,7,7] 10401; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 10402; AVX512VPOPCNTDQ-NEXT: retq 10403; 10404; AVX512VPOPCNTDQVL-LABEL: ult_7_v4i64: 10405; AVX512VPOPCNTDQVL: # %bb.0: 10406; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 10407; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 10408; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 10409; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 10410; AVX512VPOPCNTDQVL-NEXT: retq 10411; 10412; BITALG_NOVLX-LABEL: ult_7_v4i64: 10413; BITALG_NOVLX: # %bb.0: 10414; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 10415; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 10416; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 10417; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10418; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [7,7,7,7] 10419; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 10420; BITALG_NOVLX-NEXT: retq 10421; 10422; BITALG-LABEL: ult_7_v4i64: 10423; BITALG: # %bb.0: 10424; BITALG-NEXT: vpopcntb %ymm0, %ymm0 10425; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 10426; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10427; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 10428; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 10429; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 10430; BITALG-NEXT: retq 10431 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 10432 %3 = icmp ult <4 x i64> %2, <i64 7, i64 7, i64 7, i64 7> 10433 %4 = sext <4 x i1> %3 to <4 x i64> 10434 ret <4 x i64> %4 10435} 10436 10437define <4 x i64> @ugt_7_v4i64(<4 x i64> %0) { 10438; AVX1-LABEL: ugt_7_v4i64: 10439; AVX1: # %bb.0: 10440; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 10441; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 10442; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 10443; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 10444; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 10445; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 10446; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 10447; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 10448; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 10449; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 10450; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 10451; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 10452; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 10453; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 10454; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 10455; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 10456; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 10457; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 10458; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [7,7] 10459; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 10460; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 10461; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 10462; AVX1-NEXT: retq 10463; 10464; AVX2-LABEL: ugt_7_v4i64: 10465; AVX2: # %bb.0: 10466; AVX2-NEXT: vmovdqa {{.*#+}} 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] 10467; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 10468; AVX2-NEXT: vmovdqa {{.*#+}} 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] 10469; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 10470; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 10471; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 10472; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 10473; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 10474; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 10475; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10476; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [7,7,7,7] 10477; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 10478; AVX2-NEXT: retq 10479; 10480; AVX512VPOPCNTDQ-LABEL: ugt_7_v4i64: 10481; AVX512VPOPCNTDQ: # %bb.0: 10482; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 10483; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 10484; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [7,7,7,7] 10485; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 10486; AVX512VPOPCNTDQ-NEXT: retq 10487; 10488; AVX512VPOPCNTDQVL-LABEL: ugt_7_v4i64: 10489; AVX512VPOPCNTDQVL: # %bb.0: 10490; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 10491; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 10492; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 10493; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 10494; AVX512VPOPCNTDQVL-NEXT: retq 10495; 10496; BITALG_NOVLX-LABEL: ugt_7_v4i64: 10497; BITALG_NOVLX: # %bb.0: 10498; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 10499; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 10500; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 10501; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10502; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [7,7,7,7] 10503; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 10504; BITALG_NOVLX-NEXT: retq 10505; 10506; BITALG-LABEL: ugt_7_v4i64: 10507; BITALG: # %bb.0: 10508; BITALG-NEXT: vpopcntb %ymm0, %ymm0 10509; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 10510; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10511; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 10512; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 10513; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 10514; BITALG-NEXT: retq 10515 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 10516 %3 = icmp ugt <4 x i64> %2, <i64 7, i64 7, i64 7, i64 7> 10517 %4 = sext <4 x i1> %3 to <4 x i64> 10518 ret <4 x i64> %4 10519} 10520 10521define <4 x i64> @ult_8_v4i64(<4 x i64> %0) { 10522; AVX1-LABEL: ult_8_v4i64: 10523; AVX1: # %bb.0: 10524; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 10525; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 10526; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 10527; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 10528; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 10529; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 10530; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 10531; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 10532; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 10533; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 10534; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 10535; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 10536; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 10537; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 10538; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 10539; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 10540; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 10541; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 10542; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [8,8] 10543; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 10544; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 10545; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 10546; AVX1-NEXT: retq 10547; 10548; AVX2-LABEL: ult_8_v4i64: 10549; AVX2: # %bb.0: 10550; AVX2-NEXT: vmovdqa {{.*#+}} 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] 10551; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 10552; AVX2-NEXT: vmovdqa {{.*#+}} 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] 10553; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 10554; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 10555; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 10556; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 10557; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 10558; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 10559; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10560; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [8,8,8,8] 10561; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 10562; AVX2-NEXT: retq 10563; 10564; AVX512VPOPCNTDQ-LABEL: ult_8_v4i64: 10565; AVX512VPOPCNTDQ: # %bb.0: 10566; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 10567; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 10568; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [8,8,8,8] 10569; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 10570; AVX512VPOPCNTDQ-NEXT: retq 10571; 10572; AVX512VPOPCNTDQVL-LABEL: ult_8_v4i64: 10573; AVX512VPOPCNTDQVL: # %bb.0: 10574; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 10575; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 10576; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 10577; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 10578; AVX512VPOPCNTDQVL-NEXT: retq 10579; 10580; BITALG_NOVLX-LABEL: ult_8_v4i64: 10581; BITALG_NOVLX: # %bb.0: 10582; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 10583; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 10584; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 10585; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10586; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [8,8,8,8] 10587; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 10588; BITALG_NOVLX-NEXT: retq 10589; 10590; BITALG-LABEL: ult_8_v4i64: 10591; BITALG: # %bb.0: 10592; BITALG-NEXT: vpopcntb %ymm0, %ymm0 10593; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 10594; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10595; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 10596; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 10597; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 10598; BITALG-NEXT: retq 10599 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 10600 %3 = icmp ult <4 x i64> %2, <i64 8, i64 8, i64 8, i64 8> 10601 %4 = sext <4 x i1> %3 to <4 x i64> 10602 ret <4 x i64> %4 10603} 10604 10605define <4 x i64> @ugt_8_v4i64(<4 x i64> %0) { 10606; AVX1-LABEL: ugt_8_v4i64: 10607; AVX1: # %bb.0: 10608; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 10609; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 10610; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 10611; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 10612; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 10613; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 10614; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 10615; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 10616; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 10617; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 10618; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 10619; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 10620; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 10621; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 10622; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 10623; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 10624; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 10625; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 10626; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [8,8] 10627; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 10628; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 10629; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 10630; AVX1-NEXT: retq 10631; 10632; AVX2-LABEL: ugt_8_v4i64: 10633; AVX2: # %bb.0: 10634; AVX2-NEXT: vmovdqa {{.*#+}} 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] 10635; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 10636; AVX2-NEXT: vmovdqa {{.*#+}} 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] 10637; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 10638; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 10639; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 10640; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 10641; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 10642; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 10643; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10644; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [8,8,8,8] 10645; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 10646; AVX2-NEXT: retq 10647; 10648; AVX512VPOPCNTDQ-LABEL: ugt_8_v4i64: 10649; AVX512VPOPCNTDQ: # %bb.0: 10650; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 10651; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 10652; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [8,8,8,8] 10653; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 10654; AVX512VPOPCNTDQ-NEXT: retq 10655; 10656; AVX512VPOPCNTDQVL-LABEL: ugt_8_v4i64: 10657; AVX512VPOPCNTDQVL: # %bb.0: 10658; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 10659; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 10660; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 10661; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 10662; AVX512VPOPCNTDQVL-NEXT: retq 10663; 10664; BITALG_NOVLX-LABEL: ugt_8_v4i64: 10665; BITALG_NOVLX: # %bb.0: 10666; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 10667; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 10668; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 10669; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10670; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [8,8,8,8] 10671; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 10672; BITALG_NOVLX-NEXT: retq 10673; 10674; BITALG-LABEL: ugt_8_v4i64: 10675; BITALG: # %bb.0: 10676; BITALG-NEXT: vpopcntb %ymm0, %ymm0 10677; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 10678; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10679; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 10680; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 10681; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 10682; BITALG-NEXT: retq 10683 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 10684 %3 = icmp ugt <4 x i64> %2, <i64 8, i64 8, i64 8, i64 8> 10685 %4 = sext <4 x i1> %3 to <4 x i64> 10686 ret <4 x i64> %4 10687} 10688 10689define <4 x i64> @ult_9_v4i64(<4 x i64> %0) { 10690; AVX1-LABEL: ult_9_v4i64: 10691; AVX1: # %bb.0: 10692; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 10693; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 10694; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 10695; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 10696; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 10697; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 10698; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 10699; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 10700; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 10701; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 10702; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 10703; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 10704; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 10705; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 10706; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 10707; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 10708; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 10709; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 10710; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [9,9] 10711; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 10712; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 10713; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 10714; AVX1-NEXT: retq 10715; 10716; AVX2-LABEL: ult_9_v4i64: 10717; AVX2: # %bb.0: 10718; AVX2-NEXT: vmovdqa {{.*#+}} 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] 10719; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 10720; AVX2-NEXT: vmovdqa {{.*#+}} 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] 10721; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 10722; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 10723; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 10724; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 10725; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 10726; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 10727; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10728; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [9,9,9,9] 10729; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 10730; AVX2-NEXT: retq 10731; 10732; AVX512VPOPCNTDQ-LABEL: ult_9_v4i64: 10733; AVX512VPOPCNTDQ: # %bb.0: 10734; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 10735; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 10736; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [9,9,9,9] 10737; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 10738; AVX512VPOPCNTDQ-NEXT: retq 10739; 10740; AVX512VPOPCNTDQVL-LABEL: ult_9_v4i64: 10741; AVX512VPOPCNTDQVL: # %bb.0: 10742; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 10743; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 10744; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 10745; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 10746; AVX512VPOPCNTDQVL-NEXT: retq 10747; 10748; BITALG_NOVLX-LABEL: ult_9_v4i64: 10749; BITALG_NOVLX: # %bb.0: 10750; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 10751; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 10752; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 10753; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10754; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [9,9,9,9] 10755; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 10756; BITALG_NOVLX-NEXT: retq 10757; 10758; BITALG-LABEL: ult_9_v4i64: 10759; BITALG: # %bb.0: 10760; BITALG-NEXT: vpopcntb %ymm0, %ymm0 10761; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 10762; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10763; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 10764; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 10765; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 10766; BITALG-NEXT: retq 10767 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 10768 %3 = icmp ult <4 x i64> %2, <i64 9, i64 9, i64 9, i64 9> 10769 %4 = sext <4 x i1> %3 to <4 x i64> 10770 ret <4 x i64> %4 10771} 10772 10773define <4 x i64> @ugt_9_v4i64(<4 x i64> %0) { 10774; AVX1-LABEL: ugt_9_v4i64: 10775; AVX1: # %bb.0: 10776; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 10777; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 10778; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 10779; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 10780; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 10781; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 10782; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 10783; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 10784; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 10785; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 10786; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 10787; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 10788; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 10789; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 10790; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 10791; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 10792; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 10793; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 10794; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [9,9] 10795; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 10796; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 10797; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 10798; AVX1-NEXT: retq 10799; 10800; AVX2-LABEL: ugt_9_v4i64: 10801; AVX2: # %bb.0: 10802; AVX2-NEXT: vmovdqa {{.*#+}} 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] 10803; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 10804; AVX2-NEXT: vmovdqa {{.*#+}} 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] 10805; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 10806; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 10807; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 10808; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 10809; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 10810; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 10811; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10812; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [9,9,9,9] 10813; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 10814; AVX2-NEXT: retq 10815; 10816; AVX512VPOPCNTDQ-LABEL: ugt_9_v4i64: 10817; AVX512VPOPCNTDQ: # %bb.0: 10818; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 10819; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 10820; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [9,9,9,9] 10821; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 10822; AVX512VPOPCNTDQ-NEXT: retq 10823; 10824; AVX512VPOPCNTDQVL-LABEL: ugt_9_v4i64: 10825; AVX512VPOPCNTDQVL: # %bb.0: 10826; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 10827; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 10828; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 10829; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 10830; AVX512VPOPCNTDQVL-NEXT: retq 10831; 10832; BITALG_NOVLX-LABEL: ugt_9_v4i64: 10833; BITALG_NOVLX: # %bb.0: 10834; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 10835; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 10836; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 10837; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10838; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [9,9,9,9] 10839; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 10840; BITALG_NOVLX-NEXT: retq 10841; 10842; BITALG-LABEL: ugt_9_v4i64: 10843; BITALG: # %bb.0: 10844; BITALG-NEXT: vpopcntb %ymm0, %ymm0 10845; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 10846; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10847; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 10848; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 10849; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 10850; BITALG-NEXT: retq 10851 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 10852 %3 = icmp ugt <4 x i64> %2, <i64 9, i64 9, i64 9, i64 9> 10853 %4 = sext <4 x i1> %3 to <4 x i64> 10854 ret <4 x i64> %4 10855} 10856 10857define <4 x i64> @ult_10_v4i64(<4 x i64> %0) { 10858; AVX1-LABEL: ult_10_v4i64: 10859; AVX1: # %bb.0: 10860; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 10861; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 10862; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 10863; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 10864; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 10865; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 10866; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 10867; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 10868; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 10869; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 10870; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 10871; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 10872; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 10873; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 10874; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 10875; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 10876; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 10877; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 10878; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [10,10] 10879; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 10880; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 10881; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 10882; AVX1-NEXT: retq 10883; 10884; AVX2-LABEL: ult_10_v4i64: 10885; AVX2: # %bb.0: 10886; AVX2-NEXT: vmovdqa {{.*#+}} 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] 10887; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 10888; AVX2-NEXT: vmovdqa {{.*#+}} 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] 10889; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 10890; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 10891; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 10892; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 10893; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 10894; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 10895; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10896; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [10,10,10,10] 10897; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 10898; AVX2-NEXT: retq 10899; 10900; AVX512VPOPCNTDQ-LABEL: ult_10_v4i64: 10901; AVX512VPOPCNTDQ: # %bb.0: 10902; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 10903; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 10904; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [10,10,10,10] 10905; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 10906; AVX512VPOPCNTDQ-NEXT: retq 10907; 10908; AVX512VPOPCNTDQVL-LABEL: ult_10_v4i64: 10909; AVX512VPOPCNTDQVL: # %bb.0: 10910; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 10911; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 10912; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 10913; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 10914; AVX512VPOPCNTDQVL-NEXT: retq 10915; 10916; BITALG_NOVLX-LABEL: ult_10_v4i64: 10917; BITALG_NOVLX: # %bb.0: 10918; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 10919; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 10920; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 10921; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10922; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [10,10,10,10] 10923; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 10924; BITALG_NOVLX-NEXT: retq 10925; 10926; BITALG-LABEL: ult_10_v4i64: 10927; BITALG: # %bb.0: 10928; BITALG-NEXT: vpopcntb %ymm0, %ymm0 10929; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 10930; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10931; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 10932; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 10933; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 10934; BITALG-NEXT: retq 10935 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 10936 %3 = icmp ult <4 x i64> %2, <i64 10, i64 10, i64 10, i64 10> 10937 %4 = sext <4 x i1> %3 to <4 x i64> 10938 ret <4 x i64> %4 10939} 10940 10941define <4 x i64> @ugt_10_v4i64(<4 x i64> %0) { 10942; AVX1-LABEL: ugt_10_v4i64: 10943; AVX1: # %bb.0: 10944; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 10945; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 10946; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 10947; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 10948; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 10949; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 10950; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 10951; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 10952; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 10953; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 10954; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 10955; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 10956; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 10957; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 10958; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 10959; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 10960; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 10961; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 10962; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [10,10] 10963; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 10964; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 10965; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 10966; AVX1-NEXT: retq 10967; 10968; AVX2-LABEL: ugt_10_v4i64: 10969; AVX2: # %bb.0: 10970; AVX2-NEXT: vmovdqa {{.*#+}} 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] 10971; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 10972; AVX2-NEXT: vmovdqa {{.*#+}} 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] 10973; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 10974; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 10975; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 10976; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 10977; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 10978; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 10979; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 10980; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [10,10,10,10] 10981; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 10982; AVX2-NEXT: retq 10983; 10984; AVX512VPOPCNTDQ-LABEL: ugt_10_v4i64: 10985; AVX512VPOPCNTDQ: # %bb.0: 10986; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 10987; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 10988; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [10,10,10,10] 10989; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 10990; AVX512VPOPCNTDQ-NEXT: retq 10991; 10992; AVX512VPOPCNTDQVL-LABEL: ugt_10_v4i64: 10993; AVX512VPOPCNTDQVL: # %bb.0: 10994; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 10995; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 10996; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 10997; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 10998; AVX512VPOPCNTDQVL-NEXT: retq 10999; 11000; BITALG_NOVLX-LABEL: ugt_10_v4i64: 11001; BITALG_NOVLX: # %bb.0: 11002; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 11003; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 11004; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 11005; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11006; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [10,10,10,10] 11007; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 11008; BITALG_NOVLX-NEXT: retq 11009; 11010; BITALG-LABEL: ugt_10_v4i64: 11011; BITALG: # %bb.0: 11012; BITALG-NEXT: vpopcntb %ymm0, %ymm0 11013; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 11014; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11015; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 11016; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 11017; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 11018; BITALG-NEXT: retq 11019 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 11020 %3 = icmp ugt <4 x i64> %2, <i64 10, i64 10, i64 10, i64 10> 11021 %4 = sext <4 x i1> %3 to <4 x i64> 11022 ret <4 x i64> %4 11023} 11024 11025define <4 x i64> @ult_11_v4i64(<4 x i64> %0) { 11026; AVX1-LABEL: ult_11_v4i64: 11027; AVX1: # %bb.0: 11028; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 11029; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 11030; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 11031; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 11032; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 11033; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 11034; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 11035; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 11036; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 11037; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 11038; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 11039; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 11040; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 11041; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 11042; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 11043; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 11044; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 11045; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 11046; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [11,11] 11047; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 11048; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 11049; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 11050; AVX1-NEXT: retq 11051; 11052; AVX2-LABEL: ult_11_v4i64: 11053; AVX2: # %bb.0: 11054; AVX2-NEXT: vmovdqa {{.*#+}} 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] 11055; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 11056; AVX2-NEXT: vmovdqa {{.*#+}} 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] 11057; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 11058; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 11059; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 11060; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 11061; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 11062; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 11063; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11064; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [11,11,11,11] 11065; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 11066; AVX2-NEXT: retq 11067; 11068; AVX512VPOPCNTDQ-LABEL: ult_11_v4i64: 11069; AVX512VPOPCNTDQ: # %bb.0: 11070; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 11071; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 11072; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [11,11,11,11] 11073; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 11074; AVX512VPOPCNTDQ-NEXT: retq 11075; 11076; AVX512VPOPCNTDQVL-LABEL: ult_11_v4i64: 11077; AVX512VPOPCNTDQVL: # %bb.0: 11078; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 11079; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 11080; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 11081; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 11082; AVX512VPOPCNTDQVL-NEXT: retq 11083; 11084; BITALG_NOVLX-LABEL: ult_11_v4i64: 11085; BITALG_NOVLX: # %bb.0: 11086; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 11087; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 11088; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 11089; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11090; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [11,11,11,11] 11091; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 11092; BITALG_NOVLX-NEXT: retq 11093; 11094; BITALG-LABEL: ult_11_v4i64: 11095; BITALG: # %bb.0: 11096; BITALG-NEXT: vpopcntb %ymm0, %ymm0 11097; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 11098; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11099; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 11100; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 11101; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 11102; BITALG-NEXT: retq 11103 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 11104 %3 = icmp ult <4 x i64> %2, <i64 11, i64 11, i64 11, i64 11> 11105 %4 = sext <4 x i1> %3 to <4 x i64> 11106 ret <4 x i64> %4 11107} 11108 11109define <4 x i64> @ugt_11_v4i64(<4 x i64> %0) { 11110; AVX1-LABEL: ugt_11_v4i64: 11111; AVX1: # %bb.0: 11112; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 11113; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 11114; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 11115; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 11116; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 11117; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 11118; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 11119; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 11120; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 11121; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 11122; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 11123; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 11124; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 11125; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 11126; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 11127; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 11128; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 11129; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 11130; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [11,11] 11131; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 11132; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 11133; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 11134; AVX1-NEXT: retq 11135; 11136; AVX2-LABEL: ugt_11_v4i64: 11137; AVX2: # %bb.0: 11138; AVX2-NEXT: vmovdqa {{.*#+}} 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] 11139; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 11140; AVX2-NEXT: vmovdqa {{.*#+}} 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] 11141; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 11142; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 11143; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 11144; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 11145; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 11146; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 11147; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11148; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [11,11,11,11] 11149; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 11150; AVX2-NEXT: retq 11151; 11152; AVX512VPOPCNTDQ-LABEL: ugt_11_v4i64: 11153; AVX512VPOPCNTDQ: # %bb.0: 11154; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 11155; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 11156; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [11,11,11,11] 11157; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 11158; AVX512VPOPCNTDQ-NEXT: retq 11159; 11160; AVX512VPOPCNTDQVL-LABEL: ugt_11_v4i64: 11161; AVX512VPOPCNTDQVL: # %bb.0: 11162; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 11163; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 11164; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 11165; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 11166; AVX512VPOPCNTDQVL-NEXT: retq 11167; 11168; BITALG_NOVLX-LABEL: ugt_11_v4i64: 11169; BITALG_NOVLX: # %bb.0: 11170; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 11171; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 11172; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 11173; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11174; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [11,11,11,11] 11175; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 11176; BITALG_NOVLX-NEXT: retq 11177; 11178; BITALG-LABEL: ugt_11_v4i64: 11179; BITALG: # %bb.0: 11180; BITALG-NEXT: vpopcntb %ymm0, %ymm0 11181; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 11182; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11183; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 11184; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 11185; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 11186; BITALG-NEXT: retq 11187 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 11188 %3 = icmp ugt <4 x i64> %2, <i64 11, i64 11, i64 11, i64 11> 11189 %4 = sext <4 x i1> %3 to <4 x i64> 11190 ret <4 x i64> %4 11191} 11192 11193define <4 x i64> @ult_12_v4i64(<4 x i64> %0) { 11194; AVX1-LABEL: ult_12_v4i64: 11195; AVX1: # %bb.0: 11196; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 11197; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 11198; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 11199; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 11200; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 11201; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 11202; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 11203; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 11204; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 11205; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 11206; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 11207; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 11208; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 11209; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 11210; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 11211; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 11212; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 11213; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 11214; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [12,12] 11215; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 11216; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 11217; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 11218; AVX1-NEXT: retq 11219; 11220; AVX2-LABEL: ult_12_v4i64: 11221; AVX2: # %bb.0: 11222; AVX2-NEXT: vmovdqa {{.*#+}} 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] 11223; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 11224; AVX2-NEXT: vmovdqa {{.*#+}} 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] 11225; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 11226; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 11227; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 11228; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 11229; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 11230; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 11231; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11232; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [12,12,12,12] 11233; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 11234; AVX2-NEXT: retq 11235; 11236; AVX512VPOPCNTDQ-LABEL: ult_12_v4i64: 11237; AVX512VPOPCNTDQ: # %bb.0: 11238; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 11239; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 11240; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [12,12,12,12] 11241; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 11242; AVX512VPOPCNTDQ-NEXT: retq 11243; 11244; AVX512VPOPCNTDQVL-LABEL: ult_12_v4i64: 11245; AVX512VPOPCNTDQVL: # %bb.0: 11246; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 11247; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 11248; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 11249; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 11250; AVX512VPOPCNTDQVL-NEXT: retq 11251; 11252; BITALG_NOVLX-LABEL: ult_12_v4i64: 11253; BITALG_NOVLX: # %bb.0: 11254; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 11255; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 11256; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 11257; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11258; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [12,12,12,12] 11259; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 11260; BITALG_NOVLX-NEXT: retq 11261; 11262; BITALG-LABEL: ult_12_v4i64: 11263; BITALG: # %bb.0: 11264; BITALG-NEXT: vpopcntb %ymm0, %ymm0 11265; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 11266; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11267; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 11268; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 11269; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 11270; BITALG-NEXT: retq 11271 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 11272 %3 = icmp ult <4 x i64> %2, <i64 12, i64 12, i64 12, i64 12> 11273 %4 = sext <4 x i1> %3 to <4 x i64> 11274 ret <4 x i64> %4 11275} 11276 11277define <4 x i64> @ugt_12_v4i64(<4 x i64> %0) { 11278; AVX1-LABEL: ugt_12_v4i64: 11279; AVX1: # %bb.0: 11280; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 11281; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 11282; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 11283; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 11284; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 11285; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 11286; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 11287; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 11288; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 11289; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 11290; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 11291; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 11292; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 11293; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 11294; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 11295; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 11296; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 11297; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 11298; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [12,12] 11299; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 11300; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 11301; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 11302; AVX1-NEXT: retq 11303; 11304; AVX2-LABEL: ugt_12_v4i64: 11305; AVX2: # %bb.0: 11306; AVX2-NEXT: vmovdqa {{.*#+}} 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] 11307; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 11308; AVX2-NEXT: vmovdqa {{.*#+}} 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] 11309; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 11310; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 11311; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 11312; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 11313; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 11314; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 11315; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11316; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [12,12,12,12] 11317; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 11318; AVX2-NEXT: retq 11319; 11320; AVX512VPOPCNTDQ-LABEL: ugt_12_v4i64: 11321; AVX512VPOPCNTDQ: # %bb.0: 11322; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 11323; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 11324; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [12,12,12,12] 11325; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 11326; AVX512VPOPCNTDQ-NEXT: retq 11327; 11328; AVX512VPOPCNTDQVL-LABEL: ugt_12_v4i64: 11329; AVX512VPOPCNTDQVL: # %bb.0: 11330; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 11331; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 11332; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 11333; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 11334; AVX512VPOPCNTDQVL-NEXT: retq 11335; 11336; BITALG_NOVLX-LABEL: ugt_12_v4i64: 11337; BITALG_NOVLX: # %bb.0: 11338; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 11339; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 11340; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 11341; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11342; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [12,12,12,12] 11343; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 11344; BITALG_NOVLX-NEXT: retq 11345; 11346; BITALG-LABEL: ugt_12_v4i64: 11347; BITALG: # %bb.0: 11348; BITALG-NEXT: vpopcntb %ymm0, %ymm0 11349; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 11350; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11351; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 11352; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 11353; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 11354; BITALG-NEXT: retq 11355 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 11356 %3 = icmp ugt <4 x i64> %2, <i64 12, i64 12, i64 12, i64 12> 11357 %4 = sext <4 x i1> %3 to <4 x i64> 11358 ret <4 x i64> %4 11359} 11360 11361define <4 x i64> @ult_13_v4i64(<4 x i64> %0) { 11362; AVX1-LABEL: ult_13_v4i64: 11363; AVX1: # %bb.0: 11364; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 11365; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 11366; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 11367; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 11368; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 11369; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 11370; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 11371; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 11372; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 11373; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 11374; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 11375; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 11376; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 11377; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 11378; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 11379; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 11380; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 11381; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 11382; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [13,13] 11383; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 11384; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 11385; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 11386; AVX1-NEXT: retq 11387; 11388; AVX2-LABEL: ult_13_v4i64: 11389; AVX2: # %bb.0: 11390; AVX2-NEXT: vmovdqa {{.*#+}} 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] 11391; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 11392; AVX2-NEXT: vmovdqa {{.*#+}} 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] 11393; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 11394; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 11395; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 11396; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 11397; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 11398; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 11399; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11400; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [13,13,13,13] 11401; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 11402; AVX2-NEXT: retq 11403; 11404; AVX512VPOPCNTDQ-LABEL: ult_13_v4i64: 11405; AVX512VPOPCNTDQ: # %bb.0: 11406; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 11407; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 11408; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [13,13,13,13] 11409; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 11410; AVX512VPOPCNTDQ-NEXT: retq 11411; 11412; AVX512VPOPCNTDQVL-LABEL: ult_13_v4i64: 11413; AVX512VPOPCNTDQVL: # %bb.0: 11414; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 11415; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 11416; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 11417; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 11418; AVX512VPOPCNTDQVL-NEXT: retq 11419; 11420; BITALG_NOVLX-LABEL: ult_13_v4i64: 11421; BITALG_NOVLX: # %bb.0: 11422; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 11423; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 11424; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 11425; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11426; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [13,13,13,13] 11427; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 11428; BITALG_NOVLX-NEXT: retq 11429; 11430; BITALG-LABEL: ult_13_v4i64: 11431; BITALG: # %bb.0: 11432; BITALG-NEXT: vpopcntb %ymm0, %ymm0 11433; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 11434; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11435; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 11436; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 11437; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 11438; BITALG-NEXT: retq 11439 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 11440 %3 = icmp ult <4 x i64> %2, <i64 13, i64 13, i64 13, i64 13> 11441 %4 = sext <4 x i1> %3 to <4 x i64> 11442 ret <4 x i64> %4 11443} 11444 11445define <4 x i64> @ugt_13_v4i64(<4 x i64> %0) { 11446; AVX1-LABEL: ugt_13_v4i64: 11447; AVX1: # %bb.0: 11448; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 11449; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 11450; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 11451; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 11452; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 11453; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 11454; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 11455; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 11456; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 11457; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 11458; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 11459; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 11460; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 11461; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 11462; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 11463; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 11464; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 11465; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 11466; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [13,13] 11467; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 11468; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 11469; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 11470; AVX1-NEXT: retq 11471; 11472; AVX2-LABEL: ugt_13_v4i64: 11473; AVX2: # %bb.0: 11474; AVX2-NEXT: vmovdqa {{.*#+}} 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] 11475; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 11476; AVX2-NEXT: vmovdqa {{.*#+}} 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] 11477; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 11478; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 11479; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 11480; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 11481; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 11482; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 11483; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11484; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [13,13,13,13] 11485; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 11486; AVX2-NEXT: retq 11487; 11488; AVX512VPOPCNTDQ-LABEL: ugt_13_v4i64: 11489; AVX512VPOPCNTDQ: # %bb.0: 11490; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 11491; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 11492; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [13,13,13,13] 11493; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 11494; AVX512VPOPCNTDQ-NEXT: retq 11495; 11496; AVX512VPOPCNTDQVL-LABEL: ugt_13_v4i64: 11497; AVX512VPOPCNTDQVL: # %bb.0: 11498; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 11499; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 11500; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 11501; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 11502; AVX512VPOPCNTDQVL-NEXT: retq 11503; 11504; BITALG_NOVLX-LABEL: ugt_13_v4i64: 11505; BITALG_NOVLX: # %bb.0: 11506; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 11507; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 11508; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 11509; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11510; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [13,13,13,13] 11511; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 11512; BITALG_NOVLX-NEXT: retq 11513; 11514; BITALG-LABEL: ugt_13_v4i64: 11515; BITALG: # %bb.0: 11516; BITALG-NEXT: vpopcntb %ymm0, %ymm0 11517; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 11518; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11519; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 11520; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 11521; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 11522; BITALG-NEXT: retq 11523 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 11524 %3 = icmp ugt <4 x i64> %2, <i64 13, i64 13, i64 13, i64 13> 11525 %4 = sext <4 x i1> %3 to <4 x i64> 11526 ret <4 x i64> %4 11527} 11528 11529define <4 x i64> @ult_14_v4i64(<4 x i64> %0) { 11530; AVX1-LABEL: ult_14_v4i64: 11531; AVX1: # %bb.0: 11532; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 11533; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 11534; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 11535; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 11536; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 11537; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 11538; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 11539; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 11540; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 11541; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 11542; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 11543; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 11544; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 11545; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 11546; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 11547; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 11548; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 11549; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 11550; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [14,14] 11551; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 11552; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 11553; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 11554; AVX1-NEXT: retq 11555; 11556; AVX2-LABEL: ult_14_v4i64: 11557; AVX2: # %bb.0: 11558; AVX2-NEXT: vmovdqa {{.*#+}} 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] 11559; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 11560; AVX2-NEXT: vmovdqa {{.*#+}} 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] 11561; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 11562; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 11563; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 11564; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 11565; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 11566; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 11567; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11568; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [14,14,14,14] 11569; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 11570; AVX2-NEXT: retq 11571; 11572; AVX512VPOPCNTDQ-LABEL: ult_14_v4i64: 11573; AVX512VPOPCNTDQ: # %bb.0: 11574; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 11575; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 11576; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [14,14,14,14] 11577; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 11578; AVX512VPOPCNTDQ-NEXT: retq 11579; 11580; AVX512VPOPCNTDQVL-LABEL: ult_14_v4i64: 11581; AVX512VPOPCNTDQVL: # %bb.0: 11582; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 11583; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 11584; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 11585; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 11586; AVX512VPOPCNTDQVL-NEXT: retq 11587; 11588; BITALG_NOVLX-LABEL: ult_14_v4i64: 11589; BITALG_NOVLX: # %bb.0: 11590; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 11591; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 11592; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 11593; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11594; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [14,14,14,14] 11595; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 11596; BITALG_NOVLX-NEXT: retq 11597; 11598; BITALG-LABEL: ult_14_v4i64: 11599; BITALG: # %bb.0: 11600; BITALG-NEXT: vpopcntb %ymm0, %ymm0 11601; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 11602; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11603; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 11604; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 11605; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 11606; BITALG-NEXT: retq 11607 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 11608 %3 = icmp ult <4 x i64> %2, <i64 14, i64 14, i64 14, i64 14> 11609 %4 = sext <4 x i1> %3 to <4 x i64> 11610 ret <4 x i64> %4 11611} 11612 11613define <4 x i64> @ugt_14_v4i64(<4 x i64> %0) { 11614; AVX1-LABEL: ugt_14_v4i64: 11615; AVX1: # %bb.0: 11616; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 11617; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 11618; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 11619; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 11620; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 11621; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 11622; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 11623; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 11624; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 11625; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 11626; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 11627; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 11628; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 11629; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 11630; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 11631; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 11632; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 11633; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 11634; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [14,14] 11635; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 11636; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 11637; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 11638; AVX1-NEXT: retq 11639; 11640; AVX2-LABEL: ugt_14_v4i64: 11641; AVX2: # %bb.0: 11642; AVX2-NEXT: vmovdqa {{.*#+}} 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] 11643; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 11644; AVX2-NEXT: vmovdqa {{.*#+}} 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] 11645; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 11646; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 11647; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 11648; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 11649; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 11650; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 11651; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11652; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [14,14,14,14] 11653; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 11654; AVX2-NEXT: retq 11655; 11656; AVX512VPOPCNTDQ-LABEL: ugt_14_v4i64: 11657; AVX512VPOPCNTDQ: # %bb.0: 11658; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 11659; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 11660; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [14,14,14,14] 11661; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 11662; AVX512VPOPCNTDQ-NEXT: retq 11663; 11664; AVX512VPOPCNTDQVL-LABEL: ugt_14_v4i64: 11665; AVX512VPOPCNTDQVL: # %bb.0: 11666; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 11667; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 11668; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 11669; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 11670; AVX512VPOPCNTDQVL-NEXT: retq 11671; 11672; BITALG_NOVLX-LABEL: ugt_14_v4i64: 11673; BITALG_NOVLX: # %bb.0: 11674; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 11675; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 11676; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 11677; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11678; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [14,14,14,14] 11679; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 11680; BITALG_NOVLX-NEXT: retq 11681; 11682; BITALG-LABEL: ugt_14_v4i64: 11683; BITALG: # %bb.0: 11684; BITALG-NEXT: vpopcntb %ymm0, %ymm0 11685; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 11686; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11687; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 11688; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 11689; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 11690; BITALG-NEXT: retq 11691 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 11692 %3 = icmp ugt <4 x i64> %2, <i64 14, i64 14, i64 14, i64 14> 11693 %4 = sext <4 x i1> %3 to <4 x i64> 11694 ret <4 x i64> %4 11695} 11696 11697define <4 x i64> @ult_15_v4i64(<4 x i64> %0) { 11698; AVX1-LABEL: ult_15_v4i64: 11699; AVX1: # %bb.0: 11700; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 11701; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 11702; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 11703; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 11704; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 11705; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 11706; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 11707; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 11708; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 11709; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 11710; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 11711; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 11712; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 11713; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 11714; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 11715; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 11716; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 11717; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 11718; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15] 11719; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 11720; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 11721; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 11722; AVX1-NEXT: retq 11723; 11724; AVX2-LABEL: ult_15_v4i64: 11725; AVX2: # %bb.0: 11726; AVX2-NEXT: vmovdqa {{.*#+}} 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] 11727; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 11728; AVX2-NEXT: vmovdqa {{.*#+}} 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] 11729; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 11730; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 11731; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 11732; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 11733; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 11734; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 11735; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11736; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [15,15,15,15] 11737; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 11738; AVX2-NEXT: retq 11739; 11740; AVX512VPOPCNTDQ-LABEL: ult_15_v4i64: 11741; AVX512VPOPCNTDQ: # %bb.0: 11742; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 11743; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 11744; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [15,15,15,15] 11745; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 11746; AVX512VPOPCNTDQ-NEXT: retq 11747; 11748; AVX512VPOPCNTDQVL-LABEL: ult_15_v4i64: 11749; AVX512VPOPCNTDQVL: # %bb.0: 11750; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 11751; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 11752; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 11753; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 11754; AVX512VPOPCNTDQVL-NEXT: retq 11755; 11756; BITALG_NOVLX-LABEL: ult_15_v4i64: 11757; BITALG_NOVLX: # %bb.0: 11758; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 11759; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 11760; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 11761; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11762; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [15,15,15,15] 11763; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 11764; BITALG_NOVLX-NEXT: retq 11765; 11766; BITALG-LABEL: ult_15_v4i64: 11767; BITALG: # %bb.0: 11768; BITALG-NEXT: vpopcntb %ymm0, %ymm0 11769; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 11770; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11771; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 11772; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 11773; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 11774; BITALG-NEXT: retq 11775 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 11776 %3 = icmp ult <4 x i64> %2, <i64 15, i64 15, i64 15, i64 15> 11777 %4 = sext <4 x i1> %3 to <4 x i64> 11778 ret <4 x i64> %4 11779} 11780 11781define <4 x i64> @ugt_15_v4i64(<4 x i64> %0) { 11782; AVX1-LABEL: ugt_15_v4i64: 11783; AVX1: # %bb.0: 11784; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 11785; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 11786; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 11787; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 11788; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 11789; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 11790; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 11791; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 11792; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 11793; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 11794; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 11795; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 11796; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 11797; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 11798; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 11799; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 11800; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 11801; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 11802; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15] 11803; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 11804; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 11805; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 11806; AVX1-NEXT: retq 11807; 11808; AVX2-LABEL: ugt_15_v4i64: 11809; AVX2: # %bb.0: 11810; AVX2-NEXT: vmovdqa {{.*#+}} 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] 11811; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 11812; AVX2-NEXT: vmovdqa {{.*#+}} 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] 11813; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 11814; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 11815; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 11816; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 11817; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 11818; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 11819; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11820; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [15,15,15,15] 11821; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 11822; AVX2-NEXT: retq 11823; 11824; AVX512VPOPCNTDQ-LABEL: ugt_15_v4i64: 11825; AVX512VPOPCNTDQ: # %bb.0: 11826; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 11827; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 11828; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [15,15,15,15] 11829; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 11830; AVX512VPOPCNTDQ-NEXT: retq 11831; 11832; AVX512VPOPCNTDQVL-LABEL: ugt_15_v4i64: 11833; AVX512VPOPCNTDQVL: # %bb.0: 11834; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 11835; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 11836; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 11837; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 11838; AVX512VPOPCNTDQVL-NEXT: retq 11839; 11840; BITALG_NOVLX-LABEL: ugt_15_v4i64: 11841; BITALG_NOVLX: # %bb.0: 11842; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 11843; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 11844; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 11845; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11846; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [15,15,15,15] 11847; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 11848; BITALG_NOVLX-NEXT: retq 11849; 11850; BITALG-LABEL: ugt_15_v4i64: 11851; BITALG: # %bb.0: 11852; BITALG-NEXT: vpopcntb %ymm0, %ymm0 11853; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 11854; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11855; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 11856; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 11857; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 11858; BITALG-NEXT: retq 11859 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 11860 %3 = icmp ugt <4 x i64> %2, <i64 15, i64 15, i64 15, i64 15> 11861 %4 = sext <4 x i1> %3 to <4 x i64> 11862 ret <4 x i64> %4 11863} 11864 11865define <4 x i64> @ult_16_v4i64(<4 x i64> %0) { 11866; AVX1-LABEL: ult_16_v4i64: 11867; AVX1: # %bb.0: 11868; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 11869; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 11870; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 11871; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 11872; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 11873; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 11874; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 11875; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 11876; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 11877; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 11878; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 11879; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 11880; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 11881; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 11882; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 11883; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 11884; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 11885; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 11886; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [16,16] 11887; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 11888; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 11889; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 11890; AVX1-NEXT: retq 11891; 11892; AVX2-LABEL: ult_16_v4i64: 11893; AVX2: # %bb.0: 11894; AVX2-NEXT: vmovdqa {{.*#+}} 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] 11895; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 11896; AVX2-NEXT: vmovdqa {{.*#+}} 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] 11897; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 11898; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 11899; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 11900; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 11901; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 11902; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 11903; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11904; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [16,16,16,16] 11905; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 11906; AVX2-NEXT: retq 11907; 11908; AVX512VPOPCNTDQ-LABEL: ult_16_v4i64: 11909; AVX512VPOPCNTDQ: # %bb.0: 11910; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 11911; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 11912; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [16,16,16,16] 11913; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 11914; AVX512VPOPCNTDQ-NEXT: retq 11915; 11916; AVX512VPOPCNTDQVL-LABEL: ult_16_v4i64: 11917; AVX512VPOPCNTDQVL: # %bb.0: 11918; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 11919; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 11920; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 11921; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 11922; AVX512VPOPCNTDQVL-NEXT: retq 11923; 11924; BITALG_NOVLX-LABEL: ult_16_v4i64: 11925; BITALG_NOVLX: # %bb.0: 11926; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 11927; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 11928; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 11929; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11930; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [16,16,16,16] 11931; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 11932; BITALG_NOVLX-NEXT: retq 11933; 11934; BITALG-LABEL: ult_16_v4i64: 11935; BITALG: # %bb.0: 11936; BITALG-NEXT: vpopcntb %ymm0, %ymm0 11937; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 11938; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11939; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 11940; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 11941; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 11942; BITALG-NEXT: retq 11943 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 11944 %3 = icmp ult <4 x i64> %2, <i64 16, i64 16, i64 16, i64 16> 11945 %4 = sext <4 x i1> %3 to <4 x i64> 11946 ret <4 x i64> %4 11947} 11948 11949define <4 x i64> @ugt_16_v4i64(<4 x i64> %0) { 11950; AVX1-LABEL: ugt_16_v4i64: 11951; AVX1: # %bb.0: 11952; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 11953; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 11954; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 11955; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 11956; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 11957; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 11958; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 11959; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 11960; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 11961; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 11962; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 11963; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 11964; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 11965; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 11966; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 11967; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 11968; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 11969; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 11970; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [16,16] 11971; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 11972; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 11973; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 11974; AVX1-NEXT: retq 11975; 11976; AVX2-LABEL: ugt_16_v4i64: 11977; AVX2: # %bb.0: 11978; AVX2-NEXT: vmovdqa {{.*#+}} 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] 11979; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 11980; AVX2-NEXT: vmovdqa {{.*#+}} 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] 11981; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 11982; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 11983; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 11984; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 11985; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 11986; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 11987; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 11988; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [16,16,16,16] 11989; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 11990; AVX2-NEXT: retq 11991; 11992; AVX512VPOPCNTDQ-LABEL: ugt_16_v4i64: 11993; AVX512VPOPCNTDQ: # %bb.0: 11994; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 11995; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 11996; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [16,16,16,16] 11997; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 11998; AVX512VPOPCNTDQ-NEXT: retq 11999; 12000; AVX512VPOPCNTDQVL-LABEL: ugt_16_v4i64: 12001; AVX512VPOPCNTDQVL: # %bb.0: 12002; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 12003; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 12004; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 12005; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 12006; AVX512VPOPCNTDQVL-NEXT: retq 12007; 12008; BITALG_NOVLX-LABEL: ugt_16_v4i64: 12009; BITALG_NOVLX: # %bb.0: 12010; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 12011; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 12012; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 12013; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12014; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [16,16,16,16] 12015; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 12016; BITALG_NOVLX-NEXT: retq 12017; 12018; BITALG-LABEL: ugt_16_v4i64: 12019; BITALG: # %bb.0: 12020; BITALG-NEXT: vpopcntb %ymm0, %ymm0 12021; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 12022; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12023; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 12024; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 12025; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 12026; BITALG-NEXT: retq 12027 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 12028 %3 = icmp ugt <4 x i64> %2, <i64 16, i64 16, i64 16, i64 16> 12029 %4 = sext <4 x i1> %3 to <4 x i64> 12030 ret <4 x i64> %4 12031} 12032 12033define <4 x i64> @ult_17_v4i64(<4 x i64> %0) { 12034; AVX1-LABEL: ult_17_v4i64: 12035; AVX1: # %bb.0: 12036; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 12037; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 12038; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 12039; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 12040; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 12041; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 12042; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 12043; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 12044; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 12045; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 12046; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 12047; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 12048; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 12049; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 12050; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 12051; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 12052; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 12053; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 12054; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [17,17] 12055; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 12056; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 12057; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 12058; AVX1-NEXT: retq 12059; 12060; AVX2-LABEL: ult_17_v4i64: 12061; AVX2: # %bb.0: 12062; AVX2-NEXT: vmovdqa {{.*#+}} 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] 12063; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 12064; AVX2-NEXT: vmovdqa {{.*#+}} 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] 12065; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 12066; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 12067; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 12068; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 12069; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 12070; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 12071; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12072; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [17,17,17,17] 12073; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 12074; AVX2-NEXT: retq 12075; 12076; AVX512VPOPCNTDQ-LABEL: ult_17_v4i64: 12077; AVX512VPOPCNTDQ: # %bb.0: 12078; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 12079; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 12080; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [17,17,17,17] 12081; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 12082; AVX512VPOPCNTDQ-NEXT: retq 12083; 12084; AVX512VPOPCNTDQVL-LABEL: ult_17_v4i64: 12085; AVX512VPOPCNTDQVL: # %bb.0: 12086; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 12087; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 12088; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 12089; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 12090; AVX512VPOPCNTDQVL-NEXT: retq 12091; 12092; BITALG_NOVLX-LABEL: ult_17_v4i64: 12093; BITALG_NOVLX: # %bb.0: 12094; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 12095; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 12096; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 12097; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12098; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [17,17,17,17] 12099; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 12100; BITALG_NOVLX-NEXT: retq 12101; 12102; BITALG-LABEL: ult_17_v4i64: 12103; BITALG: # %bb.0: 12104; BITALG-NEXT: vpopcntb %ymm0, %ymm0 12105; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 12106; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12107; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 12108; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 12109; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 12110; BITALG-NEXT: retq 12111 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 12112 %3 = icmp ult <4 x i64> %2, <i64 17, i64 17, i64 17, i64 17> 12113 %4 = sext <4 x i1> %3 to <4 x i64> 12114 ret <4 x i64> %4 12115} 12116 12117define <4 x i64> @ugt_17_v4i64(<4 x i64> %0) { 12118; AVX1-LABEL: ugt_17_v4i64: 12119; AVX1: # %bb.0: 12120; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 12121; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 12122; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 12123; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 12124; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 12125; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 12126; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 12127; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 12128; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 12129; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 12130; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 12131; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 12132; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 12133; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 12134; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 12135; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 12136; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 12137; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 12138; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [17,17] 12139; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 12140; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 12141; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 12142; AVX1-NEXT: retq 12143; 12144; AVX2-LABEL: ugt_17_v4i64: 12145; AVX2: # %bb.0: 12146; AVX2-NEXT: vmovdqa {{.*#+}} 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] 12147; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 12148; AVX2-NEXT: vmovdqa {{.*#+}} 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] 12149; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 12150; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 12151; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 12152; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 12153; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 12154; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 12155; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12156; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [17,17,17,17] 12157; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 12158; AVX2-NEXT: retq 12159; 12160; AVX512VPOPCNTDQ-LABEL: ugt_17_v4i64: 12161; AVX512VPOPCNTDQ: # %bb.0: 12162; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 12163; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 12164; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [17,17,17,17] 12165; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 12166; AVX512VPOPCNTDQ-NEXT: retq 12167; 12168; AVX512VPOPCNTDQVL-LABEL: ugt_17_v4i64: 12169; AVX512VPOPCNTDQVL: # %bb.0: 12170; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 12171; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 12172; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 12173; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 12174; AVX512VPOPCNTDQVL-NEXT: retq 12175; 12176; BITALG_NOVLX-LABEL: ugt_17_v4i64: 12177; BITALG_NOVLX: # %bb.0: 12178; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 12179; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 12180; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 12181; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12182; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [17,17,17,17] 12183; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 12184; BITALG_NOVLX-NEXT: retq 12185; 12186; BITALG-LABEL: ugt_17_v4i64: 12187; BITALG: # %bb.0: 12188; BITALG-NEXT: vpopcntb %ymm0, %ymm0 12189; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 12190; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12191; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 12192; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 12193; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 12194; BITALG-NEXT: retq 12195 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 12196 %3 = icmp ugt <4 x i64> %2, <i64 17, i64 17, i64 17, i64 17> 12197 %4 = sext <4 x i1> %3 to <4 x i64> 12198 ret <4 x i64> %4 12199} 12200 12201define <4 x i64> @ult_18_v4i64(<4 x i64> %0) { 12202; AVX1-LABEL: ult_18_v4i64: 12203; AVX1: # %bb.0: 12204; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 12205; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 12206; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 12207; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 12208; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 12209; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 12210; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 12211; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 12212; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 12213; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 12214; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 12215; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 12216; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 12217; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 12218; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 12219; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 12220; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 12221; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 12222; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [18,18] 12223; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 12224; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 12225; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 12226; AVX1-NEXT: retq 12227; 12228; AVX2-LABEL: ult_18_v4i64: 12229; AVX2: # %bb.0: 12230; AVX2-NEXT: vmovdqa {{.*#+}} 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] 12231; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 12232; AVX2-NEXT: vmovdqa {{.*#+}} 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] 12233; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 12234; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 12235; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 12236; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 12237; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 12238; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 12239; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12240; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [18,18,18,18] 12241; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 12242; AVX2-NEXT: retq 12243; 12244; AVX512VPOPCNTDQ-LABEL: ult_18_v4i64: 12245; AVX512VPOPCNTDQ: # %bb.0: 12246; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 12247; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 12248; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [18,18,18,18] 12249; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 12250; AVX512VPOPCNTDQ-NEXT: retq 12251; 12252; AVX512VPOPCNTDQVL-LABEL: ult_18_v4i64: 12253; AVX512VPOPCNTDQVL: # %bb.0: 12254; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 12255; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 12256; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 12257; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 12258; AVX512VPOPCNTDQVL-NEXT: retq 12259; 12260; BITALG_NOVLX-LABEL: ult_18_v4i64: 12261; BITALG_NOVLX: # %bb.0: 12262; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 12263; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 12264; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 12265; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12266; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [18,18,18,18] 12267; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 12268; BITALG_NOVLX-NEXT: retq 12269; 12270; BITALG-LABEL: ult_18_v4i64: 12271; BITALG: # %bb.0: 12272; BITALG-NEXT: vpopcntb %ymm0, %ymm0 12273; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 12274; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12275; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 12276; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 12277; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 12278; BITALG-NEXT: retq 12279 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 12280 %3 = icmp ult <4 x i64> %2, <i64 18, i64 18, i64 18, i64 18> 12281 %4 = sext <4 x i1> %3 to <4 x i64> 12282 ret <4 x i64> %4 12283} 12284 12285define <4 x i64> @ugt_18_v4i64(<4 x i64> %0) { 12286; AVX1-LABEL: ugt_18_v4i64: 12287; AVX1: # %bb.0: 12288; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 12289; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 12290; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 12291; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 12292; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 12293; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 12294; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 12295; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 12296; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 12297; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 12298; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 12299; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 12300; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 12301; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 12302; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 12303; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 12304; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 12305; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 12306; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [18,18] 12307; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 12308; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 12309; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 12310; AVX1-NEXT: retq 12311; 12312; AVX2-LABEL: ugt_18_v4i64: 12313; AVX2: # %bb.0: 12314; AVX2-NEXT: vmovdqa {{.*#+}} 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] 12315; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 12316; AVX2-NEXT: vmovdqa {{.*#+}} 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] 12317; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 12318; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 12319; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 12320; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 12321; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 12322; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 12323; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12324; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [18,18,18,18] 12325; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 12326; AVX2-NEXT: retq 12327; 12328; AVX512VPOPCNTDQ-LABEL: ugt_18_v4i64: 12329; AVX512VPOPCNTDQ: # %bb.0: 12330; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 12331; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 12332; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [18,18,18,18] 12333; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 12334; AVX512VPOPCNTDQ-NEXT: retq 12335; 12336; AVX512VPOPCNTDQVL-LABEL: ugt_18_v4i64: 12337; AVX512VPOPCNTDQVL: # %bb.0: 12338; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 12339; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 12340; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 12341; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 12342; AVX512VPOPCNTDQVL-NEXT: retq 12343; 12344; BITALG_NOVLX-LABEL: ugt_18_v4i64: 12345; BITALG_NOVLX: # %bb.0: 12346; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 12347; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 12348; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 12349; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12350; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [18,18,18,18] 12351; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 12352; BITALG_NOVLX-NEXT: retq 12353; 12354; BITALG-LABEL: ugt_18_v4i64: 12355; BITALG: # %bb.0: 12356; BITALG-NEXT: vpopcntb %ymm0, %ymm0 12357; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 12358; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12359; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 12360; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 12361; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 12362; BITALG-NEXT: retq 12363 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 12364 %3 = icmp ugt <4 x i64> %2, <i64 18, i64 18, i64 18, i64 18> 12365 %4 = sext <4 x i1> %3 to <4 x i64> 12366 ret <4 x i64> %4 12367} 12368 12369define <4 x i64> @ult_19_v4i64(<4 x i64> %0) { 12370; AVX1-LABEL: ult_19_v4i64: 12371; AVX1: # %bb.0: 12372; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 12373; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 12374; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 12375; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 12376; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 12377; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 12378; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 12379; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 12380; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 12381; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 12382; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 12383; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 12384; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 12385; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 12386; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 12387; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 12388; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 12389; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 12390; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [19,19] 12391; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 12392; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 12393; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 12394; AVX1-NEXT: retq 12395; 12396; AVX2-LABEL: ult_19_v4i64: 12397; AVX2: # %bb.0: 12398; AVX2-NEXT: vmovdqa {{.*#+}} 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] 12399; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 12400; AVX2-NEXT: vmovdqa {{.*#+}} 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] 12401; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 12402; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 12403; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 12404; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 12405; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 12406; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 12407; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12408; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [19,19,19,19] 12409; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 12410; AVX2-NEXT: retq 12411; 12412; AVX512VPOPCNTDQ-LABEL: ult_19_v4i64: 12413; AVX512VPOPCNTDQ: # %bb.0: 12414; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 12415; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 12416; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [19,19,19,19] 12417; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 12418; AVX512VPOPCNTDQ-NEXT: retq 12419; 12420; AVX512VPOPCNTDQVL-LABEL: ult_19_v4i64: 12421; AVX512VPOPCNTDQVL: # %bb.0: 12422; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 12423; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 12424; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 12425; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 12426; AVX512VPOPCNTDQVL-NEXT: retq 12427; 12428; BITALG_NOVLX-LABEL: ult_19_v4i64: 12429; BITALG_NOVLX: # %bb.0: 12430; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 12431; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 12432; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 12433; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12434; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [19,19,19,19] 12435; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 12436; BITALG_NOVLX-NEXT: retq 12437; 12438; BITALG-LABEL: ult_19_v4i64: 12439; BITALG: # %bb.0: 12440; BITALG-NEXT: vpopcntb %ymm0, %ymm0 12441; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 12442; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12443; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 12444; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 12445; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 12446; BITALG-NEXT: retq 12447 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 12448 %3 = icmp ult <4 x i64> %2, <i64 19, i64 19, i64 19, i64 19> 12449 %4 = sext <4 x i1> %3 to <4 x i64> 12450 ret <4 x i64> %4 12451} 12452 12453define <4 x i64> @ugt_19_v4i64(<4 x i64> %0) { 12454; AVX1-LABEL: ugt_19_v4i64: 12455; AVX1: # %bb.0: 12456; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 12457; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 12458; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 12459; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 12460; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 12461; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 12462; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 12463; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 12464; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 12465; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 12466; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 12467; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 12468; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 12469; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 12470; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 12471; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 12472; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 12473; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 12474; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [19,19] 12475; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 12476; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 12477; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 12478; AVX1-NEXT: retq 12479; 12480; AVX2-LABEL: ugt_19_v4i64: 12481; AVX2: # %bb.0: 12482; AVX2-NEXT: vmovdqa {{.*#+}} 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] 12483; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 12484; AVX2-NEXT: vmovdqa {{.*#+}} 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] 12485; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 12486; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 12487; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 12488; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 12489; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 12490; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 12491; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12492; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [19,19,19,19] 12493; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 12494; AVX2-NEXT: retq 12495; 12496; AVX512VPOPCNTDQ-LABEL: ugt_19_v4i64: 12497; AVX512VPOPCNTDQ: # %bb.0: 12498; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 12499; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 12500; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [19,19,19,19] 12501; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 12502; AVX512VPOPCNTDQ-NEXT: retq 12503; 12504; AVX512VPOPCNTDQVL-LABEL: ugt_19_v4i64: 12505; AVX512VPOPCNTDQVL: # %bb.0: 12506; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 12507; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 12508; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 12509; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 12510; AVX512VPOPCNTDQVL-NEXT: retq 12511; 12512; BITALG_NOVLX-LABEL: ugt_19_v4i64: 12513; BITALG_NOVLX: # %bb.0: 12514; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 12515; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 12516; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 12517; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12518; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [19,19,19,19] 12519; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 12520; BITALG_NOVLX-NEXT: retq 12521; 12522; BITALG-LABEL: ugt_19_v4i64: 12523; BITALG: # %bb.0: 12524; BITALG-NEXT: vpopcntb %ymm0, %ymm0 12525; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 12526; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12527; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 12528; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 12529; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 12530; BITALG-NEXT: retq 12531 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 12532 %3 = icmp ugt <4 x i64> %2, <i64 19, i64 19, i64 19, i64 19> 12533 %4 = sext <4 x i1> %3 to <4 x i64> 12534 ret <4 x i64> %4 12535} 12536 12537define <4 x i64> @ult_20_v4i64(<4 x i64> %0) { 12538; AVX1-LABEL: ult_20_v4i64: 12539; AVX1: # %bb.0: 12540; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 12541; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 12542; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 12543; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 12544; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 12545; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 12546; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 12547; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 12548; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 12549; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 12550; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 12551; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 12552; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 12553; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 12554; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 12555; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 12556; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 12557; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 12558; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [20,20] 12559; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 12560; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 12561; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 12562; AVX1-NEXT: retq 12563; 12564; AVX2-LABEL: ult_20_v4i64: 12565; AVX2: # %bb.0: 12566; AVX2-NEXT: vmovdqa {{.*#+}} 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] 12567; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 12568; AVX2-NEXT: vmovdqa {{.*#+}} 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] 12569; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 12570; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 12571; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 12572; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 12573; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 12574; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 12575; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12576; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [20,20,20,20] 12577; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 12578; AVX2-NEXT: retq 12579; 12580; AVX512VPOPCNTDQ-LABEL: ult_20_v4i64: 12581; AVX512VPOPCNTDQ: # %bb.0: 12582; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 12583; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 12584; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [20,20,20,20] 12585; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 12586; AVX512VPOPCNTDQ-NEXT: retq 12587; 12588; AVX512VPOPCNTDQVL-LABEL: ult_20_v4i64: 12589; AVX512VPOPCNTDQVL: # %bb.0: 12590; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 12591; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 12592; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 12593; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 12594; AVX512VPOPCNTDQVL-NEXT: retq 12595; 12596; BITALG_NOVLX-LABEL: ult_20_v4i64: 12597; BITALG_NOVLX: # %bb.0: 12598; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 12599; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 12600; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 12601; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12602; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [20,20,20,20] 12603; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 12604; BITALG_NOVLX-NEXT: retq 12605; 12606; BITALG-LABEL: ult_20_v4i64: 12607; BITALG: # %bb.0: 12608; BITALG-NEXT: vpopcntb %ymm0, %ymm0 12609; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 12610; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12611; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 12612; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 12613; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 12614; BITALG-NEXT: retq 12615 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 12616 %3 = icmp ult <4 x i64> %2, <i64 20, i64 20, i64 20, i64 20> 12617 %4 = sext <4 x i1> %3 to <4 x i64> 12618 ret <4 x i64> %4 12619} 12620 12621define <4 x i64> @ugt_20_v4i64(<4 x i64> %0) { 12622; AVX1-LABEL: ugt_20_v4i64: 12623; AVX1: # %bb.0: 12624; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 12625; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 12626; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 12627; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 12628; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 12629; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 12630; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 12631; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 12632; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 12633; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 12634; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 12635; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 12636; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 12637; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 12638; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 12639; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 12640; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 12641; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 12642; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [20,20] 12643; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 12644; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 12645; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 12646; AVX1-NEXT: retq 12647; 12648; AVX2-LABEL: ugt_20_v4i64: 12649; AVX2: # %bb.0: 12650; AVX2-NEXT: vmovdqa {{.*#+}} 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] 12651; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 12652; AVX2-NEXT: vmovdqa {{.*#+}} 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] 12653; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 12654; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 12655; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 12656; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 12657; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 12658; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 12659; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12660; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [20,20,20,20] 12661; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 12662; AVX2-NEXT: retq 12663; 12664; AVX512VPOPCNTDQ-LABEL: ugt_20_v4i64: 12665; AVX512VPOPCNTDQ: # %bb.0: 12666; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 12667; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 12668; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [20,20,20,20] 12669; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 12670; AVX512VPOPCNTDQ-NEXT: retq 12671; 12672; AVX512VPOPCNTDQVL-LABEL: ugt_20_v4i64: 12673; AVX512VPOPCNTDQVL: # %bb.0: 12674; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 12675; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 12676; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 12677; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 12678; AVX512VPOPCNTDQVL-NEXT: retq 12679; 12680; BITALG_NOVLX-LABEL: ugt_20_v4i64: 12681; BITALG_NOVLX: # %bb.0: 12682; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 12683; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 12684; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 12685; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12686; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [20,20,20,20] 12687; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 12688; BITALG_NOVLX-NEXT: retq 12689; 12690; BITALG-LABEL: ugt_20_v4i64: 12691; BITALG: # %bb.0: 12692; BITALG-NEXT: vpopcntb %ymm0, %ymm0 12693; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 12694; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12695; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 12696; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 12697; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 12698; BITALG-NEXT: retq 12699 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 12700 %3 = icmp ugt <4 x i64> %2, <i64 20, i64 20, i64 20, i64 20> 12701 %4 = sext <4 x i1> %3 to <4 x i64> 12702 ret <4 x i64> %4 12703} 12704 12705define <4 x i64> @ult_21_v4i64(<4 x i64> %0) { 12706; AVX1-LABEL: ult_21_v4i64: 12707; AVX1: # %bb.0: 12708; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 12709; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 12710; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 12711; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 12712; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 12713; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 12714; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 12715; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 12716; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 12717; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 12718; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 12719; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 12720; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 12721; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 12722; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 12723; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 12724; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 12725; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 12726; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [21,21] 12727; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 12728; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 12729; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 12730; AVX1-NEXT: retq 12731; 12732; AVX2-LABEL: ult_21_v4i64: 12733; AVX2: # %bb.0: 12734; AVX2-NEXT: vmovdqa {{.*#+}} 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] 12735; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 12736; AVX2-NEXT: vmovdqa {{.*#+}} 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] 12737; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 12738; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 12739; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 12740; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 12741; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 12742; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 12743; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12744; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [21,21,21,21] 12745; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 12746; AVX2-NEXT: retq 12747; 12748; AVX512VPOPCNTDQ-LABEL: ult_21_v4i64: 12749; AVX512VPOPCNTDQ: # %bb.0: 12750; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 12751; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 12752; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [21,21,21,21] 12753; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 12754; AVX512VPOPCNTDQ-NEXT: retq 12755; 12756; AVX512VPOPCNTDQVL-LABEL: ult_21_v4i64: 12757; AVX512VPOPCNTDQVL: # %bb.0: 12758; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 12759; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 12760; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 12761; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 12762; AVX512VPOPCNTDQVL-NEXT: retq 12763; 12764; BITALG_NOVLX-LABEL: ult_21_v4i64: 12765; BITALG_NOVLX: # %bb.0: 12766; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 12767; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 12768; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 12769; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12770; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [21,21,21,21] 12771; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 12772; BITALG_NOVLX-NEXT: retq 12773; 12774; BITALG-LABEL: ult_21_v4i64: 12775; BITALG: # %bb.0: 12776; BITALG-NEXT: vpopcntb %ymm0, %ymm0 12777; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 12778; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12779; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 12780; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 12781; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 12782; BITALG-NEXT: retq 12783 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 12784 %3 = icmp ult <4 x i64> %2, <i64 21, i64 21, i64 21, i64 21> 12785 %4 = sext <4 x i1> %3 to <4 x i64> 12786 ret <4 x i64> %4 12787} 12788 12789define <4 x i64> @ugt_21_v4i64(<4 x i64> %0) { 12790; AVX1-LABEL: ugt_21_v4i64: 12791; AVX1: # %bb.0: 12792; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 12793; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 12794; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 12795; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 12796; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 12797; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 12798; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 12799; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 12800; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 12801; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 12802; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 12803; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 12804; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 12805; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 12806; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 12807; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 12808; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 12809; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 12810; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [21,21] 12811; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 12812; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 12813; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 12814; AVX1-NEXT: retq 12815; 12816; AVX2-LABEL: ugt_21_v4i64: 12817; AVX2: # %bb.0: 12818; AVX2-NEXT: vmovdqa {{.*#+}} 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] 12819; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 12820; AVX2-NEXT: vmovdqa {{.*#+}} 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] 12821; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 12822; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 12823; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 12824; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 12825; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 12826; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 12827; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12828; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [21,21,21,21] 12829; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 12830; AVX2-NEXT: retq 12831; 12832; AVX512VPOPCNTDQ-LABEL: ugt_21_v4i64: 12833; AVX512VPOPCNTDQ: # %bb.0: 12834; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 12835; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 12836; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [21,21,21,21] 12837; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 12838; AVX512VPOPCNTDQ-NEXT: retq 12839; 12840; AVX512VPOPCNTDQVL-LABEL: ugt_21_v4i64: 12841; AVX512VPOPCNTDQVL: # %bb.0: 12842; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 12843; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 12844; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 12845; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 12846; AVX512VPOPCNTDQVL-NEXT: retq 12847; 12848; BITALG_NOVLX-LABEL: ugt_21_v4i64: 12849; BITALG_NOVLX: # %bb.0: 12850; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 12851; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 12852; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 12853; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12854; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [21,21,21,21] 12855; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 12856; BITALG_NOVLX-NEXT: retq 12857; 12858; BITALG-LABEL: ugt_21_v4i64: 12859; BITALG: # %bb.0: 12860; BITALG-NEXT: vpopcntb %ymm0, %ymm0 12861; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 12862; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12863; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 12864; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 12865; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 12866; BITALG-NEXT: retq 12867 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 12868 %3 = icmp ugt <4 x i64> %2, <i64 21, i64 21, i64 21, i64 21> 12869 %4 = sext <4 x i1> %3 to <4 x i64> 12870 ret <4 x i64> %4 12871} 12872 12873define <4 x i64> @ult_22_v4i64(<4 x i64> %0) { 12874; AVX1-LABEL: ult_22_v4i64: 12875; AVX1: # %bb.0: 12876; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 12877; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 12878; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 12879; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 12880; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 12881; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 12882; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 12883; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 12884; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 12885; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 12886; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 12887; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 12888; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 12889; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 12890; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 12891; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 12892; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 12893; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 12894; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [22,22] 12895; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 12896; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 12897; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 12898; AVX1-NEXT: retq 12899; 12900; AVX2-LABEL: ult_22_v4i64: 12901; AVX2: # %bb.0: 12902; AVX2-NEXT: vmovdqa {{.*#+}} 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] 12903; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 12904; AVX2-NEXT: vmovdqa {{.*#+}} 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] 12905; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 12906; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 12907; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 12908; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 12909; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 12910; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 12911; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12912; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [22,22,22,22] 12913; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 12914; AVX2-NEXT: retq 12915; 12916; AVX512VPOPCNTDQ-LABEL: ult_22_v4i64: 12917; AVX512VPOPCNTDQ: # %bb.0: 12918; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 12919; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 12920; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [22,22,22,22] 12921; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 12922; AVX512VPOPCNTDQ-NEXT: retq 12923; 12924; AVX512VPOPCNTDQVL-LABEL: ult_22_v4i64: 12925; AVX512VPOPCNTDQVL: # %bb.0: 12926; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 12927; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 12928; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 12929; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 12930; AVX512VPOPCNTDQVL-NEXT: retq 12931; 12932; BITALG_NOVLX-LABEL: ult_22_v4i64: 12933; BITALG_NOVLX: # %bb.0: 12934; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 12935; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 12936; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 12937; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12938; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [22,22,22,22] 12939; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 12940; BITALG_NOVLX-NEXT: retq 12941; 12942; BITALG-LABEL: ult_22_v4i64: 12943; BITALG: # %bb.0: 12944; BITALG-NEXT: vpopcntb %ymm0, %ymm0 12945; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 12946; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12947; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 12948; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 12949; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 12950; BITALG-NEXT: retq 12951 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 12952 %3 = icmp ult <4 x i64> %2, <i64 22, i64 22, i64 22, i64 22> 12953 %4 = sext <4 x i1> %3 to <4 x i64> 12954 ret <4 x i64> %4 12955} 12956 12957define <4 x i64> @ugt_22_v4i64(<4 x i64> %0) { 12958; AVX1-LABEL: ugt_22_v4i64: 12959; AVX1: # %bb.0: 12960; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 12961; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 12962; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 12963; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 12964; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 12965; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 12966; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 12967; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 12968; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 12969; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 12970; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 12971; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 12972; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 12973; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 12974; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 12975; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 12976; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 12977; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 12978; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [22,22] 12979; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 12980; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 12981; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 12982; AVX1-NEXT: retq 12983; 12984; AVX2-LABEL: ugt_22_v4i64: 12985; AVX2: # %bb.0: 12986; AVX2-NEXT: vmovdqa {{.*#+}} 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] 12987; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 12988; AVX2-NEXT: vmovdqa {{.*#+}} 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] 12989; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 12990; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 12991; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 12992; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 12993; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 12994; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 12995; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 12996; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [22,22,22,22] 12997; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 12998; AVX2-NEXT: retq 12999; 13000; AVX512VPOPCNTDQ-LABEL: ugt_22_v4i64: 13001; AVX512VPOPCNTDQ: # %bb.0: 13002; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 13003; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 13004; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [22,22,22,22] 13005; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 13006; AVX512VPOPCNTDQ-NEXT: retq 13007; 13008; AVX512VPOPCNTDQVL-LABEL: ugt_22_v4i64: 13009; AVX512VPOPCNTDQVL: # %bb.0: 13010; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 13011; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 13012; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 13013; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 13014; AVX512VPOPCNTDQVL-NEXT: retq 13015; 13016; BITALG_NOVLX-LABEL: ugt_22_v4i64: 13017; BITALG_NOVLX: # %bb.0: 13018; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 13019; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 13020; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 13021; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13022; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [22,22,22,22] 13023; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 13024; BITALG_NOVLX-NEXT: retq 13025; 13026; BITALG-LABEL: ugt_22_v4i64: 13027; BITALG: # %bb.0: 13028; BITALG-NEXT: vpopcntb %ymm0, %ymm0 13029; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 13030; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13031; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 13032; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 13033; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 13034; BITALG-NEXT: retq 13035 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 13036 %3 = icmp ugt <4 x i64> %2, <i64 22, i64 22, i64 22, i64 22> 13037 %4 = sext <4 x i1> %3 to <4 x i64> 13038 ret <4 x i64> %4 13039} 13040 13041define <4 x i64> @ult_23_v4i64(<4 x i64> %0) { 13042; AVX1-LABEL: ult_23_v4i64: 13043; AVX1: # %bb.0: 13044; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 13045; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 13046; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 13047; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 13048; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 13049; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 13050; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 13051; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 13052; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 13053; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 13054; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 13055; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 13056; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 13057; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 13058; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 13059; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 13060; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 13061; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 13062; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [23,23] 13063; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 13064; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 13065; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 13066; AVX1-NEXT: retq 13067; 13068; AVX2-LABEL: ult_23_v4i64: 13069; AVX2: # %bb.0: 13070; AVX2-NEXT: vmovdqa {{.*#+}} 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] 13071; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 13072; AVX2-NEXT: vmovdqa {{.*#+}} 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] 13073; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 13074; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 13075; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 13076; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 13077; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 13078; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 13079; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13080; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [23,23,23,23] 13081; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 13082; AVX2-NEXT: retq 13083; 13084; AVX512VPOPCNTDQ-LABEL: ult_23_v4i64: 13085; AVX512VPOPCNTDQ: # %bb.0: 13086; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 13087; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 13088; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [23,23,23,23] 13089; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 13090; AVX512VPOPCNTDQ-NEXT: retq 13091; 13092; AVX512VPOPCNTDQVL-LABEL: ult_23_v4i64: 13093; AVX512VPOPCNTDQVL: # %bb.0: 13094; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 13095; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 13096; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 13097; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 13098; AVX512VPOPCNTDQVL-NEXT: retq 13099; 13100; BITALG_NOVLX-LABEL: ult_23_v4i64: 13101; BITALG_NOVLX: # %bb.0: 13102; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 13103; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 13104; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 13105; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13106; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [23,23,23,23] 13107; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 13108; BITALG_NOVLX-NEXT: retq 13109; 13110; BITALG-LABEL: ult_23_v4i64: 13111; BITALG: # %bb.0: 13112; BITALG-NEXT: vpopcntb %ymm0, %ymm0 13113; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 13114; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13115; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 13116; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 13117; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 13118; BITALG-NEXT: retq 13119 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 13120 %3 = icmp ult <4 x i64> %2, <i64 23, i64 23, i64 23, i64 23> 13121 %4 = sext <4 x i1> %3 to <4 x i64> 13122 ret <4 x i64> %4 13123} 13124 13125define <4 x i64> @ugt_23_v4i64(<4 x i64> %0) { 13126; AVX1-LABEL: ugt_23_v4i64: 13127; AVX1: # %bb.0: 13128; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 13129; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 13130; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 13131; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 13132; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 13133; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 13134; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 13135; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 13136; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 13137; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 13138; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 13139; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 13140; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 13141; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 13142; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 13143; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 13144; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 13145; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 13146; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [23,23] 13147; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 13148; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 13149; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 13150; AVX1-NEXT: retq 13151; 13152; AVX2-LABEL: ugt_23_v4i64: 13153; AVX2: # %bb.0: 13154; AVX2-NEXT: vmovdqa {{.*#+}} 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] 13155; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 13156; AVX2-NEXT: vmovdqa {{.*#+}} 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] 13157; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 13158; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 13159; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 13160; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 13161; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 13162; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 13163; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13164; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [23,23,23,23] 13165; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 13166; AVX2-NEXT: retq 13167; 13168; AVX512VPOPCNTDQ-LABEL: ugt_23_v4i64: 13169; AVX512VPOPCNTDQ: # %bb.0: 13170; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 13171; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 13172; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [23,23,23,23] 13173; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 13174; AVX512VPOPCNTDQ-NEXT: retq 13175; 13176; AVX512VPOPCNTDQVL-LABEL: ugt_23_v4i64: 13177; AVX512VPOPCNTDQVL: # %bb.0: 13178; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 13179; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 13180; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 13181; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 13182; AVX512VPOPCNTDQVL-NEXT: retq 13183; 13184; BITALG_NOVLX-LABEL: ugt_23_v4i64: 13185; BITALG_NOVLX: # %bb.0: 13186; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 13187; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 13188; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 13189; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13190; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [23,23,23,23] 13191; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 13192; BITALG_NOVLX-NEXT: retq 13193; 13194; BITALG-LABEL: ugt_23_v4i64: 13195; BITALG: # %bb.0: 13196; BITALG-NEXT: vpopcntb %ymm0, %ymm0 13197; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 13198; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13199; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 13200; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 13201; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 13202; BITALG-NEXT: retq 13203 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 13204 %3 = icmp ugt <4 x i64> %2, <i64 23, i64 23, i64 23, i64 23> 13205 %4 = sext <4 x i1> %3 to <4 x i64> 13206 ret <4 x i64> %4 13207} 13208 13209define <4 x i64> @ult_24_v4i64(<4 x i64> %0) { 13210; AVX1-LABEL: ult_24_v4i64: 13211; AVX1: # %bb.0: 13212; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 13213; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 13214; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 13215; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 13216; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 13217; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 13218; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 13219; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 13220; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 13221; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 13222; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 13223; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 13224; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 13225; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 13226; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 13227; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 13228; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 13229; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 13230; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [24,24] 13231; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 13232; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 13233; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 13234; AVX1-NEXT: retq 13235; 13236; AVX2-LABEL: ult_24_v4i64: 13237; AVX2: # %bb.0: 13238; AVX2-NEXT: vmovdqa {{.*#+}} 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] 13239; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 13240; AVX2-NEXT: vmovdqa {{.*#+}} 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] 13241; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 13242; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 13243; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 13244; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 13245; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 13246; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 13247; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13248; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [24,24,24,24] 13249; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 13250; AVX2-NEXT: retq 13251; 13252; AVX512VPOPCNTDQ-LABEL: ult_24_v4i64: 13253; AVX512VPOPCNTDQ: # %bb.0: 13254; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 13255; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 13256; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [24,24,24,24] 13257; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 13258; AVX512VPOPCNTDQ-NEXT: retq 13259; 13260; AVX512VPOPCNTDQVL-LABEL: ult_24_v4i64: 13261; AVX512VPOPCNTDQVL: # %bb.0: 13262; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 13263; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 13264; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 13265; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 13266; AVX512VPOPCNTDQVL-NEXT: retq 13267; 13268; BITALG_NOVLX-LABEL: ult_24_v4i64: 13269; BITALG_NOVLX: # %bb.0: 13270; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 13271; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 13272; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 13273; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13274; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [24,24,24,24] 13275; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 13276; BITALG_NOVLX-NEXT: retq 13277; 13278; BITALG-LABEL: ult_24_v4i64: 13279; BITALG: # %bb.0: 13280; BITALG-NEXT: vpopcntb %ymm0, %ymm0 13281; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 13282; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13283; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 13284; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 13285; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 13286; BITALG-NEXT: retq 13287 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 13288 %3 = icmp ult <4 x i64> %2, <i64 24, i64 24, i64 24, i64 24> 13289 %4 = sext <4 x i1> %3 to <4 x i64> 13290 ret <4 x i64> %4 13291} 13292 13293define <4 x i64> @ugt_24_v4i64(<4 x i64> %0) { 13294; AVX1-LABEL: ugt_24_v4i64: 13295; AVX1: # %bb.0: 13296; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 13297; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 13298; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 13299; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 13300; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 13301; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 13302; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 13303; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 13304; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 13305; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 13306; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 13307; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 13308; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 13309; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 13310; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 13311; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 13312; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 13313; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 13314; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [24,24] 13315; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 13316; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 13317; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 13318; AVX1-NEXT: retq 13319; 13320; AVX2-LABEL: ugt_24_v4i64: 13321; AVX2: # %bb.0: 13322; AVX2-NEXT: vmovdqa {{.*#+}} 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] 13323; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 13324; AVX2-NEXT: vmovdqa {{.*#+}} 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] 13325; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 13326; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 13327; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 13328; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 13329; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 13330; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 13331; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13332; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [24,24,24,24] 13333; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 13334; AVX2-NEXT: retq 13335; 13336; AVX512VPOPCNTDQ-LABEL: ugt_24_v4i64: 13337; AVX512VPOPCNTDQ: # %bb.0: 13338; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 13339; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 13340; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [24,24,24,24] 13341; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 13342; AVX512VPOPCNTDQ-NEXT: retq 13343; 13344; AVX512VPOPCNTDQVL-LABEL: ugt_24_v4i64: 13345; AVX512VPOPCNTDQVL: # %bb.0: 13346; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 13347; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 13348; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 13349; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 13350; AVX512VPOPCNTDQVL-NEXT: retq 13351; 13352; BITALG_NOVLX-LABEL: ugt_24_v4i64: 13353; BITALG_NOVLX: # %bb.0: 13354; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 13355; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 13356; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 13357; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13358; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [24,24,24,24] 13359; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 13360; BITALG_NOVLX-NEXT: retq 13361; 13362; BITALG-LABEL: ugt_24_v4i64: 13363; BITALG: # %bb.0: 13364; BITALG-NEXT: vpopcntb %ymm0, %ymm0 13365; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 13366; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13367; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 13368; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 13369; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 13370; BITALG-NEXT: retq 13371 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 13372 %3 = icmp ugt <4 x i64> %2, <i64 24, i64 24, i64 24, i64 24> 13373 %4 = sext <4 x i1> %3 to <4 x i64> 13374 ret <4 x i64> %4 13375} 13376 13377define <4 x i64> @ult_25_v4i64(<4 x i64> %0) { 13378; AVX1-LABEL: ult_25_v4i64: 13379; AVX1: # %bb.0: 13380; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 13381; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 13382; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 13383; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 13384; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 13385; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 13386; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 13387; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 13388; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 13389; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 13390; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 13391; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 13392; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 13393; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 13394; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 13395; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 13396; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 13397; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 13398; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [25,25] 13399; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 13400; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 13401; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 13402; AVX1-NEXT: retq 13403; 13404; AVX2-LABEL: ult_25_v4i64: 13405; AVX2: # %bb.0: 13406; AVX2-NEXT: vmovdqa {{.*#+}} 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] 13407; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 13408; AVX2-NEXT: vmovdqa {{.*#+}} 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] 13409; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 13410; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 13411; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 13412; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 13413; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 13414; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 13415; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13416; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [25,25,25,25] 13417; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 13418; AVX2-NEXT: retq 13419; 13420; AVX512VPOPCNTDQ-LABEL: ult_25_v4i64: 13421; AVX512VPOPCNTDQ: # %bb.0: 13422; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 13423; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 13424; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [25,25,25,25] 13425; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 13426; AVX512VPOPCNTDQ-NEXT: retq 13427; 13428; AVX512VPOPCNTDQVL-LABEL: ult_25_v4i64: 13429; AVX512VPOPCNTDQVL: # %bb.0: 13430; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 13431; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 13432; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 13433; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 13434; AVX512VPOPCNTDQVL-NEXT: retq 13435; 13436; BITALG_NOVLX-LABEL: ult_25_v4i64: 13437; BITALG_NOVLX: # %bb.0: 13438; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 13439; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 13440; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 13441; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13442; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [25,25,25,25] 13443; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 13444; BITALG_NOVLX-NEXT: retq 13445; 13446; BITALG-LABEL: ult_25_v4i64: 13447; BITALG: # %bb.0: 13448; BITALG-NEXT: vpopcntb %ymm0, %ymm0 13449; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 13450; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13451; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 13452; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 13453; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 13454; BITALG-NEXT: retq 13455 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 13456 %3 = icmp ult <4 x i64> %2, <i64 25, i64 25, i64 25, i64 25> 13457 %4 = sext <4 x i1> %3 to <4 x i64> 13458 ret <4 x i64> %4 13459} 13460 13461define <4 x i64> @ugt_25_v4i64(<4 x i64> %0) { 13462; AVX1-LABEL: ugt_25_v4i64: 13463; AVX1: # %bb.0: 13464; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 13465; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 13466; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 13467; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 13468; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 13469; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 13470; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 13471; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 13472; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 13473; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 13474; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 13475; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 13476; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 13477; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 13478; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 13479; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 13480; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 13481; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 13482; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [25,25] 13483; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 13484; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 13485; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 13486; AVX1-NEXT: retq 13487; 13488; AVX2-LABEL: ugt_25_v4i64: 13489; AVX2: # %bb.0: 13490; AVX2-NEXT: vmovdqa {{.*#+}} 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] 13491; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 13492; AVX2-NEXT: vmovdqa {{.*#+}} 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] 13493; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 13494; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 13495; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 13496; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 13497; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 13498; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 13499; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13500; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [25,25,25,25] 13501; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 13502; AVX2-NEXT: retq 13503; 13504; AVX512VPOPCNTDQ-LABEL: ugt_25_v4i64: 13505; AVX512VPOPCNTDQ: # %bb.0: 13506; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 13507; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 13508; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [25,25,25,25] 13509; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 13510; AVX512VPOPCNTDQ-NEXT: retq 13511; 13512; AVX512VPOPCNTDQVL-LABEL: ugt_25_v4i64: 13513; AVX512VPOPCNTDQVL: # %bb.0: 13514; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 13515; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 13516; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 13517; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 13518; AVX512VPOPCNTDQVL-NEXT: retq 13519; 13520; BITALG_NOVLX-LABEL: ugt_25_v4i64: 13521; BITALG_NOVLX: # %bb.0: 13522; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 13523; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 13524; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 13525; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13526; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [25,25,25,25] 13527; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 13528; BITALG_NOVLX-NEXT: retq 13529; 13530; BITALG-LABEL: ugt_25_v4i64: 13531; BITALG: # %bb.0: 13532; BITALG-NEXT: vpopcntb %ymm0, %ymm0 13533; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 13534; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13535; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 13536; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 13537; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 13538; BITALG-NEXT: retq 13539 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 13540 %3 = icmp ugt <4 x i64> %2, <i64 25, i64 25, i64 25, i64 25> 13541 %4 = sext <4 x i1> %3 to <4 x i64> 13542 ret <4 x i64> %4 13543} 13544 13545define <4 x i64> @ult_26_v4i64(<4 x i64> %0) { 13546; AVX1-LABEL: ult_26_v4i64: 13547; AVX1: # %bb.0: 13548; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 13549; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 13550; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 13551; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 13552; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 13553; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 13554; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 13555; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 13556; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 13557; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 13558; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 13559; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 13560; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 13561; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 13562; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 13563; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 13564; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 13565; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 13566; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [26,26] 13567; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 13568; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 13569; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 13570; AVX1-NEXT: retq 13571; 13572; AVX2-LABEL: ult_26_v4i64: 13573; AVX2: # %bb.0: 13574; AVX2-NEXT: vmovdqa {{.*#+}} 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] 13575; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 13576; AVX2-NEXT: vmovdqa {{.*#+}} 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] 13577; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 13578; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 13579; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 13580; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 13581; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 13582; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 13583; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13584; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [26,26,26,26] 13585; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 13586; AVX2-NEXT: retq 13587; 13588; AVX512VPOPCNTDQ-LABEL: ult_26_v4i64: 13589; AVX512VPOPCNTDQ: # %bb.0: 13590; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 13591; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 13592; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [26,26,26,26] 13593; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 13594; AVX512VPOPCNTDQ-NEXT: retq 13595; 13596; AVX512VPOPCNTDQVL-LABEL: ult_26_v4i64: 13597; AVX512VPOPCNTDQVL: # %bb.0: 13598; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 13599; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 13600; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 13601; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 13602; AVX512VPOPCNTDQVL-NEXT: retq 13603; 13604; BITALG_NOVLX-LABEL: ult_26_v4i64: 13605; BITALG_NOVLX: # %bb.0: 13606; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 13607; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 13608; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 13609; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13610; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [26,26,26,26] 13611; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 13612; BITALG_NOVLX-NEXT: retq 13613; 13614; BITALG-LABEL: ult_26_v4i64: 13615; BITALG: # %bb.0: 13616; BITALG-NEXT: vpopcntb %ymm0, %ymm0 13617; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 13618; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13619; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 13620; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 13621; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 13622; BITALG-NEXT: retq 13623 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 13624 %3 = icmp ult <4 x i64> %2, <i64 26, i64 26, i64 26, i64 26> 13625 %4 = sext <4 x i1> %3 to <4 x i64> 13626 ret <4 x i64> %4 13627} 13628 13629define <4 x i64> @ugt_26_v4i64(<4 x i64> %0) { 13630; AVX1-LABEL: ugt_26_v4i64: 13631; AVX1: # %bb.0: 13632; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 13633; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 13634; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 13635; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 13636; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 13637; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 13638; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 13639; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 13640; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 13641; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 13642; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 13643; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 13644; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 13645; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 13646; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 13647; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 13648; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 13649; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 13650; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [26,26] 13651; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 13652; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 13653; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 13654; AVX1-NEXT: retq 13655; 13656; AVX2-LABEL: ugt_26_v4i64: 13657; AVX2: # %bb.0: 13658; AVX2-NEXT: vmovdqa {{.*#+}} 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] 13659; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 13660; AVX2-NEXT: vmovdqa {{.*#+}} 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] 13661; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 13662; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 13663; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 13664; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 13665; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 13666; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 13667; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13668; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [26,26,26,26] 13669; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 13670; AVX2-NEXT: retq 13671; 13672; AVX512VPOPCNTDQ-LABEL: ugt_26_v4i64: 13673; AVX512VPOPCNTDQ: # %bb.0: 13674; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 13675; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 13676; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [26,26,26,26] 13677; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 13678; AVX512VPOPCNTDQ-NEXT: retq 13679; 13680; AVX512VPOPCNTDQVL-LABEL: ugt_26_v4i64: 13681; AVX512VPOPCNTDQVL: # %bb.0: 13682; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 13683; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 13684; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 13685; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 13686; AVX512VPOPCNTDQVL-NEXT: retq 13687; 13688; BITALG_NOVLX-LABEL: ugt_26_v4i64: 13689; BITALG_NOVLX: # %bb.0: 13690; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 13691; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 13692; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 13693; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13694; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [26,26,26,26] 13695; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 13696; BITALG_NOVLX-NEXT: retq 13697; 13698; BITALG-LABEL: ugt_26_v4i64: 13699; BITALG: # %bb.0: 13700; BITALG-NEXT: vpopcntb %ymm0, %ymm0 13701; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 13702; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13703; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 13704; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 13705; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 13706; BITALG-NEXT: retq 13707 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 13708 %3 = icmp ugt <4 x i64> %2, <i64 26, i64 26, i64 26, i64 26> 13709 %4 = sext <4 x i1> %3 to <4 x i64> 13710 ret <4 x i64> %4 13711} 13712 13713define <4 x i64> @ult_27_v4i64(<4 x i64> %0) { 13714; AVX1-LABEL: ult_27_v4i64: 13715; AVX1: # %bb.0: 13716; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 13717; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 13718; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 13719; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 13720; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 13721; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 13722; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 13723; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 13724; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 13725; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 13726; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 13727; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 13728; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 13729; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 13730; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 13731; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 13732; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 13733; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 13734; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [27,27] 13735; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 13736; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 13737; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 13738; AVX1-NEXT: retq 13739; 13740; AVX2-LABEL: ult_27_v4i64: 13741; AVX2: # %bb.0: 13742; AVX2-NEXT: vmovdqa {{.*#+}} 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] 13743; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 13744; AVX2-NEXT: vmovdqa {{.*#+}} 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] 13745; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 13746; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 13747; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 13748; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 13749; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 13750; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 13751; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13752; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [27,27,27,27] 13753; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 13754; AVX2-NEXT: retq 13755; 13756; AVX512VPOPCNTDQ-LABEL: ult_27_v4i64: 13757; AVX512VPOPCNTDQ: # %bb.0: 13758; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 13759; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 13760; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [27,27,27,27] 13761; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 13762; AVX512VPOPCNTDQ-NEXT: retq 13763; 13764; AVX512VPOPCNTDQVL-LABEL: ult_27_v4i64: 13765; AVX512VPOPCNTDQVL: # %bb.0: 13766; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 13767; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 13768; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 13769; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 13770; AVX512VPOPCNTDQVL-NEXT: retq 13771; 13772; BITALG_NOVLX-LABEL: ult_27_v4i64: 13773; BITALG_NOVLX: # %bb.0: 13774; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 13775; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 13776; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 13777; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13778; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [27,27,27,27] 13779; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 13780; BITALG_NOVLX-NEXT: retq 13781; 13782; BITALG-LABEL: ult_27_v4i64: 13783; BITALG: # %bb.0: 13784; BITALG-NEXT: vpopcntb %ymm0, %ymm0 13785; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 13786; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13787; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 13788; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 13789; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 13790; BITALG-NEXT: retq 13791 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 13792 %3 = icmp ult <4 x i64> %2, <i64 27, i64 27, i64 27, i64 27> 13793 %4 = sext <4 x i1> %3 to <4 x i64> 13794 ret <4 x i64> %4 13795} 13796 13797define <4 x i64> @ugt_27_v4i64(<4 x i64> %0) { 13798; AVX1-LABEL: ugt_27_v4i64: 13799; AVX1: # %bb.0: 13800; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 13801; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 13802; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 13803; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 13804; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 13805; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 13806; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 13807; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 13808; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 13809; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 13810; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 13811; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 13812; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 13813; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 13814; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 13815; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 13816; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 13817; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 13818; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [27,27] 13819; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 13820; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 13821; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 13822; AVX1-NEXT: retq 13823; 13824; AVX2-LABEL: ugt_27_v4i64: 13825; AVX2: # %bb.0: 13826; AVX2-NEXT: vmovdqa {{.*#+}} 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] 13827; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 13828; AVX2-NEXT: vmovdqa {{.*#+}} 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] 13829; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 13830; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 13831; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 13832; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 13833; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 13834; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 13835; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13836; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [27,27,27,27] 13837; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 13838; AVX2-NEXT: retq 13839; 13840; AVX512VPOPCNTDQ-LABEL: ugt_27_v4i64: 13841; AVX512VPOPCNTDQ: # %bb.0: 13842; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 13843; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 13844; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [27,27,27,27] 13845; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 13846; AVX512VPOPCNTDQ-NEXT: retq 13847; 13848; AVX512VPOPCNTDQVL-LABEL: ugt_27_v4i64: 13849; AVX512VPOPCNTDQVL: # %bb.0: 13850; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 13851; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 13852; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 13853; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 13854; AVX512VPOPCNTDQVL-NEXT: retq 13855; 13856; BITALG_NOVLX-LABEL: ugt_27_v4i64: 13857; BITALG_NOVLX: # %bb.0: 13858; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 13859; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 13860; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 13861; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13862; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [27,27,27,27] 13863; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 13864; BITALG_NOVLX-NEXT: retq 13865; 13866; BITALG-LABEL: ugt_27_v4i64: 13867; BITALG: # %bb.0: 13868; BITALG-NEXT: vpopcntb %ymm0, %ymm0 13869; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 13870; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13871; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 13872; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 13873; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 13874; BITALG-NEXT: retq 13875 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 13876 %3 = icmp ugt <4 x i64> %2, <i64 27, i64 27, i64 27, i64 27> 13877 %4 = sext <4 x i1> %3 to <4 x i64> 13878 ret <4 x i64> %4 13879} 13880 13881define <4 x i64> @ult_28_v4i64(<4 x i64> %0) { 13882; AVX1-LABEL: ult_28_v4i64: 13883; AVX1: # %bb.0: 13884; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 13885; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 13886; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 13887; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 13888; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 13889; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 13890; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 13891; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 13892; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 13893; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 13894; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 13895; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 13896; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 13897; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 13898; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 13899; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 13900; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 13901; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 13902; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [28,28] 13903; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 13904; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 13905; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 13906; AVX1-NEXT: retq 13907; 13908; AVX2-LABEL: ult_28_v4i64: 13909; AVX2: # %bb.0: 13910; AVX2-NEXT: vmovdqa {{.*#+}} 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] 13911; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 13912; AVX2-NEXT: vmovdqa {{.*#+}} 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] 13913; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 13914; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 13915; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 13916; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 13917; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 13918; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 13919; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13920; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [28,28,28,28] 13921; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 13922; AVX2-NEXT: retq 13923; 13924; AVX512VPOPCNTDQ-LABEL: ult_28_v4i64: 13925; AVX512VPOPCNTDQ: # %bb.0: 13926; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 13927; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 13928; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [28,28,28,28] 13929; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 13930; AVX512VPOPCNTDQ-NEXT: retq 13931; 13932; AVX512VPOPCNTDQVL-LABEL: ult_28_v4i64: 13933; AVX512VPOPCNTDQVL: # %bb.0: 13934; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 13935; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 13936; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 13937; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 13938; AVX512VPOPCNTDQVL-NEXT: retq 13939; 13940; BITALG_NOVLX-LABEL: ult_28_v4i64: 13941; BITALG_NOVLX: # %bb.0: 13942; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 13943; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 13944; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 13945; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13946; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [28,28,28,28] 13947; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 13948; BITALG_NOVLX-NEXT: retq 13949; 13950; BITALG-LABEL: ult_28_v4i64: 13951; BITALG: # %bb.0: 13952; BITALG-NEXT: vpopcntb %ymm0, %ymm0 13953; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 13954; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 13955; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 13956; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 13957; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 13958; BITALG-NEXT: retq 13959 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 13960 %3 = icmp ult <4 x i64> %2, <i64 28, i64 28, i64 28, i64 28> 13961 %4 = sext <4 x i1> %3 to <4 x i64> 13962 ret <4 x i64> %4 13963} 13964 13965define <4 x i64> @ugt_28_v4i64(<4 x i64> %0) { 13966; AVX1-LABEL: ugt_28_v4i64: 13967; AVX1: # %bb.0: 13968; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 13969; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 13970; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 13971; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 13972; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 13973; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 13974; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 13975; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 13976; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 13977; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 13978; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 13979; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 13980; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 13981; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 13982; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 13983; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 13984; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 13985; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 13986; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [28,28] 13987; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 13988; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 13989; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 13990; AVX1-NEXT: retq 13991; 13992; AVX2-LABEL: ugt_28_v4i64: 13993; AVX2: # %bb.0: 13994; AVX2-NEXT: vmovdqa {{.*#+}} 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] 13995; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 13996; AVX2-NEXT: vmovdqa {{.*#+}} 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] 13997; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 13998; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 13999; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 14000; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 14001; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 14002; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 14003; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14004; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [28,28,28,28] 14005; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 14006; AVX2-NEXT: retq 14007; 14008; AVX512VPOPCNTDQ-LABEL: ugt_28_v4i64: 14009; AVX512VPOPCNTDQ: # %bb.0: 14010; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 14011; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 14012; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [28,28,28,28] 14013; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 14014; AVX512VPOPCNTDQ-NEXT: retq 14015; 14016; AVX512VPOPCNTDQVL-LABEL: ugt_28_v4i64: 14017; AVX512VPOPCNTDQVL: # %bb.0: 14018; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 14019; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 14020; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 14021; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 14022; AVX512VPOPCNTDQVL-NEXT: retq 14023; 14024; BITALG_NOVLX-LABEL: ugt_28_v4i64: 14025; BITALG_NOVLX: # %bb.0: 14026; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 14027; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 14028; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 14029; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14030; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [28,28,28,28] 14031; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 14032; BITALG_NOVLX-NEXT: retq 14033; 14034; BITALG-LABEL: ugt_28_v4i64: 14035; BITALG: # %bb.0: 14036; BITALG-NEXT: vpopcntb %ymm0, %ymm0 14037; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 14038; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14039; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 14040; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 14041; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 14042; BITALG-NEXT: retq 14043 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 14044 %3 = icmp ugt <4 x i64> %2, <i64 28, i64 28, i64 28, i64 28> 14045 %4 = sext <4 x i1> %3 to <4 x i64> 14046 ret <4 x i64> %4 14047} 14048 14049define <4 x i64> @ult_29_v4i64(<4 x i64> %0) { 14050; AVX1-LABEL: ult_29_v4i64: 14051; AVX1: # %bb.0: 14052; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 14053; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 14054; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 14055; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 14056; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 14057; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 14058; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 14059; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 14060; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 14061; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 14062; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 14063; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 14064; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 14065; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 14066; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 14067; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 14068; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 14069; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 14070; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [29,29] 14071; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 14072; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 14073; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 14074; AVX1-NEXT: retq 14075; 14076; AVX2-LABEL: ult_29_v4i64: 14077; AVX2: # %bb.0: 14078; AVX2-NEXT: vmovdqa {{.*#+}} 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] 14079; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 14080; AVX2-NEXT: vmovdqa {{.*#+}} 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] 14081; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 14082; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 14083; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 14084; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 14085; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 14086; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 14087; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14088; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [29,29,29,29] 14089; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 14090; AVX2-NEXT: retq 14091; 14092; AVX512VPOPCNTDQ-LABEL: ult_29_v4i64: 14093; AVX512VPOPCNTDQ: # %bb.0: 14094; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 14095; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 14096; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [29,29,29,29] 14097; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 14098; AVX512VPOPCNTDQ-NEXT: retq 14099; 14100; AVX512VPOPCNTDQVL-LABEL: ult_29_v4i64: 14101; AVX512VPOPCNTDQVL: # %bb.0: 14102; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 14103; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 14104; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 14105; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 14106; AVX512VPOPCNTDQVL-NEXT: retq 14107; 14108; BITALG_NOVLX-LABEL: ult_29_v4i64: 14109; BITALG_NOVLX: # %bb.0: 14110; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 14111; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 14112; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 14113; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14114; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [29,29,29,29] 14115; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 14116; BITALG_NOVLX-NEXT: retq 14117; 14118; BITALG-LABEL: ult_29_v4i64: 14119; BITALG: # %bb.0: 14120; BITALG-NEXT: vpopcntb %ymm0, %ymm0 14121; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 14122; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14123; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 14124; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 14125; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 14126; BITALG-NEXT: retq 14127 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 14128 %3 = icmp ult <4 x i64> %2, <i64 29, i64 29, i64 29, i64 29> 14129 %4 = sext <4 x i1> %3 to <4 x i64> 14130 ret <4 x i64> %4 14131} 14132 14133define <4 x i64> @ugt_29_v4i64(<4 x i64> %0) { 14134; AVX1-LABEL: ugt_29_v4i64: 14135; AVX1: # %bb.0: 14136; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 14137; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 14138; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 14139; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 14140; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 14141; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 14142; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 14143; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 14144; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 14145; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 14146; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 14147; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 14148; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 14149; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 14150; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 14151; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 14152; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 14153; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 14154; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [29,29] 14155; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 14156; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 14157; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 14158; AVX1-NEXT: retq 14159; 14160; AVX2-LABEL: ugt_29_v4i64: 14161; AVX2: # %bb.0: 14162; AVX2-NEXT: vmovdqa {{.*#+}} 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] 14163; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 14164; AVX2-NEXT: vmovdqa {{.*#+}} 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] 14165; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 14166; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 14167; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 14168; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 14169; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 14170; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 14171; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14172; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [29,29,29,29] 14173; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 14174; AVX2-NEXT: retq 14175; 14176; AVX512VPOPCNTDQ-LABEL: ugt_29_v4i64: 14177; AVX512VPOPCNTDQ: # %bb.0: 14178; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 14179; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 14180; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [29,29,29,29] 14181; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 14182; AVX512VPOPCNTDQ-NEXT: retq 14183; 14184; AVX512VPOPCNTDQVL-LABEL: ugt_29_v4i64: 14185; AVX512VPOPCNTDQVL: # %bb.0: 14186; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 14187; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 14188; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 14189; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 14190; AVX512VPOPCNTDQVL-NEXT: retq 14191; 14192; BITALG_NOVLX-LABEL: ugt_29_v4i64: 14193; BITALG_NOVLX: # %bb.0: 14194; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 14195; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 14196; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 14197; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14198; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [29,29,29,29] 14199; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 14200; BITALG_NOVLX-NEXT: retq 14201; 14202; BITALG-LABEL: ugt_29_v4i64: 14203; BITALG: # %bb.0: 14204; BITALG-NEXT: vpopcntb %ymm0, %ymm0 14205; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 14206; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14207; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 14208; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 14209; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 14210; BITALG-NEXT: retq 14211 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 14212 %3 = icmp ugt <4 x i64> %2, <i64 29, i64 29, i64 29, i64 29> 14213 %4 = sext <4 x i1> %3 to <4 x i64> 14214 ret <4 x i64> %4 14215} 14216 14217define <4 x i64> @ult_30_v4i64(<4 x i64> %0) { 14218; AVX1-LABEL: ult_30_v4i64: 14219; AVX1: # %bb.0: 14220; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 14221; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 14222; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 14223; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 14224; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 14225; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 14226; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 14227; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 14228; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 14229; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 14230; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 14231; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 14232; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 14233; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 14234; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 14235; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 14236; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 14237; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 14238; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [30,30] 14239; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 14240; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 14241; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 14242; AVX1-NEXT: retq 14243; 14244; AVX2-LABEL: ult_30_v4i64: 14245; AVX2: # %bb.0: 14246; AVX2-NEXT: vmovdqa {{.*#+}} 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] 14247; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 14248; AVX2-NEXT: vmovdqa {{.*#+}} 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] 14249; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 14250; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 14251; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 14252; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 14253; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 14254; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 14255; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14256; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [30,30,30,30] 14257; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 14258; AVX2-NEXT: retq 14259; 14260; AVX512VPOPCNTDQ-LABEL: ult_30_v4i64: 14261; AVX512VPOPCNTDQ: # %bb.0: 14262; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 14263; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 14264; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [30,30,30,30] 14265; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 14266; AVX512VPOPCNTDQ-NEXT: retq 14267; 14268; AVX512VPOPCNTDQVL-LABEL: ult_30_v4i64: 14269; AVX512VPOPCNTDQVL: # %bb.0: 14270; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 14271; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 14272; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 14273; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 14274; AVX512VPOPCNTDQVL-NEXT: retq 14275; 14276; BITALG_NOVLX-LABEL: ult_30_v4i64: 14277; BITALG_NOVLX: # %bb.0: 14278; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 14279; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 14280; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 14281; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14282; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [30,30,30,30] 14283; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 14284; BITALG_NOVLX-NEXT: retq 14285; 14286; BITALG-LABEL: ult_30_v4i64: 14287; BITALG: # %bb.0: 14288; BITALG-NEXT: vpopcntb %ymm0, %ymm0 14289; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 14290; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14291; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 14292; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 14293; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 14294; BITALG-NEXT: retq 14295 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 14296 %3 = icmp ult <4 x i64> %2, <i64 30, i64 30, i64 30, i64 30> 14297 %4 = sext <4 x i1> %3 to <4 x i64> 14298 ret <4 x i64> %4 14299} 14300 14301define <4 x i64> @ugt_30_v4i64(<4 x i64> %0) { 14302; AVX1-LABEL: ugt_30_v4i64: 14303; AVX1: # %bb.0: 14304; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 14305; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 14306; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 14307; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 14308; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 14309; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 14310; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 14311; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 14312; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 14313; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 14314; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 14315; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 14316; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 14317; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 14318; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 14319; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 14320; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 14321; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 14322; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [30,30] 14323; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 14324; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 14325; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 14326; AVX1-NEXT: retq 14327; 14328; AVX2-LABEL: ugt_30_v4i64: 14329; AVX2: # %bb.0: 14330; AVX2-NEXT: vmovdqa {{.*#+}} 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] 14331; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 14332; AVX2-NEXT: vmovdqa {{.*#+}} 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] 14333; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 14334; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 14335; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 14336; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 14337; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 14338; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 14339; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14340; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [30,30,30,30] 14341; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 14342; AVX2-NEXT: retq 14343; 14344; AVX512VPOPCNTDQ-LABEL: ugt_30_v4i64: 14345; AVX512VPOPCNTDQ: # %bb.0: 14346; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 14347; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 14348; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [30,30,30,30] 14349; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 14350; AVX512VPOPCNTDQ-NEXT: retq 14351; 14352; AVX512VPOPCNTDQVL-LABEL: ugt_30_v4i64: 14353; AVX512VPOPCNTDQVL: # %bb.0: 14354; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 14355; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 14356; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 14357; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 14358; AVX512VPOPCNTDQVL-NEXT: retq 14359; 14360; BITALG_NOVLX-LABEL: ugt_30_v4i64: 14361; BITALG_NOVLX: # %bb.0: 14362; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 14363; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 14364; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 14365; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14366; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [30,30,30,30] 14367; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 14368; BITALG_NOVLX-NEXT: retq 14369; 14370; BITALG-LABEL: ugt_30_v4i64: 14371; BITALG: # %bb.0: 14372; BITALG-NEXT: vpopcntb %ymm0, %ymm0 14373; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 14374; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14375; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 14376; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 14377; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 14378; BITALG-NEXT: retq 14379 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 14380 %3 = icmp ugt <4 x i64> %2, <i64 30, i64 30, i64 30, i64 30> 14381 %4 = sext <4 x i1> %3 to <4 x i64> 14382 ret <4 x i64> %4 14383} 14384 14385define <4 x i64> @ult_31_v4i64(<4 x i64> %0) { 14386; AVX1-LABEL: ult_31_v4i64: 14387; AVX1: # %bb.0: 14388; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 14389; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 14390; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 14391; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 14392; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 14393; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 14394; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 14395; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 14396; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 14397; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 14398; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 14399; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 14400; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 14401; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 14402; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 14403; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 14404; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 14405; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 14406; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [31,31] 14407; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 14408; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 14409; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 14410; AVX1-NEXT: retq 14411; 14412; AVX2-LABEL: ult_31_v4i64: 14413; AVX2: # %bb.0: 14414; AVX2-NEXT: vmovdqa {{.*#+}} 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] 14415; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 14416; AVX2-NEXT: vmovdqa {{.*#+}} 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] 14417; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 14418; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 14419; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 14420; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 14421; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 14422; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 14423; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14424; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [31,31,31,31] 14425; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 14426; AVX2-NEXT: retq 14427; 14428; AVX512VPOPCNTDQ-LABEL: ult_31_v4i64: 14429; AVX512VPOPCNTDQ: # %bb.0: 14430; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 14431; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 14432; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [31,31,31,31] 14433; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 14434; AVX512VPOPCNTDQ-NEXT: retq 14435; 14436; AVX512VPOPCNTDQVL-LABEL: ult_31_v4i64: 14437; AVX512VPOPCNTDQVL: # %bb.0: 14438; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 14439; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 14440; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 14441; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 14442; AVX512VPOPCNTDQVL-NEXT: retq 14443; 14444; BITALG_NOVLX-LABEL: ult_31_v4i64: 14445; BITALG_NOVLX: # %bb.0: 14446; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 14447; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 14448; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 14449; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14450; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [31,31,31,31] 14451; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 14452; BITALG_NOVLX-NEXT: retq 14453; 14454; BITALG-LABEL: ult_31_v4i64: 14455; BITALG: # %bb.0: 14456; BITALG-NEXT: vpopcntb %ymm0, %ymm0 14457; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 14458; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14459; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 14460; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 14461; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 14462; BITALG-NEXT: retq 14463 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 14464 %3 = icmp ult <4 x i64> %2, <i64 31, i64 31, i64 31, i64 31> 14465 %4 = sext <4 x i1> %3 to <4 x i64> 14466 ret <4 x i64> %4 14467} 14468 14469define <4 x i64> @ugt_31_v4i64(<4 x i64> %0) { 14470; AVX1-LABEL: ugt_31_v4i64: 14471; AVX1: # %bb.0: 14472; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 14473; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 14474; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 14475; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 14476; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 14477; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 14478; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 14479; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 14480; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 14481; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 14482; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 14483; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 14484; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 14485; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 14486; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 14487; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 14488; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 14489; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 14490; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [31,31] 14491; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 14492; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 14493; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 14494; AVX1-NEXT: retq 14495; 14496; AVX2-LABEL: ugt_31_v4i64: 14497; AVX2: # %bb.0: 14498; AVX2-NEXT: vmovdqa {{.*#+}} 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] 14499; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 14500; AVX2-NEXT: vmovdqa {{.*#+}} 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] 14501; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 14502; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 14503; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 14504; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 14505; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 14506; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 14507; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14508; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [31,31,31,31] 14509; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 14510; AVX2-NEXT: retq 14511; 14512; AVX512VPOPCNTDQ-LABEL: ugt_31_v4i64: 14513; AVX512VPOPCNTDQ: # %bb.0: 14514; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 14515; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 14516; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [31,31,31,31] 14517; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 14518; AVX512VPOPCNTDQ-NEXT: retq 14519; 14520; AVX512VPOPCNTDQVL-LABEL: ugt_31_v4i64: 14521; AVX512VPOPCNTDQVL: # %bb.0: 14522; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 14523; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 14524; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 14525; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 14526; AVX512VPOPCNTDQVL-NEXT: retq 14527; 14528; BITALG_NOVLX-LABEL: ugt_31_v4i64: 14529; BITALG_NOVLX: # %bb.0: 14530; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 14531; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 14532; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 14533; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14534; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [31,31,31,31] 14535; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 14536; BITALG_NOVLX-NEXT: retq 14537; 14538; BITALG-LABEL: ugt_31_v4i64: 14539; BITALG: # %bb.0: 14540; BITALG-NEXT: vpopcntb %ymm0, %ymm0 14541; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 14542; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14543; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 14544; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 14545; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 14546; BITALG-NEXT: retq 14547 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 14548 %3 = icmp ugt <4 x i64> %2, <i64 31, i64 31, i64 31, i64 31> 14549 %4 = sext <4 x i1> %3 to <4 x i64> 14550 ret <4 x i64> %4 14551} 14552 14553define <4 x i64> @ult_32_v4i64(<4 x i64> %0) { 14554; AVX1-LABEL: ult_32_v4i64: 14555; AVX1: # %bb.0: 14556; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 14557; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 14558; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 14559; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 14560; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 14561; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 14562; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 14563; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 14564; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 14565; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 14566; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 14567; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 14568; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 14569; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 14570; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 14571; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 14572; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 14573; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 14574; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [32,32] 14575; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 14576; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 14577; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 14578; AVX1-NEXT: retq 14579; 14580; AVX2-LABEL: ult_32_v4i64: 14581; AVX2: # %bb.0: 14582; AVX2-NEXT: vmovdqa {{.*#+}} 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] 14583; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 14584; AVX2-NEXT: vmovdqa {{.*#+}} 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] 14585; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 14586; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 14587; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 14588; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 14589; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 14590; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 14591; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14592; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [32,32,32,32] 14593; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 14594; AVX2-NEXT: retq 14595; 14596; AVX512VPOPCNTDQ-LABEL: ult_32_v4i64: 14597; AVX512VPOPCNTDQ: # %bb.0: 14598; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 14599; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 14600; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [32,32,32,32] 14601; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 14602; AVX512VPOPCNTDQ-NEXT: retq 14603; 14604; AVX512VPOPCNTDQVL-LABEL: ult_32_v4i64: 14605; AVX512VPOPCNTDQVL: # %bb.0: 14606; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 14607; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 14608; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 14609; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 14610; AVX512VPOPCNTDQVL-NEXT: retq 14611; 14612; BITALG_NOVLX-LABEL: ult_32_v4i64: 14613; BITALG_NOVLX: # %bb.0: 14614; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 14615; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 14616; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 14617; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14618; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [32,32,32,32] 14619; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 14620; BITALG_NOVLX-NEXT: retq 14621; 14622; BITALG-LABEL: ult_32_v4i64: 14623; BITALG: # %bb.0: 14624; BITALG-NEXT: vpopcntb %ymm0, %ymm0 14625; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 14626; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14627; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 14628; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 14629; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 14630; BITALG-NEXT: retq 14631 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 14632 %3 = icmp ult <4 x i64> %2, <i64 32, i64 32, i64 32, i64 32> 14633 %4 = sext <4 x i1> %3 to <4 x i64> 14634 ret <4 x i64> %4 14635} 14636 14637define <4 x i64> @ugt_32_v4i64(<4 x i64> %0) { 14638; AVX1-LABEL: ugt_32_v4i64: 14639; AVX1: # %bb.0: 14640; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 14641; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 14642; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 14643; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 14644; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 14645; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 14646; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 14647; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 14648; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 14649; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 14650; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 14651; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 14652; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 14653; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 14654; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 14655; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 14656; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 14657; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 14658; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [32,32] 14659; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 14660; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 14661; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 14662; AVX1-NEXT: retq 14663; 14664; AVX2-LABEL: ugt_32_v4i64: 14665; AVX2: # %bb.0: 14666; AVX2-NEXT: vmovdqa {{.*#+}} 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] 14667; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 14668; AVX2-NEXT: vmovdqa {{.*#+}} 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] 14669; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 14670; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 14671; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 14672; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 14673; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 14674; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 14675; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14676; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [32,32,32,32] 14677; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 14678; AVX2-NEXT: retq 14679; 14680; AVX512VPOPCNTDQ-LABEL: ugt_32_v4i64: 14681; AVX512VPOPCNTDQ: # %bb.0: 14682; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 14683; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 14684; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [32,32,32,32] 14685; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 14686; AVX512VPOPCNTDQ-NEXT: retq 14687; 14688; AVX512VPOPCNTDQVL-LABEL: ugt_32_v4i64: 14689; AVX512VPOPCNTDQVL: # %bb.0: 14690; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 14691; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 14692; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 14693; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 14694; AVX512VPOPCNTDQVL-NEXT: retq 14695; 14696; BITALG_NOVLX-LABEL: ugt_32_v4i64: 14697; BITALG_NOVLX: # %bb.0: 14698; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 14699; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 14700; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 14701; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14702; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [32,32,32,32] 14703; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 14704; BITALG_NOVLX-NEXT: retq 14705; 14706; BITALG-LABEL: ugt_32_v4i64: 14707; BITALG: # %bb.0: 14708; BITALG-NEXT: vpopcntb %ymm0, %ymm0 14709; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 14710; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14711; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 14712; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 14713; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 14714; BITALG-NEXT: retq 14715 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 14716 %3 = icmp ugt <4 x i64> %2, <i64 32, i64 32, i64 32, i64 32> 14717 %4 = sext <4 x i1> %3 to <4 x i64> 14718 ret <4 x i64> %4 14719} 14720 14721define <4 x i64> @ult_33_v4i64(<4 x i64> %0) { 14722; AVX1-LABEL: ult_33_v4i64: 14723; AVX1: # %bb.0: 14724; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 14725; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 14726; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 14727; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 14728; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 14729; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 14730; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 14731; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 14732; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 14733; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 14734; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 14735; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 14736; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 14737; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 14738; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 14739; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 14740; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 14741; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 14742; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [33,33] 14743; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 14744; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 14745; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 14746; AVX1-NEXT: retq 14747; 14748; AVX2-LABEL: ult_33_v4i64: 14749; AVX2: # %bb.0: 14750; AVX2-NEXT: vmovdqa {{.*#+}} 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] 14751; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 14752; AVX2-NEXT: vmovdqa {{.*#+}} 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] 14753; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 14754; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 14755; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 14756; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 14757; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 14758; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 14759; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14760; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [33,33,33,33] 14761; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 14762; AVX2-NEXT: retq 14763; 14764; AVX512VPOPCNTDQ-LABEL: ult_33_v4i64: 14765; AVX512VPOPCNTDQ: # %bb.0: 14766; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 14767; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 14768; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [33,33,33,33] 14769; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 14770; AVX512VPOPCNTDQ-NEXT: retq 14771; 14772; AVX512VPOPCNTDQVL-LABEL: ult_33_v4i64: 14773; AVX512VPOPCNTDQVL: # %bb.0: 14774; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 14775; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 14776; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 14777; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 14778; AVX512VPOPCNTDQVL-NEXT: retq 14779; 14780; BITALG_NOVLX-LABEL: ult_33_v4i64: 14781; BITALG_NOVLX: # %bb.0: 14782; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 14783; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 14784; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 14785; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14786; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [33,33,33,33] 14787; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 14788; BITALG_NOVLX-NEXT: retq 14789; 14790; BITALG-LABEL: ult_33_v4i64: 14791; BITALG: # %bb.0: 14792; BITALG-NEXT: vpopcntb %ymm0, %ymm0 14793; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 14794; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14795; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 14796; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 14797; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 14798; BITALG-NEXT: retq 14799 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 14800 %3 = icmp ult <4 x i64> %2, <i64 33, i64 33, i64 33, i64 33> 14801 %4 = sext <4 x i1> %3 to <4 x i64> 14802 ret <4 x i64> %4 14803} 14804 14805define <4 x i64> @ugt_33_v4i64(<4 x i64> %0) { 14806; AVX1-LABEL: ugt_33_v4i64: 14807; AVX1: # %bb.0: 14808; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 14809; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 14810; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 14811; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 14812; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 14813; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 14814; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 14815; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 14816; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 14817; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 14818; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 14819; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 14820; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 14821; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 14822; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 14823; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 14824; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 14825; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 14826; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [33,33] 14827; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 14828; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 14829; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 14830; AVX1-NEXT: retq 14831; 14832; AVX2-LABEL: ugt_33_v4i64: 14833; AVX2: # %bb.0: 14834; AVX2-NEXT: vmovdqa {{.*#+}} 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] 14835; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 14836; AVX2-NEXT: vmovdqa {{.*#+}} 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] 14837; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 14838; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 14839; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 14840; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 14841; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 14842; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 14843; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14844; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [33,33,33,33] 14845; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 14846; AVX2-NEXT: retq 14847; 14848; AVX512VPOPCNTDQ-LABEL: ugt_33_v4i64: 14849; AVX512VPOPCNTDQ: # %bb.0: 14850; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 14851; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 14852; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [33,33,33,33] 14853; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 14854; AVX512VPOPCNTDQ-NEXT: retq 14855; 14856; AVX512VPOPCNTDQVL-LABEL: ugt_33_v4i64: 14857; AVX512VPOPCNTDQVL: # %bb.0: 14858; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 14859; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 14860; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 14861; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 14862; AVX512VPOPCNTDQVL-NEXT: retq 14863; 14864; BITALG_NOVLX-LABEL: ugt_33_v4i64: 14865; BITALG_NOVLX: # %bb.0: 14866; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 14867; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 14868; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 14869; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14870; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [33,33,33,33] 14871; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 14872; BITALG_NOVLX-NEXT: retq 14873; 14874; BITALG-LABEL: ugt_33_v4i64: 14875; BITALG: # %bb.0: 14876; BITALG-NEXT: vpopcntb %ymm0, %ymm0 14877; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 14878; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14879; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 14880; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 14881; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 14882; BITALG-NEXT: retq 14883 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 14884 %3 = icmp ugt <4 x i64> %2, <i64 33, i64 33, i64 33, i64 33> 14885 %4 = sext <4 x i1> %3 to <4 x i64> 14886 ret <4 x i64> %4 14887} 14888 14889define <4 x i64> @ult_34_v4i64(<4 x i64> %0) { 14890; AVX1-LABEL: ult_34_v4i64: 14891; AVX1: # %bb.0: 14892; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 14893; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 14894; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 14895; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 14896; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 14897; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 14898; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 14899; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 14900; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 14901; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 14902; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 14903; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 14904; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 14905; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 14906; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 14907; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 14908; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 14909; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 14910; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [34,34] 14911; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 14912; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 14913; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 14914; AVX1-NEXT: retq 14915; 14916; AVX2-LABEL: ult_34_v4i64: 14917; AVX2: # %bb.0: 14918; AVX2-NEXT: vmovdqa {{.*#+}} 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] 14919; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 14920; AVX2-NEXT: vmovdqa {{.*#+}} 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] 14921; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 14922; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 14923; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 14924; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 14925; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 14926; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 14927; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14928; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [34,34,34,34] 14929; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 14930; AVX2-NEXT: retq 14931; 14932; AVX512VPOPCNTDQ-LABEL: ult_34_v4i64: 14933; AVX512VPOPCNTDQ: # %bb.0: 14934; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 14935; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 14936; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [34,34,34,34] 14937; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 14938; AVX512VPOPCNTDQ-NEXT: retq 14939; 14940; AVX512VPOPCNTDQVL-LABEL: ult_34_v4i64: 14941; AVX512VPOPCNTDQVL: # %bb.0: 14942; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 14943; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 14944; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 14945; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 14946; AVX512VPOPCNTDQVL-NEXT: retq 14947; 14948; BITALG_NOVLX-LABEL: ult_34_v4i64: 14949; BITALG_NOVLX: # %bb.0: 14950; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 14951; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 14952; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 14953; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14954; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [34,34,34,34] 14955; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 14956; BITALG_NOVLX-NEXT: retq 14957; 14958; BITALG-LABEL: ult_34_v4i64: 14959; BITALG: # %bb.0: 14960; BITALG-NEXT: vpopcntb %ymm0, %ymm0 14961; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 14962; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 14963; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 14964; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 14965; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 14966; BITALG-NEXT: retq 14967 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 14968 %3 = icmp ult <4 x i64> %2, <i64 34, i64 34, i64 34, i64 34> 14969 %4 = sext <4 x i1> %3 to <4 x i64> 14970 ret <4 x i64> %4 14971} 14972 14973define <4 x i64> @ugt_34_v4i64(<4 x i64> %0) { 14974; AVX1-LABEL: ugt_34_v4i64: 14975; AVX1: # %bb.0: 14976; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 14977; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 14978; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 14979; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 14980; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 14981; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 14982; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 14983; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 14984; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 14985; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 14986; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 14987; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 14988; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 14989; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 14990; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 14991; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 14992; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 14993; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 14994; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [34,34] 14995; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 14996; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 14997; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 14998; AVX1-NEXT: retq 14999; 15000; AVX2-LABEL: ugt_34_v4i64: 15001; AVX2: # %bb.0: 15002; AVX2-NEXT: vmovdqa {{.*#+}} 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] 15003; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 15004; AVX2-NEXT: vmovdqa {{.*#+}} 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] 15005; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 15006; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 15007; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 15008; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 15009; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 15010; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 15011; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15012; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [34,34,34,34] 15013; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 15014; AVX2-NEXT: retq 15015; 15016; AVX512VPOPCNTDQ-LABEL: ugt_34_v4i64: 15017; AVX512VPOPCNTDQ: # %bb.0: 15018; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 15019; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 15020; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [34,34,34,34] 15021; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 15022; AVX512VPOPCNTDQ-NEXT: retq 15023; 15024; AVX512VPOPCNTDQVL-LABEL: ugt_34_v4i64: 15025; AVX512VPOPCNTDQVL: # %bb.0: 15026; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 15027; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 15028; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 15029; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 15030; AVX512VPOPCNTDQVL-NEXT: retq 15031; 15032; BITALG_NOVLX-LABEL: ugt_34_v4i64: 15033; BITALG_NOVLX: # %bb.0: 15034; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 15035; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 15036; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 15037; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15038; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [34,34,34,34] 15039; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 15040; BITALG_NOVLX-NEXT: retq 15041; 15042; BITALG-LABEL: ugt_34_v4i64: 15043; BITALG: # %bb.0: 15044; BITALG-NEXT: vpopcntb %ymm0, %ymm0 15045; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 15046; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15047; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 15048; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 15049; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 15050; BITALG-NEXT: retq 15051 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 15052 %3 = icmp ugt <4 x i64> %2, <i64 34, i64 34, i64 34, i64 34> 15053 %4 = sext <4 x i1> %3 to <4 x i64> 15054 ret <4 x i64> %4 15055} 15056 15057define <4 x i64> @ult_35_v4i64(<4 x i64> %0) { 15058; AVX1-LABEL: ult_35_v4i64: 15059; AVX1: # %bb.0: 15060; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 15061; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 15062; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 15063; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 15064; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 15065; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 15066; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 15067; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 15068; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 15069; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 15070; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 15071; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 15072; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 15073; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 15074; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 15075; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 15076; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 15077; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 15078; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [35,35] 15079; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 15080; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 15081; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 15082; AVX1-NEXT: retq 15083; 15084; AVX2-LABEL: ult_35_v4i64: 15085; AVX2: # %bb.0: 15086; AVX2-NEXT: vmovdqa {{.*#+}} 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] 15087; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 15088; AVX2-NEXT: vmovdqa {{.*#+}} 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] 15089; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 15090; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 15091; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 15092; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 15093; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 15094; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 15095; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15096; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [35,35,35,35] 15097; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 15098; AVX2-NEXT: retq 15099; 15100; AVX512VPOPCNTDQ-LABEL: ult_35_v4i64: 15101; AVX512VPOPCNTDQ: # %bb.0: 15102; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 15103; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 15104; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [35,35,35,35] 15105; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 15106; AVX512VPOPCNTDQ-NEXT: retq 15107; 15108; AVX512VPOPCNTDQVL-LABEL: ult_35_v4i64: 15109; AVX512VPOPCNTDQVL: # %bb.0: 15110; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 15111; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 15112; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 15113; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 15114; AVX512VPOPCNTDQVL-NEXT: retq 15115; 15116; BITALG_NOVLX-LABEL: ult_35_v4i64: 15117; BITALG_NOVLX: # %bb.0: 15118; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 15119; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 15120; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 15121; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15122; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [35,35,35,35] 15123; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 15124; BITALG_NOVLX-NEXT: retq 15125; 15126; BITALG-LABEL: ult_35_v4i64: 15127; BITALG: # %bb.0: 15128; BITALG-NEXT: vpopcntb %ymm0, %ymm0 15129; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 15130; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15131; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 15132; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 15133; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 15134; BITALG-NEXT: retq 15135 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 15136 %3 = icmp ult <4 x i64> %2, <i64 35, i64 35, i64 35, i64 35> 15137 %4 = sext <4 x i1> %3 to <4 x i64> 15138 ret <4 x i64> %4 15139} 15140 15141define <4 x i64> @ugt_35_v4i64(<4 x i64> %0) { 15142; AVX1-LABEL: ugt_35_v4i64: 15143; AVX1: # %bb.0: 15144; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 15145; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 15146; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 15147; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 15148; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 15149; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 15150; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 15151; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 15152; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 15153; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 15154; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 15155; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 15156; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 15157; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 15158; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 15159; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 15160; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 15161; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 15162; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [35,35] 15163; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 15164; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 15165; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 15166; AVX1-NEXT: retq 15167; 15168; AVX2-LABEL: ugt_35_v4i64: 15169; AVX2: # %bb.0: 15170; AVX2-NEXT: vmovdqa {{.*#+}} 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] 15171; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 15172; AVX2-NEXT: vmovdqa {{.*#+}} 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] 15173; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 15174; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 15175; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 15176; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 15177; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 15178; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 15179; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15180; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [35,35,35,35] 15181; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 15182; AVX2-NEXT: retq 15183; 15184; AVX512VPOPCNTDQ-LABEL: ugt_35_v4i64: 15185; AVX512VPOPCNTDQ: # %bb.0: 15186; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 15187; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 15188; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [35,35,35,35] 15189; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 15190; AVX512VPOPCNTDQ-NEXT: retq 15191; 15192; AVX512VPOPCNTDQVL-LABEL: ugt_35_v4i64: 15193; AVX512VPOPCNTDQVL: # %bb.0: 15194; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 15195; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 15196; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 15197; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 15198; AVX512VPOPCNTDQVL-NEXT: retq 15199; 15200; BITALG_NOVLX-LABEL: ugt_35_v4i64: 15201; BITALG_NOVLX: # %bb.0: 15202; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 15203; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 15204; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 15205; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15206; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [35,35,35,35] 15207; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 15208; BITALG_NOVLX-NEXT: retq 15209; 15210; BITALG-LABEL: ugt_35_v4i64: 15211; BITALG: # %bb.0: 15212; BITALG-NEXT: vpopcntb %ymm0, %ymm0 15213; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 15214; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15215; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 15216; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 15217; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 15218; BITALG-NEXT: retq 15219 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 15220 %3 = icmp ugt <4 x i64> %2, <i64 35, i64 35, i64 35, i64 35> 15221 %4 = sext <4 x i1> %3 to <4 x i64> 15222 ret <4 x i64> %4 15223} 15224 15225define <4 x i64> @ult_36_v4i64(<4 x i64> %0) { 15226; AVX1-LABEL: ult_36_v4i64: 15227; AVX1: # %bb.0: 15228; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 15229; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 15230; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 15231; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 15232; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 15233; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 15234; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 15235; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 15236; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 15237; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 15238; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 15239; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 15240; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 15241; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 15242; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 15243; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 15244; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 15245; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 15246; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [36,36] 15247; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 15248; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 15249; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 15250; AVX1-NEXT: retq 15251; 15252; AVX2-LABEL: ult_36_v4i64: 15253; AVX2: # %bb.0: 15254; AVX2-NEXT: vmovdqa {{.*#+}} 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] 15255; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 15256; AVX2-NEXT: vmovdqa {{.*#+}} 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] 15257; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 15258; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 15259; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 15260; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 15261; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 15262; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 15263; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15264; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [36,36,36,36] 15265; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 15266; AVX2-NEXT: retq 15267; 15268; AVX512VPOPCNTDQ-LABEL: ult_36_v4i64: 15269; AVX512VPOPCNTDQ: # %bb.0: 15270; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 15271; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 15272; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [36,36,36,36] 15273; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 15274; AVX512VPOPCNTDQ-NEXT: retq 15275; 15276; AVX512VPOPCNTDQVL-LABEL: ult_36_v4i64: 15277; AVX512VPOPCNTDQVL: # %bb.0: 15278; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 15279; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 15280; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 15281; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 15282; AVX512VPOPCNTDQVL-NEXT: retq 15283; 15284; BITALG_NOVLX-LABEL: ult_36_v4i64: 15285; BITALG_NOVLX: # %bb.0: 15286; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 15287; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 15288; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 15289; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15290; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [36,36,36,36] 15291; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 15292; BITALG_NOVLX-NEXT: retq 15293; 15294; BITALG-LABEL: ult_36_v4i64: 15295; BITALG: # %bb.0: 15296; BITALG-NEXT: vpopcntb %ymm0, %ymm0 15297; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 15298; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15299; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 15300; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 15301; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 15302; BITALG-NEXT: retq 15303 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 15304 %3 = icmp ult <4 x i64> %2, <i64 36, i64 36, i64 36, i64 36> 15305 %4 = sext <4 x i1> %3 to <4 x i64> 15306 ret <4 x i64> %4 15307} 15308 15309define <4 x i64> @ugt_36_v4i64(<4 x i64> %0) { 15310; AVX1-LABEL: ugt_36_v4i64: 15311; AVX1: # %bb.0: 15312; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 15313; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 15314; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 15315; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 15316; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 15317; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 15318; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 15319; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 15320; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 15321; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 15322; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 15323; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 15324; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 15325; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 15326; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 15327; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 15328; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 15329; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 15330; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [36,36] 15331; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 15332; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 15333; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 15334; AVX1-NEXT: retq 15335; 15336; AVX2-LABEL: ugt_36_v4i64: 15337; AVX2: # %bb.0: 15338; AVX2-NEXT: vmovdqa {{.*#+}} 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] 15339; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 15340; AVX2-NEXT: vmovdqa {{.*#+}} 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] 15341; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 15342; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 15343; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 15344; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 15345; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 15346; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 15347; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15348; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [36,36,36,36] 15349; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 15350; AVX2-NEXT: retq 15351; 15352; AVX512VPOPCNTDQ-LABEL: ugt_36_v4i64: 15353; AVX512VPOPCNTDQ: # %bb.0: 15354; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 15355; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 15356; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [36,36,36,36] 15357; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 15358; AVX512VPOPCNTDQ-NEXT: retq 15359; 15360; AVX512VPOPCNTDQVL-LABEL: ugt_36_v4i64: 15361; AVX512VPOPCNTDQVL: # %bb.0: 15362; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 15363; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 15364; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 15365; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 15366; AVX512VPOPCNTDQVL-NEXT: retq 15367; 15368; BITALG_NOVLX-LABEL: ugt_36_v4i64: 15369; BITALG_NOVLX: # %bb.0: 15370; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 15371; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 15372; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 15373; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15374; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [36,36,36,36] 15375; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 15376; BITALG_NOVLX-NEXT: retq 15377; 15378; BITALG-LABEL: ugt_36_v4i64: 15379; BITALG: # %bb.0: 15380; BITALG-NEXT: vpopcntb %ymm0, %ymm0 15381; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 15382; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15383; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 15384; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 15385; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 15386; BITALG-NEXT: retq 15387 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 15388 %3 = icmp ugt <4 x i64> %2, <i64 36, i64 36, i64 36, i64 36> 15389 %4 = sext <4 x i1> %3 to <4 x i64> 15390 ret <4 x i64> %4 15391} 15392 15393define <4 x i64> @ult_37_v4i64(<4 x i64> %0) { 15394; AVX1-LABEL: ult_37_v4i64: 15395; AVX1: # %bb.0: 15396; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 15397; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 15398; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 15399; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 15400; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 15401; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 15402; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 15403; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 15404; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 15405; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 15406; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 15407; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 15408; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 15409; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 15410; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 15411; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 15412; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 15413; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 15414; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [37,37] 15415; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 15416; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 15417; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 15418; AVX1-NEXT: retq 15419; 15420; AVX2-LABEL: ult_37_v4i64: 15421; AVX2: # %bb.0: 15422; AVX2-NEXT: vmovdqa {{.*#+}} 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] 15423; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 15424; AVX2-NEXT: vmovdqa {{.*#+}} 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] 15425; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 15426; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 15427; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 15428; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 15429; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 15430; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 15431; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15432; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [37,37,37,37] 15433; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 15434; AVX2-NEXT: retq 15435; 15436; AVX512VPOPCNTDQ-LABEL: ult_37_v4i64: 15437; AVX512VPOPCNTDQ: # %bb.0: 15438; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 15439; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 15440; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [37,37,37,37] 15441; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 15442; AVX512VPOPCNTDQ-NEXT: retq 15443; 15444; AVX512VPOPCNTDQVL-LABEL: ult_37_v4i64: 15445; AVX512VPOPCNTDQVL: # %bb.0: 15446; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 15447; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 15448; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 15449; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 15450; AVX512VPOPCNTDQVL-NEXT: retq 15451; 15452; BITALG_NOVLX-LABEL: ult_37_v4i64: 15453; BITALG_NOVLX: # %bb.0: 15454; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 15455; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 15456; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 15457; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15458; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [37,37,37,37] 15459; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 15460; BITALG_NOVLX-NEXT: retq 15461; 15462; BITALG-LABEL: ult_37_v4i64: 15463; BITALG: # %bb.0: 15464; BITALG-NEXT: vpopcntb %ymm0, %ymm0 15465; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 15466; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15467; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 15468; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 15469; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 15470; BITALG-NEXT: retq 15471 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 15472 %3 = icmp ult <4 x i64> %2, <i64 37, i64 37, i64 37, i64 37> 15473 %4 = sext <4 x i1> %3 to <4 x i64> 15474 ret <4 x i64> %4 15475} 15476 15477define <4 x i64> @ugt_37_v4i64(<4 x i64> %0) { 15478; AVX1-LABEL: ugt_37_v4i64: 15479; AVX1: # %bb.0: 15480; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 15481; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 15482; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 15483; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 15484; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 15485; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 15486; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 15487; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 15488; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 15489; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 15490; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 15491; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 15492; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 15493; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 15494; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 15495; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 15496; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 15497; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 15498; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [37,37] 15499; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 15500; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 15501; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 15502; AVX1-NEXT: retq 15503; 15504; AVX2-LABEL: ugt_37_v4i64: 15505; AVX2: # %bb.0: 15506; AVX2-NEXT: vmovdqa {{.*#+}} 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] 15507; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 15508; AVX2-NEXT: vmovdqa {{.*#+}} 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] 15509; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 15510; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 15511; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 15512; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 15513; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 15514; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 15515; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15516; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [37,37,37,37] 15517; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 15518; AVX2-NEXT: retq 15519; 15520; AVX512VPOPCNTDQ-LABEL: ugt_37_v4i64: 15521; AVX512VPOPCNTDQ: # %bb.0: 15522; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 15523; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 15524; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [37,37,37,37] 15525; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 15526; AVX512VPOPCNTDQ-NEXT: retq 15527; 15528; AVX512VPOPCNTDQVL-LABEL: ugt_37_v4i64: 15529; AVX512VPOPCNTDQVL: # %bb.0: 15530; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 15531; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 15532; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 15533; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 15534; AVX512VPOPCNTDQVL-NEXT: retq 15535; 15536; BITALG_NOVLX-LABEL: ugt_37_v4i64: 15537; BITALG_NOVLX: # %bb.0: 15538; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 15539; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 15540; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 15541; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15542; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [37,37,37,37] 15543; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 15544; BITALG_NOVLX-NEXT: retq 15545; 15546; BITALG-LABEL: ugt_37_v4i64: 15547; BITALG: # %bb.0: 15548; BITALG-NEXT: vpopcntb %ymm0, %ymm0 15549; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 15550; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15551; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 15552; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 15553; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 15554; BITALG-NEXT: retq 15555 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 15556 %3 = icmp ugt <4 x i64> %2, <i64 37, i64 37, i64 37, i64 37> 15557 %4 = sext <4 x i1> %3 to <4 x i64> 15558 ret <4 x i64> %4 15559} 15560 15561define <4 x i64> @ult_38_v4i64(<4 x i64> %0) { 15562; AVX1-LABEL: ult_38_v4i64: 15563; AVX1: # %bb.0: 15564; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 15565; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 15566; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 15567; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 15568; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 15569; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 15570; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 15571; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 15572; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 15573; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 15574; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 15575; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 15576; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 15577; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 15578; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 15579; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 15580; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 15581; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 15582; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [38,38] 15583; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 15584; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 15585; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 15586; AVX1-NEXT: retq 15587; 15588; AVX2-LABEL: ult_38_v4i64: 15589; AVX2: # %bb.0: 15590; AVX2-NEXT: vmovdqa {{.*#+}} 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] 15591; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 15592; AVX2-NEXT: vmovdqa {{.*#+}} 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] 15593; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 15594; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 15595; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 15596; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 15597; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 15598; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 15599; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15600; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [38,38,38,38] 15601; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 15602; AVX2-NEXT: retq 15603; 15604; AVX512VPOPCNTDQ-LABEL: ult_38_v4i64: 15605; AVX512VPOPCNTDQ: # %bb.0: 15606; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 15607; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 15608; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [38,38,38,38] 15609; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 15610; AVX512VPOPCNTDQ-NEXT: retq 15611; 15612; AVX512VPOPCNTDQVL-LABEL: ult_38_v4i64: 15613; AVX512VPOPCNTDQVL: # %bb.0: 15614; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 15615; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 15616; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 15617; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 15618; AVX512VPOPCNTDQVL-NEXT: retq 15619; 15620; BITALG_NOVLX-LABEL: ult_38_v4i64: 15621; BITALG_NOVLX: # %bb.0: 15622; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 15623; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 15624; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 15625; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15626; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [38,38,38,38] 15627; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 15628; BITALG_NOVLX-NEXT: retq 15629; 15630; BITALG-LABEL: ult_38_v4i64: 15631; BITALG: # %bb.0: 15632; BITALG-NEXT: vpopcntb %ymm0, %ymm0 15633; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 15634; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15635; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 15636; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 15637; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 15638; BITALG-NEXT: retq 15639 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 15640 %3 = icmp ult <4 x i64> %2, <i64 38, i64 38, i64 38, i64 38> 15641 %4 = sext <4 x i1> %3 to <4 x i64> 15642 ret <4 x i64> %4 15643} 15644 15645define <4 x i64> @ugt_38_v4i64(<4 x i64> %0) { 15646; AVX1-LABEL: ugt_38_v4i64: 15647; AVX1: # %bb.0: 15648; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 15649; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 15650; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 15651; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 15652; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 15653; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 15654; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 15655; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 15656; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 15657; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 15658; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 15659; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 15660; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 15661; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 15662; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 15663; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 15664; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 15665; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 15666; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [38,38] 15667; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 15668; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 15669; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 15670; AVX1-NEXT: retq 15671; 15672; AVX2-LABEL: ugt_38_v4i64: 15673; AVX2: # %bb.0: 15674; AVX2-NEXT: vmovdqa {{.*#+}} 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] 15675; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 15676; AVX2-NEXT: vmovdqa {{.*#+}} 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] 15677; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 15678; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 15679; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 15680; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 15681; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 15682; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 15683; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15684; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [38,38,38,38] 15685; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 15686; AVX2-NEXT: retq 15687; 15688; AVX512VPOPCNTDQ-LABEL: ugt_38_v4i64: 15689; AVX512VPOPCNTDQ: # %bb.0: 15690; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 15691; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 15692; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [38,38,38,38] 15693; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 15694; AVX512VPOPCNTDQ-NEXT: retq 15695; 15696; AVX512VPOPCNTDQVL-LABEL: ugt_38_v4i64: 15697; AVX512VPOPCNTDQVL: # %bb.0: 15698; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 15699; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 15700; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 15701; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 15702; AVX512VPOPCNTDQVL-NEXT: retq 15703; 15704; BITALG_NOVLX-LABEL: ugt_38_v4i64: 15705; BITALG_NOVLX: # %bb.0: 15706; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 15707; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 15708; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 15709; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15710; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [38,38,38,38] 15711; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 15712; BITALG_NOVLX-NEXT: retq 15713; 15714; BITALG-LABEL: ugt_38_v4i64: 15715; BITALG: # %bb.0: 15716; BITALG-NEXT: vpopcntb %ymm0, %ymm0 15717; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 15718; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15719; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 15720; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 15721; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 15722; BITALG-NEXT: retq 15723 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 15724 %3 = icmp ugt <4 x i64> %2, <i64 38, i64 38, i64 38, i64 38> 15725 %4 = sext <4 x i1> %3 to <4 x i64> 15726 ret <4 x i64> %4 15727} 15728 15729define <4 x i64> @ult_39_v4i64(<4 x i64> %0) { 15730; AVX1-LABEL: ult_39_v4i64: 15731; AVX1: # %bb.0: 15732; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 15733; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 15734; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 15735; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 15736; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 15737; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 15738; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 15739; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 15740; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 15741; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 15742; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 15743; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 15744; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 15745; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 15746; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 15747; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 15748; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 15749; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 15750; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [39,39] 15751; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 15752; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 15753; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 15754; AVX1-NEXT: retq 15755; 15756; AVX2-LABEL: ult_39_v4i64: 15757; AVX2: # %bb.0: 15758; AVX2-NEXT: vmovdqa {{.*#+}} 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] 15759; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 15760; AVX2-NEXT: vmovdqa {{.*#+}} 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] 15761; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 15762; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 15763; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 15764; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 15765; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 15766; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 15767; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15768; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [39,39,39,39] 15769; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 15770; AVX2-NEXT: retq 15771; 15772; AVX512VPOPCNTDQ-LABEL: ult_39_v4i64: 15773; AVX512VPOPCNTDQ: # %bb.0: 15774; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 15775; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 15776; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [39,39,39,39] 15777; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 15778; AVX512VPOPCNTDQ-NEXT: retq 15779; 15780; AVX512VPOPCNTDQVL-LABEL: ult_39_v4i64: 15781; AVX512VPOPCNTDQVL: # %bb.0: 15782; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 15783; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 15784; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 15785; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 15786; AVX512VPOPCNTDQVL-NEXT: retq 15787; 15788; BITALG_NOVLX-LABEL: ult_39_v4i64: 15789; BITALG_NOVLX: # %bb.0: 15790; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 15791; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 15792; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 15793; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15794; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [39,39,39,39] 15795; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 15796; BITALG_NOVLX-NEXT: retq 15797; 15798; BITALG-LABEL: ult_39_v4i64: 15799; BITALG: # %bb.0: 15800; BITALG-NEXT: vpopcntb %ymm0, %ymm0 15801; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 15802; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15803; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 15804; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 15805; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 15806; BITALG-NEXT: retq 15807 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 15808 %3 = icmp ult <4 x i64> %2, <i64 39, i64 39, i64 39, i64 39> 15809 %4 = sext <4 x i1> %3 to <4 x i64> 15810 ret <4 x i64> %4 15811} 15812 15813define <4 x i64> @ugt_39_v4i64(<4 x i64> %0) { 15814; AVX1-LABEL: ugt_39_v4i64: 15815; AVX1: # %bb.0: 15816; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 15817; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 15818; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 15819; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 15820; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 15821; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 15822; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 15823; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 15824; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 15825; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 15826; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 15827; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 15828; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 15829; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 15830; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 15831; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 15832; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 15833; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 15834; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [39,39] 15835; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 15836; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 15837; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 15838; AVX1-NEXT: retq 15839; 15840; AVX2-LABEL: ugt_39_v4i64: 15841; AVX2: # %bb.0: 15842; AVX2-NEXT: vmovdqa {{.*#+}} 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] 15843; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 15844; AVX2-NEXT: vmovdqa {{.*#+}} 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] 15845; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 15846; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 15847; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 15848; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 15849; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 15850; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 15851; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15852; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [39,39,39,39] 15853; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 15854; AVX2-NEXT: retq 15855; 15856; AVX512VPOPCNTDQ-LABEL: ugt_39_v4i64: 15857; AVX512VPOPCNTDQ: # %bb.0: 15858; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 15859; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 15860; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [39,39,39,39] 15861; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 15862; AVX512VPOPCNTDQ-NEXT: retq 15863; 15864; AVX512VPOPCNTDQVL-LABEL: ugt_39_v4i64: 15865; AVX512VPOPCNTDQVL: # %bb.0: 15866; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 15867; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 15868; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 15869; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 15870; AVX512VPOPCNTDQVL-NEXT: retq 15871; 15872; BITALG_NOVLX-LABEL: ugt_39_v4i64: 15873; BITALG_NOVLX: # %bb.0: 15874; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 15875; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 15876; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 15877; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15878; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [39,39,39,39] 15879; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 15880; BITALG_NOVLX-NEXT: retq 15881; 15882; BITALG-LABEL: ugt_39_v4i64: 15883; BITALG: # %bb.0: 15884; BITALG-NEXT: vpopcntb %ymm0, %ymm0 15885; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 15886; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15887; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 15888; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 15889; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 15890; BITALG-NEXT: retq 15891 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 15892 %3 = icmp ugt <4 x i64> %2, <i64 39, i64 39, i64 39, i64 39> 15893 %4 = sext <4 x i1> %3 to <4 x i64> 15894 ret <4 x i64> %4 15895} 15896 15897define <4 x i64> @ult_40_v4i64(<4 x i64> %0) { 15898; AVX1-LABEL: ult_40_v4i64: 15899; AVX1: # %bb.0: 15900; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 15901; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 15902; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 15903; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 15904; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 15905; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 15906; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 15907; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 15908; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 15909; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 15910; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 15911; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 15912; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 15913; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 15914; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 15915; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 15916; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 15917; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 15918; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [40,40] 15919; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 15920; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 15921; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 15922; AVX1-NEXT: retq 15923; 15924; AVX2-LABEL: ult_40_v4i64: 15925; AVX2: # %bb.0: 15926; AVX2-NEXT: vmovdqa {{.*#+}} 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] 15927; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 15928; AVX2-NEXT: vmovdqa {{.*#+}} 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] 15929; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 15930; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 15931; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 15932; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 15933; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 15934; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 15935; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15936; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [40,40,40,40] 15937; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 15938; AVX2-NEXT: retq 15939; 15940; AVX512VPOPCNTDQ-LABEL: ult_40_v4i64: 15941; AVX512VPOPCNTDQ: # %bb.0: 15942; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 15943; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 15944; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [40,40,40,40] 15945; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 15946; AVX512VPOPCNTDQ-NEXT: retq 15947; 15948; AVX512VPOPCNTDQVL-LABEL: ult_40_v4i64: 15949; AVX512VPOPCNTDQVL: # %bb.0: 15950; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 15951; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 15952; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 15953; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 15954; AVX512VPOPCNTDQVL-NEXT: retq 15955; 15956; BITALG_NOVLX-LABEL: ult_40_v4i64: 15957; BITALG_NOVLX: # %bb.0: 15958; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 15959; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 15960; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 15961; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15962; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [40,40,40,40] 15963; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 15964; BITALG_NOVLX-NEXT: retq 15965; 15966; BITALG-LABEL: ult_40_v4i64: 15967; BITALG: # %bb.0: 15968; BITALG-NEXT: vpopcntb %ymm0, %ymm0 15969; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 15970; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 15971; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 15972; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 15973; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 15974; BITALG-NEXT: retq 15975 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 15976 %3 = icmp ult <4 x i64> %2, <i64 40, i64 40, i64 40, i64 40> 15977 %4 = sext <4 x i1> %3 to <4 x i64> 15978 ret <4 x i64> %4 15979} 15980 15981define <4 x i64> @ugt_40_v4i64(<4 x i64> %0) { 15982; AVX1-LABEL: ugt_40_v4i64: 15983; AVX1: # %bb.0: 15984; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 15985; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 15986; 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, %xmm2 15988; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 15989; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 15990; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 15991; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 15992; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 15993; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 15994; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 15995; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 15996; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 15997; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 15998; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 15999; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 16000; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 16001; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 16002; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [40,40] 16003; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 16004; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 16005; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 16006; AVX1-NEXT: retq 16007; 16008; AVX2-LABEL: ugt_40_v4i64: 16009; AVX2: # %bb.0: 16010; AVX2-NEXT: vmovdqa {{.*#+}} 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, %ymm2 16012; AVX2-NEXT: vmovdqa {{.*#+}} 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: vpshufb %ymm2, %ymm3, %ymm2 16014; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 16015; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 16016; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 16017; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 16018; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 16019; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16020; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [40,40,40,40] 16021; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 16022; AVX2-NEXT: retq 16023; 16024; AVX512VPOPCNTDQ-LABEL: ugt_40_v4i64: 16025; AVX512VPOPCNTDQ: # %bb.0: 16026; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 16027; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 16028; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [40,40,40,40] 16029; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 16030; AVX512VPOPCNTDQ-NEXT: retq 16031; 16032; AVX512VPOPCNTDQVL-LABEL: ugt_40_v4i64: 16033; AVX512VPOPCNTDQVL: # %bb.0: 16034; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 16035; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 16036; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 16037; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 16038; AVX512VPOPCNTDQVL-NEXT: retq 16039; 16040; BITALG_NOVLX-LABEL: ugt_40_v4i64: 16041; BITALG_NOVLX: # %bb.0: 16042; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 16043; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 16044; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 16045; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16046; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [40,40,40,40] 16047; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 16048; BITALG_NOVLX-NEXT: retq 16049; 16050; BITALG-LABEL: ugt_40_v4i64: 16051; BITALG: # %bb.0: 16052; BITALG-NEXT: vpopcntb %ymm0, %ymm0 16053; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 16054; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16055; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 16056; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 16057; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 16058; BITALG-NEXT: retq 16059 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 16060 %3 = icmp ugt <4 x i64> %2, <i64 40, i64 40, i64 40, i64 40> 16061 %4 = sext <4 x i1> %3 to <4 x i64> 16062 ret <4 x i64> %4 16063} 16064 16065define <4 x i64> @ult_41_v4i64(<4 x i64> %0) { 16066; AVX1-LABEL: ult_41_v4i64: 16067; AVX1: # %bb.0: 16068; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 16069; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 16070; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 16071; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 16072; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 16073; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 16074; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 16075; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 16076; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 16077; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 16078; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 16079; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 16080; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 16081; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 16082; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 16083; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 16084; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 16085; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 16086; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [41,41] 16087; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 16088; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 16089; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 16090; AVX1-NEXT: retq 16091; 16092; AVX2-LABEL: ult_41_v4i64: 16093; AVX2: # %bb.0: 16094; AVX2-NEXT: vmovdqa {{.*#+}} 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] 16095; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 16096; AVX2-NEXT: vmovdqa {{.*#+}} 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] 16097; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 16098; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 16099; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 16100; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 16101; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 16102; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 16103; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16104; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [41,41,41,41] 16105; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 16106; AVX2-NEXT: retq 16107; 16108; AVX512VPOPCNTDQ-LABEL: ult_41_v4i64: 16109; AVX512VPOPCNTDQ: # %bb.0: 16110; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 16111; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 16112; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [41,41,41,41] 16113; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 16114; AVX512VPOPCNTDQ-NEXT: retq 16115; 16116; AVX512VPOPCNTDQVL-LABEL: ult_41_v4i64: 16117; AVX512VPOPCNTDQVL: # %bb.0: 16118; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 16119; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 16120; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 16121; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 16122; AVX512VPOPCNTDQVL-NEXT: retq 16123; 16124; BITALG_NOVLX-LABEL: ult_41_v4i64: 16125; BITALG_NOVLX: # %bb.0: 16126; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 16127; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 16128; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 16129; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16130; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [41,41,41,41] 16131; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 16132; BITALG_NOVLX-NEXT: retq 16133; 16134; BITALG-LABEL: ult_41_v4i64: 16135; BITALG: # %bb.0: 16136; BITALG-NEXT: vpopcntb %ymm0, %ymm0 16137; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 16138; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16139; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 16140; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 16141; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 16142; BITALG-NEXT: retq 16143 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 16144 %3 = icmp ult <4 x i64> %2, <i64 41, i64 41, i64 41, i64 41> 16145 %4 = sext <4 x i1> %3 to <4 x i64> 16146 ret <4 x i64> %4 16147} 16148 16149define <4 x i64> @ugt_41_v4i64(<4 x i64> %0) { 16150; AVX1-LABEL: ugt_41_v4i64: 16151; AVX1: # %bb.0: 16152; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 16153; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 16154; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 16155; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 16156; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 16157; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 16158; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 16159; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 16160; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 16161; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 16162; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 16163; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 16164; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 16165; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 16166; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 16167; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 16168; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 16169; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 16170; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [41,41] 16171; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 16172; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 16173; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 16174; AVX1-NEXT: retq 16175; 16176; AVX2-LABEL: ugt_41_v4i64: 16177; AVX2: # %bb.0: 16178; AVX2-NEXT: vmovdqa {{.*#+}} 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] 16179; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 16180; AVX2-NEXT: vmovdqa {{.*#+}} 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] 16181; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 16182; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 16183; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 16184; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 16185; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 16186; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 16187; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16188; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [41,41,41,41] 16189; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 16190; AVX2-NEXT: retq 16191; 16192; AVX512VPOPCNTDQ-LABEL: ugt_41_v4i64: 16193; AVX512VPOPCNTDQ: # %bb.0: 16194; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 16195; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 16196; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [41,41,41,41] 16197; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 16198; AVX512VPOPCNTDQ-NEXT: retq 16199; 16200; AVX512VPOPCNTDQVL-LABEL: ugt_41_v4i64: 16201; AVX512VPOPCNTDQVL: # %bb.0: 16202; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 16203; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 16204; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 16205; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 16206; AVX512VPOPCNTDQVL-NEXT: retq 16207; 16208; BITALG_NOVLX-LABEL: ugt_41_v4i64: 16209; BITALG_NOVLX: # %bb.0: 16210; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 16211; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 16212; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 16213; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16214; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [41,41,41,41] 16215; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 16216; BITALG_NOVLX-NEXT: retq 16217; 16218; BITALG-LABEL: ugt_41_v4i64: 16219; BITALG: # %bb.0: 16220; BITALG-NEXT: vpopcntb %ymm0, %ymm0 16221; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 16222; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16223; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 16224; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 16225; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 16226; BITALG-NEXT: retq 16227 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 16228 %3 = icmp ugt <4 x i64> %2, <i64 41, i64 41, i64 41, i64 41> 16229 %4 = sext <4 x i1> %3 to <4 x i64> 16230 ret <4 x i64> %4 16231} 16232 16233define <4 x i64> @ult_42_v4i64(<4 x i64> %0) { 16234; AVX1-LABEL: ult_42_v4i64: 16235; AVX1: # %bb.0: 16236; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 16237; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 16238; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 16239; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 16240; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 16241; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 16242; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 16243; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 16244; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 16245; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 16246; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 16247; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 16248; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 16249; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 16250; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 16251; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 16252; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 16253; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 16254; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [42,42] 16255; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 16256; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 16257; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 16258; AVX1-NEXT: retq 16259; 16260; AVX2-LABEL: ult_42_v4i64: 16261; AVX2: # %bb.0: 16262; AVX2-NEXT: vmovdqa {{.*#+}} 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] 16263; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 16264; AVX2-NEXT: vmovdqa {{.*#+}} 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] 16265; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 16266; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 16267; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 16268; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 16269; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 16270; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 16271; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16272; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [42,42,42,42] 16273; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 16274; AVX2-NEXT: retq 16275; 16276; AVX512VPOPCNTDQ-LABEL: ult_42_v4i64: 16277; AVX512VPOPCNTDQ: # %bb.0: 16278; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 16279; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 16280; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [42,42,42,42] 16281; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 16282; AVX512VPOPCNTDQ-NEXT: retq 16283; 16284; AVX512VPOPCNTDQVL-LABEL: ult_42_v4i64: 16285; AVX512VPOPCNTDQVL: # %bb.0: 16286; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 16287; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 16288; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 16289; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 16290; AVX512VPOPCNTDQVL-NEXT: retq 16291; 16292; BITALG_NOVLX-LABEL: ult_42_v4i64: 16293; BITALG_NOVLX: # %bb.0: 16294; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 16295; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 16296; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 16297; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16298; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [42,42,42,42] 16299; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 16300; BITALG_NOVLX-NEXT: retq 16301; 16302; BITALG-LABEL: ult_42_v4i64: 16303; BITALG: # %bb.0: 16304; BITALG-NEXT: vpopcntb %ymm0, %ymm0 16305; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 16306; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16307; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 16308; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 16309; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 16310; BITALG-NEXT: retq 16311 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 16312 %3 = icmp ult <4 x i64> %2, <i64 42, i64 42, i64 42, i64 42> 16313 %4 = sext <4 x i1> %3 to <4 x i64> 16314 ret <4 x i64> %4 16315} 16316 16317define <4 x i64> @ugt_42_v4i64(<4 x i64> %0) { 16318; AVX1-LABEL: ugt_42_v4i64: 16319; AVX1: # %bb.0: 16320; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 16321; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 16322; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 16323; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 16324; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 16325; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 16326; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 16327; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 16328; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 16329; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 16330; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 16331; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 16332; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 16333; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 16334; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 16335; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 16336; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 16337; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 16338; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [42,42] 16339; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 16340; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 16341; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 16342; AVX1-NEXT: retq 16343; 16344; AVX2-LABEL: ugt_42_v4i64: 16345; AVX2: # %bb.0: 16346; AVX2-NEXT: vmovdqa {{.*#+}} 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] 16347; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 16348; AVX2-NEXT: vmovdqa {{.*#+}} 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] 16349; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 16350; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 16351; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 16352; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 16353; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 16354; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 16355; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16356; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [42,42,42,42] 16357; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 16358; AVX2-NEXT: retq 16359; 16360; AVX512VPOPCNTDQ-LABEL: ugt_42_v4i64: 16361; AVX512VPOPCNTDQ: # %bb.0: 16362; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 16363; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 16364; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [42,42,42,42] 16365; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 16366; AVX512VPOPCNTDQ-NEXT: retq 16367; 16368; AVX512VPOPCNTDQVL-LABEL: ugt_42_v4i64: 16369; AVX512VPOPCNTDQVL: # %bb.0: 16370; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 16371; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 16372; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 16373; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 16374; AVX512VPOPCNTDQVL-NEXT: retq 16375; 16376; BITALG_NOVLX-LABEL: ugt_42_v4i64: 16377; BITALG_NOVLX: # %bb.0: 16378; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 16379; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 16380; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 16381; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16382; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [42,42,42,42] 16383; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 16384; BITALG_NOVLX-NEXT: retq 16385; 16386; BITALG-LABEL: ugt_42_v4i64: 16387; BITALG: # %bb.0: 16388; BITALG-NEXT: vpopcntb %ymm0, %ymm0 16389; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 16390; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16391; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 16392; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 16393; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 16394; BITALG-NEXT: retq 16395 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 16396 %3 = icmp ugt <4 x i64> %2, <i64 42, i64 42, i64 42, i64 42> 16397 %4 = sext <4 x i1> %3 to <4 x i64> 16398 ret <4 x i64> %4 16399} 16400 16401define <4 x i64> @ult_43_v4i64(<4 x i64> %0) { 16402; AVX1-LABEL: ult_43_v4i64: 16403; AVX1: # %bb.0: 16404; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 16405; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 16406; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 16407; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 16408; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 16409; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 16410; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 16411; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 16412; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 16413; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 16414; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 16415; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 16416; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 16417; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 16418; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 16419; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 16420; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 16421; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 16422; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [43,43] 16423; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 16424; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 16425; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 16426; AVX1-NEXT: retq 16427; 16428; AVX2-LABEL: ult_43_v4i64: 16429; AVX2: # %bb.0: 16430; AVX2-NEXT: vmovdqa {{.*#+}} 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] 16431; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 16432; AVX2-NEXT: vmovdqa {{.*#+}} 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] 16433; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 16434; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 16435; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 16436; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 16437; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 16438; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 16439; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16440; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [43,43,43,43] 16441; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 16442; AVX2-NEXT: retq 16443; 16444; AVX512VPOPCNTDQ-LABEL: ult_43_v4i64: 16445; AVX512VPOPCNTDQ: # %bb.0: 16446; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 16447; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 16448; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [43,43,43,43] 16449; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 16450; AVX512VPOPCNTDQ-NEXT: retq 16451; 16452; AVX512VPOPCNTDQVL-LABEL: ult_43_v4i64: 16453; AVX512VPOPCNTDQVL: # %bb.0: 16454; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 16455; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 16456; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 16457; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 16458; AVX512VPOPCNTDQVL-NEXT: retq 16459; 16460; BITALG_NOVLX-LABEL: ult_43_v4i64: 16461; BITALG_NOVLX: # %bb.0: 16462; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 16463; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 16464; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 16465; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16466; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [43,43,43,43] 16467; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 16468; BITALG_NOVLX-NEXT: retq 16469; 16470; BITALG-LABEL: ult_43_v4i64: 16471; BITALG: # %bb.0: 16472; BITALG-NEXT: vpopcntb %ymm0, %ymm0 16473; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 16474; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16475; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 16476; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 16477; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 16478; BITALG-NEXT: retq 16479 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 16480 %3 = icmp ult <4 x i64> %2, <i64 43, i64 43, i64 43, i64 43> 16481 %4 = sext <4 x i1> %3 to <4 x i64> 16482 ret <4 x i64> %4 16483} 16484 16485define <4 x i64> @ugt_43_v4i64(<4 x i64> %0) { 16486; AVX1-LABEL: ugt_43_v4i64: 16487; AVX1: # %bb.0: 16488; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 16489; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 16490; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 16491; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 16492; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 16493; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 16494; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 16495; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 16496; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 16497; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 16498; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 16499; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 16500; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 16501; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 16502; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 16503; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 16504; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 16505; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 16506; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [43,43] 16507; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 16508; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 16509; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 16510; AVX1-NEXT: retq 16511; 16512; AVX2-LABEL: ugt_43_v4i64: 16513; AVX2: # %bb.0: 16514; AVX2-NEXT: vmovdqa {{.*#+}} 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] 16515; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 16516; AVX2-NEXT: vmovdqa {{.*#+}} 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] 16517; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 16518; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 16519; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 16520; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 16521; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 16522; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 16523; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16524; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [43,43,43,43] 16525; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 16526; AVX2-NEXT: retq 16527; 16528; AVX512VPOPCNTDQ-LABEL: ugt_43_v4i64: 16529; AVX512VPOPCNTDQ: # %bb.0: 16530; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 16531; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 16532; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [43,43,43,43] 16533; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 16534; AVX512VPOPCNTDQ-NEXT: retq 16535; 16536; AVX512VPOPCNTDQVL-LABEL: ugt_43_v4i64: 16537; AVX512VPOPCNTDQVL: # %bb.0: 16538; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 16539; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 16540; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 16541; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 16542; AVX512VPOPCNTDQVL-NEXT: retq 16543; 16544; BITALG_NOVLX-LABEL: ugt_43_v4i64: 16545; BITALG_NOVLX: # %bb.0: 16546; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 16547; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 16548; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 16549; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16550; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [43,43,43,43] 16551; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 16552; BITALG_NOVLX-NEXT: retq 16553; 16554; BITALG-LABEL: ugt_43_v4i64: 16555; BITALG: # %bb.0: 16556; BITALG-NEXT: vpopcntb %ymm0, %ymm0 16557; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 16558; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16559; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 16560; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 16561; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 16562; BITALG-NEXT: retq 16563 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 16564 %3 = icmp ugt <4 x i64> %2, <i64 43, i64 43, i64 43, i64 43> 16565 %4 = sext <4 x i1> %3 to <4 x i64> 16566 ret <4 x i64> %4 16567} 16568 16569define <4 x i64> @ult_44_v4i64(<4 x i64> %0) { 16570; AVX1-LABEL: ult_44_v4i64: 16571; AVX1: # %bb.0: 16572; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 16573; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 16574; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 16575; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 16576; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 16577; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 16578; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 16579; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 16580; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 16581; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 16582; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 16583; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 16584; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 16585; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 16586; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 16587; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 16588; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 16589; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 16590; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [44,44] 16591; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 16592; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 16593; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 16594; AVX1-NEXT: retq 16595; 16596; AVX2-LABEL: ult_44_v4i64: 16597; AVX2: # %bb.0: 16598; AVX2-NEXT: vmovdqa {{.*#+}} 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] 16599; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 16600; AVX2-NEXT: vmovdqa {{.*#+}} 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] 16601; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 16602; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 16603; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 16604; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 16605; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 16606; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 16607; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16608; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [44,44,44,44] 16609; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 16610; AVX2-NEXT: retq 16611; 16612; AVX512VPOPCNTDQ-LABEL: ult_44_v4i64: 16613; AVX512VPOPCNTDQ: # %bb.0: 16614; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 16615; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 16616; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [44,44,44,44] 16617; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 16618; AVX512VPOPCNTDQ-NEXT: retq 16619; 16620; AVX512VPOPCNTDQVL-LABEL: ult_44_v4i64: 16621; AVX512VPOPCNTDQVL: # %bb.0: 16622; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 16623; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 16624; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 16625; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 16626; AVX512VPOPCNTDQVL-NEXT: retq 16627; 16628; BITALG_NOVLX-LABEL: ult_44_v4i64: 16629; BITALG_NOVLX: # %bb.0: 16630; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 16631; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 16632; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 16633; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16634; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [44,44,44,44] 16635; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 16636; BITALG_NOVLX-NEXT: retq 16637; 16638; BITALG-LABEL: ult_44_v4i64: 16639; BITALG: # %bb.0: 16640; BITALG-NEXT: vpopcntb %ymm0, %ymm0 16641; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 16642; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16643; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 16644; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 16645; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 16646; BITALG-NEXT: retq 16647 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 16648 %3 = icmp ult <4 x i64> %2, <i64 44, i64 44, i64 44, i64 44> 16649 %4 = sext <4 x i1> %3 to <4 x i64> 16650 ret <4 x i64> %4 16651} 16652 16653define <4 x i64> @ugt_44_v4i64(<4 x i64> %0) { 16654; AVX1-LABEL: ugt_44_v4i64: 16655; AVX1: # %bb.0: 16656; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 16657; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 16658; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 16659; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 16660; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 16661; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 16662; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 16663; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 16664; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 16665; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 16666; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 16667; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 16668; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 16669; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 16670; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 16671; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 16672; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 16673; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 16674; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [44,44] 16675; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 16676; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 16677; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 16678; AVX1-NEXT: retq 16679; 16680; AVX2-LABEL: ugt_44_v4i64: 16681; AVX2: # %bb.0: 16682; AVX2-NEXT: vmovdqa {{.*#+}} 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] 16683; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 16684; AVX2-NEXT: vmovdqa {{.*#+}} 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] 16685; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 16686; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 16687; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 16688; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 16689; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 16690; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 16691; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16692; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [44,44,44,44] 16693; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 16694; AVX2-NEXT: retq 16695; 16696; AVX512VPOPCNTDQ-LABEL: ugt_44_v4i64: 16697; AVX512VPOPCNTDQ: # %bb.0: 16698; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 16699; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 16700; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [44,44,44,44] 16701; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 16702; AVX512VPOPCNTDQ-NEXT: retq 16703; 16704; AVX512VPOPCNTDQVL-LABEL: ugt_44_v4i64: 16705; AVX512VPOPCNTDQVL: # %bb.0: 16706; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 16707; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 16708; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 16709; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 16710; AVX512VPOPCNTDQVL-NEXT: retq 16711; 16712; BITALG_NOVLX-LABEL: ugt_44_v4i64: 16713; BITALG_NOVLX: # %bb.0: 16714; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 16715; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 16716; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 16717; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16718; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [44,44,44,44] 16719; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 16720; BITALG_NOVLX-NEXT: retq 16721; 16722; BITALG-LABEL: ugt_44_v4i64: 16723; BITALG: # %bb.0: 16724; BITALG-NEXT: vpopcntb %ymm0, %ymm0 16725; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 16726; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16727; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 16728; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 16729; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 16730; BITALG-NEXT: retq 16731 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 16732 %3 = icmp ugt <4 x i64> %2, <i64 44, i64 44, i64 44, i64 44> 16733 %4 = sext <4 x i1> %3 to <4 x i64> 16734 ret <4 x i64> %4 16735} 16736 16737define <4 x i64> @ult_45_v4i64(<4 x i64> %0) { 16738; AVX1-LABEL: ult_45_v4i64: 16739; AVX1: # %bb.0: 16740; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 16741; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 16742; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 16743; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 16744; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 16745; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 16746; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 16747; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 16748; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 16749; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 16750; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 16751; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 16752; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 16753; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 16754; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 16755; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 16756; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 16757; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 16758; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [45,45] 16759; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 16760; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 16761; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 16762; AVX1-NEXT: retq 16763; 16764; AVX2-LABEL: ult_45_v4i64: 16765; AVX2: # %bb.0: 16766; AVX2-NEXT: vmovdqa {{.*#+}} 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] 16767; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 16768; AVX2-NEXT: vmovdqa {{.*#+}} 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] 16769; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 16770; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 16771; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 16772; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 16773; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 16774; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 16775; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16776; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [45,45,45,45] 16777; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 16778; AVX2-NEXT: retq 16779; 16780; AVX512VPOPCNTDQ-LABEL: ult_45_v4i64: 16781; AVX512VPOPCNTDQ: # %bb.0: 16782; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 16783; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 16784; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [45,45,45,45] 16785; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 16786; AVX512VPOPCNTDQ-NEXT: retq 16787; 16788; AVX512VPOPCNTDQVL-LABEL: ult_45_v4i64: 16789; AVX512VPOPCNTDQVL: # %bb.0: 16790; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 16791; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 16792; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 16793; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 16794; AVX512VPOPCNTDQVL-NEXT: retq 16795; 16796; BITALG_NOVLX-LABEL: ult_45_v4i64: 16797; BITALG_NOVLX: # %bb.0: 16798; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 16799; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 16800; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 16801; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16802; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [45,45,45,45] 16803; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 16804; BITALG_NOVLX-NEXT: retq 16805; 16806; BITALG-LABEL: ult_45_v4i64: 16807; BITALG: # %bb.0: 16808; BITALG-NEXT: vpopcntb %ymm0, %ymm0 16809; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 16810; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16811; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 16812; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 16813; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 16814; BITALG-NEXT: retq 16815 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 16816 %3 = icmp ult <4 x i64> %2, <i64 45, i64 45, i64 45, i64 45> 16817 %4 = sext <4 x i1> %3 to <4 x i64> 16818 ret <4 x i64> %4 16819} 16820 16821define <4 x i64> @ugt_45_v4i64(<4 x i64> %0) { 16822; AVX1-LABEL: ugt_45_v4i64: 16823; AVX1: # %bb.0: 16824; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 16825; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 16826; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 16827; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 16828; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 16829; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 16830; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 16831; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 16832; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 16833; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 16834; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 16835; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 16836; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 16837; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 16838; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 16839; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 16840; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 16841; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 16842; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [45,45] 16843; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 16844; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 16845; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 16846; AVX1-NEXT: retq 16847; 16848; AVX2-LABEL: ugt_45_v4i64: 16849; AVX2: # %bb.0: 16850; AVX2-NEXT: vmovdqa {{.*#+}} 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] 16851; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 16852; AVX2-NEXT: vmovdqa {{.*#+}} 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] 16853; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 16854; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 16855; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 16856; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 16857; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 16858; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 16859; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16860; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [45,45,45,45] 16861; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 16862; AVX2-NEXT: retq 16863; 16864; AVX512VPOPCNTDQ-LABEL: ugt_45_v4i64: 16865; AVX512VPOPCNTDQ: # %bb.0: 16866; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 16867; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 16868; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [45,45,45,45] 16869; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 16870; AVX512VPOPCNTDQ-NEXT: retq 16871; 16872; AVX512VPOPCNTDQVL-LABEL: ugt_45_v4i64: 16873; AVX512VPOPCNTDQVL: # %bb.0: 16874; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 16875; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 16876; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 16877; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 16878; AVX512VPOPCNTDQVL-NEXT: retq 16879; 16880; BITALG_NOVLX-LABEL: ugt_45_v4i64: 16881; BITALG_NOVLX: # %bb.0: 16882; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 16883; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 16884; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 16885; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16886; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [45,45,45,45] 16887; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 16888; BITALG_NOVLX-NEXT: retq 16889; 16890; BITALG-LABEL: ugt_45_v4i64: 16891; BITALG: # %bb.0: 16892; BITALG-NEXT: vpopcntb %ymm0, %ymm0 16893; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 16894; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16895; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 16896; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 16897; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 16898; BITALG-NEXT: retq 16899 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 16900 %3 = icmp ugt <4 x i64> %2, <i64 45, i64 45, i64 45, i64 45> 16901 %4 = sext <4 x i1> %3 to <4 x i64> 16902 ret <4 x i64> %4 16903} 16904 16905define <4 x i64> @ult_46_v4i64(<4 x i64> %0) { 16906; AVX1-LABEL: ult_46_v4i64: 16907; AVX1: # %bb.0: 16908; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 16909; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 16910; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 16911; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 16912; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 16913; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 16914; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 16915; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 16916; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 16917; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 16918; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 16919; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 16920; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 16921; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 16922; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 16923; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 16924; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 16925; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 16926; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [46,46] 16927; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 16928; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 16929; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 16930; AVX1-NEXT: retq 16931; 16932; AVX2-LABEL: ult_46_v4i64: 16933; AVX2: # %bb.0: 16934; AVX2-NEXT: vmovdqa {{.*#+}} 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] 16935; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 16936; AVX2-NEXT: vmovdqa {{.*#+}} 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] 16937; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 16938; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 16939; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 16940; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 16941; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 16942; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 16943; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16944; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [46,46,46,46] 16945; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 16946; AVX2-NEXT: retq 16947; 16948; AVX512VPOPCNTDQ-LABEL: ult_46_v4i64: 16949; AVX512VPOPCNTDQ: # %bb.0: 16950; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 16951; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 16952; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [46,46,46,46] 16953; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 16954; AVX512VPOPCNTDQ-NEXT: retq 16955; 16956; AVX512VPOPCNTDQVL-LABEL: ult_46_v4i64: 16957; AVX512VPOPCNTDQVL: # %bb.0: 16958; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 16959; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 16960; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 16961; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 16962; AVX512VPOPCNTDQVL-NEXT: retq 16963; 16964; BITALG_NOVLX-LABEL: ult_46_v4i64: 16965; BITALG_NOVLX: # %bb.0: 16966; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 16967; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 16968; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 16969; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16970; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [46,46,46,46] 16971; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 16972; BITALG_NOVLX-NEXT: retq 16973; 16974; BITALG-LABEL: ult_46_v4i64: 16975; BITALG: # %bb.0: 16976; BITALG-NEXT: vpopcntb %ymm0, %ymm0 16977; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 16978; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 16979; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 16980; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 16981; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 16982; BITALG-NEXT: retq 16983 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 16984 %3 = icmp ult <4 x i64> %2, <i64 46, i64 46, i64 46, i64 46> 16985 %4 = sext <4 x i1> %3 to <4 x i64> 16986 ret <4 x i64> %4 16987} 16988 16989define <4 x i64> @ugt_46_v4i64(<4 x i64> %0) { 16990; AVX1-LABEL: ugt_46_v4i64: 16991; AVX1: # %bb.0: 16992; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 16993; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 16994; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 16995; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 16996; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 16997; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 16998; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 16999; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 17000; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 17001; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 17002; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 17003; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 17004; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 17005; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 17006; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 17007; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 17008; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 17009; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 17010; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [46,46] 17011; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 17012; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 17013; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 17014; AVX1-NEXT: retq 17015; 17016; AVX2-LABEL: ugt_46_v4i64: 17017; AVX2: # %bb.0: 17018; AVX2-NEXT: vmovdqa {{.*#+}} 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] 17019; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 17020; AVX2-NEXT: vmovdqa {{.*#+}} 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] 17021; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 17022; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 17023; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 17024; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 17025; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 17026; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 17027; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17028; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [46,46,46,46] 17029; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 17030; AVX2-NEXT: retq 17031; 17032; AVX512VPOPCNTDQ-LABEL: ugt_46_v4i64: 17033; AVX512VPOPCNTDQ: # %bb.0: 17034; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 17035; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 17036; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [46,46,46,46] 17037; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 17038; AVX512VPOPCNTDQ-NEXT: retq 17039; 17040; AVX512VPOPCNTDQVL-LABEL: ugt_46_v4i64: 17041; AVX512VPOPCNTDQVL: # %bb.0: 17042; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 17043; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 17044; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 17045; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 17046; AVX512VPOPCNTDQVL-NEXT: retq 17047; 17048; BITALG_NOVLX-LABEL: ugt_46_v4i64: 17049; BITALG_NOVLX: # %bb.0: 17050; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 17051; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 17052; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 17053; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17054; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [46,46,46,46] 17055; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 17056; BITALG_NOVLX-NEXT: retq 17057; 17058; BITALG-LABEL: ugt_46_v4i64: 17059; BITALG: # %bb.0: 17060; BITALG-NEXT: vpopcntb %ymm0, %ymm0 17061; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 17062; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17063; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 17064; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 17065; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 17066; BITALG-NEXT: retq 17067 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 17068 %3 = icmp ugt <4 x i64> %2, <i64 46, i64 46, i64 46, i64 46> 17069 %4 = sext <4 x i1> %3 to <4 x i64> 17070 ret <4 x i64> %4 17071} 17072 17073define <4 x i64> @ult_47_v4i64(<4 x i64> %0) { 17074; AVX1-LABEL: ult_47_v4i64: 17075; AVX1: # %bb.0: 17076; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 17077; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 17078; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 17079; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 17080; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 17081; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 17082; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 17083; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 17084; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 17085; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 17086; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 17087; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 17088; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 17089; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 17090; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 17091; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 17092; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 17093; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 17094; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [47,47] 17095; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 17096; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 17097; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 17098; AVX1-NEXT: retq 17099; 17100; AVX2-LABEL: ult_47_v4i64: 17101; AVX2: # %bb.0: 17102; AVX2-NEXT: vmovdqa {{.*#+}} 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] 17103; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 17104; AVX2-NEXT: vmovdqa {{.*#+}} 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] 17105; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 17106; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 17107; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 17108; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 17109; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 17110; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 17111; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17112; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [47,47,47,47] 17113; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 17114; AVX2-NEXT: retq 17115; 17116; AVX512VPOPCNTDQ-LABEL: ult_47_v4i64: 17117; AVX512VPOPCNTDQ: # %bb.0: 17118; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 17119; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 17120; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [47,47,47,47] 17121; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 17122; AVX512VPOPCNTDQ-NEXT: retq 17123; 17124; AVX512VPOPCNTDQVL-LABEL: ult_47_v4i64: 17125; AVX512VPOPCNTDQVL: # %bb.0: 17126; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 17127; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 17128; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 17129; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 17130; AVX512VPOPCNTDQVL-NEXT: retq 17131; 17132; BITALG_NOVLX-LABEL: ult_47_v4i64: 17133; BITALG_NOVLX: # %bb.0: 17134; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 17135; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 17136; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 17137; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17138; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [47,47,47,47] 17139; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 17140; BITALG_NOVLX-NEXT: retq 17141; 17142; BITALG-LABEL: ult_47_v4i64: 17143; BITALG: # %bb.0: 17144; BITALG-NEXT: vpopcntb %ymm0, %ymm0 17145; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 17146; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17147; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 17148; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 17149; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 17150; BITALG-NEXT: retq 17151 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 17152 %3 = icmp ult <4 x i64> %2, <i64 47, i64 47, i64 47, i64 47> 17153 %4 = sext <4 x i1> %3 to <4 x i64> 17154 ret <4 x i64> %4 17155} 17156 17157define <4 x i64> @ugt_47_v4i64(<4 x i64> %0) { 17158; AVX1-LABEL: ugt_47_v4i64: 17159; AVX1: # %bb.0: 17160; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 17161; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 17162; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 17163; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 17164; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 17165; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 17166; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 17167; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 17168; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 17169; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 17170; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 17171; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 17172; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 17173; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 17174; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 17175; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 17176; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 17177; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 17178; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [47,47] 17179; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 17180; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 17181; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 17182; AVX1-NEXT: retq 17183; 17184; AVX2-LABEL: ugt_47_v4i64: 17185; AVX2: # %bb.0: 17186; AVX2-NEXT: vmovdqa {{.*#+}} 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] 17187; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 17188; AVX2-NEXT: vmovdqa {{.*#+}} 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] 17189; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 17190; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 17191; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 17192; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 17193; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 17194; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 17195; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17196; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [47,47,47,47] 17197; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 17198; AVX2-NEXT: retq 17199; 17200; AVX512VPOPCNTDQ-LABEL: ugt_47_v4i64: 17201; AVX512VPOPCNTDQ: # %bb.0: 17202; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 17203; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 17204; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [47,47,47,47] 17205; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 17206; AVX512VPOPCNTDQ-NEXT: retq 17207; 17208; AVX512VPOPCNTDQVL-LABEL: ugt_47_v4i64: 17209; AVX512VPOPCNTDQVL: # %bb.0: 17210; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 17211; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 17212; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 17213; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 17214; AVX512VPOPCNTDQVL-NEXT: retq 17215; 17216; BITALG_NOVLX-LABEL: ugt_47_v4i64: 17217; BITALG_NOVLX: # %bb.0: 17218; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 17219; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 17220; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 17221; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17222; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [47,47,47,47] 17223; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 17224; BITALG_NOVLX-NEXT: retq 17225; 17226; BITALG-LABEL: ugt_47_v4i64: 17227; BITALG: # %bb.0: 17228; BITALG-NEXT: vpopcntb %ymm0, %ymm0 17229; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 17230; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17231; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 17232; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 17233; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 17234; BITALG-NEXT: retq 17235 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 17236 %3 = icmp ugt <4 x i64> %2, <i64 47, i64 47, i64 47, i64 47> 17237 %4 = sext <4 x i1> %3 to <4 x i64> 17238 ret <4 x i64> %4 17239} 17240 17241define <4 x i64> @ult_48_v4i64(<4 x i64> %0) { 17242; AVX1-LABEL: ult_48_v4i64: 17243; AVX1: # %bb.0: 17244; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 17245; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 17246; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 17247; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 17248; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 17249; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 17250; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 17251; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 17252; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 17253; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 17254; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 17255; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 17256; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 17257; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 17258; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 17259; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 17260; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 17261; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 17262; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [48,48] 17263; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 17264; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 17265; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 17266; AVX1-NEXT: retq 17267; 17268; AVX2-LABEL: ult_48_v4i64: 17269; AVX2: # %bb.0: 17270; AVX2-NEXT: vmovdqa {{.*#+}} 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] 17271; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 17272; AVX2-NEXT: vmovdqa {{.*#+}} 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] 17273; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 17274; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 17275; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 17276; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 17277; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 17278; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 17279; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17280; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [48,48,48,48] 17281; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 17282; AVX2-NEXT: retq 17283; 17284; AVX512VPOPCNTDQ-LABEL: ult_48_v4i64: 17285; AVX512VPOPCNTDQ: # %bb.0: 17286; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 17287; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 17288; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [48,48,48,48] 17289; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 17290; AVX512VPOPCNTDQ-NEXT: retq 17291; 17292; AVX512VPOPCNTDQVL-LABEL: ult_48_v4i64: 17293; AVX512VPOPCNTDQVL: # %bb.0: 17294; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 17295; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 17296; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 17297; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 17298; AVX512VPOPCNTDQVL-NEXT: retq 17299; 17300; BITALG_NOVLX-LABEL: ult_48_v4i64: 17301; BITALG_NOVLX: # %bb.0: 17302; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 17303; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 17304; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 17305; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17306; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [48,48,48,48] 17307; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 17308; BITALG_NOVLX-NEXT: retq 17309; 17310; BITALG-LABEL: ult_48_v4i64: 17311; BITALG: # %bb.0: 17312; BITALG-NEXT: vpopcntb %ymm0, %ymm0 17313; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 17314; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17315; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 17316; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 17317; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 17318; BITALG-NEXT: retq 17319 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 17320 %3 = icmp ult <4 x i64> %2, <i64 48, i64 48, i64 48, i64 48> 17321 %4 = sext <4 x i1> %3 to <4 x i64> 17322 ret <4 x i64> %4 17323} 17324 17325define <4 x i64> @ugt_48_v4i64(<4 x i64> %0) { 17326; AVX1-LABEL: ugt_48_v4i64: 17327; AVX1: # %bb.0: 17328; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 17329; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 17330; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 17331; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 17332; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 17333; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 17334; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 17335; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 17336; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 17337; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 17338; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 17339; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 17340; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 17341; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 17342; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 17343; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 17344; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 17345; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 17346; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [48,48] 17347; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 17348; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 17349; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 17350; AVX1-NEXT: retq 17351; 17352; AVX2-LABEL: ugt_48_v4i64: 17353; AVX2: # %bb.0: 17354; AVX2-NEXT: vmovdqa {{.*#+}} 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] 17355; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 17356; AVX2-NEXT: vmovdqa {{.*#+}} 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] 17357; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 17358; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 17359; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 17360; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 17361; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 17362; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 17363; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17364; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [48,48,48,48] 17365; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 17366; AVX2-NEXT: retq 17367; 17368; AVX512VPOPCNTDQ-LABEL: ugt_48_v4i64: 17369; AVX512VPOPCNTDQ: # %bb.0: 17370; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 17371; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 17372; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [48,48,48,48] 17373; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 17374; AVX512VPOPCNTDQ-NEXT: retq 17375; 17376; AVX512VPOPCNTDQVL-LABEL: ugt_48_v4i64: 17377; AVX512VPOPCNTDQVL: # %bb.0: 17378; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 17379; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 17380; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 17381; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 17382; AVX512VPOPCNTDQVL-NEXT: retq 17383; 17384; BITALG_NOVLX-LABEL: ugt_48_v4i64: 17385; BITALG_NOVLX: # %bb.0: 17386; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 17387; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 17388; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 17389; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17390; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [48,48,48,48] 17391; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 17392; BITALG_NOVLX-NEXT: retq 17393; 17394; BITALG-LABEL: ugt_48_v4i64: 17395; BITALG: # %bb.0: 17396; BITALG-NEXT: vpopcntb %ymm0, %ymm0 17397; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 17398; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17399; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 17400; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 17401; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 17402; BITALG-NEXT: retq 17403 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 17404 %3 = icmp ugt <4 x i64> %2, <i64 48, i64 48, i64 48, i64 48> 17405 %4 = sext <4 x i1> %3 to <4 x i64> 17406 ret <4 x i64> %4 17407} 17408 17409define <4 x i64> @ult_49_v4i64(<4 x i64> %0) { 17410; AVX1-LABEL: ult_49_v4i64: 17411; AVX1: # %bb.0: 17412; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 17413; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 17414; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 17415; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 17416; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 17417; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 17418; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 17419; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 17420; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 17421; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 17422; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 17423; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 17424; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 17425; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 17426; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 17427; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 17428; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 17429; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 17430; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [49,49] 17431; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 17432; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 17433; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 17434; AVX1-NEXT: retq 17435; 17436; AVX2-LABEL: ult_49_v4i64: 17437; AVX2: # %bb.0: 17438; AVX2-NEXT: vmovdqa {{.*#+}} 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] 17439; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 17440; AVX2-NEXT: vmovdqa {{.*#+}} 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] 17441; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 17442; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 17443; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 17444; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 17445; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 17446; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 17447; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17448; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [49,49,49,49] 17449; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 17450; AVX2-NEXT: retq 17451; 17452; AVX512VPOPCNTDQ-LABEL: ult_49_v4i64: 17453; AVX512VPOPCNTDQ: # %bb.0: 17454; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 17455; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 17456; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [49,49,49,49] 17457; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 17458; AVX512VPOPCNTDQ-NEXT: retq 17459; 17460; AVX512VPOPCNTDQVL-LABEL: ult_49_v4i64: 17461; AVX512VPOPCNTDQVL: # %bb.0: 17462; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 17463; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 17464; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 17465; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 17466; AVX512VPOPCNTDQVL-NEXT: retq 17467; 17468; BITALG_NOVLX-LABEL: ult_49_v4i64: 17469; BITALG_NOVLX: # %bb.0: 17470; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 17471; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 17472; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 17473; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17474; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [49,49,49,49] 17475; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 17476; BITALG_NOVLX-NEXT: retq 17477; 17478; BITALG-LABEL: ult_49_v4i64: 17479; BITALG: # %bb.0: 17480; BITALG-NEXT: vpopcntb %ymm0, %ymm0 17481; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 17482; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17483; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 17484; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 17485; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 17486; BITALG-NEXT: retq 17487 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 17488 %3 = icmp ult <4 x i64> %2, <i64 49, i64 49, i64 49, i64 49> 17489 %4 = sext <4 x i1> %3 to <4 x i64> 17490 ret <4 x i64> %4 17491} 17492 17493define <4 x i64> @ugt_49_v4i64(<4 x i64> %0) { 17494; AVX1-LABEL: ugt_49_v4i64: 17495; AVX1: # %bb.0: 17496; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 17497; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 17498; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 17499; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 17500; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 17501; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 17502; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 17503; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 17504; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 17505; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 17506; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 17507; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 17508; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 17509; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 17510; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 17511; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 17512; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 17513; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 17514; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [49,49] 17515; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 17516; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 17517; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 17518; AVX1-NEXT: retq 17519; 17520; AVX2-LABEL: ugt_49_v4i64: 17521; AVX2: # %bb.0: 17522; AVX2-NEXT: vmovdqa {{.*#+}} 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] 17523; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 17524; AVX2-NEXT: vmovdqa {{.*#+}} 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] 17525; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 17526; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 17527; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 17528; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 17529; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 17530; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 17531; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17532; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [49,49,49,49] 17533; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 17534; AVX2-NEXT: retq 17535; 17536; AVX512VPOPCNTDQ-LABEL: ugt_49_v4i64: 17537; AVX512VPOPCNTDQ: # %bb.0: 17538; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 17539; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 17540; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [49,49,49,49] 17541; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 17542; AVX512VPOPCNTDQ-NEXT: retq 17543; 17544; AVX512VPOPCNTDQVL-LABEL: ugt_49_v4i64: 17545; AVX512VPOPCNTDQVL: # %bb.0: 17546; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 17547; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 17548; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 17549; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 17550; AVX512VPOPCNTDQVL-NEXT: retq 17551; 17552; BITALG_NOVLX-LABEL: ugt_49_v4i64: 17553; BITALG_NOVLX: # %bb.0: 17554; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 17555; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 17556; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 17557; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17558; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [49,49,49,49] 17559; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 17560; BITALG_NOVLX-NEXT: retq 17561; 17562; BITALG-LABEL: ugt_49_v4i64: 17563; BITALG: # %bb.0: 17564; BITALG-NEXT: vpopcntb %ymm0, %ymm0 17565; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 17566; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17567; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 17568; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 17569; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 17570; BITALG-NEXT: retq 17571 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 17572 %3 = icmp ugt <4 x i64> %2, <i64 49, i64 49, i64 49, i64 49> 17573 %4 = sext <4 x i1> %3 to <4 x i64> 17574 ret <4 x i64> %4 17575} 17576 17577define <4 x i64> @ult_50_v4i64(<4 x i64> %0) { 17578; AVX1-LABEL: ult_50_v4i64: 17579; AVX1: # %bb.0: 17580; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 17581; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 17582; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 17583; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 17584; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 17585; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 17586; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 17587; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 17588; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 17589; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 17590; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 17591; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 17592; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 17593; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 17594; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 17595; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 17596; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 17597; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 17598; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [50,50] 17599; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 17600; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 17601; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 17602; AVX1-NEXT: retq 17603; 17604; AVX2-LABEL: ult_50_v4i64: 17605; AVX2: # %bb.0: 17606; AVX2-NEXT: vmovdqa {{.*#+}} 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] 17607; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 17608; AVX2-NEXT: vmovdqa {{.*#+}} 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] 17609; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 17610; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 17611; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 17612; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 17613; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 17614; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 17615; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17616; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [50,50,50,50] 17617; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 17618; AVX2-NEXT: retq 17619; 17620; AVX512VPOPCNTDQ-LABEL: ult_50_v4i64: 17621; AVX512VPOPCNTDQ: # %bb.0: 17622; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 17623; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 17624; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [50,50,50,50] 17625; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 17626; AVX512VPOPCNTDQ-NEXT: retq 17627; 17628; AVX512VPOPCNTDQVL-LABEL: ult_50_v4i64: 17629; AVX512VPOPCNTDQVL: # %bb.0: 17630; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 17631; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 17632; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 17633; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 17634; AVX512VPOPCNTDQVL-NEXT: retq 17635; 17636; BITALG_NOVLX-LABEL: ult_50_v4i64: 17637; BITALG_NOVLX: # %bb.0: 17638; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 17639; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 17640; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 17641; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17642; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [50,50,50,50] 17643; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 17644; BITALG_NOVLX-NEXT: retq 17645; 17646; BITALG-LABEL: ult_50_v4i64: 17647; BITALG: # %bb.0: 17648; BITALG-NEXT: vpopcntb %ymm0, %ymm0 17649; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 17650; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17651; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 17652; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 17653; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 17654; BITALG-NEXT: retq 17655 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 17656 %3 = icmp ult <4 x i64> %2, <i64 50, i64 50, i64 50, i64 50> 17657 %4 = sext <4 x i1> %3 to <4 x i64> 17658 ret <4 x i64> %4 17659} 17660 17661define <4 x i64> @ugt_50_v4i64(<4 x i64> %0) { 17662; AVX1-LABEL: ugt_50_v4i64: 17663; AVX1: # %bb.0: 17664; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 17665; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 17666; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 17667; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 17668; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 17669; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 17670; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 17671; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 17672; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 17673; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 17674; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 17675; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 17676; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 17677; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 17678; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 17679; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 17680; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 17681; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 17682; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [50,50] 17683; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 17684; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 17685; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 17686; AVX1-NEXT: retq 17687; 17688; AVX2-LABEL: ugt_50_v4i64: 17689; AVX2: # %bb.0: 17690; AVX2-NEXT: vmovdqa {{.*#+}} 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] 17691; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 17692; AVX2-NEXT: vmovdqa {{.*#+}} 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] 17693; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 17694; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 17695; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 17696; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 17697; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 17698; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 17699; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17700; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [50,50,50,50] 17701; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 17702; AVX2-NEXT: retq 17703; 17704; AVX512VPOPCNTDQ-LABEL: ugt_50_v4i64: 17705; AVX512VPOPCNTDQ: # %bb.0: 17706; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 17707; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 17708; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [50,50,50,50] 17709; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 17710; AVX512VPOPCNTDQ-NEXT: retq 17711; 17712; AVX512VPOPCNTDQVL-LABEL: ugt_50_v4i64: 17713; AVX512VPOPCNTDQVL: # %bb.0: 17714; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 17715; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 17716; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 17717; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 17718; AVX512VPOPCNTDQVL-NEXT: retq 17719; 17720; BITALG_NOVLX-LABEL: ugt_50_v4i64: 17721; BITALG_NOVLX: # %bb.0: 17722; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 17723; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 17724; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 17725; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17726; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [50,50,50,50] 17727; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 17728; BITALG_NOVLX-NEXT: retq 17729; 17730; BITALG-LABEL: ugt_50_v4i64: 17731; BITALG: # %bb.0: 17732; BITALG-NEXT: vpopcntb %ymm0, %ymm0 17733; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 17734; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17735; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 17736; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 17737; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 17738; BITALG-NEXT: retq 17739 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 17740 %3 = icmp ugt <4 x i64> %2, <i64 50, i64 50, i64 50, i64 50> 17741 %4 = sext <4 x i1> %3 to <4 x i64> 17742 ret <4 x i64> %4 17743} 17744 17745define <4 x i64> @ult_51_v4i64(<4 x i64> %0) { 17746; AVX1-LABEL: ult_51_v4i64: 17747; AVX1: # %bb.0: 17748; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 17749; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 17750; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 17751; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 17752; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 17753; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 17754; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 17755; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 17756; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 17757; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 17758; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 17759; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 17760; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 17761; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 17762; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 17763; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 17764; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 17765; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 17766; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [51,51] 17767; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 17768; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 17769; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 17770; AVX1-NEXT: retq 17771; 17772; AVX2-LABEL: ult_51_v4i64: 17773; AVX2: # %bb.0: 17774; AVX2-NEXT: vmovdqa {{.*#+}} 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] 17775; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 17776; AVX2-NEXT: vmovdqa {{.*#+}} 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] 17777; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 17778; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 17779; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 17780; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 17781; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 17782; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 17783; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17784; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [51,51,51,51] 17785; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 17786; AVX2-NEXT: retq 17787; 17788; AVX512VPOPCNTDQ-LABEL: ult_51_v4i64: 17789; AVX512VPOPCNTDQ: # %bb.0: 17790; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 17791; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 17792; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [51,51,51,51] 17793; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 17794; AVX512VPOPCNTDQ-NEXT: retq 17795; 17796; AVX512VPOPCNTDQVL-LABEL: ult_51_v4i64: 17797; AVX512VPOPCNTDQVL: # %bb.0: 17798; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 17799; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 17800; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 17801; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 17802; AVX512VPOPCNTDQVL-NEXT: retq 17803; 17804; BITALG_NOVLX-LABEL: ult_51_v4i64: 17805; BITALG_NOVLX: # %bb.0: 17806; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 17807; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 17808; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 17809; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17810; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [51,51,51,51] 17811; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 17812; BITALG_NOVLX-NEXT: retq 17813; 17814; BITALG-LABEL: ult_51_v4i64: 17815; BITALG: # %bb.0: 17816; BITALG-NEXT: vpopcntb %ymm0, %ymm0 17817; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 17818; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17819; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 17820; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 17821; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 17822; BITALG-NEXT: retq 17823 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 17824 %3 = icmp ult <4 x i64> %2, <i64 51, i64 51, i64 51, i64 51> 17825 %4 = sext <4 x i1> %3 to <4 x i64> 17826 ret <4 x i64> %4 17827} 17828 17829define <4 x i64> @ugt_51_v4i64(<4 x i64> %0) { 17830; AVX1-LABEL: ugt_51_v4i64: 17831; AVX1: # %bb.0: 17832; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 17833; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 17834; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 17835; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 17836; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 17837; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 17838; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 17839; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 17840; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 17841; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 17842; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 17843; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 17844; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 17845; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 17846; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 17847; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 17848; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 17849; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 17850; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [51,51] 17851; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 17852; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 17853; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 17854; AVX1-NEXT: retq 17855; 17856; AVX2-LABEL: ugt_51_v4i64: 17857; AVX2: # %bb.0: 17858; AVX2-NEXT: vmovdqa {{.*#+}} 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] 17859; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 17860; AVX2-NEXT: vmovdqa {{.*#+}} 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] 17861; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 17862; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 17863; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 17864; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 17865; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 17866; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 17867; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17868; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [51,51,51,51] 17869; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 17870; AVX2-NEXT: retq 17871; 17872; AVX512VPOPCNTDQ-LABEL: ugt_51_v4i64: 17873; AVX512VPOPCNTDQ: # %bb.0: 17874; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 17875; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 17876; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [51,51,51,51] 17877; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 17878; AVX512VPOPCNTDQ-NEXT: retq 17879; 17880; AVX512VPOPCNTDQVL-LABEL: ugt_51_v4i64: 17881; AVX512VPOPCNTDQVL: # %bb.0: 17882; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 17883; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 17884; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 17885; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 17886; AVX512VPOPCNTDQVL-NEXT: retq 17887; 17888; BITALG_NOVLX-LABEL: ugt_51_v4i64: 17889; BITALG_NOVLX: # %bb.0: 17890; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 17891; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 17892; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 17893; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17894; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [51,51,51,51] 17895; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 17896; BITALG_NOVLX-NEXT: retq 17897; 17898; BITALG-LABEL: ugt_51_v4i64: 17899; BITALG: # %bb.0: 17900; BITALG-NEXT: vpopcntb %ymm0, %ymm0 17901; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 17902; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17903; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 17904; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 17905; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 17906; BITALG-NEXT: retq 17907 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 17908 %3 = icmp ugt <4 x i64> %2, <i64 51, i64 51, i64 51, i64 51> 17909 %4 = sext <4 x i1> %3 to <4 x i64> 17910 ret <4 x i64> %4 17911} 17912 17913define <4 x i64> @ult_52_v4i64(<4 x i64> %0) { 17914; AVX1-LABEL: ult_52_v4i64: 17915; AVX1: # %bb.0: 17916; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 17917; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 17918; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 17919; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 17920; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 17921; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 17922; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 17923; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 17924; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 17925; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 17926; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 17927; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 17928; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 17929; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 17930; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 17931; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 17932; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 17933; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 17934; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [52,52] 17935; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 17936; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 17937; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 17938; AVX1-NEXT: retq 17939; 17940; AVX2-LABEL: ult_52_v4i64: 17941; AVX2: # %bb.0: 17942; AVX2-NEXT: vmovdqa {{.*#+}} 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] 17943; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 17944; AVX2-NEXT: vmovdqa {{.*#+}} 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] 17945; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 17946; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 17947; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 17948; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 17949; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 17950; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 17951; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17952; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [52,52,52,52] 17953; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 17954; AVX2-NEXT: retq 17955; 17956; AVX512VPOPCNTDQ-LABEL: ult_52_v4i64: 17957; AVX512VPOPCNTDQ: # %bb.0: 17958; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 17959; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 17960; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [52,52,52,52] 17961; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 17962; AVX512VPOPCNTDQ-NEXT: retq 17963; 17964; AVX512VPOPCNTDQVL-LABEL: ult_52_v4i64: 17965; AVX512VPOPCNTDQVL: # %bb.0: 17966; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 17967; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 17968; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 17969; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 17970; AVX512VPOPCNTDQVL-NEXT: retq 17971; 17972; BITALG_NOVLX-LABEL: ult_52_v4i64: 17973; BITALG_NOVLX: # %bb.0: 17974; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 17975; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 17976; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 17977; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17978; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [52,52,52,52] 17979; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 17980; BITALG_NOVLX-NEXT: retq 17981; 17982; BITALG-LABEL: ult_52_v4i64: 17983; BITALG: # %bb.0: 17984; BITALG-NEXT: vpopcntb %ymm0, %ymm0 17985; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 17986; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 17987; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 17988; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 17989; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 17990; BITALG-NEXT: retq 17991 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 17992 %3 = icmp ult <4 x i64> %2, <i64 52, i64 52, i64 52, i64 52> 17993 %4 = sext <4 x i1> %3 to <4 x i64> 17994 ret <4 x i64> %4 17995} 17996 17997define <4 x i64> @ugt_52_v4i64(<4 x i64> %0) { 17998; AVX1-LABEL: ugt_52_v4i64: 17999; AVX1: # %bb.0: 18000; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 18001; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 18002; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 18003; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 18004; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 18005; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 18006; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 18007; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 18008; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 18009; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 18010; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 18011; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 18012; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 18013; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 18014; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 18015; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 18016; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 18017; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 18018; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [52,52] 18019; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 18020; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 18021; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 18022; AVX1-NEXT: retq 18023; 18024; AVX2-LABEL: ugt_52_v4i64: 18025; AVX2: # %bb.0: 18026; AVX2-NEXT: vmovdqa {{.*#+}} 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] 18027; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 18028; AVX2-NEXT: vmovdqa {{.*#+}} 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] 18029; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 18030; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 18031; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 18032; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 18033; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 18034; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 18035; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18036; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [52,52,52,52] 18037; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 18038; AVX2-NEXT: retq 18039; 18040; AVX512VPOPCNTDQ-LABEL: ugt_52_v4i64: 18041; AVX512VPOPCNTDQ: # %bb.0: 18042; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 18043; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 18044; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [52,52,52,52] 18045; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 18046; AVX512VPOPCNTDQ-NEXT: retq 18047; 18048; AVX512VPOPCNTDQVL-LABEL: ugt_52_v4i64: 18049; AVX512VPOPCNTDQVL: # %bb.0: 18050; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 18051; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 18052; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 18053; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 18054; AVX512VPOPCNTDQVL-NEXT: retq 18055; 18056; BITALG_NOVLX-LABEL: ugt_52_v4i64: 18057; BITALG_NOVLX: # %bb.0: 18058; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 18059; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 18060; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 18061; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18062; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [52,52,52,52] 18063; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 18064; BITALG_NOVLX-NEXT: retq 18065; 18066; BITALG-LABEL: ugt_52_v4i64: 18067; BITALG: # %bb.0: 18068; BITALG-NEXT: vpopcntb %ymm0, %ymm0 18069; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 18070; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18071; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 18072; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 18073; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 18074; BITALG-NEXT: retq 18075 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 18076 %3 = icmp ugt <4 x i64> %2, <i64 52, i64 52, i64 52, i64 52> 18077 %4 = sext <4 x i1> %3 to <4 x i64> 18078 ret <4 x i64> %4 18079} 18080 18081define <4 x i64> @ult_53_v4i64(<4 x i64> %0) { 18082; AVX1-LABEL: ult_53_v4i64: 18083; AVX1: # %bb.0: 18084; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 18085; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 18086; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 18087; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 18088; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 18089; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 18090; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 18091; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 18092; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 18093; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 18094; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 18095; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 18096; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 18097; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 18098; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 18099; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 18100; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 18101; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 18102; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [53,53] 18103; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 18104; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 18105; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 18106; AVX1-NEXT: retq 18107; 18108; AVX2-LABEL: ult_53_v4i64: 18109; AVX2: # %bb.0: 18110; AVX2-NEXT: vmovdqa {{.*#+}} 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] 18111; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 18112; AVX2-NEXT: vmovdqa {{.*#+}} 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] 18113; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 18114; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 18115; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 18116; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 18117; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 18118; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 18119; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18120; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [53,53,53,53] 18121; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 18122; AVX2-NEXT: retq 18123; 18124; AVX512VPOPCNTDQ-LABEL: ult_53_v4i64: 18125; AVX512VPOPCNTDQ: # %bb.0: 18126; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 18127; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 18128; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [53,53,53,53] 18129; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 18130; AVX512VPOPCNTDQ-NEXT: retq 18131; 18132; AVX512VPOPCNTDQVL-LABEL: ult_53_v4i64: 18133; AVX512VPOPCNTDQVL: # %bb.0: 18134; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 18135; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 18136; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 18137; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 18138; AVX512VPOPCNTDQVL-NEXT: retq 18139; 18140; BITALG_NOVLX-LABEL: ult_53_v4i64: 18141; BITALG_NOVLX: # %bb.0: 18142; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 18143; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 18144; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 18145; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18146; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [53,53,53,53] 18147; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 18148; BITALG_NOVLX-NEXT: retq 18149; 18150; BITALG-LABEL: ult_53_v4i64: 18151; BITALG: # %bb.0: 18152; BITALG-NEXT: vpopcntb %ymm0, %ymm0 18153; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 18154; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18155; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 18156; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 18157; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 18158; BITALG-NEXT: retq 18159 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 18160 %3 = icmp ult <4 x i64> %2, <i64 53, i64 53, i64 53, i64 53> 18161 %4 = sext <4 x i1> %3 to <4 x i64> 18162 ret <4 x i64> %4 18163} 18164 18165define <4 x i64> @ugt_53_v4i64(<4 x i64> %0) { 18166; AVX1-LABEL: ugt_53_v4i64: 18167; AVX1: # %bb.0: 18168; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 18169; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 18170; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 18171; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 18172; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 18173; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 18174; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 18175; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 18176; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 18177; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 18178; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 18179; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 18180; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 18181; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 18182; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 18183; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 18184; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 18185; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 18186; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [53,53] 18187; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 18188; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 18189; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 18190; AVX1-NEXT: retq 18191; 18192; AVX2-LABEL: ugt_53_v4i64: 18193; AVX2: # %bb.0: 18194; AVX2-NEXT: vmovdqa {{.*#+}} 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] 18195; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 18196; AVX2-NEXT: vmovdqa {{.*#+}} 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] 18197; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 18198; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 18199; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 18200; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 18201; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 18202; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 18203; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18204; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [53,53,53,53] 18205; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 18206; AVX2-NEXT: retq 18207; 18208; AVX512VPOPCNTDQ-LABEL: ugt_53_v4i64: 18209; AVX512VPOPCNTDQ: # %bb.0: 18210; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 18211; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 18212; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [53,53,53,53] 18213; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 18214; AVX512VPOPCNTDQ-NEXT: retq 18215; 18216; AVX512VPOPCNTDQVL-LABEL: ugt_53_v4i64: 18217; AVX512VPOPCNTDQVL: # %bb.0: 18218; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 18219; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 18220; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 18221; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 18222; AVX512VPOPCNTDQVL-NEXT: retq 18223; 18224; BITALG_NOVLX-LABEL: ugt_53_v4i64: 18225; BITALG_NOVLX: # %bb.0: 18226; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 18227; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 18228; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 18229; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18230; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [53,53,53,53] 18231; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 18232; BITALG_NOVLX-NEXT: retq 18233; 18234; BITALG-LABEL: ugt_53_v4i64: 18235; BITALG: # %bb.0: 18236; BITALG-NEXT: vpopcntb %ymm0, %ymm0 18237; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 18238; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18239; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 18240; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 18241; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 18242; BITALG-NEXT: retq 18243 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 18244 %3 = icmp ugt <4 x i64> %2, <i64 53, i64 53, i64 53, i64 53> 18245 %4 = sext <4 x i1> %3 to <4 x i64> 18246 ret <4 x i64> %4 18247} 18248 18249define <4 x i64> @ult_54_v4i64(<4 x i64> %0) { 18250; AVX1-LABEL: ult_54_v4i64: 18251; AVX1: # %bb.0: 18252; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 18253; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 18254; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 18255; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 18256; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 18257; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 18258; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 18259; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 18260; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 18261; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 18262; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 18263; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 18264; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 18265; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 18266; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 18267; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 18268; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 18269; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 18270; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [54,54] 18271; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 18272; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 18273; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 18274; AVX1-NEXT: retq 18275; 18276; AVX2-LABEL: ult_54_v4i64: 18277; AVX2: # %bb.0: 18278; AVX2-NEXT: vmovdqa {{.*#+}} 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] 18279; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 18280; AVX2-NEXT: vmovdqa {{.*#+}} 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] 18281; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 18282; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 18283; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 18284; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 18285; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 18286; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 18287; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18288; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [54,54,54,54] 18289; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 18290; AVX2-NEXT: retq 18291; 18292; AVX512VPOPCNTDQ-LABEL: ult_54_v4i64: 18293; AVX512VPOPCNTDQ: # %bb.0: 18294; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 18295; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 18296; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [54,54,54,54] 18297; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 18298; AVX512VPOPCNTDQ-NEXT: retq 18299; 18300; AVX512VPOPCNTDQVL-LABEL: ult_54_v4i64: 18301; AVX512VPOPCNTDQVL: # %bb.0: 18302; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 18303; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 18304; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 18305; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 18306; AVX512VPOPCNTDQVL-NEXT: retq 18307; 18308; BITALG_NOVLX-LABEL: ult_54_v4i64: 18309; BITALG_NOVLX: # %bb.0: 18310; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 18311; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 18312; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 18313; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18314; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [54,54,54,54] 18315; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 18316; BITALG_NOVLX-NEXT: retq 18317; 18318; BITALG-LABEL: ult_54_v4i64: 18319; BITALG: # %bb.0: 18320; BITALG-NEXT: vpopcntb %ymm0, %ymm0 18321; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 18322; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18323; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 18324; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 18325; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 18326; BITALG-NEXT: retq 18327 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 18328 %3 = icmp ult <4 x i64> %2, <i64 54, i64 54, i64 54, i64 54> 18329 %4 = sext <4 x i1> %3 to <4 x i64> 18330 ret <4 x i64> %4 18331} 18332 18333define <4 x i64> @ugt_54_v4i64(<4 x i64> %0) { 18334; AVX1-LABEL: ugt_54_v4i64: 18335; AVX1: # %bb.0: 18336; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 18337; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 18338; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 18339; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 18340; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 18341; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 18342; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 18343; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 18344; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 18345; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 18346; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 18347; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 18348; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 18349; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 18350; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 18351; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 18352; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 18353; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 18354; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [54,54] 18355; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 18356; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 18357; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 18358; AVX1-NEXT: retq 18359; 18360; AVX2-LABEL: ugt_54_v4i64: 18361; AVX2: # %bb.0: 18362; AVX2-NEXT: vmovdqa {{.*#+}} 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] 18363; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 18364; AVX2-NEXT: vmovdqa {{.*#+}} 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] 18365; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 18366; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 18367; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 18368; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 18369; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 18370; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 18371; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18372; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [54,54,54,54] 18373; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 18374; AVX2-NEXT: retq 18375; 18376; AVX512VPOPCNTDQ-LABEL: ugt_54_v4i64: 18377; AVX512VPOPCNTDQ: # %bb.0: 18378; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 18379; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 18380; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [54,54,54,54] 18381; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 18382; AVX512VPOPCNTDQ-NEXT: retq 18383; 18384; AVX512VPOPCNTDQVL-LABEL: ugt_54_v4i64: 18385; AVX512VPOPCNTDQVL: # %bb.0: 18386; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 18387; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 18388; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 18389; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 18390; AVX512VPOPCNTDQVL-NEXT: retq 18391; 18392; BITALG_NOVLX-LABEL: ugt_54_v4i64: 18393; BITALG_NOVLX: # %bb.0: 18394; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 18395; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 18396; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 18397; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18398; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [54,54,54,54] 18399; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 18400; BITALG_NOVLX-NEXT: retq 18401; 18402; BITALG-LABEL: ugt_54_v4i64: 18403; BITALG: # %bb.0: 18404; BITALG-NEXT: vpopcntb %ymm0, %ymm0 18405; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 18406; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18407; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 18408; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 18409; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 18410; BITALG-NEXT: retq 18411 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 18412 %3 = icmp ugt <4 x i64> %2, <i64 54, i64 54, i64 54, i64 54> 18413 %4 = sext <4 x i1> %3 to <4 x i64> 18414 ret <4 x i64> %4 18415} 18416 18417define <4 x i64> @ult_55_v4i64(<4 x i64> %0) { 18418; AVX1-LABEL: ult_55_v4i64: 18419; AVX1: # %bb.0: 18420; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 18421; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 18422; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 18423; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 18424; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 18425; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 18426; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 18427; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 18428; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 18429; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 18430; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 18431; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 18432; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 18433; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 18434; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 18435; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 18436; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 18437; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 18438; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [55,55] 18439; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 18440; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 18441; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 18442; AVX1-NEXT: retq 18443; 18444; AVX2-LABEL: ult_55_v4i64: 18445; AVX2: # %bb.0: 18446; AVX2-NEXT: vmovdqa {{.*#+}} 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] 18447; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 18448; AVX2-NEXT: vmovdqa {{.*#+}} 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] 18449; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 18450; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 18451; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 18452; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 18453; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 18454; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 18455; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18456; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [55,55,55,55] 18457; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 18458; AVX2-NEXT: retq 18459; 18460; AVX512VPOPCNTDQ-LABEL: ult_55_v4i64: 18461; AVX512VPOPCNTDQ: # %bb.0: 18462; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 18463; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 18464; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [55,55,55,55] 18465; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 18466; AVX512VPOPCNTDQ-NEXT: retq 18467; 18468; AVX512VPOPCNTDQVL-LABEL: ult_55_v4i64: 18469; AVX512VPOPCNTDQVL: # %bb.0: 18470; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 18471; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 18472; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 18473; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 18474; AVX512VPOPCNTDQVL-NEXT: retq 18475; 18476; BITALG_NOVLX-LABEL: ult_55_v4i64: 18477; BITALG_NOVLX: # %bb.0: 18478; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 18479; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 18480; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 18481; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18482; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [55,55,55,55] 18483; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 18484; BITALG_NOVLX-NEXT: retq 18485; 18486; BITALG-LABEL: ult_55_v4i64: 18487; BITALG: # %bb.0: 18488; BITALG-NEXT: vpopcntb %ymm0, %ymm0 18489; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 18490; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18491; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 18492; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 18493; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 18494; BITALG-NEXT: retq 18495 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 18496 %3 = icmp ult <4 x i64> %2, <i64 55, i64 55, i64 55, i64 55> 18497 %4 = sext <4 x i1> %3 to <4 x i64> 18498 ret <4 x i64> %4 18499} 18500 18501define <4 x i64> @ugt_55_v4i64(<4 x i64> %0) { 18502; AVX1-LABEL: ugt_55_v4i64: 18503; AVX1: # %bb.0: 18504; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 18505; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 18506; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 18507; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 18508; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 18509; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 18510; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 18511; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 18512; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 18513; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 18514; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 18515; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 18516; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 18517; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 18518; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 18519; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 18520; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 18521; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 18522; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [55,55] 18523; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 18524; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 18525; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 18526; AVX1-NEXT: retq 18527; 18528; AVX2-LABEL: ugt_55_v4i64: 18529; AVX2: # %bb.0: 18530; AVX2-NEXT: vmovdqa {{.*#+}} 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] 18531; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 18532; AVX2-NEXT: vmovdqa {{.*#+}} 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] 18533; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 18534; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 18535; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 18536; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 18537; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 18538; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 18539; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18540; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [55,55,55,55] 18541; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 18542; AVX2-NEXT: retq 18543; 18544; AVX512VPOPCNTDQ-LABEL: ugt_55_v4i64: 18545; AVX512VPOPCNTDQ: # %bb.0: 18546; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 18547; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 18548; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [55,55,55,55] 18549; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 18550; AVX512VPOPCNTDQ-NEXT: retq 18551; 18552; AVX512VPOPCNTDQVL-LABEL: ugt_55_v4i64: 18553; AVX512VPOPCNTDQVL: # %bb.0: 18554; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 18555; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 18556; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 18557; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 18558; AVX512VPOPCNTDQVL-NEXT: retq 18559; 18560; BITALG_NOVLX-LABEL: ugt_55_v4i64: 18561; BITALG_NOVLX: # %bb.0: 18562; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 18563; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 18564; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 18565; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18566; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [55,55,55,55] 18567; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 18568; BITALG_NOVLX-NEXT: retq 18569; 18570; BITALG-LABEL: ugt_55_v4i64: 18571; BITALG: # %bb.0: 18572; BITALG-NEXT: vpopcntb %ymm0, %ymm0 18573; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 18574; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18575; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 18576; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 18577; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 18578; BITALG-NEXT: retq 18579 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 18580 %3 = icmp ugt <4 x i64> %2, <i64 55, i64 55, i64 55, i64 55> 18581 %4 = sext <4 x i1> %3 to <4 x i64> 18582 ret <4 x i64> %4 18583} 18584 18585define <4 x i64> @ult_56_v4i64(<4 x i64> %0) { 18586; AVX1-LABEL: ult_56_v4i64: 18587; AVX1: # %bb.0: 18588; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 18589; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 18590; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 18591; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 18592; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 18593; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 18594; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 18595; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 18596; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 18597; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 18598; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 18599; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 18600; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 18601; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 18602; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 18603; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 18604; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 18605; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 18606; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [56,56] 18607; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 18608; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 18609; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 18610; AVX1-NEXT: retq 18611; 18612; AVX2-LABEL: ult_56_v4i64: 18613; AVX2: # %bb.0: 18614; AVX2-NEXT: vmovdqa {{.*#+}} 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] 18615; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 18616; AVX2-NEXT: vmovdqa {{.*#+}} 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] 18617; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 18618; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 18619; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 18620; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 18621; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 18622; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 18623; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18624; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [56,56,56,56] 18625; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 18626; AVX2-NEXT: retq 18627; 18628; AVX512VPOPCNTDQ-LABEL: ult_56_v4i64: 18629; AVX512VPOPCNTDQ: # %bb.0: 18630; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 18631; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 18632; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [56,56,56,56] 18633; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 18634; AVX512VPOPCNTDQ-NEXT: retq 18635; 18636; AVX512VPOPCNTDQVL-LABEL: ult_56_v4i64: 18637; AVX512VPOPCNTDQVL: # %bb.0: 18638; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 18639; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 18640; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 18641; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 18642; AVX512VPOPCNTDQVL-NEXT: retq 18643; 18644; BITALG_NOVLX-LABEL: ult_56_v4i64: 18645; BITALG_NOVLX: # %bb.0: 18646; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 18647; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 18648; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 18649; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18650; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [56,56,56,56] 18651; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 18652; BITALG_NOVLX-NEXT: retq 18653; 18654; BITALG-LABEL: ult_56_v4i64: 18655; BITALG: # %bb.0: 18656; BITALG-NEXT: vpopcntb %ymm0, %ymm0 18657; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 18658; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18659; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 18660; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 18661; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 18662; BITALG-NEXT: retq 18663 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 18664 %3 = icmp ult <4 x i64> %2, <i64 56, i64 56, i64 56, i64 56> 18665 %4 = sext <4 x i1> %3 to <4 x i64> 18666 ret <4 x i64> %4 18667} 18668 18669define <4 x i64> @ugt_56_v4i64(<4 x i64> %0) { 18670; AVX1-LABEL: ugt_56_v4i64: 18671; AVX1: # %bb.0: 18672; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 18673; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 18674; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 18675; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 18676; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 18677; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 18678; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 18679; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 18680; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 18681; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 18682; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 18683; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 18684; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 18685; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 18686; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 18687; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 18688; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 18689; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 18690; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [56,56] 18691; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 18692; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 18693; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 18694; AVX1-NEXT: retq 18695; 18696; AVX2-LABEL: ugt_56_v4i64: 18697; AVX2: # %bb.0: 18698; AVX2-NEXT: vmovdqa {{.*#+}} 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] 18699; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 18700; AVX2-NEXT: vmovdqa {{.*#+}} 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] 18701; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 18702; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 18703; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 18704; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 18705; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 18706; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 18707; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18708; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [56,56,56,56] 18709; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 18710; AVX2-NEXT: retq 18711; 18712; AVX512VPOPCNTDQ-LABEL: ugt_56_v4i64: 18713; AVX512VPOPCNTDQ: # %bb.0: 18714; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 18715; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 18716; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [56,56,56,56] 18717; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 18718; AVX512VPOPCNTDQ-NEXT: retq 18719; 18720; AVX512VPOPCNTDQVL-LABEL: ugt_56_v4i64: 18721; AVX512VPOPCNTDQVL: # %bb.0: 18722; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 18723; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 18724; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 18725; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 18726; AVX512VPOPCNTDQVL-NEXT: retq 18727; 18728; BITALG_NOVLX-LABEL: ugt_56_v4i64: 18729; BITALG_NOVLX: # %bb.0: 18730; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 18731; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 18732; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 18733; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18734; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [56,56,56,56] 18735; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 18736; BITALG_NOVLX-NEXT: retq 18737; 18738; BITALG-LABEL: ugt_56_v4i64: 18739; BITALG: # %bb.0: 18740; BITALG-NEXT: vpopcntb %ymm0, %ymm0 18741; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 18742; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18743; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 18744; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 18745; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 18746; BITALG-NEXT: retq 18747 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 18748 %3 = icmp ugt <4 x i64> %2, <i64 56, i64 56, i64 56, i64 56> 18749 %4 = sext <4 x i1> %3 to <4 x i64> 18750 ret <4 x i64> %4 18751} 18752 18753define <4 x i64> @ult_57_v4i64(<4 x i64> %0) { 18754; AVX1-LABEL: ult_57_v4i64: 18755; AVX1: # %bb.0: 18756; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 18757; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 18758; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 18759; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 18760; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 18761; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 18762; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 18763; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 18764; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 18765; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 18766; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 18767; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 18768; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 18769; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 18770; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 18771; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 18772; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 18773; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 18774; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [57,57] 18775; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 18776; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 18777; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 18778; AVX1-NEXT: retq 18779; 18780; AVX2-LABEL: ult_57_v4i64: 18781; AVX2: # %bb.0: 18782; AVX2-NEXT: vmovdqa {{.*#+}} 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] 18783; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 18784; AVX2-NEXT: vmovdqa {{.*#+}} 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] 18785; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 18786; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 18787; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 18788; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 18789; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 18790; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 18791; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18792; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [57,57,57,57] 18793; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 18794; AVX2-NEXT: retq 18795; 18796; AVX512VPOPCNTDQ-LABEL: ult_57_v4i64: 18797; AVX512VPOPCNTDQ: # %bb.0: 18798; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 18799; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 18800; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [57,57,57,57] 18801; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 18802; AVX512VPOPCNTDQ-NEXT: retq 18803; 18804; AVX512VPOPCNTDQVL-LABEL: ult_57_v4i64: 18805; AVX512VPOPCNTDQVL: # %bb.0: 18806; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 18807; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 18808; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 18809; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 18810; AVX512VPOPCNTDQVL-NEXT: retq 18811; 18812; BITALG_NOVLX-LABEL: ult_57_v4i64: 18813; BITALG_NOVLX: # %bb.0: 18814; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 18815; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 18816; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 18817; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18818; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [57,57,57,57] 18819; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 18820; BITALG_NOVLX-NEXT: retq 18821; 18822; BITALG-LABEL: ult_57_v4i64: 18823; BITALG: # %bb.0: 18824; BITALG-NEXT: vpopcntb %ymm0, %ymm0 18825; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 18826; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18827; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 18828; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 18829; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 18830; BITALG-NEXT: retq 18831 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 18832 %3 = icmp ult <4 x i64> %2, <i64 57, i64 57, i64 57, i64 57> 18833 %4 = sext <4 x i1> %3 to <4 x i64> 18834 ret <4 x i64> %4 18835} 18836 18837define <4 x i64> @ugt_57_v4i64(<4 x i64> %0) { 18838; AVX1-LABEL: ugt_57_v4i64: 18839; AVX1: # %bb.0: 18840; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 18841; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 18842; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 18843; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 18844; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 18845; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 18846; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 18847; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 18848; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 18849; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 18850; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 18851; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 18852; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 18853; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 18854; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 18855; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 18856; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 18857; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 18858; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [57,57] 18859; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 18860; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 18861; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 18862; AVX1-NEXT: retq 18863; 18864; AVX2-LABEL: ugt_57_v4i64: 18865; AVX2: # %bb.0: 18866; AVX2-NEXT: vmovdqa {{.*#+}} 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] 18867; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 18868; AVX2-NEXT: vmovdqa {{.*#+}} 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] 18869; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 18870; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 18871; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 18872; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 18873; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 18874; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 18875; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18876; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [57,57,57,57] 18877; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 18878; AVX2-NEXT: retq 18879; 18880; AVX512VPOPCNTDQ-LABEL: ugt_57_v4i64: 18881; AVX512VPOPCNTDQ: # %bb.0: 18882; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 18883; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 18884; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [57,57,57,57] 18885; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 18886; AVX512VPOPCNTDQ-NEXT: retq 18887; 18888; AVX512VPOPCNTDQVL-LABEL: ugt_57_v4i64: 18889; AVX512VPOPCNTDQVL: # %bb.0: 18890; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 18891; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 18892; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 18893; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 18894; AVX512VPOPCNTDQVL-NEXT: retq 18895; 18896; BITALG_NOVLX-LABEL: ugt_57_v4i64: 18897; BITALG_NOVLX: # %bb.0: 18898; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 18899; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 18900; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 18901; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18902; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [57,57,57,57] 18903; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 18904; BITALG_NOVLX-NEXT: retq 18905; 18906; BITALG-LABEL: ugt_57_v4i64: 18907; BITALG: # %bb.0: 18908; BITALG-NEXT: vpopcntb %ymm0, %ymm0 18909; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 18910; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18911; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 18912; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 18913; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 18914; BITALG-NEXT: retq 18915 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 18916 %3 = icmp ugt <4 x i64> %2, <i64 57, i64 57, i64 57, i64 57> 18917 %4 = sext <4 x i1> %3 to <4 x i64> 18918 ret <4 x i64> %4 18919} 18920 18921define <4 x i64> @ult_58_v4i64(<4 x i64> %0) { 18922; AVX1-LABEL: ult_58_v4i64: 18923; AVX1: # %bb.0: 18924; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 18925; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 18926; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 18927; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 18928; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 18929; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 18930; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 18931; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 18932; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 18933; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 18934; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 18935; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 18936; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 18937; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 18938; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 18939; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 18940; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 18941; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 18942; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [58,58] 18943; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 18944; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 18945; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 18946; AVX1-NEXT: retq 18947; 18948; AVX2-LABEL: ult_58_v4i64: 18949; AVX2: # %bb.0: 18950; AVX2-NEXT: vmovdqa {{.*#+}} 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] 18951; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 18952; AVX2-NEXT: vmovdqa {{.*#+}} 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] 18953; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 18954; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 18955; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 18956; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 18957; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 18958; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 18959; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18960; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [58,58,58,58] 18961; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 18962; AVX2-NEXT: retq 18963; 18964; AVX512VPOPCNTDQ-LABEL: ult_58_v4i64: 18965; AVX512VPOPCNTDQ: # %bb.0: 18966; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 18967; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 18968; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [58,58,58,58] 18969; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 18970; AVX512VPOPCNTDQ-NEXT: retq 18971; 18972; AVX512VPOPCNTDQVL-LABEL: ult_58_v4i64: 18973; AVX512VPOPCNTDQVL: # %bb.0: 18974; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 18975; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 18976; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 18977; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 18978; AVX512VPOPCNTDQVL-NEXT: retq 18979; 18980; BITALG_NOVLX-LABEL: ult_58_v4i64: 18981; BITALG_NOVLX: # %bb.0: 18982; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 18983; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 18984; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 18985; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18986; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [58,58,58,58] 18987; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 18988; BITALG_NOVLX-NEXT: retq 18989; 18990; BITALG-LABEL: ult_58_v4i64: 18991; BITALG: # %bb.0: 18992; BITALG-NEXT: vpopcntb %ymm0, %ymm0 18993; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 18994; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 18995; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 18996; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 18997; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 18998; BITALG-NEXT: retq 18999 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 19000 %3 = icmp ult <4 x i64> %2, <i64 58, i64 58, i64 58, i64 58> 19001 %4 = sext <4 x i1> %3 to <4 x i64> 19002 ret <4 x i64> %4 19003} 19004 19005define <4 x i64> @ugt_58_v4i64(<4 x i64> %0) { 19006; AVX1-LABEL: ugt_58_v4i64: 19007; AVX1: # %bb.0: 19008; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 19009; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 19010; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 19011; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 19012; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 19013; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 19014; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 19015; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 19016; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 19017; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 19018; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 19019; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 19020; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 19021; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 19022; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 19023; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 19024; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 19025; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 19026; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [58,58] 19027; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 19028; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 19029; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 19030; AVX1-NEXT: retq 19031; 19032; AVX2-LABEL: ugt_58_v4i64: 19033; AVX2: # %bb.0: 19034; AVX2-NEXT: vmovdqa {{.*#+}} 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] 19035; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 19036; AVX2-NEXT: vmovdqa {{.*#+}} 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] 19037; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 19038; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 19039; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 19040; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 19041; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 19042; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 19043; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19044; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [58,58,58,58] 19045; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 19046; AVX2-NEXT: retq 19047; 19048; AVX512VPOPCNTDQ-LABEL: ugt_58_v4i64: 19049; AVX512VPOPCNTDQ: # %bb.0: 19050; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 19051; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 19052; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [58,58,58,58] 19053; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 19054; AVX512VPOPCNTDQ-NEXT: retq 19055; 19056; AVX512VPOPCNTDQVL-LABEL: ugt_58_v4i64: 19057; AVX512VPOPCNTDQVL: # %bb.0: 19058; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 19059; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 19060; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 19061; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 19062; AVX512VPOPCNTDQVL-NEXT: retq 19063; 19064; BITALG_NOVLX-LABEL: ugt_58_v4i64: 19065; BITALG_NOVLX: # %bb.0: 19066; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 19067; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 19068; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 19069; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19070; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [58,58,58,58] 19071; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 19072; BITALG_NOVLX-NEXT: retq 19073; 19074; BITALG-LABEL: ugt_58_v4i64: 19075; BITALG: # %bb.0: 19076; BITALG-NEXT: vpopcntb %ymm0, %ymm0 19077; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 19078; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19079; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 19080; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 19081; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 19082; BITALG-NEXT: retq 19083 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 19084 %3 = icmp ugt <4 x i64> %2, <i64 58, i64 58, i64 58, i64 58> 19085 %4 = sext <4 x i1> %3 to <4 x i64> 19086 ret <4 x i64> %4 19087} 19088 19089define <4 x i64> @ult_59_v4i64(<4 x i64> %0) { 19090; AVX1-LABEL: ult_59_v4i64: 19091; AVX1: # %bb.0: 19092; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 19093; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 19094; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 19095; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 19096; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 19097; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 19098; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 19099; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 19100; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 19101; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 19102; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 19103; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 19104; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 19105; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 19106; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 19107; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 19108; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 19109; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 19110; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [59,59] 19111; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 19112; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 19113; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 19114; AVX1-NEXT: retq 19115; 19116; AVX2-LABEL: ult_59_v4i64: 19117; AVX2: # %bb.0: 19118; AVX2-NEXT: vmovdqa {{.*#+}} 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] 19119; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 19120; AVX2-NEXT: vmovdqa {{.*#+}} 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] 19121; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 19122; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 19123; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 19124; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 19125; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 19126; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 19127; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19128; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [59,59,59,59] 19129; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 19130; AVX2-NEXT: retq 19131; 19132; AVX512VPOPCNTDQ-LABEL: ult_59_v4i64: 19133; AVX512VPOPCNTDQ: # %bb.0: 19134; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 19135; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 19136; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [59,59,59,59] 19137; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 19138; AVX512VPOPCNTDQ-NEXT: retq 19139; 19140; AVX512VPOPCNTDQVL-LABEL: ult_59_v4i64: 19141; AVX512VPOPCNTDQVL: # %bb.0: 19142; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 19143; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 19144; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 19145; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 19146; AVX512VPOPCNTDQVL-NEXT: retq 19147; 19148; BITALG_NOVLX-LABEL: ult_59_v4i64: 19149; BITALG_NOVLX: # %bb.0: 19150; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 19151; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 19152; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 19153; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19154; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [59,59,59,59] 19155; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 19156; BITALG_NOVLX-NEXT: retq 19157; 19158; BITALG-LABEL: ult_59_v4i64: 19159; BITALG: # %bb.0: 19160; BITALG-NEXT: vpopcntb %ymm0, %ymm0 19161; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 19162; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19163; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 19164; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 19165; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 19166; BITALG-NEXT: retq 19167 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 19168 %3 = icmp ult <4 x i64> %2, <i64 59, i64 59, i64 59, i64 59> 19169 %4 = sext <4 x i1> %3 to <4 x i64> 19170 ret <4 x i64> %4 19171} 19172 19173define <4 x i64> @ugt_59_v4i64(<4 x i64> %0) { 19174; AVX1-LABEL: ugt_59_v4i64: 19175; AVX1: # %bb.0: 19176; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 19177; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 19178; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 19179; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 19180; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 19181; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 19182; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 19183; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 19184; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 19185; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 19186; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 19187; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 19188; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 19189; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 19190; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 19191; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 19192; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 19193; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 19194; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [59,59] 19195; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 19196; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 19197; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 19198; AVX1-NEXT: retq 19199; 19200; AVX2-LABEL: ugt_59_v4i64: 19201; AVX2: # %bb.0: 19202; AVX2-NEXT: vmovdqa {{.*#+}} 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] 19203; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 19204; AVX2-NEXT: vmovdqa {{.*#+}} 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] 19205; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 19206; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 19207; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 19208; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 19209; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 19210; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 19211; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19212; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [59,59,59,59] 19213; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 19214; AVX2-NEXT: retq 19215; 19216; AVX512VPOPCNTDQ-LABEL: ugt_59_v4i64: 19217; AVX512VPOPCNTDQ: # %bb.0: 19218; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 19219; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 19220; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [59,59,59,59] 19221; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 19222; AVX512VPOPCNTDQ-NEXT: retq 19223; 19224; AVX512VPOPCNTDQVL-LABEL: ugt_59_v4i64: 19225; AVX512VPOPCNTDQVL: # %bb.0: 19226; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 19227; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 19228; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 19229; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 19230; AVX512VPOPCNTDQVL-NEXT: retq 19231; 19232; BITALG_NOVLX-LABEL: ugt_59_v4i64: 19233; BITALG_NOVLX: # %bb.0: 19234; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 19235; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 19236; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 19237; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19238; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [59,59,59,59] 19239; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 19240; BITALG_NOVLX-NEXT: retq 19241; 19242; BITALG-LABEL: ugt_59_v4i64: 19243; BITALG: # %bb.0: 19244; BITALG-NEXT: vpopcntb %ymm0, %ymm0 19245; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 19246; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19247; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 19248; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 19249; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 19250; BITALG-NEXT: retq 19251 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 19252 %3 = icmp ugt <4 x i64> %2, <i64 59, i64 59, i64 59, i64 59> 19253 %4 = sext <4 x i1> %3 to <4 x i64> 19254 ret <4 x i64> %4 19255} 19256 19257define <4 x i64> @ult_60_v4i64(<4 x i64> %0) { 19258; AVX1-LABEL: ult_60_v4i64: 19259; AVX1: # %bb.0: 19260; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 19261; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 19262; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 19263; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 19264; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 19265; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 19266; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 19267; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 19268; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 19269; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 19270; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 19271; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 19272; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 19273; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 19274; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 19275; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 19276; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 19277; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 19278; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [60,60] 19279; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 19280; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 19281; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 19282; AVX1-NEXT: retq 19283; 19284; AVX2-LABEL: ult_60_v4i64: 19285; AVX2: # %bb.0: 19286; AVX2-NEXT: vmovdqa {{.*#+}} 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] 19287; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 19288; AVX2-NEXT: vmovdqa {{.*#+}} 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] 19289; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 19290; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 19291; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 19292; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 19293; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 19294; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 19295; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19296; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [60,60,60,60] 19297; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 19298; AVX2-NEXT: retq 19299; 19300; AVX512VPOPCNTDQ-LABEL: ult_60_v4i64: 19301; AVX512VPOPCNTDQ: # %bb.0: 19302; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 19303; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 19304; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [60,60,60,60] 19305; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 19306; AVX512VPOPCNTDQ-NEXT: retq 19307; 19308; AVX512VPOPCNTDQVL-LABEL: ult_60_v4i64: 19309; AVX512VPOPCNTDQVL: # %bb.0: 19310; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 19311; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 19312; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 19313; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 19314; AVX512VPOPCNTDQVL-NEXT: retq 19315; 19316; BITALG_NOVLX-LABEL: ult_60_v4i64: 19317; BITALG_NOVLX: # %bb.0: 19318; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 19319; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 19320; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 19321; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19322; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [60,60,60,60] 19323; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 19324; BITALG_NOVLX-NEXT: retq 19325; 19326; BITALG-LABEL: ult_60_v4i64: 19327; BITALG: # %bb.0: 19328; BITALG-NEXT: vpopcntb %ymm0, %ymm0 19329; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 19330; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19331; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 19332; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 19333; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 19334; BITALG-NEXT: retq 19335 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 19336 %3 = icmp ult <4 x i64> %2, <i64 60, i64 60, i64 60, i64 60> 19337 %4 = sext <4 x i1> %3 to <4 x i64> 19338 ret <4 x i64> %4 19339} 19340 19341define <4 x i64> @ugt_60_v4i64(<4 x i64> %0) { 19342; AVX1-LABEL: ugt_60_v4i64: 19343; AVX1: # %bb.0: 19344; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 19345; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 19346; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 19347; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 19348; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 19349; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 19350; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 19351; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 19352; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 19353; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 19354; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 19355; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 19356; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 19357; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 19358; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 19359; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 19360; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 19361; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 19362; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [60,60] 19363; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 19364; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 19365; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 19366; AVX1-NEXT: retq 19367; 19368; AVX2-LABEL: ugt_60_v4i64: 19369; AVX2: # %bb.0: 19370; AVX2-NEXT: vmovdqa {{.*#+}} 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] 19371; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 19372; AVX2-NEXT: vmovdqa {{.*#+}} 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] 19373; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 19374; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 19375; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 19376; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 19377; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 19378; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 19379; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19380; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [60,60,60,60] 19381; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 19382; AVX2-NEXT: retq 19383; 19384; AVX512VPOPCNTDQ-LABEL: ugt_60_v4i64: 19385; AVX512VPOPCNTDQ: # %bb.0: 19386; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 19387; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 19388; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [60,60,60,60] 19389; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 19390; AVX512VPOPCNTDQ-NEXT: retq 19391; 19392; AVX512VPOPCNTDQVL-LABEL: ugt_60_v4i64: 19393; AVX512VPOPCNTDQVL: # %bb.0: 19394; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 19395; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 19396; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 19397; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 19398; AVX512VPOPCNTDQVL-NEXT: retq 19399; 19400; BITALG_NOVLX-LABEL: ugt_60_v4i64: 19401; BITALG_NOVLX: # %bb.0: 19402; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 19403; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 19404; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 19405; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19406; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [60,60,60,60] 19407; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 19408; BITALG_NOVLX-NEXT: retq 19409; 19410; BITALG-LABEL: ugt_60_v4i64: 19411; BITALG: # %bb.0: 19412; BITALG-NEXT: vpopcntb %ymm0, %ymm0 19413; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 19414; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19415; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 19416; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 19417; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 19418; BITALG-NEXT: retq 19419 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 19420 %3 = icmp ugt <4 x i64> %2, <i64 60, i64 60, i64 60, i64 60> 19421 %4 = sext <4 x i1> %3 to <4 x i64> 19422 ret <4 x i64> %4 19423} 19424 19425define <4 x i64> @ult_61_v4i64(<4 x i64> %0) { 19426; AVX1-LABEL: ult_61_v4i64: 19427; AVX1: # %bb.0: 19428; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 19429; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 19430; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 19431; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 19432; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 19433; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 19434; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 19435; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 19436; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 19437; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 19438; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 19439; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 19440; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 19441; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 19442; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 19443; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 19444; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 19445; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 19446; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [61,61] 19447; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 19448; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 19449; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 19450; AVX1-NEXT: retq 19451; 19452; AVX2-LABEL: ult_61_v4i64: 19453; AVX2: # %bb.0: 19454; AVX2-NEXT: vmovdqa {{.*#+}} 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] 19455; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 19456; AVX2-NEXT: vmovdqa {{.*#+}} 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] 19457; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 19458; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 19459; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 19460; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 19461; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 19462; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 19463; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19464; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [61,61,61,61] 19465; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 19466; AVX2-NEXT: retq 19467; 19468; AVX512VPOPCNTDQ-LABEL: ult_61_v4i64: 19469; AVX512VPOPCNTDQ: # %bb.0: 19470; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 19471; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 19472; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [61,61,61,61] 19473; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 19474; AVX512VPOPCNTDQ-NEXT: retq 19475; 19476; AVX512VPOPCNTDQVL-LABEL: ult_61_v4i64: 19477; AVX512VPOPCNTDQVL: # %bb.0: 19478; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 19479; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 19480; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 19481; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 19482; AVX512VPOPCNTDQVL-NEXT: retq 19483; 19484; BITALG_NOVLX-LABEL: ult_61_v4i64: 19485; BITALG_NOVLX: # %bb.0: 19486; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 19487; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 19488; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 19489; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19490; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [61,61,61,61] 19491; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 19492; BITALG_NOVLX-NEXT: retq 19493; 19494; BITALG-LABEL: ult_61_v4i64: 19495; BITALG: # %bb.0: 19496; BITALG-NEXT: vpopcntb %ymm0, %ymm0 19497; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 19498; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19499; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 19500; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 19501; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 19502; BITALG-NEXT: retq 19503 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 19504 %3 = icmp ult <4 x i64> %2, <i64 61, i64 61, i64 61, i64 61> 19505 %4 = sext <4 x i1> %3 to <4 x i64> 19506 ret <4 x i64> %4 19507} 19508 19509define <4 x i64> @ugt_61_v4i64(<4 x i64> %0) { 19510; AVX1-LABEL: ugt_61_v4i64: 19511; AVX1: # %bb.0: 19512; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 19513; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 19514; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 19515; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 19516; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 19517; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 19518; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 19519; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 19520; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 19521; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 19522; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 19523; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 19524; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 19525; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 19526; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 19527; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 19528; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 19529; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 19530; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [61,61] 19531; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 19532; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 19533; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 19534; AVX1-NEXT: retq 19535; 19536; AVX2-LABEL: ugt_61_v4i64: 19537; AVX2: # %bb.0: 19538; AVX2-NEXT: vmovdqa {{.*#+}} 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] 19539; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 19540; AVX2-NEXT: vmovdqa {{.*#+}} 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] 19541; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 19542; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 19543; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 19544; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 19545; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 19546; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 19547; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19548; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [61,61,61,61] 19549; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 19550; AVX2-NEXT: retq 19551; 19552; AVX512VPOPCNTDQ-LABEL: ugt_61_v4i64: 19553; AVX512VPOPCNTDQ: # %bb.0: 19554; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 19555; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 19556; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [61,61,61,61] 19557; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 19558; AVX512VPOPCNTDQ-NEXT: retq 19559; 19560; AVX512VPOPCNTDQVL-LABEL: ugt_61_v4i64: 19561; AVX512VPOPCNTDQVL: # %bb.0: 19562; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 19563; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 19564; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 19565; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 19566; AVX512VPOPCNTDQVL-NEXT: retq 19567; 19568; BITALG_NOVLX-LABEL: ugt_61_v4i64: 19569; BITALG_NOVLX: # %bb.0: 19570; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 19571; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 19572; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 19573; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19574; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [61,61,61,61] 19575; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 19576; BITALG_NOVLX-NEXT: retq 19577; 19578; BITALG-LABEL: ugt_61_v4i64: 19579; BITALG: # %bb.0: 19580; BITALG-NEXT: vpopcntb %ymm0, %ymm0 19581; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 19582; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19583; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 19584; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 19585; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 19586; BITALG-NEXT: retq 19587 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 19588 %3 = icmp ugt <4 x i64> %2, <i64 61, i64 61, i64 61, i64 61> 19589 %4 = sext <4 x i1> %3 to <4 x i64> 19590 ret <4 x i64> %4 19591} 19592 19593define <4 x i64> @ult_62_v4i64(<4 x i64> %0) { 19594; AVX1-LABEL: ult_62_v4i64: 19595; AVX1: # %bb.0: 19596; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 19597; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 19598; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 19599; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 19600; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 19601; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 19602; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 19603; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 19604; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 19605; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 19606; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 19607; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 19608; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 19609; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 19610; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 19611; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 19612; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 19613; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 19614; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [62,62] 19615; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 19616; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 19617; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 19618; AVX1-NEXT: retq 19619; 19620; AVX2-LABEL: ult_62_v4i64: 19621; AVX2: # %bb.0: 19622; AVX2-NEXT: vmovdqa {{.*#+}} 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] 19623; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 19624; AVX2-NEXT: vmovdqa {{.*#+}} 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] 19625; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 19626; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 19627; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 19628; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 19629; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 19630; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 19631; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19632; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [62,62,62,62] 19633; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 19634; AVX2-NEXT: retq 19635; 19636; AVX512VPOPCNTDQ-LABEL: ult_62_v4i64: 19637; AVX512VPOPCNTDQ: # %bb.0: 19638; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 19639; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 19640; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [62,62,62,62] 19641; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 19642; AVX512VPOPCNTDQ-NEXT: retq 19643; 19644; AVX512VPOPCNTDQVL-LABEL: ult_62_v4i64: 19645; AVX512VPOPCNTDQVL: # %bb.0: 19646; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 19647; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 19648; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 19649; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 19650; AVX512VPOPCNTDQVL-NEXT: retq 19651; 19652; BITALG_NOVLX-LABEL: ult_62_v4i64: 19653; BITALG_NOVLX: # %bb.0: 19654; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 19655; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 19656; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 19657; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19658; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [62,62,62,62] 19659; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 19660; BITALG_NOVLX-NEXT: retq 19661; 19662; BITALG-LABEL: ult_62_v4i64: 19663; BITALG: # %bb.0: 19664; BITALG-NEXT: vpopcntb %ymm0, %ymm0 19665; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 19666; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19667; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 19668; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 19669; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 19670; BITALG-NEXT: retq 19671 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 19672 %3 = icmp ult <4 x i64> %2, <i64 62, i64 62, i64 62, i64 62> 19673 %4 = sext <4 x i1> %3 to <4 x i64> 19674 ret <4 x i64> %4 19675} 19676 19677define <4 x i64> @ugt_62_v4i64(<4 x i64> %0) { 19678; AVX1-LABEL: ugt_62_v4i64: 19679; AVX1: # %bb.0: 19680; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 19681; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 19682; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 19683; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 19684; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 19685; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 19686; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 19687; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 19688; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 19689; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 19690; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 19691; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 19692; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 19693; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 19694; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 19695; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 19696; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 19697; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 19698; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [62,62] 19699; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 19700; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 19701; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 19702; AVX1-NEXT: retq 19703; 19704; AVX2-LABEL: ugt_62_v4i64: 19705; AVX2: # %bb.0: 19706; AVX2-NEXT: vmovdqa {{.*#+}} 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] 19707; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 19708; AVX2-NEXT: vmovdqa {{.*#+}} 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] 19709; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 19710; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 19711; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 19712; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 19713; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 19714; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 19715; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19716; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [62,62,62,62] 19717; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 19718; AVX2-NEXT: retq 19719; 19720; AVX512VPOPCNTDQ-LABEL: ugt_62_v4i64: 19721; AVX512VPOPCNTDQ: # %bb.0: 19722; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 19723; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 19724; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [62,62,62,62] 19725; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 19726; AVX512VPOPCNTDQ-NEXT: retq 19727; 19728; AVX512VPOPCNTDQVL-LABEL: ugt_62_v4i64: 19729; AVX512VPOPCNTDQVL: # %bb.0: 19730; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 19731; AVX512VPOPCNTDQVL-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 19732; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 19733; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 19734; AVX512VPOPCNTDQVL-NEXT: retq 19735; 19736; BITALG_NOVLX-LABEL: ugt_62_v4i64: 19737; BITALG_NOVLX: # %bb.0: 19738; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 19739; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 19740; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 19741; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19742; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [62,62,62,62] 19743; BITALG_NOVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 19744; BITALG_NOVLX-NEXT: retq 19745; 19746; BITALG-LABEL: ugt_62_v4i64: 19747; BITALG: # %bb.0: 19748; BITALG-NEXT: vpopcntb %ymm0, %ymm0 19749; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 19750; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19751; BITALG-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 19752; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 19753; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 19754; BITALG-NEXT: retq 19755 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 19756 %3 = icmp ugt <4 x i64> %2, <i64 62, i64 62, i64 62, i64 62> 19757 %4 = sext <4 x i1> %3 to <4 x i64> 19758 ret <4 x i64> %4 19759} 19760 19761define <4 x i64> @ult_63_v4i64(<4 x i64> %0) { 19762; AVX1-LABEL: ult_63_v4i64: 19763; AVX1: # %bb.0: 19764; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 19765; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm2 19766; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 19767; AVX1-NEXT: vpshufb %xmm2, %xmm3, %xmm2 19768; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 19769; AVX1-NEXT: vpand %xmm1, %xmm4, %xmm4 19770; AVX1-NEXT: vpshufb %xmm4, %xmm3, %xmm4 19771; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 19772; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 19773; AVX1-NEXT: vpsadbw %xmm4, %xmm2, %xmm2 19774; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 19775; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm5 19776; AVX1-NEXT: vpshufb %xmm5, %xmm3, %xmm5 19777; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 19778; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0 19779; AVX1-NEXT: vpshufb %xmm0, %xmm3, %xmm0 19780; AVX1-NEXT: vpaddb %xmm5, %xmm0, %xmm0 19781; AVX1-NEXT: vpsadbw %xmm4, %xmm0, %xmm0 19782; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [63,63] 19783; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 19784; AVX1-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm1 19785; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 19786; AVX1-NEXT: retq 19787; 19788; AVX2-LABEL: ult_63_v4i64: 19789; AVX2: # %bb.0: 19790; AVX2-NEXT: vmovdqa {{.*#+}} 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] 19791; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 19792; AVX2-NEXT: vmovdqa {{.*#+}} 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] 19793; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 19794; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 19795; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 19796; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 19797; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 19798; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 19799; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19800; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [63,63,63,63] 19801; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 19802; AVX2-NEXT: retq 19803; 19804; AVX512VPOPCNTDQ-LABEL: ult_63_v4i64: 19805; AVX512VPOPCNTDQ: # %bb.0: 19806; AVX512VPOPCNTDQ-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 19807; AVX512VPOPCNTDQ-NEXT: vpopcntq %zmm0, %zmm0 19808; AVX512VPOPCNTDQ-NEXT: vpbroadcastq {{.*#+}} ymm1 = [63,63,63,63] 19809; AVX512VPOPCNTDQ-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 19810; AVX512VPOPCNTDQ-NEXT: retq 19811; 19812; AVX512VPOPCNTDQVL-LABEL: ult_63_v4i64: 19813; AVX512VPOPCNTDQVL: # %bb.0: 19814; AVX512VPOPCNTDQVL-NEXT: vpopcntq %ymm0, %ymm0 19815; AVX512VPOPCNTDQVL-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 19816; AVX512VPOPCNTDQVL-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 19817; AVX512VPOPCNTDQVL-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 19818; AVX512VPOPCNTDQVL-NEXT: retq 19819; 19820; BITALG_NOVLX-LABEL: ult_63_v4i64: 19821; BITALG_NOVLX: # %bb.0: 19822; BITALG_NOVLX-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 19823; BITALG_NOVLX-NEXT: vpopcntb %zmm0, %zmm0 19824; BITALG_NOVLX-NEXT: vpxor %xmm1, %xmm1, %xmm1 19825; BITALG_NOVLX-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19826; BITALG_NOVLX-NEXT: vpbroadcastq {{.*#+}} ymm1 = [63,63,63,63] 19827; BITALG_NOVLX-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 19828; BITALG_NOVLX-NEXT: retq 19829; 19830; BITALG-LABEL: ult_63_v4i64: 19831; BITALG: # %bb.0: 19832; BITALG-NEXT: vpopcntb %ymm0, %ymm0 19833; BITALG-NEXT: vpxor %xmm1, %xmm1, %xmm1 19834; BITALG-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 19835; BITALG-NEXT: vpcmpltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1 19836; BITALG-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 19837; BITALG-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z} 19838; BITALG-NEXT: retq 19839 %2 = tail call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %0) 19840 %3 = icmp ult <4 x i64> %2, <i64 63, i64 63, i64 63, i64 63> 19841 %4 = sext <4 x i1> %3 to <4 x i64> 19842 ret <4 x i64> %4 19843} 19844 19845declare <32 x i8> @llvm.ctpop.v32i8(<32 x i8>) 19846declare <16 x i16> @llvm.ctpop.v16i16(<16 x i16>) 19847declare <8 x i32> @llvm.ctpop.v8i32(<8 x i32>) 19848declare <4 x i64> @llvm.ctpop.v4i64(<4 x i64>) 19849