brintos

brintos / llvm-project-archived public Read only

0
0
Text · 52.0 KiB · c1d30b6 Raw
1416 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefixes=SSE,SSE23; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse3 | FileCheck %s --check-prefixes=SSE,SSE34; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+ssse3 | FileCheck %s --check-prefixes=SSE,SSSE35; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefixes=SSE,SSE416; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX1OR2,AVX17; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX1OR2,AVX28; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop | FileCheck %s --check-prefixes=AVX,XOP9; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vpopcntdq | FileCheck %s --check-prefixes=AVX,AVX512,AVX512VPOPCNTDQ10; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vpopcntdq,+avx512vl | FileCheck %s --check-prefixes=AVX,AVX512,AVX512VPOPCNTDQVL11; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bitalg | FileCheck %s --check-prefix=BITALG_NOVLX12; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bitalg,+avx512vl | FileCheck %s --check-prefix=BITALG13 14define <2 x i64> @testv2i64(<2 x i64> %in) nounwind {15; SSE2-LABEL: testv2i64:16; SSE2:       # %bb.0:17; SSE2-NEXT:    movdqa %xmm0, %xmm118; SSE2-NEXT:    psrlw $1, %xmm119; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm120; SSE2-NEXT:    psubb %xmm1, %xmm021; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]22; SSE2-NEXT:    movdqa %xmm0, %xmm223; SSE2-NEXT:    pand %xmm1, %xmm224; SSE2-NEXT:    psrlw $2, %xmm025; SSE2-NEXT:    pand %xmm1, %xmm026; SSE2-NEXT:    paddb %xmm2, %xmm027; SSE2-NEXT:    movdqa %xmm0, %xmm128; SSE2-NEXT:    psrlw $4, %xmm129; SSE2-NEXT:    paddb %xmm1, %xmm030; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm031; SSE2-NEXT:    pxor %xmm1, %xmm132; SSE2-NEXT:    psadbw %xmm1, %xmm033; SSE2-NEXT:    retq34;35; SSE3-LABEL: testv2i64:36; SSE3:       # %bb.0:37; SSE3-NEXT:    movdqa %xmm0, %xmm138; SSE3-NEXT:    psrlw $1, %xmm139; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm140; SSE3-NEXT:    psubb %xmm1, %xmm041; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]42; SSE3-NEXT:    movdqa %xmm0, %xmm243; SSE3-NEXT:    pand %xmm1, %xmm244; SSE3-NEXT:    psrlw $2, %xmm045; SSE3-NEXT:    pand %xmm1, %xmm046; SSE3-NEXT:    paddb %xmm2, %xmm047; SSE3-NEXT:    movdqa %xmm0, %xmm148; SSE3-NEXT:    psrlw $4, %xmm149; SSE3-NEXT:    paddb %xmm1, %xmm050; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm051; SSE3-NEXT:    pxor %xmm1, %xmm152; SSE3-NEXT:    psadbw %xmm1, %xmm053; SSE3-NEXT:    retq54;55; SSSE3-LABEL: testv2i64:56; SSSE3:       # %bb.0:57; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]58; SSSE3-NEXT:    movdqa %xmm0, %xmm259; SSSE3-NEXT:    pand %xmm1, %xmm260; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]61; SSSE3-NEXT:    movdqa %xmm3, %xmm462; SSSE3-NEXT:    pshufb %xmm2, %xmm463; SSSE3-NEXT:    psrlw $4, %xmm064; SSSE3-NEXT:    pand %xmm1, %xmm065; SSSE3-NEXT:    pshufb %xmm0, %xmm366; SSSE3-NEXT:    paddb %xmm4, %xmm367; SSSE3-NEXT:    pxor %xmm0, %xmm068; SSSE3-NEXT:    psadbw %xmm3, %xmm069; SSSE3-NEXT:    retq70;71; SSE41-LABEL: testv2i64:72; SSE41:       # %bb.0:73; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]74; SSE41-NEXT:    movdqa %xmm0, %xmm275; SSE41-NEXT:    pand %xmm1, %xmm276; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]77; SSE41-NEXT:    movdqa %xmm3, %xmm478; SSE41-NEXT:    pshufb %xmm2, %xmm479; SSE41-NEXT:    psrlw $4, %xmm080; SSE41-NEXT:    pand %xmm1, %xmm081; SSE41-NEXT:    pshufb %xmm0, %xmm382; SSE41-NEXT:    paddb %xmm4, %xmm383; SSE41-NEXT:    pxor %xmm0, %xmm084; SSE41-NEXT:    psadbw %xmm3, %xmm085; SSE41-NEXT:    retq86;87; AVX1-LABEL: testv2i64:88; AVX1:       # %bb.0:89; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]90; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm291; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]92; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm293; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm094; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm095; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm096; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm097; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm198; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm099; AVX1-NEXT:    retq100;101; AVX2-LABEL: testv2i64:102; AVX2:       # %bb.0:103; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]104; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2105; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]106; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2107; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0108; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0109; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0110; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0111; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1112; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0113; AVX2-NEXT:    retq114;115; XOP-LABEL: testv2i64:116; XOP:       # %bb.0:117; XOP-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1118; XOP-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]119; XOP-NEXT:    vpshufb %xmm1, %xmm2, %xmm1120; XOP-NEXT:    vpshlb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0121; XOP-NEXT:    vpshufb %xmm0, %xmm2, %xmm0122; XOP-NEXT:    vpaddb %xmm1, %xmm0, %xmm0123; XOP-NEXT:    vpxor %xmm1, %xmm1, %xmm1124; XOP-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0125; XOP-NEXT:    retq126;127; AVX512VPOPCNTDQ-LABEL: testv2i64:128; AVX512VPOPCNTDQ:       # %bb.0:129; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0130; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0131; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0132; AVX512VPOPCNTDQ-NEXT:    vzeroupper133; AVX512VPOPCNTDQ-NEXT:    retq134;135; AVX512VPOPCNTDQVL-LABEL: testv2i64:136; AVX512VPOPCNTDQVL:       # %bb.0:137; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0138; AVX512VPOPCNTDQVL-NEXT:    retq139;140; BITALG_NOVLX-LABEL: testv2i64:141; BITALG_NOVLX:       # %bb.0:142; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0143; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0144; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1145; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0146; BITALG_NOVLX-NEXT:    vzeroupper147; BITALG_NOVLX-NEXT:    retq148;149; BITALG-LABEL: testv2i64:150; BITALG:       # %bb.0:151; BITALG-NEXT:    vpopcntb %xmm0, %xmm0152; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1153; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0154; BITALG-NEXT:    retq155  %out = call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %in)156  ret <2 x i64> %out157}158 159define <4 x i32> @testv4i32(<4 x i32> %in) nounwind {160; SSE2-LABEL: testv4i32:161; SSE2:       # %bb.0:162; SSE2-NEXT:    movdqa %xmm0, %xmm1163; SSE2-NEXT:    psrlw $1, %xmm1164; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1165; SSE2-NEXT:    psubb %xmm1, %xmm0166; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]167; SSE2-NEXT:    movdqa %xmm0, %xmm2168; SSE2-NEXT:    pand %xmm1, %xmm2169; SSE2-NEXT:    psrlw $2, %xmm0170; SSE2-NEXT:    pand %xmm1, %xmm0171; SSE2-NEXT:    paddb %xmm2, %xmm0172; SSE2-NEXT:    movdqa %xmm0, %xmm1173; SSE2-NEXT:    psrlw $4, %xmm1174; SSE2-NEXT:    paddb %xmm1, %xmm0175; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0176; SSE2-NEXT:    pxor %xmm1, %xmm1177; SSE2-NEXT:    movdqa %xmm0, %xmm2178; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]179; SSE2-NEXT:    psadbw %xmm1, %xmm2180; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]181; SSE2-NEXT:    psadbw %xmm1, %xmm0182; SSE2-NEXT:    packuswb %xmm2, %xmm0183; SSE2-NEXT:    retq184;185; SSE3-LABEL: testv4i32:186; SSE3:       # %bb.0:187; SSE3-NEXT:    movdqa %xmm0, %xmm1188; SSE3-NEXT:    psrlw $1, %xmm1189; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1190; SSE3-NEXT:    psubb %xmm1, %xmm0191; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]192; SSE3-NEXT:    movdqa %xmm0, %xmm2193; SSE3-NEXT:    pand %xmm1, %xmm2194; SSE3-NEXT:    psrlw $2, %xmm0195; SSE3-NEXT:    pand %xmm1, %xmm0196; SSE3-NEXT:    paddb %xmm2, %xmm0197; SSE3-NEXT:    movdqa %xmm0, %xmm1198; SSE3-NEXT:    psrlw $4, %xmm1199; SSE3-NEXT:    paddb %xmm1, %xmm0200; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0201; SSE3-NEXT:    pxor %xmm1, %xmm1202; SSE3-NEXT:    movdqa %xmm0, %xmm2203; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]204; SSE3-NEXT:    psadbw %xmm1, %xmm2205; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]206; SSE3-NEXT:    psadbw %xmm1, %xmm0207; SSE3-NEXT:    packuswb %xmm2, %xmm0208; SSE3-NEXT:    retq209;210; SSSE3-LABEL: testv4i32:211; SSSE3:       # %bb.0:212; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]213; SSSE3-NEXT:    movdqa %xmm0, %xmm3214; SSSE3-NEXT:    pand %xmm2, %xmm3215; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]216; SSSE3-NEXT:    movdqa %xmm1, %xmm4217; SSSE3-NEXT:    pshufb %xmm3, %xmm4218; SSSE3-NEXT:    psrlw $4, %xmm0219; SSSE3-NEXT:    pand %xmm2, %xmm0220; SSSE3-NEXT:    pshufb %xmm0, %xmm1221; SSSE3-NEXT:    paddb %xmm4, %xmm1222; SSSE3-NEXT:    pxor %xmm0, %xmm0223; SSSE3-NEXT:    movdqa %xmm1, %xmm2224; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]225; SSSE3-NEXT:    psadbw %xmm0, %xmm2226; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]227; SSSE3-NEXT:    psadbw %xmm0, %xmm1228; SSSE3-NEXT:    packuswb %xmm2, %xmm1229; SSSE3-NEXT:    movdqa %xmm1, %xmm0230; SSSE3-NEXT:    retq231;232; SSE41-LABEL: testv4i32:233; SSE41:       # %bb.0:234; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]235; SSE41-NEXT:    movdqa %xmm0, %xmm2236; SSE41-NEXT:    pand %xmm1, %xmm2237; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]238; SSE41-NEXT:    movdqa %xmm3, %xmm4239; SSE41-NEXT:    pshufb %xmm2, %xmm4240; SSE41-NEXT:    psrlw $4, %xmm0241; SSE41-NEXT:    pand %xmm1, %xmm0242; SSE41-NEXT:    pshufb %xmm0, %xmm3243; SSE41-NEXT:    paddb %xmm4, %xmm3244; SSE41-NEXT:    pxor %xmm1, %xmm1245; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero246; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]247; SSE41-NEXT:    psadbw %xmm1, %xmm3248; SSE41-NEXT:    psadbw %xmm1, %xmm0249; SSE41-NEXT:    packuswb %xmm3, %xmm0250; SSE41-NEXT:    retq251;252; AVX1-LABEL: testv4i32:253; AVX1:       # %bb.0:254; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]255; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2256; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]257; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2258; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0259; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0260; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0261; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0262; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1263; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]264; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2265; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero266; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0267; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0268; AVX1-NEXT:    retq269;270; AVX2-LABEL: testv4i32:271; AVX2:       # %bb.0:272; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]273; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2274; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]275; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2276; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0277; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0278; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0279; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0280; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1281; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]282; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2283; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero284; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0285; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0286; AVX2-NEXT:    retq287;288; XOP-LABEL: testv4i32:289; XOP:       # %bb.0:290; XOP-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1291; XOP-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]292; XOP-NEXT:    vpshufb %xmm1, %xmm2, %xmm1293; XOP-NEXT:    vpshlb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0294; XOP-NEXT:    vpshufb %xmm0, %xmm2, %xmm0295; XOP-NEXT:    vpaddb %xmm1, %xmm0, %xmm0296; XOP-NEXT:    vpxor %xmm1, %xmm1, %xmm1297; XOP-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]298; XOP-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2299; XOP-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero300; XOP-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0301; XOP-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0302; XOP-NEXT:    retq303;304; AVX512VPOPCNTDQ-LABEL: testv4i32:305; AVX512VPOPCNTDQ:       # %bb.0:306; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0307; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0308; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0309; AVX512VPOPCNTDQ-NEXT:    vzeroupper310; AVX512VPOPCNTDQ-NEXT:    retq311;312; AVX512VPOPCNTDQVL-LABEL: testv4i32:313; AVX512VPOPCNTDQVL:       # %bb.0:314; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0315; AVX512VPOPCNTDQVL-NEXT:    retq316;317; BITALG_NOVLX-LABEL: testv4i32:318; BITALG_NOVLX:       # %bb.0:319; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0320; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0321; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1322; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]323; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2324; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero325; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0326; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0327; BITALG_NOVLX-NEXT:    vzeroupper328; BITALG_NOVLX-NEXT:    retq329;330; BITALG-LABEL: testv4i32:331; BITALG:       # %bb.0:332; BITALG-NEXT:    vpopcntb %xmm0, %xmm0333; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1334; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]335; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2336; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero337; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0338; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0339; BITALG-NEXT:    retq340  %out = call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %in)341  ret <4 x i32> %out342}343 344define <8 x i16> @testv8i16(<8 x i16> %in) nounwind {345; SSE2-LABEL: testv8i16:346; SSE2:       # %bb.0:347; SSE2-NEXT:    movdqa %xmm0, %xmm1348; SSE2-NEXT:    psrlw $1, %xmm1349; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1350; SSE2-NEXT:    psubb %xmm1, %xmm0351; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]352; SSE2-NEXT:    movdqa %xmm0, %xmm2353; SSE2-NEXT:    pand %xmm1, %xmm2354; SSE2-NEXT:    psrlw $2, %xmm0355; SSE2-NEXT:    pand %xmm1, %xmm0356; SSE2-NEXT:    paddb %xmm2, %xmm0357; SSE2-NEXT:    movdqa %xmm0, %xmm1358; SSE2-NEXT:    psrlw $4, %xmm1359; SSE2-NEXT:    paddb %xmm1, %xmm0360; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0361; SSE2-NEXT:    movdqa %xmm0, %xmm1362; SSE2-NEXT:    psllw $8, %xmm1363; SSE2-NEXT:    paddb %xmm1, %xmm0364; SSE2-NEXT:    psrlw $8, %xmm0365; SSE2-NEXT:    retq366;367; SSE3-LABEL: testv8i16:368; SSE3:       # %bb.0:369; SSE3-NEXT:    movdqa %xmm0, %xmm1370; SSE3-NEXT:    psrlw $1, %xmm1371; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1372; SSE3-NEXT:    psubb %xmm1, %xmm0373; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]374; SSE3-NEXT:    movdqa %xmm0, %xmm2375; SSE3-NEXT:    pand %xmm1, %xmm2376; SSE3-NEXT:    psrlw $2, %xmm0377; SSE3-NEXT:    pand %xmm1, %xmm0378; SSE3-NEXT:    paddb %xmm2, %xmm0379; SSE3-NEXT:    movdqa %xmm0, %xmm1380; SSE3-NEXT:    psrlw $4, %xmm1381; SSE3-NEXT:    paddb %xmm1, %xmm0382; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0383; SSE3-NEXT:    movdqa %xmm0, %xmm1384; SSE3-NEXT:    psllw $8, %xmm1385; SSE3-NEXT:    paddb %xmm1, %xmm0386; SSE3-NEXT:    psrlw $8, %xmm0387; SSE3-NEXT:    retq388;389; SSSE3-LABEL: testv8i16:390; SSSE3:       # %bb.0:391; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]392; SSSE3-NEXT:    movdqa %xmm0, %xmm2393; SSSE3-NEXT:    pand %xmm1, %xmm2394; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]395; SSSE3-NEXT:    movdqa %xmm3, %xmm4396; SSSE3-NEXT:    pshufb %xmm2, %xmm4397; SSSE3-NEXT:    psrlw $4, %xmm0398; SSSE3-NEXT:    pand %xmm1, %xmm0399; SSSE3-NEXT:    pshufb %xmm0, %xmm3400; SSSE3-NEXT:    paddb %xmm4, %xmm3401; SSSE3-NEXT:    movdqa %xmm3, %xmm0402; SSSE3-NEXT:    psllw $8, %xmm0403; SSSE3-NEXT:    paddb %xmm3, %xmm0404; SSSE3-NEXT:    psrlw $8, %xmm0405; SSSE3-NEXT:    retq406;407; SSE41-LABEL: testv8i16:408; SSE41:       # %bb.0:409; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]410; SSE41-NEXT:    movdqa %xmm0, %xmm2411; SSE41-NEXT:    pand %xmm1, %xmm2412; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]413; SSE41-NEXT:    movdqa %xmm3, %xmm4414; SSE41-NEXT:    pshufb %xmm2, %xmm4415; SSE41-NEXT:    psrlw $4, %xmm0416; SSE41-NEXT:    pand %xmm1, %xmm0417; SSE41-NEXT:    pshufb %xmm0, %xmm3418; SSE41-NEXT:    paddb %xmm4, %xmm3419; SSE41-NEXT:    movdqa %xmm3, %xmm0420; SSE41-NEXT:    psllw $8, %xmm0421; SSE41-NEXT:    paddb %xmm3, %xmm0422; SSE41-NEXT:    psrlw $8, %xmm0423; SSE41-NEXT:    retq424;425; AVX1-LABEL: testv8i16:426; AVX1:       # %bb.0:427; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]428; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2429; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]430; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2431; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0432; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0433; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0434; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0435; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1436; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0437; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0438; AVX1-NEXT:    retq439;440; AVX2-LABEL: testv8i16:441; AVX2:       # %bb.0:442; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]443; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2444; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]445; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2446; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0447; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0448; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0449; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0450; AVX2-NEXT:    vpsllw $8, %xmm0, %xmm1451; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm0452; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0453; AVX2-NEXT:    retq454;455; XOP-LABEL: testv8i16:456; XOP:       # %bb.0:457; XOP-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1458; XOP-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]459; XOP-NEXT:    vpshufb %xmm1, %xmm2, %xmm1460; XOP-NEXT:    vpshlb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0461; XOP-NEXT:    vpshufb %xmm0, %xmm2, %xmm0462; XOP-NEXT:    vpaddb %xmm1, %xmm0, %xmm0463; XOP-NEXT:    vpsllw $8, %xmm0, %xmm1464; XOP-NEXT:    vpaddb %xmm0, %xmm1, %xmm0465; XOP-NEXT:    vpsrlw $8, %xmm0, %xmm0466; XOP-NEXT:    retq467;468; AVX512VPOPCNTDQ-LABEL: testv8i16:469; AVX512VPOPCNTDQ:       # %bb.0:470; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero471; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0472; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0473; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0474; AVX512VPOPCNTDQ-NEXT:    vzeroupper475; AVX512VPOPCNTDQ-NEXT:    retq476;477; AVX512VPOPCNTDQVL-LABEL: testv8i16:478; AVX512VPOPCNTDQVL:       # %bb.0:479; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero480; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0481; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %ymm0, %xmm0482; AVX512VPOPCNTDQVL-NEXT:    vzeroupper483; AVX512VPOPCNTDQVL-NEXT:    retq484;485; BITALG_NOVLX-LABEL: testv8i16:486; BITALG_NOVLX:       # %bb.0:487; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0488; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0489; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0490; BITALG_NOVLX-NEXT:    vzeroupper491; BITALG_NOVLX-NEXT:    retq492;493; BITALG-LABEL: testv8i16:494; BITALG:       # %bb.0:495; BITALG-NEXT:    vpopcntw %xmm0, %xmm0496; BITALG-NEXT:    retq497  %out = call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %in)498  ret <8 x i16> %out499}500 501define <16 x i8> @testv16i8(<16 x i8> %in) nounwind {502; SSE2-LABEL: testv16i8:503; SSE2:       # %bb.0:504; SSE2-NEXT:    movdqa %xmm0, %xmm1505; SSE2-NEXT:    psrlw $1, %xmm1506; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1507; SSE2-NEXT:    psubb %xmm1, %xmm0508; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]509; SSE2-NEXT:    movdqa %xmm0, %xmm2510; SSE2-NEXT:    pand %xmm1, %xmm2511; SSE2-NEXT:    psrlw $2, %xmm0512; SSE2-NEXT:    pand %xmm1, %xmm0513; SSE2-NEXT:    paddb %xmm2, %xmm0514; SSE2-NEXT:    movdqa %xmm0, %xmm1515; SSE2-NEXT:    psrlw $4, %xmm1516; SSE2-NEXT:    paddb %xmm1, %xmm0517; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0518; SSE2-NEXT:    retq519;520; SSE3-LABEL: testv16i8:521; SSE3:       # %bb.0:522; SSE3-NEXT:    movdqa %xmm0, %xmm1523; SSE3-NEXT:    psrlw $1, %xmm1524; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1525; SSE3-NEXT:    psubb %xmm1, %xmm0526; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]527; SSE3-NEXT:    movdqa %xmm0, %xmm2528; SSE3-NEXT:    pand %xmm1, %xmm2529; SSE3-NEXT:    psrlw $2, %xmm0530; SSE3-NEXT:    pand %xmm1, %xmm0531; SSE3-NEXT:    paddb %xmm2, %xmm0532; SSE3-NEXT:    movdqa %xmm0, %xmm1533; SSE3-NEXT:    psrlw $4, %xmm1534; SSE3-NEXT:    paddb %xmm1, %xmm0535; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0536; SSE3-NEXT:    retq537;538; SSSE3-LABEL: testv16i8:539; SSSE3:       # %bb.0:540; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]541; SSSE3-NEXT:    movdqa %xmm0, %xmm3542; SSSE3-NEXT:    pand %xmm2, %xmm3543; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]544; SSSE3-NEXT:    movdqa %xmm1, %xmm4545; SSSE3-NEXT:    pshufb %xmm3, %xmm4546; SSSE3-NEXT:    psrlw $4, %xmm0547; SSSE3-NEXT:    pand %xmm2, %xmm0548; SSSE3-NEXT:    pshufb %xmm0, %xmm1549; SSSE3-NEXT:    paddb %xmm4, %xmm1550; SSSE3-NEXT:    movdqa %xmm1, %xmm0551; SSSE3-NEXT:    retq552;553; SSE41-LABEL: testv16i8:554; SSE41:       # %bb.0:555; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]556; SSE41-NEXT:    movdqa %xmm0, %xmm3557; SSE41-NEXT:    pand %xmm2, %xmm3558; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]559; SSE41-NEXT:    movdqa %xmm1, %xmm4560; SSE41-NEXT:    pshufb %xmm3, %xmm4561; SSE41-NEXT:    psrlw $4, %xmm0562; SSE41-NEXT:    pand %xmm2, %xmm0563; SSE41-NEXT:    pshufb %xmm0, %xmm1564; SSE41-NEXT:    paddb %xmm4, %xmm1565; SSE41-NEXT:    movdqa %xmm1, %xmm0566; SSE41-NEXT:    retq567;568; AVX1-LABEL: testv16i8:569; AVX1:       # %bb.0:570; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]571; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2572; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]573; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2574; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0575; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0576; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0577; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0578; AVX1-NEXT:    retq579;580; AVX2-LABEL: testv16i8:581; AVX2:       # %bb.0:582; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]583; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2584; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]585; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2586; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0587; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0588; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0589; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0590; AVX2-NEXT:    retq591;592; XOP-LABEL: testv16i8:593; XOP:       # %bb.0:594; XOP-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1595; XOP-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]596; XOP-NEXT:    vpshufb %xmm1, %xmm2, %xmm1597; XOP-NEXT:    vpshlb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0598; XOP-NEXT:    vpshufb %xmm0, %xmm2, %xmm0599; XOP-NEXT:    vpaddb %xmm1, %xmm0, %xmm0600; XOP-NEXT:    retq601;602; AVX512-LABEL: testv16i8:603; AVX512:       # %bb.0:604; AVX512-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero605; AVX512-NEXT:    vpopcntd %zmm0, %zmm0606; AVX512-NEXT:    vpmovdb %zmm0, %xmm0607; AVX512-NEXT:    vzeroupper608; AVX512-NEXT:    retq609;610; BITALG_NOVLX-LABEL: testv16i8:611; BITALG_NOVLX:       # %bb.0:612; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0613; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0614; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0615; BITALG_NOVLX-NEXT:    vzeroupper616; BITALG_NOVLX-NEXT:    retq617;618; BITALG-LABEL: testv16i8:619; BITALG:       # %bb.0:620; BITALG-NEXT:    vpopcntb %xmm0, %xmm0621; BITALG-NEXT:    retq622  %out = call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %in)623  ret <16 x i8> %out624}625 626define <2 x i64> @foldv2i64() nounwind {627; SSE-LABEL: foldv2i64:628; SSE:       # %bb.0:629; SSE-NEXT:    movaps {{.*#+}} xmm0 = [1,64]630; SSE-NEXT:    retq631;632; AVX1OR2-LABEL: foldv2i64:633; AVX1OR2:       # %bb.0:634; AVX1OR2-NEXT:    vmovaps {{.*#+}} xmm0 = [1,64]635; AVX1OR2-NEXT:    retq636;637; XOP-LABEL: foldv2i64:638; XOP:       # %bb.0:639; XOP-NEXT:    vmovaps {{.*#+}} xmm0 = [1,64]640; XOP-NEXT:    retq641;642; AVX512-LABEL: foldv2i64:643; AVX512:       # %bb.0:644; AVX512-NEXT:    vpmovsxbq {{.*#+}} xmm0 = [1,64]645; AVX512-NEXT:    retq646;647; BITALG_NOVLX-LABEL: foldv2i64:648; BITALG_NOVLX:       # %bb.0:649; BITALG_NOVLX-NEXT:    vpmovsxbq {{.*#+}} xmm0 = [1,64]650; BITALG_NOVLX-NEXT:    retq651;652; BITALG-LABEL: foldv2i64:653; BITALG:       # %bb.0:654; BITALG-NEXT:    vpmovsxbq {{.*#+}} xmm0 = [1,64]655; BITALG-NEXT:    retq656  %out = call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> <i64 256, i64 -1>)657  ret <2 x i64> %out658}659 660define <4 x i32> @foldv4i32() nounwind {661; SSE-LABEL: foldv4i32:662; SSE:       # %bb.0:663; SSE-NEXT:    movaps {{.*#+}} xmm0 = [1,32,0,8]664; SSE-NEXT:    retq665;666; AVX1OR2-LABEL: foldv4i32:667; AVX1OR2:       # %bb.0:668; AVX1OR2-NEXT:    vmovaps {{.*#+}} xmm0 = [1,32,0,8]669; AVX1OR2-NEXT:    retq670;671; XOP-LABEL: foldv4i32:672; XOP:       # %bb.0:673; XOP-NEXT:    vmovaps {{.*#+}} xmm0 = [1,32,0,8]674; XOP-NEXT:    retq675;676; AVX512-LABEL: foldv4i32:677; AVX512:       # %bb.0:678; AVX512-NEXT:    vpmovsxbd {{.*#+}} xmm0 = [1,32,0,8]679; AVX512-NEXT:    retq680;681; BITALG_NOVLX-LABEL: foldv4i32:682; BITALG_NOVLX:       # %bb.0:683; BITALG_NOVLX-NEXT:    vpmovsxbd {{.*#+}} xmm0 = [1,32,0,8]684; BITALG_NOVLX-NEXT:    retq685;686; BITALG-LABEL: foldv4i32:687; BITALG:       # %bb.0:688; BITALG-NEXT:    vpmovsxbd {{.*#+}} xmm0 = [1,32,0,8]689; BITALG-NEXT:    retq690  %out = call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> <i32 256, i32 -1, i32 0, i32 255>)691  ret <4 x i32> %out692}693 694define <8 x i16> @foldv8i16() nounwind {695; SSE-LABEL: foldv8i16:696; SSE:       # %bb.0:697; SSE-NEXT:    movaps {{.*#+}} xmm0 = [1,16,0,8,0,3,2,3]698; SSE-NEXT:    retq699;700; AVX-LABEL: foldv8i16:701; AVX:       # %bb.0:702; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [1,16,0,8,0,3,2,3]703; AVX-NEXT:    retq704;705; BITALG_NOVLX-LABEL: foldv8i16:706; BITALG_NOVLX:       # %bb.0:707; BITALG_NOVLX-NEXT:    vmovaps {{.*#+}} xmm0 = [1,16,0,8,0,3,2,3]708; BITALG_NOVLX-NEXT:    retq709;710; BITALG-LABEL: foldv8i16:711; BITALG:       # %bb.0:712; BITALG-NEXT:    vmovaps {{.*#+}} xmm0 = [1,16,0,8,0,3,2,3]713; BITALG-NEXT:    retq714  %out = call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> <i16 256, i16 -1, i16 0, i16 255, i16 -65536, i16 7, i16 24, i16 88>)715  ret <8 x i16> %out716}717 718define <16 x i8> @foldv16i8() nounwind {719; SSE-LABEL: foldv16i8:720; SSE:       # %bb.0:721; SSE-NEXT:    movaps {{.*#+}} xmm0 = [0,8,0,8,0,3,2,3,7,7,1,1,1,1,1,1]722; SSE-NEXT:    retq723;724; AVX-LABEL: foldv16i8:725; AVX:       # %bb.0:726; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [0,8,0,8,0,3,2,3,7,7,1,1,1,1,1,1]727; AVX-NEXT:    retq728;729; BITALG_NOVLX-LABEL: foldv16i8:730; BITALG_NOVLX:       # %bb.0:731; BITALG_NOVLX-NEXT:    vmovaps {{.*#+}} xmm0 = [0,8,0,8,0,3,2,3,7,7,1,1,1,1,1,1]732; BITALG_NOVLX-NEXT:    retq733;734; BITALG-LABEL: foldv16i8:735; BITALG:       # %bb.0:736; BITALG-NEXT:    vmovaps {{.*#+}} xmm0 = [0,8,0,8,0,3,2,3,7,7,1,1,1,1,1,1]737; BITALG-NEXT:    retq738  %out = call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> <i8 256, i8 -1, i8 0, i8 255, i8 -65536, i8 7, i8 24, i8 88, i8 -2, i8 254, i8 1, i8 2, i8 4, i8 8, i8 16, i8 32>)739  ret <16 x i8> %out740}741 742define <2 x i64> @eq_1_v2i64(<2 x i64> %0) {743; SSE-LABEL: eq_1_v2i64:744; SSE:       # %bb.0:745; SSE-NEXT:    pcmpeqd %xmm1, %xmm1746; SSE-NEXT:    paddq %xmm0, %xmm1747; SSE-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1748; SSE-NEXT:    pxor %xmm1, %xmm0749; SSE-NEXT:    movdqa %xmm0, %xmm2750; SSE-NEXT:    pcmpgtd %xmm1, %xmm2751; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]752; SSE-NEXT:    pcmpeqd %xmm1, %xmm0753; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]754; SSE-NEXT:    pand %xmm3, %xmm1755; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]756; SSE-NEXT:    por %xmm1, %xmm0757; SSE-NEXT:    retq758;759; AVX1OR2-LABEL: eq_1_v2i64:760; AVX1OR2:       # %bb.0:761; AVX1OR2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1762; AVX1OR2-NEXT:    vpaddq %xmm1, %xmm0, %xmm1763; AVX1OR2-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1764; AVX1OR2-NEXT:    vpxor %xmm0, %xmm1, %xmm0765; AVX1OR2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0766; AVX1OR2-NEXT:    retq767;768; XOP-LABEL: eq_1_v2i64:769; XOP:       # %bb.0:770; XOP-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1771; XOP-NEXT:    vpaddq %xmm1, %xmm0, %xmm1772; XOP-NEXT:    vpxor %xmm1, %xmm0, %xmm0773; XOP-NEXT:    vpcomgtuq %xmm1, %xmm0, %xmm0774; XOP-NEXT:    retq775;776; AVX512VPOPCNTDQ-LABEL: eq_1_v2i64:777; AVX512VPOPCNTDQ:       # %bb.0:778; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0779; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0780; AVX512VPOPCNTDQ-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0781; AVX512VPOPCNTDQ-NEXT:    vzeroupper782; AVX512VPOPCNTDQ-NEXT:    retq783;784; AVX512VPOPCNTDQVL-LABEL: eq_1_v2i64:785; AVX512VPOPCNTDQVL:       # %bb.0:786; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0787; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [1,1]788; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0789; AVX512VPOPCNTDQVL-NEXT:    retq790;791; BITALG_NOVLX-LABEL: eq_1_v2i64:792; BITALG_NOVLX:       # %bb.0:793; BITALG_NOVLX-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1794; BITALG_NOVLX-NEXT:    vpaddq %xmm1, %xmm0, %xmm1795; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm0, %xmm0796; BITALG_NOVLX-NEXT:    vpminuq %zmm1, %zmm0, %zmm1797; BITALG_NOVLX-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0798; BITALG_NOVLX-NEXT:    vpternlogq {{.*#+}} zmm0 = ~zmm0799; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0800; BITALG_NOVLX-NEXT:    vzeroupper801; BITALG_NOVLX-NEXT:    retq802;803; BITALG-LABEL: eq_1_v2i64:804; BITALG:       # %bb.0:805; BITALG-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1806; BITALG-NEXT:    vpaddq %xmm1, %xmm0, %xmm2807; BITALG-NEXT:    vpxor %xmm2, %xmm0, %xmm0808; BITALG-NEXT:    vpcmpnleuq %xmm2, %xmm0, %k1809; BITALG-NEXT:    vmovdqa64 %xmm1, %xmm0 {%k1} {z}810; BITALG-NEXT:    retq811  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)812  %3 = icmp eq <2 x i64> %2, <i64 1, i64 1>813  %4 = sext <2 x i1> %3 to <2 x i64>814  ret <2 x i64> %4815}816 817define <2 x i64> @ne_1_v2i64(<2 x i64> %0) {818; SSE-LABEL: ne_1_v2i64:819; SSE:       # %bb.0:820; SSE-NEXT:    pcmpeqd %xmm1, %xmm1821; SSE-NEXT:    movdqa %xmm0, %xmm2822; SSE-NEXT:    paddq %xmm1, %xmm2823; SSE-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2824; SSE-NEXT:    pxor %xmm2, %xmm0825; SSE-NEXT:    movdqa %xmm0, %xmm3826; SSE-NEXT:    pcmpgtd %xmm2, %xmm3827; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]828; SSE-NEXT:    pcmpeqd %xmm2, %xmm0829; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]830; SSE-NEXT:    pand %xmm4, %xmm2831; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3]832; SSE-NEXT:    por %xmm2, %xmm0833; SSE-NEXT:    pxor %xmm1, %xmm0834; SSE-NEXT:    retq835;836; AVX1OR2-LABEL: ne_1_v2i64:837; AVX1OR2:       # %bb.0:838; AVX1OR2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1839; AVX1OR2-NEXT:    vpaddq %xmm1, %xmm0, %xmm2840; AVX1OR2-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2841; AVX1OR2-NEXT:    vpxor %xmm0, %xmm2, %xmm0842; AVX1OR2-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm0843; AVX1OR2-NEXT:    vpxor %xmm1, %xmm0, %xmm0844; AVX1OR2-NEXT:    retq845;846; XOP-LABEL: ne_1_v2i64:847; XOP:       # %bb.0:848; XOP-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1849; XOP-NEXT:    vpaddq %xmm1, %xmm0, %xmm1850; XOP-NEXT:    vpxor %xmm1, %xmm0, %xmm0851; XOP-NEXT:    vpcomleuq %xmm1, %xmm0, %xmm0852; XOP-NEXT:    retq853;854; AVX512VPOPCNTDQ-LABEL: ne_1_v2i64:855; AVX512VPOPCNTDQ:       # %bb.0:856; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0857; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0858; AVX512VPOPCNTDQ-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0859; AVX512VPOPCNTDQ-NEXT:    vpternlogq {{.*#+}} zmm0 = ~zmm0860; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0861; AVX512VPOPCNTDQ-NEXT:    vzeroupper862; AVX512VPOPCNTDQ-NEXT:    retq863;864; AVX512VPOPCNTDQVL-LABEL: ne_1_v2i64:865; AVX512VPOPCNTDQVL:       # %bb.0:866; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0867; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [1,1]868; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0869; AVX512VPOPCNTDQVL-NEXT:    vpternlogq {{.*#+}} xmm0 = ~xmm0870; AVX512VPOPCNTDQVL-NEXT:    retq871;872; BITALG_NOVLX-LABEL: ne_1_v2i64:873; BITALG_NOVLX:       # %bb.0:874; BITALG_NOVLX-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1875; BITALG_NOVLX-NEXT:    vpaddq %xmm1, %xmm0, %xmm1876; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm0, %xmm0877; BITALG_NOVLX-NEXT:    vpminuq %zmm1, %zmm0, %zmm1878; BITALG_NOVLX-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0879; BITALG_NOVLX-NEXT:    vzeroupper880; BITALG_NOVLX-NEXT:    retq881;882; BITALG-LABEL: ne_1_v2i64:883; BITALG:       # %bb.0:884; BITALG-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1885; BITALG-NEXT:    vpaddq %xmm1, %xmm0, %xmm2886; BITALG-NEXT:    vpxor %xmm2, %xmm0, %xmm0887; BITALG-NEXT:    vpcmpleuq %xmm2, %xmm0, %k1888; BITALG-NEXT:    vmovdqa64 %xmm1, %xmm0 {%k1} {z}889; BITALG-NEXT:    retq890  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)891  %3 = icmp ne <2 x i64> %2, <i64 1, i64 1>892  %4 = sext <2 x i1> %3 to <2 x i64>893  ret <2 x i64> %4894}895 896define <4 x i32> @eq_1_v4i32(<4 x i32> %0) {897; SSE2-LABEL: eq_1_v4i32:898; SSE2:       # %bb.0:899; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1900; SSE2-NEXT:    paddd %xmm0, %xmm1901; SSE2-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1902; SSE2-NEXT:    pxor %xmm1, %xmm0903; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0904; SSE2-NEXT:    retq905;906; SSE3-LABEL: eq_1_v4i32:907; SSE3:       # %bb.0:908; SSE3-NEXT:    pcmpeqd %xmm1, %xmm1909; SSE3-NEXT:    paddd %xmm0, %xmm1910; SSE3-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1911; SSE3-NEXT:    pxor %xmm1, %xmm0912; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0913; SSE3-NEXT:    retq914;915; SSSE3-LABEL: eq_1_v4i32:916; SSSE3:       # %bb.0:917; SSSE3-NEXT:    pcmpeqd %xmm1, %xmm1918; SSSE3-NEXT:    paddd %xmm0, %xmm1919; SSSE3-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1920; SSSE3-NEXT:    pxor %xmm1, %xmm0921; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0922; SSSE3-NEXT:    retq923;924; SSE41-LABEL: eq_1_v4i32:925; SSE41:       # %bb.0:926; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1927; SSE41-NEXT:    movdqa %xmm0, %xmm2928; SSE41-NEXT:    paddd %xmm1, %xmm2929; SSE41-NEXT:    pxor %xmm2, %xmm0930; SSE41-NEXT:    pminud %xmm0, %xmm2931; SSE41-NEXT:    pcmpeqd %xmm2, %xmm0932; SSE41-NEXT:    pxor %xmm1, %xmm0933; SSE41-NEXT:    retq934;935; AVX1OR2-LABEL: eq_1_v4i32:936; AVX1OR2:       # %bb.0:937; AVX1OR2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1938; AVX1OR2-NEXT:    vpaddd %xmm1, %xmm0, %xmm2939; AVX1OR2-NEXT:    vpxor %xmm2, %xmm0, %xmm0940; AVX1OR2-NEXT:    vpminud %xmm2, %xmm0, %xmm2941; AVX1OR2-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm0942; AVX1OR2-NEXT:    vpxor %xmm1, %xmm0, %xmm0943; AVX1OR2-NEXT:    retq944;945; XOP-LABEL: eq_1_v4i32:946; XOP:       # %bb.0:947; XOP-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1948; XOP-NEXT:    vpaddd %xmm1, %xmm0, %xmm1949; XOP-NEXT:    vpxor %xmm1, %xmm0, %xmm0950; XOP-NEXT:    vpcomgtud %xmm1, %xmm0, %xmm0951; XOP-NEXT:    retq952;953; AVX512VPOPCNTDQ-LABEL: eq_1_v4i32:954; AVX512VPOPCNTDQ:       # %bb.0:955; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0956; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0957; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [1,1,1,1]958; AVX512VPOPCNTDQ-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0959; AVX512VPOPCNTDQ-NEXT:    vzeroupper960; AVX512VPOPCNTDQ-NEXT:    retq961;962; AVX512VPOPCNTDQVL-LABEL: eq_1_v4i32:963; AVX512VPOPCNTDQVL:       # %bb.0:964; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0965; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [1,1,1,1]966; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0967; AVX512VPOPCNTDQVL-NEXT:    retq968;969; BITALG_NOVLX-LABEL: eq_1_v4i32:970; BITALG_NOVLX:       # %bb.0:971; BITALG_NOVLX-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1972; BITALG_NOVLX-NEXT:    vpaddd %xmm1, %xmm0, %xmm1973; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm0, %xmm0974; BITALG_NOVLX-NEXT:    vpminud %xmm1, %xmm0, %xmm1975; BITALG_NOVLX-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0976; BITALG_NOVLX-NEXT:    vpternlogq {{.*#+}} zmm0 = ~zmm0977; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0978; BITALG_NOVLX-NEXT:    vzeroupper979; BITALG_NOVLX-NEXT:    retq980;981; BITALG-LABEL: eq_1_v4i32:982; BITALG:       # %bb.0:983; BITALG-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1984; BITALG-NEXT:    vpaddd %xmm1, %xmm0, %xmm2985; BITALG-NEXT:    vpxor %xmm2, %xmm0, %xmm0986; BITALG-NEXT:    vpcmpnleud %xmm2, %xmm0, %k1987; BITALG-NEXT:    vmovdqa32 %xmm1, %xmm0 {%k1} {z}988; BITALG-NEXT:    retq989  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)990  %3 = icmp eq <4 x i32> %2, <i32 1, i32 1, i32 1, i32 1>991  %4 = sext <4 x i1> %3 to <4 x i32>992  ret <4 x i32> %4993}994 995define <4 x i32> @ne_1_v4i32(<4 x i32> %0) {996; SSE2-LABEL: ne_1_v4i32:997; SSE2:       # %bb.0:998; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1999; SSE2-NEXT:    movdqa %xmm0, %xmm21000; SSE2-NEXT:    paddd %xmm1, %xmm21001; SSE2-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm21002; SSE2-NEXT:    pxor %xmm2, %xmm01003; SSE2-NEXT:    pcmpgtd %xmm2, %xmm01004; SSE2-NEXT:    pxor %xmm1, %xmm01005; SSE2-NEXT:    retq1006;1007; SSE3-LABEL: ne_1_v4i32:1008; SSE3:       # %bb.0:1009; SSE3-NEXT:    pcmpeqd %xmm1, %xmm11010; SSE3-NEXT:    movdqa %xmm0, %xmm21011; SSE3-NEXT:    paddd %xmm1, %xmm21012; SSE3-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm21013; SSE3-NEXT:    pxor %xmm2, %xmm01014; SSE3-NEXT:    pcmpgtd %xmm2, %xmm01015; SSE3-NEXT:    pxor %xmm1, %xmm01016; SSE3-NEXT:    retq1017;1018; SSSE3-LABEL: ne_1_v4i32:1019; SSSE3:       # %bb.0:1020; SSSE3-NEXT:    pcmpeqd %xmm1, %xmm11021; SSSE3-NEXT:    movdqa %xmm0, %xmm21022; SSSE3-NEXT:    paddd %xmm1, %xmm21023; SSSE3-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm21024; SSSE3-NEXT:    pxor %xmm2, %xmm01025; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm01026; SSSE3-NEXT:    pxor %xmm1, %xmm01027; SSSE3-NEXT:    retq1028;1029; SSE41-LABEL: ne_1_v4i32:1030; SSE41:       # %bb.0:1031; SSE41-NEXT:    pcmpeqd %xmm1, %xmm11032; SSE41-NEXT:    paddd %xmm0, %xmm11033; SSE41-NEXT:    pxor %xmm1, %xmm01034; SSE41-NEXT:    pminud %xmm0, %xmm11035; SSE41-NEXT:    pcmpeqd %xmm1, %xmm01036; SSE41-NEXT:    retq1037;1038; AVX1OR2-LABEL: ne_1_v4i32:1039; AVX1OR2:       # %bb.0:1040; AVX1OR2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11041; AVX1OR2-NEXT:    vpaddd %xmm1, %xmm0, %xmm11042; AVX1OR2-NEXT:    vpxor %xmm1, %xmm0, %xmm01043; AVX1OR2-NEXT:    vpminud %xmm1, %xmm0, %xmm11044; AVX1OR2-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm01045; AVX1OR2-NEXT:    retq1046;1047; XOP-LABEL: ne_1_v4i32:1048; XOP:       # %bb.0:1049; XOP-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11050; XOP-NEXT:    vpaddd %xmm1, %xmm0, %xmm11051; XOP-NEXT:    vpxor %xmm1, %xmm0, %xmm01052; XOP-NEXT:    vpcomleud %xmm1, %xmm0, %xmm01053; XOP-NEXT:    retq1054;1055; AVX512VPOPCNTDQ-LABEL: ne_1_v4i32:1056; AVX512VPOPCNTDQ:       # %bb.0:1057; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01058; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm01059; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [1,1,1,1]1060; AVX512VPOPCNTDQ-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm01061; AVX512VPOPCNTDQ-NEXT:    vpternlogq {{.*#+}} zmm0 = ~zmm01062; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm01063; AVX512VPOPCNTDQ-NEXT:    vzeroupper1064; AVX512VPOPCNTDQ-NEXT:    retq1065;1066; AVX512VPOPCNTDQVL-LABEL: ne_1_v4i32:1067; AVX512VPOPCNTDQVL:       # %bb.0:1068; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm01069; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [1,1,1,1]1070; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm01071; AVX512VPOPCNTDQVL-NEXT:    vpternlogq {{.*#+}} xmm0 = ~xmm01072; AVX512VPOPCNTDQVL-NEXT:    retq1073;1074; BITALG_NOVLX-LABEL: ne_1_v4i32:1075; BITALG_NOVLX:       # %bb.0:1076; BITALG_NOVLX-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11077; BITALG_NOVLX-NEXT:    vpaddd %xmm1, %xmm0, %xmm11078; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm0, %xmm01079; BITALG_NOVLX-NEXT:    vpminud %xmm1, %xmm0, %xmm11080; BITALG_NOVLX-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm01081; BITALG_NOVLX-NEXT:    retq1082;1083; BITALG-LABEL: ne_1_v4i32:1084; BITALG:       # %bb.0:1085; BITALG-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11086; BITALG-NEXT:    vpaddd %xmm1, %xmm0, %xmm21087; BITALG-NEXT:    vpxor %xmm2, %xmm0, %xmm01088; BITALG-NEXT:    vpcmpleud %xmm2, %xmm0, %k11089; BITALG-NEXT:    vmovdqa32 %xmm1, %xmm0 {%k1} {z}1090; BITALG-NEXT:    retq1091  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)1092  %3 = icmp ne <4 x i32> %2, <i32 1, i32 1, i32 1, i32 1>1093  %4 = sext <4 x i1> %3 to <4 x i32>1094  ret <4 x i32> %41095}1096 1097define <8 x i16> @eq_1_v8i16(<8 x i16> %0) {1098; SSE2-LABEL: eq_1_v8i16:1099; SSE2:       # %bb.0:1100; SSE2-NEXT:    pcmpeqd %xmm1, %xmm11101; SSE2-NEXT:    paddw %xmm0, %xmm11102; SSE2-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11103; SSE2-NEXT:    pxor %xmm1, %xmm01104; SSE2-NEXT:    pcmpgtw %xmm1, %xmm01105; SSE2-NEXT:    retq1106;1107; SSE3-LABEL: eq_1_v8i16:1108; SSE3:       # %bb.0:1109; SSE3-NEXT:    pcmpeqd %xmm1, %xmm11110; SSE3-NEXT:    paddw %xmm0, %xmm11111; SSE3-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11112; SSE3-NEXT:    pxor %xmm1, %xmm01113; SSE3-NEXT:    pcmpgtw %xmm1, %xmm01114; SSE3-NEXT:    retq1115;1116; SSSE3-LABEL: eq_1_v8i16:1117; SSSE3:       # %bb.0:1118; SSSE3-NEXT:    pcmpeqd %xmm1, %xmm11119; SSSE3-NEXT:    paddw %xmm0, %xmm11120; SSSE3-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11121; SSSE3-NEXT:    pxor %xmm1, %xmm01122; SSSE3-NEXT:    pcmpgtw %xmm1, %xmm01123; SSSE3-NEXT:    retq1124;1125; SSE41-LABEL: eq_1_v8i16:1126; SSE41:       # %bb.0:1127; SSE41-NEXT:    pcmpeqd %xmm1, %xmm11128; SSE41-NEXT:    movdqa %xmm0, %xmm21129; SSE41-NEXT:    paddw %xmm1, %xmm21130; SSE41-NEXT:    pxor %xmm2, %xmm01131; SSE41-NEXT:    pminuw %xmm0, %xmm21132; SSE41-NEXT:    pcmpeqw %xmm2, %xmm01133; SSE41-NEXT:    pxor %xmm1, %xmm01134; SSE41-NEXT:    retq1135;1136; AVX1OR2-LABEL: eq_1_v8i16:1137; AVX1OR2:       # %bb.0:1138; AVX1OR2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11139; AVX1OR2-NEXT:    vpaddw %xmm1, %xmm0, %xmm21140; AVX1OR2-NEXT:    vpxor %xmm2, %xmm0, %xmm01141; AVX1OR2-NEXT:    vpminuw %xmm2, %xmm0, %xmm21142; AVX1OR2-NEXT:    vpcmpeqw %xmm2, %xmm0, %xmm01143; AVX1OR2-NEXT:    vpxor %xmm1, %xmm0, %xmm01144; AVX1OR2-NEXT:    retq1145;1146; XOP-LABEL: eq_1_v8i16:1147; XOP:       # %bb.0:1148; XOP-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11149; XOP-NEXT:    vpaddw %xmm1, %xmm0, %xmm11150; XOP-NEXT:    vpxor %xmm1, %xmm0, %xmm01151; XOP-NEXT:    vpcomgtuw %xmm1, %xmm0, %xmm01152; XOP-NEXT:    retq1153;1154; AVX512VPOPCNTDQ-LABEL: eq_1_v8i16:1155; AVX512VPOPCNTDQ:       # %bb.0:1156; AVX512VPOPCNTDQ-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11157; AVX512VPOPCNTDQ-NEXT:    vpaddw %xmm1, %xmm0, %xmm11158; AVX512VPOPCNTDQ-NEXT:    vpxor %xmm1, %xmm0, %xmm01159; AVX512VPOPCNTDQ-NEXT:    vpminuw %xmm1, %xmm0, %xmm11160; AVX512VPOPCNTDQ-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm01161; AVX512VPOPCNTDQ-NEXT:    vpternlogq {{.*#+}} zmm0 = ~zmm01162; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm01163; AVX512VPOPCNTDQ-NEXT:    vzeroupper1164; AVX512VPOPCNTDQ-NEXT:    retq1165;1166; AVX512VPOPCNTDQVL-LABEL: eq_1_v8i16:1167; AVX512VPOPCNTDQVL:       # %bb.0:1168; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11169; AVX512VPOPCNTDQVL-NEXT:    vpaddw %xmm1, %xmm0, %xmm11170; AVX512VPOPCNTDQVL-NEXT:    vpxor %xmm1, %xmm0, %xmm01171; AVX512VPOPCNTDQVL-NEXT:    vpminuw %xmm1, %xmm0, %xmm11172; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm01173; AVX512VPOPCNTDQVL-NEXT:    vpternlogq {{.*#+}} xmm0 = ~xmm01174; AVX512VPOPCNTDQVL-NEXT:    retq1175;1176; BITALG_NOVLX-LABEL: eq_1_v8i16:1177; BITALG_NOVLX:       # %bb.0:1178; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01179; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm01180; BITALG_NOVLX-NEXT:    vpcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01181; BITALG_NOVLX-NEXT:    vzeroupper1182; BITALG_NOVLX-NEXT:    retq1183;1184; BITALG-LABEL: eq_1_v8i16:1185; BITALG:       # %bb.0:1186; BITALG-NEXT:    vpopcntw %xmm0, %xmm01187; BITALG-NEXT:    vpcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01188; BITALG-NEXT:    retq1189  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)1190  %3 = icmp eq <8 x i16> %2, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>1191  %4 = sext <8 x i1> %3 to <8 x i16>1192  ret <8 x i16> %41193}1194 1195define <8 x i16> @ne_1_v8i16(<8 x i16> %0) {1196; SSE2-LABEL: ne_1_v8i16:1197; SSE2:       # %bb.0:1198; SSE2-NEXT:    pcmpeqd %xmm1, %xmm11199; SSE2-NEXT:    paddw %xmm0, %xmm11200; SSE2-NEXT:    pxor %xmm1, %xmm01201; SSE2-NEXT:    psubusw %xmm1, %xmm01202; SSE2-NEXT:    pxor %xmm1, %xmm11203; SSE2-NEXT:    pcmpeqw %xmm1, %xmm01204; SSE2-NEXT:    retq1205;1206; SSE3-LABEL: ne_1_v8i16:1207; SSE3:       # %bb.0:1208; SSE3-NEXT:    pcmpeqd %xmm1, %xmm11209; SSE3-NEXT:    paddw %xmm0, %xmm11210; SSE3-NEXT:    pxor %xmm1, %xmm01211; SSE3-NEXT:    psubusw %xmm1, %xmm01212; SSE3-NEXT:    pxor %xmm1, %xmm11213; SSE3-NEXT:    pcmpeqw %xmm1, %xmm01214; SSE3-NEXT:    retq1215;1216; SSSE3-LABEL: ne_1_v8i16:1217; SSSE3:       # %bb.0:1218; SSSE3-NEXT:    pcmpeqd %xmm1, %xmm11219; SSSE3-NEXT:    paddw %xmm0, %xmm11220; SSSE3-NEXT:    pxor %xmm1, %xmm01221; SSSE3-NEXT:    psubusw %xmm1, %xmm01222; SSSE3-NEXT:    pxor %xmm1, %xmm11223; SSSE3-NEXT:    pcmpeqw %xmm1, %xmm01224; SSSE3-NEXT:    retq1225;1226; SSE41-LABEL: ne_1_v8i16:1227; SSE41:       # %bb.0:1228; SSE41-NEXT:    pcmpeqd %xmm1, %xmm11229; SSE41-NEXT:    paddw %xmm0, %xmm11230; SSE41-NEXT:    pxor %xmm1, %xmm01231; SSE41-NEXT:    pminuw %xmm0, %xmm11232; SSE41-NEXT:    pcmpeqw %xmm1, %xmm01233; SSE41-NEXT:    retq1234;1235; AVX1OR2-LABEL: ne_1_v8i16:1236; AVX1OR2:       # %bb.0:1237; AVX1OR2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11238; AVX1OR2-NEXT:    vpaddw %xmm1, %xmm0, %xmm11239; AVX1OR2-NEXT:    vpxor %xmm1, %xmm0, %xmm01240; AVX1OR2-NEXT:    vpminuw %xmm1, %xmm0, %xmm11241; AVX1OR2-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm01242; AVX1OR2-NEXT:    retq1243;1244; XOP-LABEL: ne_1_v8i16:1245; XOP:       # %bb.0:1246; XOP-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11247; XOP-NEXT:    vpaddw %xmm1, %xmm0, %xmm11248; XOP-NEXT:    vpxor %xmm1, %xmm0, %xmm01249; XOP-NEXT:    vpcomleuw %xmm1, %xmm0, %xmm01250; XOP-NEXT:    retq1251;1252; AVX512-LABEL: ne_1_v8i16:1253; AVX512:       # %bb.0:1254; AVX512-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11255; AVX512-NEXT:    vpaddw %xmm1, %xmm0, %xmm11256; AVX512-NEXT:    vpxor %xmm1, %xmm0, %xmm01257; AVX512-NEXT:    vpminuw %xmm1, %xmm0, %xmm11258; AVX512-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm01259; AVX512-NEXT:    retq1260;1261; BITALG_NOVLX-LABEL: ne_1_v8i16:1262; BITALG_NOVLX:       # %bb.0:1263; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01264; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm01265; BITALG_NOVLX-NEXT:    vpcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01266; BITALG_NOVLX-NEXT:    vpternlogq {{.*#+}} zmm0 = ~zmm01267; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm01268; BITALG_NOVLX-NEXT:    vzeroupper1269; BITALG_NOVLX-NEXT:    retq1270;1271; BITALG-LABEL: ne_1_v8i16:1272; BITALG:       # %bb.0:1273; BITALG-NEXT:    vpopcntw %xmm0, %xmm01274; BITALG-NEXT:    vpcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01275; BITALG-NEXT:    vpternlogq {{.*#+}} xmm0 = ~xmm01276; BITALG-NEXT:    retq1277  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)1278  %3 = icmp ne <8 x i16> %2, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>1279  %4 = sext <8 x i1> %3 to <8 x i16>1280  ret <8 x i16> %41281}1282 1283define <16 x i8> @eq_1_v16i8(<16 x i8> %0) {1284; SSE-LABEL: eq_1_v16i8:1285; SSE:       # %bb.0:1286; SSE-NEXT:    pcmpeqd %xmm1, %xmm11287; SSE-NEXT:    movdqa %xmm0, %xmm21288; SSE-NEXT:    paddb %xmm1, %xmm21289; SSE-NEXT:    pxor %xmm2, %xmm01290; SSE-NEXT:    pminub %xmm0, %xmm21291; SSE-NEXT:    pcmpeqb %xmm2, %xmm01292; SSE-NEXT:    pxor %xmm1, %xmm01293; SSE-NEXT:    retq1294;1295; AVX1OR2-LABEL: eq_1_v16i8:1296; AVX1OR2:       # %bb.0:1297; AVX1OR2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11298; AVX1OR2-NEXT:    vpaddb %xmm1, %xmm0, %xmm21299; AVX1OR2-NEXT:    vpxor %xmm2, %xmm0, %xmm01300; AVX1OR2-NEXT:    vpminub %xmm2, %xmm0, %xmm21301; AVX1OR2-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm01302; AVX1OR2-NEXT:    vpxor %xmm1, %xmm0, %xmm01303; AVX1OR2-NEXT:    retq1304;1305; XOP-LABEL: eq_1_v16i8:1306; XOP:       # %bb.0:1307; XOP-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11308; XOP-NEXT:    vpaddb %xmm1, %xmm0, %xmm11309; XOP-NEXT:    vpxor %xmm1, %xmm0, %xmm01310; XOP-NEXT:    vpcomgtub %xmm1, %xmm0, %xmm01311; XOP-NEXT:    retq1312;1313; AVX512VPOPCNTDQ-LABEL: eq_1_v16i8:1314; AVX512VPOPCNTDQ:       # %bb.0:1315; AVX512VPOPCNTDQ-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11316; AVX512VPOPCNTDQ-NEXT:    vpaddb %xmm1, %xmm0, %xmm11317; AVX512VPOPCNTDQ-NEXT:    vpxor %xmm1, %xmm0, %xmm01318; AVX512VPOPCNTDQ-NEXT:    vpminub %xmm1, %xmm0, %xmm11319; AVX512VPOPCNTDQ-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm01320; AVX512VPOPCNTDQ-NEXT:    vpternlogq {{.*#+}} zmm0 = ~zmm01321; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm01322; AVX512VPOPCNTDQ-NEXT:    vzeroupper1323; AVX512VPOPCNTDQ-NEXT:    retq1324;1325; AVX512VPOPCNTDQVL-LABEL: eq_1_v16i8:1326; AVX512VPOPCNTDQVL:       # %bb.0:1327; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11328; AVX512VPOPCNTDQVL-NEXT:    vpaddb %xmm1, %xmm0, %xmm11329; AVX512VPOPCNTDQVL-NEXT:    vpxor %xmm1, %xmm0, %xmm01330; AVX512VPOPCNTDQVL-NEXT:    vpminub %xmm1, %xmm0, %xmm11331; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm01332; AVX512VPOPCNTDQVL-NEXT:    vpternlogq {{.*#+}} xmm0 = ~xmm01333; AVX512VPOPCNTDQVL-NEXT:    retq1334;1335; BITALG_NOVLX-LABEL: eq_1_v16i8:1336; BITALG_NOVLX:       # %bb.0:1337; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01338; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm01339; BITALG_NOVLX-NEXT:    vpcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01340; BITALG_NOVLX-NEXT:    vzeroupper1341; BITALG_NOVLX-NEXT:    retq1342;1343; BITALG-LABEL: eq_1_v16i8:1344; BITALG:       # %bb.0:1345; BITALG-NEXT:    vpopcntb %xmm0, %xmm01346; BITALG-NEXT:    vpcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01347; BITALG-NEXT:    retq1348  %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)1349  %3 = icmp eq <16 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>1350  %4 = sext <16 x i1> %3 to <16 x i8>1351  ret <16 x i8> %41352}1353 1354define <16 x i8> @ne_1_v16i8(<16 x i8> %0) {1355; SSE-LABEL: ne_1_v16i8:1356; SSE:       # %bb.0:1357; SSE-NEXT:    pcmpeqd %xmm1, %xmm11358; SSE-NEXT:    paddb %xmm0, %xmm11359; SSE-NEXT:    pxor %xmm1, %xmm01360; SSE-NEXT:    pminub %xmm0, %xmm11361; SSE-NEXT:    pcmpeqb %xmm1, %xmm01362; SSE-NEXT:    retq1363;1364; AVX1OR2-LABEL: ne_1_v16i8:1365; AVX1OR2:       # %bb.0:1366; AVX1OR2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11367; AVX1OR2-NEXT:    vpaddb %xmm1, %xmm0, %xmm11368; AVX1OR2-NEXT:    vpxor %xmm1, %xmm0, %xmm01369; AVX1OR2-NEXT:    vpminub %xmm1, %xmm0, %xmm11370; AVX1OR2-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm01371; AVX1OR2-NEXT:    retq1372;1373; XOP-LABEL: ne_1_v16i8:1374; XOP:       # %bb.0:1375; XOP-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11376; XOP-NEXT:    vpaddb %xmm1, %xmm0, %xmm11377; XOP-NEXT:    vpxor %xmm1, %xmm0, %xmm01378; XOP-NEXT:    vpcomleub %xmm1, %xmm0, %xmm01379; XOP-NEXT:    retq1380;1381; AVX512-LABEL: ne_1_v16i8:1382; AVX512:       # %bb.0:1383; AVX512-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11384; AVX512-NEXT:    vpaddb %xmm1, %xmm0, %xmm11385; AVX512-NEXT:    vpxor %xmm1, %xmm0, %xmm01386; AVX512-NEXT:    vpminub %xmm1, %xmm0, %xmm11387; AVX512-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm01388; AVX512-NEXT:    retq1389;1390; BITALG_NOVLX-LABEL: ne_1_v16i8:1391; BITALG_NOVLX:       # %bb.0:1392; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01393; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm01394; BITALG_NOVLX-NEXT:    vpcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01395; BITALG_NOVLX-NEXT:    vpternlogq {{.*#+}} zmm0 = ~zmm01396; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm01397; BITALG_NOVLX-NEXT:    vzeroupper1398; BITALG_NOVLX-NEXT:    retq1399;1400; BITALG-LABEL: ne_1_v16i8:1401; BITALG:       # %bb.0:1402; BITALG-NEXT:    vpopcntb %xmm0, %xmm01403; BITALG-NEXT:    vpcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01404; BITALG-NEXT:    vpternlogq {{.*#+}} xmm0 = ~xmm01405; BITALG-NEXT:    retq1406  %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)1407  %3 = icmp ne <16 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>1408  %4 = sext <16 x i1> %3 to <16 x i8>1409  ret <16 x i8> %41410}1411 1412declare <2 x i64> @llvm.ctpop.v2i64(<2 x i64>)1413declare <4 x i32> @llvm.ctpop.v4i32(<4 x i32>)1414declare <8 x i16> @llvm.ctpop.v8i16(<8 x i16>)1415declare <16 x i8> @llvm.ctpop.v16i8(<16 x i8>)1416