xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/vector-popcnt-512.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=AVX512 --check-prefix=AVX512F
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl -mattr=+avx512bw | FileCheck %s --check-prefix=ALL --check-prefix=AVX512 --check-prefix=AVX512BW
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @testv8i64(<8 x i64> %in) nounwind {
6*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: testv8i64:
7*9880d681SAndroid Build Coastguard Worker; AVX512F:       ## BB#0:
8*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm1
9*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vmovdqa {{.*#+}} ymm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpand %ymm2, %ymm1, %ymm3
11*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vmovdqa {{.*#+}} ymm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpshufb %ymm3, %ymm4, %ymm3
13*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlw $4, %ymm1, %ymm1
14*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpand %ymm2, %ymm1, %ymm1
15*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpshufb %ymm1, %ymm4, %ymm1
16*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpaddb %ymm3, %ymm1, %ymm1
17*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpxor %ymm3, %ymm3, %ymm3
18*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsadbw %ymm3, %ymm1, %ymm1
19*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpand %ymm2, %ymm0, %ymm5
20*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpshufb %ymm5, %ymm4, %ymm5
21*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlw $4, %ymm0, %ymm0
22*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpand %ymm2, %ymm0, %ymm0
23*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpshufb %ymm0, %ymm4, %ymm0
24*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpaddb %ymm5, %ymm0, %ymm0
25*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsadbw %ymm3, %ymm0, %ymm0
26*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
27*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
28*9880d681SAndroid Build Coastguard Worker;
29*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: testv8i64:
30*9880d681SAndroid Build Coastguard Worker; AVX512BW:       ## BB#0:
31*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vmovdqa64 {{.*#+}} zmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
32*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm2
33*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vmovdqu8 {{.*#+}} zmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
34*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpshufb %zmm2, %zmm3, %zmm2
35*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpsrlw $4, %zmm0, %zmm0
36*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm0
37*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpshufb %zmm0, %zmm3, %zmm0
38*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpaddb %zmm2, %zmm0, %zmm0
39*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpxord %zmm1, %zmm1, %zmm1
40*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpsadbw %zmm1, %zmm0, %zmm0
41*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
42*9880d681SAndroid Build Coastguard Worker  %out = call <8 x i64> @llvm.ctpop.v8i64(<8 x i64> %in)
43*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %out
44*9880d681SAndroid Build Coastguard Worker}
45*9880d681SAndroid Build Coastguard Worker
46*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @testv16i32(<16 x i32> %in) nounwind {
47*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: testv16i32:
48*9880d681SAndroid Build Coastguard Worker; AVX512F:       ## BB#0:
49*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm1
50*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vmovdqa {{.*#+}} ymm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
51*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpand %ymm2, %ymm1, %ymm3
52*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vmovdqa {{.*#+}} ymm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
53*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpshufb %ymm3, %ymm4, %ymm3
54*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlw $4, %ymm1, %ymm1
55*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpand %ymm2, %ymm1, %ymm1
56*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpshufb %ymm1, %ymm4, %ymm1
57*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpaddb %ymm3, %ymm1, %ymm1
58*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpxor %ymm3, %ymm3, %ymm3
59*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpunpckhdq {{.*#+}} ymm5 = ymm1[2],ymm3[2],ymm1[3],ymm3[3],ymm1[6],ymm3[6],ymm1[7],ymm3[7]
60*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsadbw %ymm3, %ymm5, %ymm5
61*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpunpckldq {{.*#+}} ymm1 = ymm1[0],ymm3[0],ymm1[1],ymm3[1],ymm1[4],ymm3[4],ymm1[5],ymm3[5]
62*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsadbw %ymm3, %ymm1, %ymm1
63*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpackuswb %ymm5, %ymm1, %ymm1
64*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpand %ymm2, %ymm0, %ymm5
65*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpshufb %ymm5, %ymm4, %ymm5
66*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlw $4, %ymm0, %ymm0
67*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpand %ymm2, %ymm0, %ymm0
68*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpshufb %ymm0, %ymm4, %ymm0
69*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpaddb %ymm5, %ymm0, %ymm0
70*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm3[2],ymm0[3],ymm3[3],ymm0[6],ymm3[6],ymm0[7],ymm3[7]
71*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsadbw %ymm3, %ymm2, %ymm2
72*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm3[0],ymm0[1],ymm3[1],ymm0[4],ymm3[4],ymm0[5],ymm3[5]
73*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsadbw %ymm3, %ymm0, %ymm0
74*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
75*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
76*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
77*9880d681SAndroid Build Coastguard Worker;
78*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: testv16i32:
79*9880d681SAndroid Build Coastguard Worker; AVX512BW:       ## BB#0:
80*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vmovdqa64 {{.*#+}} zmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
81*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm2
82*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vmovdqu8 {{.*#+}} zmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
83*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpshufb %zmm2, %zmm3, %zmm2
84*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpsrlw $4, %zmm0, %zmm0
85*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm0
86*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpshufb %zmm0, %zmm3, %zmm0
87*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpaddb %zmm2, %zmm0, %zmm0
88*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpxord %zmm1, %zmm1, %zmm1
89*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpunpckhdq {{.*#+}} zmm2 = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]
90*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpsadbw %zmm1, %zmm2, %zmm2
91*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpunpckldq {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]
92*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpsadbw %zmm1, %zmm0, %zmm0
93*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpackuswb %zmm2, %zmm0, %zmm0
94*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
95*9880d681SAndroid Build Coastguard Worker  %out = call <16 x i32> @llvm.ctpop.v16i32(<16 x i32> %in)
96*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %out
97*9880d681SAndroid Build Coastguard Worker}
98*9880d681SAndroid Build Coastguard Worker
99*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @testv32i16(<32 x i16> %in) nounwind {
100*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: testv32i16:
101*9880d681SAndroid Build Coastguard Worker; AVX512F:       ## BB#0:
102*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vmovdqa {{.*#+}} ymm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
103*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpand %ymm2, %ymm0, %ymm3
104*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vmovdqa {{.*#+}} ymm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
105*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpshufb %ymm3, %ymm4, %ymm3
106*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlw $4, %ymm0, %ymm0
107*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpand %ymm2, %ymm0, %ymm0
108*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpshufb %ymm0, %ymm4, %ymm0
109*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpaddb %ymm3, %ymm0, %ymm0
110*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllw $8, %ymm0, %ymm3
111*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpaddb %ymm0, %ymm3, %ymm0
112*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlw $8, %ymm0, %ymm0
113*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpand %ymm2, %ymm1, %ymm3
114*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpshufb %ymm3, %ymm4, %ymm3
115*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlw $4, %ymm1, %ymm1
116*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpand %ymm2, %ymm1, %ymm1
117*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpshufb %ymm1, %ymm4, %ymm1
118*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpaddb %ymm3, %ymm1, %ymm1
119*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllw $8, %ymm1, %ymm2
120*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpaddb %ymm1, %ymm2, %ymm1
121*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlw $8, %ymm1, %ymm1
122*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
123*9880d681SAndroid Build Coastguard Worker;
124*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: testv32i16:
125*9880d681SAndroid Build Coastguard Worker; AVX512BW:       ## BB#0:
126*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vmovdqa64 {{.*#+}} zmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
127*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm2
128*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vmovdqu8 {{.*#+}} zmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
129*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpshufb %zmm2, %zmm3, %zmm2
130*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpsrlw $4, %zmm0, %zmm0
131*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm0
132*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpshufb %zmm0, %zmm3, %zmm0
133*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpaddb %zmm2, %zmm0, %zmm0
134*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpsllw $8, %zmm0, %zmm1
135*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpaddb %zmm0, %zmm1, %zmm0
136*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpsrlw $8, %zmm0, %zmm0
137*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
138*9880d681SAndroid Build Coastguard Worker  %out = call <32 x i16> @llvm.ctpop.v32i16(<32 x i16> %in)
139*9880d681SAndroid Build Coastguard Worker  ret <32 x i16> %out
140*9880d681SAndroid Build Coastguard Worker}
141*9880d681SAndroid Build Coastguard Worker
142*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @testv64i8(<64 x i8> %in) nounwind {
143*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: testv64i8:
144*9880d681SAndroid Build Coastguard Worker; AVX512F:       ## BB#0:
145*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vmovdqa {{.*#+}} ymm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
146*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpand %ymm2, %ymm0, %ymm3
147*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vmovdqa {{.*#+}} ymm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
148*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpshufb %ymm3, %ymm4, %ymm3
149*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlw $4, %ymm0, %ymm0
150*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpand %ymm2, %ymm0, %ymm0
151*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpshufb %ymm0, %ymm4, %ymm0
152*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpaddb %ymm3, %ymm0, %ymm0
153*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpand %ymm2, %ymm1, %ymm3
154*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpshufb %ymm3, %ymm4, %ymm3
155*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlw $4, %ymm1, %ymm1
156*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpand %ymm2, %ymm1, %ymm1
157*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpshufb %ymm1, %ymm4, %ymm1
158*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpaddb %ymm3, %ymm1, %ymm1
159*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
160*9880d681SAndroid Build Coastguard Worker;
161*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: testv64i8:
162*9880d681SAndroid Build Coastguard Worker; AVX512BW:       ## BB#0:
163*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vmovdqa64 {{.*#+}} zmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
164*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm2
165*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vmovdqu8 {{.*#+}} zmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
166*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpshufb %zmm2, %zmm3, %zmm2
167*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpsrlw $4, %zmm0, %zmm0
168*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm0
169*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpshufb %zmm0, %zmm3, %zmm0
170*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpaddb %zmm2, %zmm0, %zmm0
171*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
172*9880d681SAndroid Build Coastguard Worker  %out = call <64 x i8> @llvm.ctpop.v64i8(<64 x i8> %in)
173*9880d681SAndroid Build Coastguard Worker  ret <64 x i8> %out
174*9880d681SAndroid Build Coastguard Worker}
175*9880d681SAndroid Build Coastguard Worker
176*9880d681SAndroid Build Coastguard Workerdeclare <8 x i64> @llvm.ctpop.v8i64(<8 x i64>)
177*9880d681SAndroid Build Coastguard Workerdeclare <16 x i32> @llvm.ctpop.v16i32(<16 x i32>)
178*9880d681SAndroid Build Coastguard Workerdeclare <32 x i16> @llvm.ctpop.v32i16(<32 x i16>)
179*9880d681SAndroid Build Coastguard Workerdeclare <64 x i8> @llvm.ctpop.v64i8(<64 x i8>)
180