1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=aarch64-unknown- | FileCheck %s
4 define <16 x i8> @ugt_1_v16i8(<16 x i8> %0) {
5 ; CHECK-LABEL: ugt_1_v16i8:
7 ; CHECK-NEXT: movi v1.16b, #1
8 ; CHECK-NEXT: cnt v0.16b, v0.16b
9 ; CHECK-NEXT: cmhi v0.16b, v0.16b, v1.16b
11 %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
12 %3 = icmp ugt <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>
13 %4 = sext <16 x i1> %3 to <16 x i8>
17 define <16 x i8> @ult_2_v16i8(<16 x i8> %0) {
18 ; CHECK-LABEL: ult_2_v16i8:
20 ; CHECK-NEXT: movi v1.16b, #2
21 ; CHECK-NEXT: cnt v0.16b, v0.16b
22 ; CHECK-NEXT: cmhi v0.16b, v1.16b, v0.16b
24 %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
25 %3 = icmp ult <16 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>
26 %4 = sext <16 x i1> %3 to <16 x i8>
30 define <16 x i8> @ugt_2_v16i8(<16 x i8> %0) {
31 ; CHECK-LABEL: ugt_2_v16i8:
33 ; CHECK-NEXT: movi v1.16b, #2
34 ; CHECK-NEXT: cnt v0.16b, v0.16b
35 ; CHECK-NEXT: cmhi v0.16b, v0.16b, v1.16b
37 %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
38 %3 = icmp ugt <16 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>
39 %4 = sext <16 x i1> %3 to <16 x i8>
43 define <16 x i8> @ult_3_v16i8(<16 x i8> %0) {
44 ; CHECK-LABEL: ult_3_v16i8:
46 ; CHECK-NEXT: movi v1.16b, #3
47 ; CHECK-NEXT: cnt v0.16b, v0.16b
48 ; CHECK-NEXT: cmhi v0.16b, v1.16b, v0.16b
50 %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
51 %3 = icmp ult <16 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>
52 %4 = sext <16 x i1> %3 to <16 x i8>
56 define <16 x i8> @ugt_3_v16i8(<16 x i8> %0) {
57 ; CHECK-LABEL: ugt_3_v16i8:
59 ; CHECK-NEXT: movi v1.16b, #3
60 ; CHECK-NEXT: cnt v0.16b, v0.16b
61 ; CHECK-NEXT: cmhi v0.16b, v0.16b, v1.16b
63 %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
64 %3 = icmp ugt <16 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>
65 %4 = sext <16 x i1> %3 to <16 x i8>
69 define <16 x i8> @ult_4_v16i8(<16 x i8> %0) {
70 ; CHECK-LABEL: ult_4_v16i8:
72 ; CHECK-NEXT: movi v1.16b, #4
73 ; CHECK-NEXT: cnt v0.16b, v0.16b
74 ; CHECK-NEXT: cmhi v0.16b, v1.16b, v0.16b
76 %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
77 %3 = icmp ult <16 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>
78 %4 = sext <16 x i1> %3 to <16 x i8>
82 define <16 x i8> @ugt_4_v16i8(<16 x i8> %0) {
83 ; CHECK-LABEL: ugt_4_v16i8:
85 ; CHECK-NEXT: movi v1.16b, #4
86 ; CHECK-NEXT: cnt v0.16b, v0.16b
87 ; CHECK-NEXT: cmhi v0.16b, v0.16b, v1.16b
89 %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
90 %3 = icmp ugt <16 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>
91 %4 = sext <16 x i1> %3 to <16 x i8>
95 define <16 x i8> @ult_5_v16i8(<16 x i8> %0) {
96 ; CHECK-LABEL: ult_5_v16i8:
98 ; CHECK-NEXT: movi v1.16b, #5
99 ; CHECK-NEXT: cnt v0.16b, v0.16b
100 ; CHECK-NEXT: cmhi v0.16b, v1.16b, v0.16b
102 %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
103 %3 = icmp ult <16 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>
104 %4 = sext <16 x i1> %3 to <16 x i8>
108 define <16 x i8> @ugt_5_v16i8(<16 x i8> %0) {
109 ; CHECK-LABEL: ugt_5_v16i8:
111 ; CHECK-NEXT: movi v1.16b, #5
112 ; CHECK-NEXT: cnt v0.16b, v0.16b
113 ; CHECK-NEXT: cmhi v0.16b, v0.16b, v1.16b
115 %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
116 %3 = icmp ugt <16 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>
117 %4 = sext <16 x i1> %3 to <16 x i8>
121 define <16 x i8> @ult_6_v16i8(<16 x i8> %0) {
122 ; CHECK-LABEL: ult_6_v16i8:
124 ; CHECK-NEXT: movi v1.16b, #6
125 ; CHECK-NEXT: cnt v0.16b, v0.16b
126 ; CHECK-NEXT: cmhi v0.16b, v1.16b, v0.16b
128 %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
129 %3 = icmp ult <16 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>
130 %4 = sext <16 x i1> %3 to <16 x i8>
134 define <16 x i8> @ugt_6_v16i8(<16 x i8> %0) {
135 ; CHECK-LABEL: ugt_6_v16i8:
137 ; CHECK-NEXT: movi v1.16b, #6
138 ; CHECK-NEXT: cnt v0.16b, v0.16b
139 ; CHECK-NEXT: cmhi v0.16b, v0.16b, v1.16b
141 %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
142 %3 = icmp ugt <16 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>
143 %4 = sext <16 x i1> %3 to <16 x i8>
147 define <16 x i8> @ult_7_v16i8(<16 x i8> %0) {
148 ; CHECK-LABEL: ult_7_v16i8:
150 ; CHECK-NEXT: movi v1.16b, #7
151 ; CHECK-NEXT: cnt v0.16b, v0.16b
152 ; CHECK-NEXT: cmhi v0.16b, v1.16b, v0.16b
154 %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
155 %3 = icmp ult <16 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>
156 %4 = sext <16 x i1> %3 to <16 x i8>
160 define <8 x i16> @ugt_1_v8i16(<8 x i16> %0) {
161 ; CHECK-LABEL: ugt_1_v8i16:
163 ; CHECK-NEXT: movi v1.2d, #0xffffffffffffffff
164 ; CHECK-NEXT: add v1.8h, v0.8h, v1.8h
165 ; CHECK-NEXT: cmtst v0.8h, v0.8h, v1.8h
167 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
168 %3 = icmp ugt <8 x i16> %2, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
169 %4 = sext <8 x i1> %3 to <8 x i16>
173 define <8 x i16> @ult_2_v8i16(<8 x i16> %0) {
174 ; CHECK-LABEL: ult_2_v8i16:
176 ; CHECK-NEXT: movi v1.2d, #0xffffffffffffffff
177 ; CHECK-NEXT: add v1.8h, v0.8h, v1.8h
178 ; CHECK-NEXT: and v0.16b, v0.16b, v1.16b
179 ; CHECK-NEXT: cmeq v0.8h, v0.8h, #0
181 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
182 %3 = icmp ult <8 x i16> %2, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
183 %4 = sext <8 x i1> %3 to <8 x i16>
187 define <8 x i16> @ugt_2_v8i16(<8 x i16> %0) {
188 ; CHECK-LABEL: ugt_2_v8i16:
190 ; CHECK-NEXT: cnt v0.16b, v0.16b
191 ; CHECK-NEXT: movi v1.8h, #2
192 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
193 ; CHECK-NEXT: cmhi v0.8h, v0.8h, v1.8h
195 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
196 %3 = icmp ugt <8 x i16> %2, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
197 %4 = sext <8 x i1> %3 to <8 x i16>
201 define <8 x i16> @ult_3_v8i16(<8 x i16> %0) {
202 ; CHECK-LABEL: ult_3_v8i16:
204 ; CHECK-NEXT: cnt v0.16b, v0.16b
205 ; CHECK-NEXT: movi v1.8h, #3
206 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
207 ; CHECK-NEXT: cmhi v0.8h, v1.8h, v0.8h
209 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
210 %3 = icmp ult <8 x i16> %2, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
211 %4 = sext <8 x i1> %3 to <8 x i16>
215 define <8 x i16> @ugt_3_v8i16(<8 x i16> %0) {
216 ; CHECK-LABEL: ugt_3_v8i16:
218 ; CHECK-NEXT: cnt v0.16b, v0.16b
219 ; CHECK-NEXT: movi v1.8h, #3
220 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
221 ; CHECK-NEXT: cmhi v0.8h, v0.8h, v1.8h
223 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
224 %3 = icmp ugt <8 x i16> %2, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
225 %4 = sext <8 x i1> %3 to <8 x i16>
229 define <8 x i16> @ult_4_v8i16(<8 x i16> %0) {
230 ; CHECK-LABEL: ult_4_v8i16:
232 ; CHECK-NEXT: cnt v0.16b, v0.16b
233 ; CHECK-NEXT: movi v1.8h, #4
234 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
235 ; CHECK-NEXT: cmhi v0.8h, v1.8h, v0.8h
237 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
238 %3 = icmp ult <8 x i16> %2, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>
239 %4 = sext <8 x i1> %3 to <8 x i16>
243 define <8 x i16> @ugt_4_v8i16(<8 x i16> %0) {
244 ; CHECK-LABEL: ugt_4_v8i16:
246 ; CHECK-NEXT: cnt v0.16b, v0.16b
247 ; CHECK-NEXT: movi v1.8h, #4
248 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
249 ; CHECK-NEXT: cmhi v0.8h, v0.8h, v1.8h
251 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
252 %3 = icmp ugt <8 x i16> %2, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>
253 %4 = sext <8 x i1> %3 to <8 x i16>
257 define <8 x i16> @ult_5_v8i16(<8 x i16> %0) {
258 ; CHECK-LABEL: ult_5_v8i16:
260 ; CHECK-NEXT: cnt v0.16b, v0.16b
261 ; CHECK-NEXT: movi v1.8h, #5
262 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
263 ; CHECK-NEXT: cmhi v0.8h, v1.8h, v0.8h
265 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
266 %3 = icmp ult <8 x i16> %2, <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>
267 %4 = sext <8 x i1> %3 to <8 x i16>
271 define <8 x i16> @ugt_5_v8i16(<8 x i16> %0) {
272 ; CHECK-LABEL: ugt_5_v8i16:
274 ; CHECK-NEXT: cnt v0.16b, v0.16b
275 ; CHECK-NEXT: movi v1.8h, #5
276 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
277 ; CHECK-NEXT: cmhi v0.8h, v0.8h, v1.8h
279 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
280 %3 = icmp ugt <8 x i16> %2, <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>
281 %4 = sext <8 x i1> %3 to <8 x i16>
285 define <8 x i16> @ult_6_v8i16(<8 x i16> %0) {
286 ; CHECK-LABEL: ult_6_v8i16:
288 ; CHECK-NEXT: cnt v0.16b, v0.16b
289 ; CHECK-NEXT: movi v1.8h, #6
290 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
291 ; CHECK-NEXT: cmhi v0.8h, v1.8h, v0.8h
293 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
294 %3 = icmp ult <8 x i16> %2, <i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6>
295 %4 = sext <8 x i1> %3 to <8 x i16>
299 define <8 x i16> @ugt_6_v8i16(<8 x i16> %0) {
300 ; CHECK-LABEL: ugt_6_v8i16:
302 ; CHECK-NEXT: cnt v0.16b, v0.16b
303 ; CHECK-NEXT: movi v1.8h, #6
304 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
305 ; CHECK-NEXT: cmhi v0.8h, v0.8h, v1.8h
307 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
308 %3 = icmp ugt <8 x i16> %2, <i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6>
309 %4 = sext <8 x i1> %3 to <8 x i16>
313 define <8 x i16> @ult_7_v8i16(<8 x i16> %0) {
314 ; CHECK-LABEL: ult_7_v8i16:
316 ; CHECK-NEXT: cnt v0.16b, v0.16b
317 ; CHECK-NEXT: movi v1.8h, #7
318 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
319 ; CHECK-NEXT: cmhi v0.8h, v1.8h, v0.8h
321 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
322 %3 = icmp ult <8 x i16> %2, <i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7>
323 %4 = sext <8 x i1> %3 to <8 x i16>
327 define <8 x i16> @ugt_7_v8i16(<8 x i16> %0) {
328 ; CHECK-LABEL: ugt_7_v8i16:
330 ; CHECK-NEXT: cnt v0.16b, v0.16b
331 ; CHECK-NEXT: movi v1.8h, #7
332 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
333 ; CHECK-NEXT: cmhi v0.8h, v0.8h, v1.8h
335 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
336 %3 = icmp ugt <8 x i16> %2, <i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7>
337 %4 = sext <8 x i1> %3 to <8 x i16>
341 define <8 x i16> @ult_8_v8i16(<8 x i16> %0) {
342 ; CHECK-LABEL: ult_8_v8i16:
344 ; CHECK-NEXT: cnt v0.16b, v0.16b
345 ; CHECK-NEXT: movi v1.8h, #8
346 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
347 ; CHECK-NEXT: cmhi v0.8h, v1.8h, v0.8h
349 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
350 %3 = icmp ult <8 x i16> %2, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
351 %4 = sext <8 x i1> %3 to <8 x i16>
355 define <8 x i16> @ugt_8_v8i16(<8 x i16> %0) {
356 ; CHECK-LABEL: ugt_8_v8i16:
358 ; CHECK-NEXT: cnt v0.16b, v0.16b
359 ; CHECK-NEXT: movi v1.8h, #8
360 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
361 ; CHECK-NEXT: cmhi v0.8h, v0.8h, v1.8h
363 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
364 %3 = icmp ugt <8 x i16> %2, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
365 %4 = sext <8 x i1> %3 to <8 x i16>
369 define <8 x i16> @ult_9_v8i16(<8 x i16> %0) {
370 ; CHECK-LABEL: ult_9_v8i16:
372 ; CHECK-NEXT: cnt v0.16b, v0.16b
373 ; CHECK-NEXT: movi v1.8h, #9
374 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
375 ; CHECK-NEXT: cmhi v0.8h, v1.8h, v0.8h
377 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
378 %3 = icmp ult <8 x i16> %2, <i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9>
379 %4 = sext <8 x i1> %3 to <8 x i16>
383 define <8 x i16> @ugt_9_v8i16(<8 x i16> %0) {
384 ; CHECK-LABEL: ugt_9_v8i16:
386 ; CHECK-NEXT: cnt v0.16b, v0.16b
387 ; CHECK-NEXT: movi v1.8h, #9
388 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
389 ; CHECK-NEXT: cmhi v0.8h, v0.8h, v1.8h
391 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
392 %3 = icmp ugt <8 x i16> %2, <i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9>
393 %4 = sext <8 x i1> %3 to <8 x i16>
397 define <8 x i16> @ult_10_v8i16(<8 x i16> %0) {
398 ; CHECK-LABEL: ult_10_v8i16:
400 ; CHECK-NEXT: cnt v0.16b, v0.16b
401 ; CHECK-NEXT: movi v1.8h, #10
402 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
403 ; CHECK-NEXT: cmhi v0.8h, v1.8h, v0.8h
405 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
406 %3 = icmp ult <8 x i16> %2, <i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10>
407 %4 = sext <8 x i1> %3 to <8 x i16>
411 define <8 x i16> @ugt_10_v8i16(<8 x i16> %0) {
412 ; CHECK-LABEL: ugt_10_v8i16:
414 ; CHECK-NEXT: cnt v0.16b, v0.16b
415 ; CHECK-NEXT: movi v1.8h, #10
416 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
417 ; CHECK-NEXT: cmhi v0.8h, v0.8h, v1.8h
419 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
420 %3 = icmp ugt <8 x i16> %2, <i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10>
421 %4 = sext <8 x i1> %3 to <8 x i16>
425 define <8 x i16> @ult_11_v8i16(<8 x i16> %0) {
426 ; CHECK-LABEL: ult_11_v8i16:
428 ; CHECK-NEXT: cnt v0.16b, v0.16b
429 ; CHECK-NEXT: movi v1.8h, #11
430 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
431 ; CHECK-NEXT: cmhi v0.8h, v1.8h, v0.8h
433 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
434 %3 = icmp ult <8 x i16> %2, <i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11>
435 %4 = sext <8 x i1> %3 to <8 x i16>
439 define <8 x i16> @ugt_11_v8i16(<8 x i16> %0) {
440 ; CHECK-LABEL: ugt_11_v8i16:
442 ; CHECK-NEXT: cnt v0.16b, v0.16b
443 ; CHECK-NEXT: movi v1.8h, #11
444 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
445 ; CHECK-NEXT: cmhi v0.8h, v0.8h, v1.8h
447 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
448 %3 = icmp ugt <8 x i16> %2, <i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11>
449 %4 = sext <8 x i1> %3 to <8 x i16>
453 define <8 x i16> @ult_12_v8i16(<8 x i16> %0) {
454 ; CHECK-LABEL: ult_12_v8i16:
456 ; CHECK-NEXT: cnt v0.16b, v0.16b
457 ; CHECK-NEXT: movi v1.8h, #12
458 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
459 ; CHECK-NEXT: cmhi v0.8h, v1.8h, v0.8h
461 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
462 %3 = icmp ult <8 x i16> %2, <i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12>
463 %4 = sext <8 x i1> %3 to <8 x i16>
467 define <8 x i16> @ugt_12_v8i16(<8 x i16> %0) {
468 ; CHECK-LABEL: ugt_12_v8i16:
470 ; CHECK-NEXT: cnt v0.16b, v0.16b
471 ; CHECK-NEXT: movi v1.8h, #12
472 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
473 ; CHECK-NEXT: cmhi v0.8h, v0.8h, v1.8h
475 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
476 %3 = icmp ugt <8 x i16> %2, <i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12>
477 %4 = sext <8 x i1> %3 to <8 x i16>
481 define <8 x i16> @ult_13_v8i16(<8 x i16> %0) {
482 ; CHECK-LABEL: ult_13_v8i16:
484 ; CHECK-NEXT: cnt v0.16b, v0.16b
485 ; CHECK-NEXT: movi v1.8h, #13
486 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
487 ; CHECK-NEXT: cmhi v0.8h, v1.8h, v0.8h
489 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
490 %3 = icmp ult <8 x i16> %2, <i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13>
491 %4 = sext <8 x i1> %3 to <8 x i16>
495 define <8 x i16> @ugt_13_v8i16(<8 x i16> %0) {
496 ; CHECK-LABEL: ugt_13_v8i16:
498 ; CHECK-NEXT: cnt v0.16b, v0.16b
499 ; CHECK-NEXT: movi v1.8h, #13
500 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
501 ; CHECK-NEXT: cmhi v0.8h, v0.8h, v1.8h
503 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
504 %3 = icmp ugt <8 x i16> %2, <i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13>
505 %4 = sext <8 x i1> %3 to <8 x i16>
509 define <8 x i16> @ult_14_v8i16(<8 x i16> %0) {
510 ; CHECK-LABEL: ult_14_v8i16:
512 ; CHECK-NEXT: cnt v0.16b, v0.16b
513 ; CHECK-NEXT: movi v1.8h, #14
514 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
515 ; CHECK-NEXT: cmhi v0.8h, v1.8h, v0.8h
517 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
518 %3 = icmp ult <8 x i16> %2, <i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14>
519 %4 = sext <8 x i1> %3 to <8 x i16>
523 define <8 x i16> @ugt_14_v8i16(<8 x i16> %0) {
524 ; CHECK-LABEL: ugt_14_v8i16:
526 ; CHECK-NEXT: cnt v0.16b, v0.16b
527 ; CHECK-NEXT: movi v1.8h, #14
528 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
529 ; CHECK-NEXT: cmhi v0.8h, v0.8h, v1.8h
531 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
532 %3 = icmp ugt <8 x i16> %2, <i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14>
533 %4 = sext <8 x i1> %3 to <8 x i16>
537 define <8 x i16> @ult_15_v8i16(<8 x i16> %0) {
538 ; CHECK-LABEL: ult_15_v8i16:
540 ; CHECK-NEXT: cnt v0.16b, v0.16b
541 ; CHECK-NEXT: movi v1.8h, #15
542 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
543 ; CHECK-NEXT: cmhi v0.8h, v1.8h, v0.8h
545 %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
546 %3 = icmp ult <8 x i16> %2, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15>
547 %4 = sext <8 x i1> %3 to <8 x i16>
551 define <4 x i32> @ugt_1_v4i32(<4 x i32> %0) {
552 ; CHECK-LABEL: ugt_1_v4i32:
554 ; CHECK-NEXT: movi v1.2d, #0xffffffffffffffff
555 ; CHECK-NEXT: add v1.4s, v0.4s, v1.4s
556 ; CHECK-NEXT: cmtst v0.4s, v0.4s, v1.4s
558 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
559 %3 = icmp ugt <4 x i32> %2, <i32 1, i32 1, i32 1, i32 1>
560 %4 = sext <4 x i1> %3 to <4 x i32>
564 define <4 x i32> @ult_2_v4i32(<4 x i32> %0) {
565 ; CHECK-LABEL: ult_2_v4i32:
567 ; CHECK-NEXT: movi v1.2d, #0xffffffffffffffff
568 ; CHECK-NEXT: add v1.4s, v0.4s, v1.4s
569 ; CHECK-NEXT: and v0.16b, v0.16b, v1.16b
570 ; CHECK-NEXT: cmeq v0.4s, v0.4s, #0
572 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
573 %3 = icmp ult <4 x i32> %2, <i32 2, i32 2, i32 2, i32 2>
574 %4 = sext <4 x i1> %3 to <4 x i32>
578 define <4 x i32> @ugt_2_v4i32(<4 x i32> %0) {
579 ; CHECK-LABEL: ugt_2_v4i32:
581 ; CHECK-NEXT: cnt v0.16b, v0.16b
582 ; CHECK-NEXT: movi v1.4s, #2
583 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
584 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
585 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
587 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
588 %3 = icmp ugt <4 x i32> %2, <i32 2, i32 2, i32 2, i32 2>
589 %4 = sext <4 x i1> %3 to <4 x i32>
593 define <4 x i32> @ult_3_v4i32(<4 x i32> %0) {
594 ; CHECK-LABEL: ult_3_v4i32:
596 ; CHECK-NEXT: cnt v0.16b, v0.16b
597 ; CHECK-NEXT: movi v1.4s, #3
598 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
599 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
600 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
602 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
603 %3 = icmp ult <4 x i32> %2, <i32 3, i32 3, i32 3, i32 3>
604 %4 = sext <4 x i1> %3 to <4 x i32>
608 define <4 x i32> @ugt_3_v4i32(<4 x i32> %0) {
609 ; CHECK-LABEL: ugt_3_v4i32:
611 ; CHECK-NEXT: cnt v0.16b, v0.16b
612 ; CHECK-NEXT: movi v1.4s, #3
613 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
614 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
615 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
617 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
618 %3 = icmp ugt <4 x i32> %2, <i32 3, i32 3, i32 3, i32 3>
619 %4 = sext <4 x i1> %3 to <4 x i32>
623 define <4 x i32> @ult_4_v4i32(<4 x i32> %0) {
624 ; CHECK-LABEL: ult_4_v4i32:
626 ; CHECK-NEXT: cnt v0.16b, v0.16b
627 ; CHECK-NEXT: movi v1.4s, #4
628 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
629 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
630 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
632 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
633 %3 = icmp ult <4 x i32> %2, <i32 4, i32 4, i32 4, i32 4>
634 %4 = sext <4 x i1> %3 to <4 x i32>
638 define <4 x i32> @ugt_4_v4i32(<4 x i32> %0) {
639 ; CHECK-LABEL: ugt_4_v4i32:
641 ; CHECK-NEXT: cnt v0.16b, v0.16b
642 ; CHECK-NEXT: movi v1.4s, #4
643 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
644 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
645 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
647 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
648 %3 = icmp ugt <4 x i32> %2, <i32 4, i32 4, i32 4, i32 4>
649 %4 = sext <4 x i1> %3 to <4 x i32>
653 define <4 x i32> @ult_5_v4i32(<4 x i32> %0) {
654 ; CHECK-LABEL: ult_5_v4i32:
656 ; CHECK-NEXT: cnt v0.16b, v0.16b
657 ; CHECK-NEXT: movi v1.4s, #5
658 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
659 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
660 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
662 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
663 %3 = icmp ult <4 x i32> %2, <i32 5, i32 5, i32 5, i32 5>
664 %4 = sext <4 x i1> %3 to <4 x i32>
668 define <4 x i32> @ugt_5_v4i32(<4 x i32> %0) {
669 ; CHECK-LABEL: ugt_5_v4i32:
671 ; CHECK-NEXT: cnt v0.16b, v0.16b
672 ; CHECK-NEXT: movi v1.4s, #5
673 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
674 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
675 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
677 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
678 %3 = icmp ugt <4 x i32> %2, <i32 5, i32 5, i32 5, i32 5>
679 %4 = sext <4 x i1> %3 to <4 x i32>
683 define <4 x i32> @ult_6_v4i32(<4 x i32> %0) {
684 ; CHECK-LABEL: ult_6_v4i32:
686 ; CHECK-NEXT: cnt v0.16b, v0.16b
687 ; CHECK-NEXT: movi v1.4s, #6
688 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
689 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
690 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
692 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
693 %3 = icmp ult <4 x i32> %2, <i32 6, i32 6, i32 6, i32 6>
694 %4 = sext <4 x i1> %3 to <4 x i32>
698 define <4 x i32> @ugt_6_v4i32(<4 x i32> %0) {
699 ; CHECK-LABEL: ugt_6_v4i32:
701 ; CHECK-NEXT: cnt v0.16b, v0.16b
702 ; CHECK-NEXT: movi v1.4s, #6
703 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
704 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
705 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
707 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
708 %3 = icmp ugt <4 x i32> %2, <i32 6, i32 6, i32 6, i32 6>
709 %4 = sext <4 x i1> %3 to <4 x i32>
713 define <4 x i32> @ult_7_v4i32(<4 x i32> %0) {
714 ; CHECK-LABEL: ult_7_v4i32:
716 ; CHECK-NEXT: cnt v0.16b, v0.16b
717 ; CHECK-NEXT: movi v1.4s, #7
718 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
719 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
720 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
722 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
723 %3 = icmp ult <4 x i32> %2, <i32 7, i32 7, i32 7, i32 7>
724 %4 = sext <4 x i1> %3 to <4 x i32>
728 define <4 x i32> @ugt_7_v4i32(<4 x i32> %0) {
729 ; CHECK-LABEL: ugt_7_v4i32:
731 ; CHECK-NEXT: cnt v0.16b, v0.16b
732 ; CHECK-NEXT: movi v1.4s, #7
733 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
734 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
735 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
737 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
738 %3 = icmp ugt <4 x i32> %2, <i32 7, i32 7, i32 7, i32 7>
739 %4 = sext <4 x i1> %3 to <4 x i32>
743 define <4 x i32> @ult_8_v4i32(<4 x i32> %0) {
744 ; CHECK-LABEL: ult_8_v4i32:
746 ; CHECK-NEXT: cnt v0.16b, v0.16b
747 ; CHECK-NEXT: movi v1.4s, #8
748 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
749 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
750 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
752 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
753 %3 = icmp ult <4 x i32> %2, <i32 8, i32 8, i32 8, i32 8>
754 %4 = sext <4 x i1> %3 to <4 x i32>
758 define <4 x i32> @ugt_8_v4i32(<4 x i32> %0) {
759 ; CHECK-LABEL: ugt_8_v4i32:
761 ; CHECK-NEXT: cnt v0.16b, v0.16b
762 ; CHECK-NEXT: movi v1.4s, #8
763 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
764 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
765 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
767 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
768 %3 = icmp ugt <4 x i32> %2, <i32 8, i32 8, i32 8, i32 8>
769 %4 = sext <4 x i1> %3 to <4 x i32>
773 define <4 x i32> @ult_9_v4i32(<4 x i32> %0) {
774 ; CHECK-LABEL: ult_9_v4i32:
776 ; CHECK-NEXT: cnt v0.16b, v0.16b
777 ; CHECK-NEXT: movi v1.4s, #9
778 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
779 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
780 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
782 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
783 %3 = icmp ult <4 x i32> %2, <i32 9, i32 9, i32 9, i32 9>
784 %4 = sext <4 x i1> %3 to <4 x i32>
788 define <4 x i32> @ugt_9_v4i32(<4 x i32> %0) {
789 ; CHECK-LABEL: ugt_9_v4i32:
791 ; CHECK-NEXT: cnt v0.16b, v0.16b
792 ; CHECK-NEXT: movi v1.4s, #9
793 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
794 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
795 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
797 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
798 %3 = icmp ugt <4 x i32> %2, <i32 9, i32 9, i32 9, i32 9>
799 %4 = sext <4 x i1> %3 to <4 x i32>
803 define <4 x i32> @ult_10_v4i32(<4 x i32> %0) {
804 ; CHECK-LABEL: ult_10_v4i32:
806 ; CHECK-NEXT: cnt v0.16b, v0.16b
807 ; CHECK-NEXT: movi v1.4s, #10
808 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
809 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
810 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
812 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
813 %3 = icmp ult <4 x i32> %2, <i32 10, i32 10, i32 10, i32 10>
814 %4 = sext <4 x i1> %3 to <4 x i32>
818 define <4 x i32> @ugt_10_v4i32(<4 x i32> %0) {
819 ; CHECK-LABEL: ugt_10_v4i32:
821 ; CHECK-NEXT: cnt v0.16b, v0.16b
822 ; CHECK-NEXT: movi v1.4s, #10
823 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
824 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
825 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
827 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
828 %3 = icmp ugt <4 x i32> %2, <i32 10, i32 10, i32 10, i32 10>
829 %4 = sext <4 x i1> %3 to <4 x i32>
833 define <4 x i32> @ult_11_v4i32(<4 x i32> %0) {
834 ; CHECK-LABEL: ult_11_v4i32:
836 ; CHECK-NEXT: cnt v0.16b, v0.16b
837 ; CHECK-NEXT: movi v1.4s, #11
838 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
839 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
840 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
842 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
843 %3 = icmp ult <4 x i32> %2, <i32 11, i32 11, i32 11, i32 11>
844 %4 = sext <4 x i1> %3 to <4 x i32>
848 define <4 x i32> @ugt_11_v4i32(<4 x i32> %0) {
849 ; CHECK-LABEL: ugt_11_v4i32:
851 ; CHECK-NEXT: cnt v0.16b, v0.16b
852 ; CHECK-NEXT: movi v1.4s, #11
853 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
854 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
855 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
857 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
858 %3 = icmp ugt <4 x i32> %2, <i32 11, i32 11, i32 11, i32 11>
859 %4 = sext <4 x i1> %3 to <4 x i32>
863 define <4 x i32> @ult_12_v4i32(<4 x i32> %0) {
864 ; CHECK-LABEL: ult_12_v4i32:
866 ; CHECK-NEXT: cnt v0.16b, v0.16b
867 ; CHECK-NEXT: movi v1.4s, #12
868 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
869 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
870 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
872 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
873 %3 = icmp ult <4 x i32> %2, <i32 12, i32 12, i32 12, i32 12>
874 %4 = sext <4 x i1> %3 to <4 x i32>
878 define <4 x i32> @ugt_12_v4i32(<4 x i32> %0) {
879 ; CHECK-LABEL: ugt_12_v4i32:
881 ; CHECK-NEXT: cnt v0.16b, v0.16b
882 ; CHECK-NEXT: movi v1.4s, #12
883 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
884 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
885 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
887 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
888 %3 = icmp ugt <4 x i32> %2, <i32 12, i32 12, i32 12, i32 12>
889 %4 = sext <4 x i1> %3 to <4 x i32>
893 define <4 x i32> @ult_13_v4i32(<4 x i32> %0) {
894 ; CHECK-LABEL: ult_13_v4i32:
896 ; CHECK-NEXT: cnt v0.16b, v0.16b
897 ; CHECK-NEXT: movi v1.4s, #13
898 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
899 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
900 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
902 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
903 %3 = icmp ult <4 x i32> %2, <i32 13, i32 13, i32 13, i32 13>
904 %4 = sext <4 x i1> %3 to <4 x i32>
908 define <4 x i32> @ugt_13_v4i32(<4 x i32> %0) {
909 ; CHECK-LABEL: ugt_13_v4i32:
911 ; CHECK-NEXT: cnt v0.16b, v0.16b
912 ; CHECK-NEXT: movi v1.4s, #13
913 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
914 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
915 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
917 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
918 %3 = icmp ugt <4 x i32> %2, <i32 13, i32 13, i32 13, i32 13>
919 %4 = sext <4 x i1> %3 to <4 x i32>
923 define <4 x i32> @ult_14_v4i32(<4 x i32> %0) {
924 ; CHECK-LABEL: ult_14_v4i32:
926 ; CHECK-NEXT: cnt v0.16b, v0.16b
927 ; CHECK-NEXT: movi v1.4s, #14
928 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
929 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
930 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
932 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
933 %3 = icmp ult <4 x i32> %2, <i32 14, i32 14, i32 14, i32 14>
934 %4 = sext <4 x i1> %3 to <4 x i32>
938 define <4 x i32> @ugt_14_v4i32(<4 x i32> %0) {
939 ; CHECK-LABEL: ugt_14_v4i32:
941 ; CHECK-NEXT: cnt v0.16b, v0.16b
942 ; CHECK-NEXT: movi v1.4s, #14
943 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
944 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
945 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
947 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
948 %3 = icmp ugt <4 x i32> %2, <i32 14, i32 14, i32 14, i32 14>
949 %4 = sext <4 x i1> %3 to <4 x i32>
953 define <4 x i32> @ult_15_v4i32(<4 x i32> %0) {
954 ; CHECK-LABEL: ult_15_v4i32:
956 ; CHECK-NEXT: cnt v0.16b, v0.16b
957 ; CHECK-NEXT: movi v1.4s, #15
958 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
959 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
960 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
962 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
963 %3 = icmp ult <4 x i32> %2, <i32 15, i32 15, i32 15, i32 15>
964 %4 = sext <4 x i1> %3 to <4 x i32>
968 define <4 x i32> @ugt_15_v4i32(<4 x i32> %0) {
969 ; CHECK-LABEL: ugt_15_v4i32:
971 ; CHECK-NEXT: cnt v0.16b, v0.16b
972 ; CHECK-NEXT: movi v1.4s, #15
973 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
974 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
975 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
977 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
978 %3 = icmp ugt <4 x i32> %2, <i32 15, i32 15, i32 15, i32 15>
979 %4 = sext <4 x i1> %3 to <4 x i32>
983 define <4 x i32> @ult_16_v4i32(<4 x i32> %0) {
984 ; CHECK-LABEL: ult_16_v4i32:
986 ; CHECK-NEXT: cnt v0.16b, v0.16b
987 ; CHECK-NEXT: movi v1.4s, #16
988 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
989 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
990 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
992 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
993 %3 = icmp ult <4 x i32> %2, <i32 16, i32 16, i32 16, i32 16>
994 %4 = sext <4 x i1> %3 to <4 x i32>
998 define <4 x i32> @ugt_16_v4i32(<4 x i32> %0) {
999 ; CHECK-LABEL: ugt_16_v4i32:
1001 ; CHECK-NEXT: cnt v0.16b, v0.16b
1002 ; CHECK-NEXT: movi v1.4s, #16
1003 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1004 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1005 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
1007 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1008 %3 = icmp ugt <4 x i32> %2, <i32 16, i32 16, i32 16, i32 16>
1009 %4 = sext <4 x i1> %3 to <4 x i32>
1013 define <4 x i32> @ult_17_v4i32(<4 x i32> %0) {
1014 ; CHECK-LABEL: ult_17_v4i32:
1016 ; CHECK-NEXT: cnt v0.16b, v0.16b
1017 ; CHECK-NEXT: movi v1.4s, #17
1018 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1019 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1020 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
1022 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1023 %3 = icmp ult <4 x i32> %2, <i32 17, i32 17, i32 17, i32 17>
1024 %4 = sext <4 x i1> %3 to <4 x i32>
1028 define <4 x i32> @ugt_17_v4i32(<4 x i32> %0) {
1029 ; CHECK-LABEL: ugt_17_v4i32:
1031 ; CHECK-NEXT: cnt v0.16b, v0.16b
1032 ; CHECK-NEXT: movi v1.4s, #17
1033 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1034 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1035 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
1037 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1038 %3 = icmp ugt <4 x i32> %2, <i32 17, i32 17, i32 17, i32 17>
1039 %4 = sext <4 x i1> %3 to <4 x i32>
1043 define <4 x i32> @ult_18_v4i32(<4 x i32> %0) {
1044 ; CHECK-LABEL: ult_18_v4i32:
1046 ; CHECK-NEXT: cnt v0.16b, v0.16b
1047 ; CHECK-NEXT: movi v1.4s, #18
1048 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1049 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1050 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
1052 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1053 %3 = icmp ult <4 x i32> %2, <i32 18, i32 18, i32 18, i32 18>
1054 %4 = sext <4 x i1> %3 to <4 x i32>
1058 define <4 x i32> @ugt_18_v4i32(<4 x i32> %0) {
1059 ; CHECK-LABEL: ugt_18_v4i32:
1061 ; CHECK-NEXT: cnt v0.16b, v0.16b
1062 ; CHECK-NEXT: movi v1.4s, #18
1063 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1064 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1065 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
1067 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1068 %3 = icmp ugt <4 x i32> %2, <i32 18, i32 18, i32 18, i32 18>
1069 %4 = sext <4 x i1> %3 to <4 x i32>
1073 define <4 x i32> @ult_19_v4i32(<4 x i32> %0) {
1074 ; CHECK-LABEL: ult_19_v4i32:
1076 ; CHECK-NEXT: cnt v0.16b, v0.16b
1077 ; CHECK-NEXT: movi v1.4s, #19
1078 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1079 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1080 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
1082 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1083 %3 = icmp ult <4 x i32> %2, <i32 19, i32 19, i32 19, i32 19>
1084 %4 = sext <4 x i1> %3 to <4 x i32>
1088 define <4 x i32> @ugt_19_v4i32(<4 x i32> %0) {
1089 ; CHECK-LABEL: ugt_19_v4i32:
1091 ; CHECK-NEXT: cnt v0.16b, v0.16b
1092 ; CHECK-NEXT: movi v1.4s, #19
1093 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1094 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1095 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
1097 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1098 %3 = icmp ugt <4 x i32> %2, <i32 19, i32 19, i32 19, i32 19>
1099 %4 = sext <4 x i1> %3 to <4 x i32>
1103 define <4 x i32> @ult_20_v4i32(<4 x i32> %0) {
1104 ; CHECK-LABEL: ult_20_v4i32:
1106 ; CHECK-NEXT: cnt v0.16b, v0.16b
1107 ; CHECK-NEXT: movi v1.4s, #20
1108 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1109 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1110 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
1112 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1113 %3 = icmp ult <4 x i32> %2, <i32 20, i32 20, i32 20, i32 20>
1114 %4 = sext <4 x i1> %3 to <4 x i32>
1118 define <4 x i32> @ugt_20_v4i32(<4 x i32> %0) {
1119 ; CHECK-LABEL: ugt_20_v4i32:
1121 ; CHECK-NEXT: cnt v0.16b, v0.16b
1122 ; CHECK-NEXT: movi v1.4s, #20
1123 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1124 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1125 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
1127 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1128 %3 = icmp ugt <4 x i32> %2, <i32 20, i32 20, i32 20, i32 20>
1129 %4 = sext <4 x i1> %3 to <4 x i32>
1133 define <4 x i32> @ult_21_v4i32(<4 x i32> %0) {
1134 ; CHECK-LABEL: ult_21_v4i32:
1136 ; CHECK-NEXT: cnt v0.16b, v0.16b
1137 ; CHECK-NEXT: movi v1.4s, #21
1138 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1139 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1140 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
1142 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1143 %3 = icmp ult <4 x i32> %2, <i32 21, i32 21, i32 21, i32 21>
1144 %4 = sext <4 x i1> %3 to <4 x i32>
1148 define <4 x i32> @ugt_21_v4i32(<4 x i32> %0) {
1149 ; CHECK-LABEL: ugt_21_v4i32:
1151 ; CHECK-NEXT: cnt v0.16b, v0.16b
1152 ; CHECK-NEXT: movi v1.4s, #21
1153 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1154 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1155 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
1157 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1158 %3 = icmp ugt <4 x i32> %2, <i32 21, i32 21, i32 21, i32 21>
1159 %4 = sext <4 x i1> %3 to <4 x i32>
1163 define <4 x i32> @ult_22_v4i32(<4 x i32> %0) {
1164 ; CHECK-LABEL: ult_22_v4i32:
1166 ; CHECK-NEXT: cnt v0.16b, v0.16b
1167 ; CHECK-NEXT: movi v1.4s, #22
1168 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1169 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1170 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
1172 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1173 %3 = icmp ult <4 x i32> %2, <i32 22, i32 22, i32 22, i32 22>
1174 %4 = sext <4 x i1> %3 to <4 x i32>
1178 define <4 x i32> @ugt_22_v4i32(<4 x i32> %0) {
1179 ; CHECK-LABEL: ugt_22_v4i32:
1181 ; CHECK-NEXT: cnt v0.16b, v0.16b
1182 ; CHECK-NEXT: movi v1.4s, #22
1183 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1184 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1185 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
1187 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1188 %3 = icmp ugt <4 x i32> %2, <i32 22, i32 22, i32 22, i32 22>
1189 %4 = sext <4 x i1> %3 to <4 x i32>
1193 define <4 x i32> @ult_23_v4i32(<4 x i32> %0) {
1194 ; CHECK-LABEL: ult_23_v4i32:
1196 ; CHECK-NEXT: cnt v0.16b, v0.16b
1197 ; CHECK-NEXT: movi v1.4s, #23
1198 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1199 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1200 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
1202 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1203 %3 = icmp ult <4 x i32> %2, <i32 23, i32 23, i32 23, i32 23>
1204 %4 = sext <4 x i1> %3 to <4 x i32>
1208 define <4 x i32> @ugt_23_v4i32(<4 x i32> %0) {
1209 ; CHECK-LABEL: ugt_23_v4i32:
1211 ; CHECK-NEXT: cnt v0.16b, v0.16b
1212 ; CHECK-NEXT: movi v1.4s, #23
1213 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1214 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1215 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
1217 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1218 %3 = icmp ugt <4 x i32> %2, <i32 23, i32 23, i32 23, i32 23>
1219 %4 = sext <4 x i1> %3 to <4 x i32>
1223 define <4 x i32> @ult_24_v4i32(<4 x i32> %0) {
1224 ; CHECK-LABEL: ult_24_v4i32:
1226 ; CHECK-NEXT: cnt v0.16b, v0.16b
1227 ; CHECK-NEXT: movi v1.4s, #24
1228 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1229 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1230 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
1232 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1233 %3 = icmp ult <4 x i32> %2, <i32 24, i32 24, i32 24, i32 24>
1234 %4 = sext <4 x i1> %3 to <4 x i32>
1238 define <4 x i32> @ugt_24_v4i32(<4 x i32> %0) {
1239 ; CHECK-LABEL: ugt_24_v4i32:
1241 ; CHECK-NEXT: cnt v0.16b, v0.16b
1242 ; CHECK-NEXT: movi v1.4s, #24
1243 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1244 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1245 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
1247 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1248 %3 = icmp ugt <4 x i32> %2, <i32 24, i32 24, i32 24, i32 24>
1249 %4 = sext <4 x i1> %3 to <4 x i32>
1253 define <4 x i32> @ult_25_v4i32(<4 x i32> %0) {
1254 ; CHECK-LABEL: ult_25_v4i32:
1256 ; CHECK-NEXT: cnt v0.16b, v0.16b
1257 ; CHECK-NEXT: movi v1.4s, #25
1258 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1259 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1260 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
1262 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1263 %3 = icmp ult <4 x i32> %2, <i32 25, i32 25, i32 25, i32 25>
1264 %4 = sext <4 x i1> %3 to <4 x i32>
1268 define <4 x i32> @ugt_25_v4i32(<4 x i32> %0) {
1269 ; CHECK-LABEL: ugt_25_v4i32:
1271 ; CHECK-NEXT: cnt v0.16b, v0.16b
1272 ; CHECK-NEXT: movi v1.4s, #25
1273 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1274 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1275 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
1277 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1278 %3 = icmp ugt <4 x i32> %2, <i32 25, i32 25, i32 25, i32 25>
1279 %4 = sext <4 x i1> %3 to <4 x i32>
1283 define <4 x i32> @ult_26_v4i32(<4 x i32> %0) {
1284 ; CHECK-LABEL: ult_26_v4i32:
1286 ; CHECK-NEXT: cnt v0.16b, v0.16b
1287 ; CHECK-NEXT: movi v1.4s, #26
1288 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1289 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1290 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
1292 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1293 %3 = icmp ult <4 x i32> %2, <i32 26, i32 26, i32 26, i32 26>
1294 %4 = sext <4 x i1> %3 to <4 x i32>
1298 define <4 x i32> @ugt_26_v4i32(<4 x i32> %0) {
1299 ; CHECK-LABEL: ugt_26_v4i32:
1301 ; CHECK-NEXT: cnt v0.16b, v0.16b
1302 ; CHECK-NEXT: movi v1.4s, #26
1303 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1304 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1305 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
1307 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1308 %3 = icmp ugt <4 x i32> %2, <i32 26, i32 26, i32 26, i32 26>
1309 %4 = sext <4 x i1> %3 to <4 x i32>
1313 define <4 x i32> @ult_27_v4i32(<4 x i32> %0) {
1314 ; CHECK-LABEL: ult_27_v4i32:
1316 ; CHECK-NEXT: cnt v0.16b, v0.16b
1317 ; CHECK-NEXT: movi v1.4s, #27
1318 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1319 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1320 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
1322 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1323 %3 = icmp ult <4 x i32> %2, <i32 27, i32 27, i32 27, i32 27>
1324 %4 = sext <4 x i1> %3 to <4 x i32>
1328 define <4 x i32> @ugt_27_v4i32(<4 x i32> %0) {
1329 ; CHECK-LABEL: ugt_27_v4i32:
1331 ; CHECK-NEXT: cnt v0.16b, v0.16b
1332 ; CHECK-NEXT: movi v1.4s, #27
1333 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1334 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1335 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
1337 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1338 %3 = icmp ugt <4 x i32> %2, <i32 27, i32 27, i32 27, i32 27>
1339 %4 = sext <4 x i1> %3 to <4 x i32>
1343 define <4 x i32> @ult_28_v4i32(<4 x i32> %0) {
1344 ; CHECK-LABEL: ult_28_v4i32:
1346 ; CHECK-NEXT: cnt v0.16b, v0.16b
1347 ; CHECK-NEXT: movi v1.4s, #28
1348 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1349 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1350 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
1352 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1353 %3 = icmp ult <4 x i32> %2, <i32 28, i32 28, i32 28, i32 28>
1354 %4 = sext <4 x i1> %3 to <4 x i32>
1358 define <4 x i32> @ugt_28_v4i32(<4 x i32> %0) {
1359 ; CHECK-LABEL: ugt_28_v4i32:
1361 ; CHECK-NEXT: cnt v0.16b, v0.16b
1362 ; CHECK-NEXT: movi v1.4s, #28
1363 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1364 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1365 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
1367 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1368 %3 = icmp ugt <4 x i32> %2, <i32 28, i32 28, i32 28, i32 28>
1369 %4 = sext <4 x i1> %3 to <4 x i32>
1373 define <4 x i32> @ult_29_v4i32(<4 x i32> %0) {
1374 ; CHECK-LABEL: ult_29_v4i32:
1376 ; CHECK-NEXT: cnt v0.16b, v0.16b
1377 ; CHECK-NEXT: movi v1.4s, #29
1378 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1379 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1380 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
1382 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1383 %3 = icmp ult <4 x i32> %2, <i32 29, i32 29, i32 29, i32 29>
1384 %4 = sext <4 x i1> %3 to <4 x i32>
1388 define <4 x i32> @ugt_29_v4i32(<4 x i32> %0) {
1389 ; CHECK-LABEL: ugt_29_v4i32:
1391 ; CHECK-NEXT: cnt v0.16b, v0.16b
1392 ; CHECK-NEXT: movi v1.4s, #29
1393 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1394 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1395 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
1397 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1398 %3 = icmp ugt <4 x i32> %2, <i32 29, i32 29, i32 29, i32 29>
1399 %4 = sext <4 x i1> %3 to <4 x i32>
1403 define <4 x i32> @ult_30_v4i32(<4 x i32> %0) {
1404 ; CHECK-LABEL: ult_30_v4i32:
1406 ; CHECK-NEXT: cnt v0.16b, v0.16b
1407 ; CHECK-NEXT: movi v1.4s, #30
1408 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1409 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1410 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
1412 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1413 %3 = icmp ult <4 x i32> %2, <i32 30, i32 30, i32 30, i32 30>
1414 %4 = sext <4 x i1> %3 to <4 x i32>
1418 define <4 x i32> @ugt_30_v4i32(<4 x i32> %0) {
1419 ; CHECK-LABEL: ugt_30_v4i32:
1421 ; CHECK-NEXT: cnt v0.16b, v0.16b
1422 ; CHECK-NEXT: movi v1.4s, #30
1423 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1424 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1425 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
1427 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1428 %3 = icmp ugt <4 x i32> %2, <i32 30, i32 30, i32 30, i32 30>
1429 %4 = sext <4 x i1> %3 to <4 x i32>
1433 define <4 x i32> @ult_31_v4i32(<4 x i32> %0) {
1434 ; CHECK-LABEL: ult_31_v4i32:
1436 ; CHECK-NEXT: cnt v0.16b, v0.16b
1437 ; CHECK-NEXT: movi v1.4s, #31
1438 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1439 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1440 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
1442 %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
1443 %3 = icmp ult <4 x i32> %2, <i32 31, i32 31, i32 31, i32 31>
1444 %4 = sext <4 x i1> %3 to <4 x i32>
1448 define <2 x i64> @ugt_1_v2i64(<2 x i64> %0) {
1449 ; CHECK-LABEL: ugt_1_v2i64:
1451 ; CHECK-NEXT: movi v1.2d, #0xffffffffffffffff
1452 ; CHECK-NEXT: add v1.2d, v0.2d, v1.2d
1453 ; CHECK-NEXT: cmtst v0.2d, v0.2d, v1.2d
1455 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1456 %3 = icmp ugt <2 x i64> %2, <i64 1, i64 1>
1457 %4 = sext <2 x i1> %3 to <2 x i64>
1461 define <2 x i64> @ult_2_v2i64(<2 x i64> %0) {
1462 ; CHECK-LABEL: ult_2_v2i64:
1464 ; CHECK-NEXT: movi v1.2d, #0xffffffffffffffff
1465 ; CHECK-NEXT: add v1.2d, v0.2d, v1.2d
1466 ; CHECK-NEXT: and v0.16b, v0.16b, v1.16b
1467 ; CHECK-NEXT: cmeq v0.2d, v0.2d, #0
1469 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1470 %3 = icmp ult <2 x i64> %2, <i64 2, i64 2>
1471 %4 = sext <2 x i1> %3 to <2 x i64>
1475 define <2 x i64> @ugt_2_v2i64(<2 x i64> %0) {
1476 ; CHECK-LABEL: ugt_2_v2i64:
1478 ; CHECK-NEXT: cnt v0.16b, v0.16b
1479 ; CHECK-NEXT: mov w8, #2
1480 ; CHECK-NEXT: dup v1.2d, x8
1481 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1482 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1483 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1484 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
1486 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1487 %3 = icmp ugt <2 x i64> %2, <i64 2, i64 2>
1488 %4 = sext <2 x i1> %3 to <2 x i64>
1492 define <2 x i64> @ult_3_v2i64(<2 x i64> %0) {
1493 ; CHECK-LABEL: ult_3_v2i64:
1495 ; CHECK-NEXT: cnt v0.16b, v0.16b
1496 ; CHECK-NEXT: mov w8, #3
1497 ; CHECK-NEXT: dup v1.2d, x8
1498 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1499 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1500 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1501 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
1503 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1504 %3 = icmp ult <2 x i64> %2, <i64 3, i64 3>
1505 %4 = sext <2 x i1> %3 to <2 x i64>
1509 define <2 x i64> @ugt_3_v2i64(<2 x i64> %0) {
1510 ; CHECK-LABEL: ugt_3_v2i64:
1512 ; CHECK-NEXT: cnt v0.16b, v0.16b
1513 ; CHECK-NEXT: mov w8, #3
1514 ; CHECK-NEXT: dup v1.2d, x8
1515 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1516 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1517 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1518 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
1520 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1521 %3 = icmp ugt <2 x i64> %2, <i64 3, i64 3>
1522 %4 = sext <2 x i1> %3 to <2 x i64>
1526 define <2 x i64> @ult_4_v2i64(<2 x i64> %0) {
1527 ; CHECK-LABEL: ult_4_v2i64:
1529 ; CHECK-NEXT: cnt v0.16b, v0.16b
1530 ; CHECK-NEXT: mov w8, #4
1531 ; CHECK-NEXT: dup v1.2d, x8
1532 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1533 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1534 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1535 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
1537 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1538 %3 = icmp ult <2 x i64> %2, <i64 4, i64 4>
1539 %4 = sext <2 x i1> %3 to <2 x i64>
1543 define <2 x i64> @ugt_4_v2i64(<2 x i64> %0) {
1544 ; CHECK-LABEL: ugt_4_v2i64:
1546 ; CHECK-NEXT: cnt v0.16b, v0.16b
1547 ; CHECK-NEXT: mov w8, #4
1548 ; CHECK-NEXT: dup v1.2d, x8
1549 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1550 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1551 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1552 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
1554 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1555 %3 = icmp ugt <2 x i64> %2, <i64 4, i64 4>
1556 %4 = sext <2 x i1> %3 to <2 x i64>
1560 define <2 x i64> @ult_5_v2i64(<2 x i64> %0) {
1561 ; CHECK-LABEL: ult_5_v2i64:
1563 ; CHECK-NEXT: cnt v0.16b, v0.16b
1564 ; CHECK-NEXT: mov w8, #5
1565 ; CHECK-NEXT: dup v1.2d, x8
1566 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1567 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1568 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1569 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
1571 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1572 %3 = icmp ult <2 x i64> %2, <i64 5, i64 5>
1573 %4 = sext <2 x i1> %3 to <2 x i64>
1577 define <2 x i64> @ugt_5_v2i64(<2 x i64> %0) {
1578 ; CHECK-LABEL: ugt_5_v2i64:
1580 ; CHECK-NEXT: cnt v0.16b, v0.16b
1581 ; CHECK-NEXT: mov w8, #5
1582 ; CHECK-NEXT: dup v1.2d, x8
1583 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1584 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1585 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1586 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
1588 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1589 %3 = icmp ugt <2 x i64> %2, <i64 5, i64 5>
1590 %4 = sext <2 x i1> %3 to <2 x i64>
1594 define <2 x i64> @ult_6_v2i64(<2 x i64> %0) {
1595 ; CHECK-LABEL: ult_6_v2i64:
1597 ; CHECK-NEXT: cnt v0.16b, v0.16b
1598 ; CHECK-NEXT: mov w8, #6
1599 ; CHECK-NEXT: dup v1.2d, x8
1600 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1601 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1602 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1603 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
1605 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1606 %3 = icmp ult <2 x i64> %2, <i64 6, i64 6>
1607 %4 = sext <2 x i1> %3 to <2 x i64>
1611 define <2 x i64> @ugt_6_v2i64(<2 x i64> %0) {
1612 ; CHECK-LABEL: ugt_6_v2i64:
1614 ; CHECK-NEXT: cnt v0.16b, v0.16b
1615 ; CHECK-NEXT: mov w8, #6
1616 ; CHECK-NEXT: dup v1.2d, x8
1617 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1618 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1619 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1620 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
1622 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1623 %3 = icmp ugt <2 x i64> %2, <i64 6, i64 6>
1624 %4 = sext <2 x i1> %3 to <2 x i64>
1628 define <2 x i64> @ult_7_v2i64(<2 x i64> %0) {
1629 ; CHECK-LABEL: ult_7_v2i64:
1631 ; CHECK-NEXT: cnt v0.16b, v0.16b
1632 ; CHECK-NEXT: mov w8, #7
1633 ; CHECK-NEXT: dup v1.2d, x8
1634 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1635 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1636 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1637 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
1639 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1640 %3 = icmp ult <2 x i64> %2, <i64 7, i64 7>
1641 %4 = sext <2 x i1> %3 to <2 x i64>
1645 define <2 x i64> @ugt_7_v2i64(<2 x i64> %0) {
1646 ; CHECK-LABEL: ugt_7_v2i64:
1648 ; CHECK-NEXT: cnt v0.16b, v0.16b
1649 ; CHECK-NEXT: mov w8, #7
1650 ; CHECK-NEXT: dup v1.2d, x8
1651 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1652 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1653 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1654 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
1656 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1657 %3 = icmp ugt <2 x i64> %2, <i64 7, i64 7>
1658 %4 = sext <2 x i1> %3 to <2 x i64>
1662 define <2 x i64> @ult_8_v2i64(<2 x i64> %0) {
1663 ; CHECK-LABEL: ult_8_v2i64:
1665 ; CHECK-NEXT: cnt v0.16b, v0.16b
1666 ; CHECK-NEXT: mov w8, #8
1667 ; CHECK-NEXT: dup v1.2d, x8
1668 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1669 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1670 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1671 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
1673 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1674 %3 = icmp ult <2 x i64> %2, <i64 8, i64 8>
1675 %4 = sext <2 x i1> %3 to <2 x i64>
1679 define <2 x i64> @ugt_8_v2i64(<2 x i64> %0) {
1680 ; CHECK-LABEL: ugt_8_v2i64:
1682 ; CHECK-NEXT: cnt v0.16b, v0.16b
1683 ; CHECK-NEXT: mov w8, #8
1684 ; CHECK-NEXT: dup v1.2d, x8
1685 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1686 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1687 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1688 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
1690 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1691 %3 = icmp ugt <2 x i64> %2, <i64 8, i64 8>
1692 %4 = sext <2 x i1> %3 to <2 x i64>
1696 define <2 x i64> @ult_9_v2i64(<2 x i64> %0) {
1697 ; CHECK-LABEL: ult_9_v2i64:
1699 ; CHECK-NEXT: cnt v0.16b, v0.16b
1700 ; CHECK-NEXT: mov w8, #9
1701 ; CHECK-NEXT: dup v1.2d, x8
1702 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1703 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1704 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1705 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
1707 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1708 %3 = icmp ult <2 x i64> %2, <i64 9, i64 9>
1709 %4 = sext <2 x i1> %3 to <2 x i64>
1713 define <2 x i64> @ugt_9_v2i64(<2 x i64> %0) {
1714 ; CHECK-LABEL: ugt_9_v2i64:
1716 ; CHECK-NEXT: cnt v0.16b, v0.16b
1717 ; CHECK-NEXT: mov w8, #9
1718 ; CHECK-NEXT: dup v1.2d, x8
1719 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1720 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1721 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1722 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
1724 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1725 %3 = icmp ugt <2 x i64> %2, <i64 9, i64 9>
1726 %4 = sext <2 x i1> %3 to <2 x i64>
1730 define <2 x i64> @ult_10_v2i64(<2 x i64> %0) {
1731 ; CHECK-LABEL: ult_10_v2i64:
1733 ; CHECK-NEXT: cnt v0.16b, v0.16b
1734 ; CHECK-NEXT: mov w8, #10
1735 ; CHECK-NEXT: dup v1.2d, x8
1736 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1737 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1738 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1739 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
1741 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1742 %3 = icmp ult <2 x i64> %2, <i64 10, i64 10>
1743 %4 = sext <2 x i1> %3 to <2 x i64>
1747 define <2 x i64> @ugt_10_v2i64(<2 x i64> %0) {
1748 ; CHECK-LABEL: ugt_10_v2i64:
1750 ; CHECK-NEXT: cnt v0.16b, v0.16b
1751 ; CHECK-NEXT: mov w8, #10
1752 ; CHECK-NEXT: dup v1.2d, x8
1753 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1754 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1755 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1756 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
1758 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1759 %3 = icmp ugt <2 x i64> %2, <i64 10, i64 10>
1760 %4 = sext <2 x i1> %3 to <2 x i64>
1764 define <2 x i64> @ult_11_v2i64(<2 x i64> %0) {
1765 ; CHECK-LABEL: ult_11_v2i64:
1767 ; CHECK-NEXT: cnt v0.16b, v0.16b
1768 ; CHECK-NEXT: mov w8, #11
1769 ; CHECK-NEXT: dup v1.2d, x8
1770 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1771 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1772 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1773 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
1775 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1776 %3 = icmp ult <2 x i64> %2, <i64 11, i64 11>
1777 %4 = sext <2 x i1> %3 to <2 x i64>
1781 define <2 x i64> @ugt_11_v2i64(<2 x i64> %0) {
1782 ; CHECK-LABEL: ugt_11_v2i64:
1784 ; CHECK-NEXT: cnt v0.16b, v0.16b
1785 ; CHECK-NEXT: mov w8, #11
1786 ; CHECK-NEXT: dup v1.2d, x8
1787 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1788 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1789 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1790 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
1792 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1793 %3 = icmp ugt <2 x i64> %2, <i64 11, i64 11>
1794 %4 = sext <2 x i1> %3 to <2 x i64>
1798 define <2 x i64> @ult_12_v2i64(<2 x i64> %0) {
1799 ; CHECK-LABEL: ult_12_v2i64:
1801 ; CHECK-NEXT: cnt v0.16b, v0.16b
1802 ; CHECK-NEXT: mov w8, #12
1803 ; CHECK-NEXT: dup v1.2d, x8
1804 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1805 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1806 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1807 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
1809 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1810 %3 = icmp ult <2 x i64> %2, <i64 12, i64 12>
1811 %4 = sext <2 x i1> %3 to <2 x i64>
1815 define <2 x i64> @ugt_12_v2i64(<2 x i64> %0) {
1816 ; CHECK-LABEL: ugt_12_v2i64:
1818 ; CHECK-NEXT: cnt v0.16b, v0.16b
1819 ; CHECK-NEXT: mov w8, #12
1820 ; CHECK-NEXT: dup v1.2d, x8
1821 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1822 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1823 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1824 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
1826 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1827 %3 = icmp ugt <2 x i64> %2, <i64 12, i64 12>
1828 %4 = sext <2 x i1> %3 to <2 x i64>
1832 define <2 x i64> @ult_13_v2i64(<2 x i64> %0) {
1833 ; CHECK-LABEL: ult_13_v2i64:
1835 ; CHECK-NEXT: cnt v0.16b, v0.16b
1836 ; CHECK-NEXT: mov w8, #13
1837 ; CHECK-NEXT: dup v1.2d, x8
1838 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1839 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1840 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1841 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
1843 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1844 %3 = icmp ult <2 x i64> %2, <i64 13, i64 13>
1845 %4 = sext <2 x i1> %3 to <2 x i64>
1849 define <2 x i64> @ugt_13_v2i64(<2 x i64> %0) {
1850 ; CHECK-LABEL: ugt_13_v2i64:
1852 ; CHECK-NEXT: cnt v0.16b, v0.16b
1853 ; CHECK-NEXT: mov w8, #13
1854 ; CHECK-NEXT: dup v1.2d, x8
1855 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1856 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1857 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1858 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
1860 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1861 %3 = icmp ugt <2 x i64> %2, <i64 13, i64 13>
1862 %4 = sext <2 x i1> %3 to <2 x i64>
1866 define <2 x i64> @ult_14_v2i64(<2 x i64> %0) {
1867 ; CHECK-LABEL: ult_14_v2i64:
1869 ; CHECK-NEXT: cnt v0.16b, v0.16b
1870 ; CHECK-NEXT: mov w8, #14
1871 ; CHECK-NEXT: dup v1.2d, x8
1872 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1873 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1874 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1875 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
1877 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1878 %3 = icmp ult <2 x i64> %2, <i64 14, i64 14>
1879 %4 = sext <2 x i1> %3 to <2 x i64>
1883 define <2 x i64> @ugt_14_v2i64(<2 x i64> %0) {
1884 ; CHECK-LABEL: ugt_14_v2i64:
1886 ; CHECK-NEXT: cnt v0.16b, v0.16b
1887 ; CHECK-NEXT: mov w8, #14
1888 ; CHECK-NEXT: dup v1.2d, x8
1889 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1890 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1891 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1892 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
1894 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1895 %3 = icmp ugt <2 x i64> %2, <i64 14, i64 14>
1896 %4 = sext <2 x i1> %3 to <2 x i64>
1900 define <2 x i64> @ult_15_v2i64(<2 x i64> %0) {
1901 ; CHECK-LABEL: ult_15_v2i64:
1903 ; CHECK-NEXT: cnt v0.16b, v0.16b
1904 ; CHECK-NEXT: mov w8, #15
1905 ; CHECK-NEXT: dup v1.2d, x8
1906 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1907 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1908 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1909 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
1911 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1912 %3 = icmp ult <2 x i64> %2, <i64 15, i64 15>
1913 %4 = sext <2 x i1> %3 to <2 x i64>
1917 define <2 x i64> @ugt_15_v2i64(<2 x i64> %0) {
1918 ; CHECK-LABEL: ugt_15_v2i64:
1920 ; CHECK-NEXT: cnt v0.16b, v0.16b
1921 ; CHECK-NEXT: mov w8, #15
1922 ; CHECK-NEXT: dup v1.2d, x8
1923 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1924 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1925 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1926 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
1928 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1929 %3 = icmp ugt <2 x i64> %2, <i64 15, i64 15>
1930 %4 = sext <2 x i1> %3 to <2 x i64>
1934 define <2 x i64> @ult_16_v2i64(<2 x i64> %0) {
1935 ; CHECK-LABEL: ult_16_v2i64:
1937 ; CHECK-NEXT: cnt v0.16b, v0.16b
1938 ; CHECK-NEXT: mov w8, #16
1939 ; CHECK-NEXT: dup v1.2d, x8
1940 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1941 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1942 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1943 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
1945 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1946 %3 = icmp ult <2 x i64> %2, <i64 16, i64 16>
1947 %4 = sext <2 x i1> %3 to <2 x i64>
1951 define <2 x i64> @ugt_16_v2i64(<2 x i64> %0) {
1952 ; CHECK-LABEL: ugt_16_v2i64:
1954 ; CHECK-NEXT: cnt v0.16b, v0.16b
1955 ; CHECK-NEXT: mov w8, #16
1956 ; CHECK-NEXT: dup v1.2d, x8
1957 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1958 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1959 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1960 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
1962 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1963 %3 = icmp ugt <2 x i64> %2, <i64 16, i64 16>
1964 %4 = sext <2 x i1> %3 to <2 x i64>
1968 define <2 x i64> @ult_17_v2i64(<2 x i64> %0) {
1969 ; CHECK-LABEL: ult_17_v2i64:
1971 ; CHECK-NEXT: cnt v0.16b, v0.16b
1972 ; CHECK-NEXT: mov w8, #17
1973 ; CHECK-NEXT: dup v1.2d, x8
1974 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1975 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1976 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1977 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
1979 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1980 %3 = icmp ult <2 x i64> %2, <i64 17, i64 17>
1981 %4 = sext <2 x i1> %3 to <2 x i64>
1985 define <2 x i64> @ugt_17_v2i64(<2 x i64> %0) {
1986 ; CHECK-LABEL: ugt_17_v2i64:
1988 ; CHECK-NEXT: cnt v0.16b, v0.16b
1989 ; CHECK-NEXT: mov w8, #17
1990 ; CHECK-NEXT: dup v1.2d, x8
1991 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
1992 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
1993 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
1994 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
1996 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
1997 %3 = icmp ugt <2 x i64> %2, <i64 17, i64 17>
1998 %4 = sext <2 x i1> %3 to <2 x i64>
2002 define <2 x i64> @ult_18_v2i64(<2 x i64> %0) {
2003 ; CHECK-LABEL: ult_18_v2i64:
2005 ; CHECK-NEXT: cnt v0.16b, v0.16b
2006 ; CHECK-NEXT: mov w8, #18
2007 ; CHECK-NEXT: dup v1.2d, x8
2008 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2009 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2010 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2011 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2013 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2014 %3 = icmp ult <2 x i64> %2, <i64 18, i64 18>
2015 %4 = sext <2 x i1> %3 to <2 x i64>
2019 define <2 x i64> @ugt_18_v2i64(<2 x i64> %0) {
2020 ; CHECK-LABEL: ugt_18_v2i64:
2022 ; CHECK-NEXT: cnt v0.16b, v0.16b
2023 ; CHECK-NEXT: mov w8, #18
2024 ; CHECK-NEXT: dup v1.2d, x8
2025 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2026 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2027 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2028 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2030 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2031 %3 = icmp ugt <2 x i64> %2, <i64 18, i64 18>
2032 %4 = sext <2 x i1> %3 to <2 x i64>
2036 define <2 x i64> @ult_19_v2i64(<2 x i64> %0) {
2037 ; CHECK-LABEL: ult_19_v2i64:
2039 ; CHECK-NEXT: cnt v0.16b, v0.16b
2040 ; CHECK-NEXT: mov w8, #19
2041 ; CHECK-NEXT: dup v1.2d, x8
2042 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2043 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2044 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2045 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2047 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2048 %3 = icmp ult <2 x i64> %2, <i64 19, i64 19>
2049 %4 = sext <2 x i1> %3 to <2 x i64>
2053 define <2 x i64> @ugt_19_v2i64(<2 x i64> %0) {
2054 ; CHECK-LABEL: ugt_19_v2i64:
2056 ; CHECK-NEXT: cnt v0.16b, v0.16b
2057 ; CHECK-NEXT: mov w8, #19
2058 ; CHECK-NEXT: dup v1.2d, x8
2059 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2060 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2061 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2062 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2064 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2065 %3 = icmp ugt <2 x i64> %2, <i64 19, i64 19>
2066 %4 = sext <2 x i1> %3 to <2 x i64>
2070 define <2 x i64> @ult_20_v2i64(<2 x i64> %0) {
2071 ; CHECK-LABEL: ult_20_v2i64:
2073 ; CHECK-NEXT: cnt v0.16b, v0.16b
2074 ; CHECK-NEXT: mov w8, #20
2075 ; CHECK-NEXT: dup v1.2d, x8
2076 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2077 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2078 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2079 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2081 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2082 %3 = icmp ult <2 x i64> %2, <i64 20, i64 20>
2083 %4 = sext <2 x i1> %3 to <2 x i64>
2087 define <2 x i64> @ugt_20_v2i64(<2 x i64> %0) {
2088 ; CHECK-LABEL: ugt_20_v2i64:
2090 ; CHECK-NEXT: cnt v0.16b, v0.16b
2091 ; CHECK-NEXT: mov w8, #20
2092 ; CHECK-NEXT: dup v1.2d, x8
2093 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2094 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2095 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2096 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2098 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2099 %3 = icmp ugt <2 x i64> %2, <i64 20, i64 20>
2100 %4 = sext <2 x i1> %3 to <2 x i64>
2104 define <2 x i64> @ult_21_v2i64(<2 x i64> %0) {
2105 ; CHECK-LABEL: ult_21_v2i64:
2107 ; CHECK-NEXT: cnt v0.16b, v0.16b
2108 ; CHECK-NEXT: mov w8, #21
2109 ; CHECK-NEXT: dup v1.2d, x8
2110 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2111 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2112 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2113 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2115 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2116 %3 = icmp ult <2 x i64> %2, <i64 21, i64 21>
2117 %4 = sext <2 x i1> %3 to <2 x i64>
2121 define <2 x i64> @ugt_21_v2i64(<2 x i64> %0) {
2122 ; CHECK-LABEL: ugt_21_v2i64:
2124 ; CHECK-NEXT: cnt v0.16b, v0.16b
2125 ; CHECK-NEXT: mov w8, #21
2126 ; CHECK-NEXT: dup v1.2d, x8
2127 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2128 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2129 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2130 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2132 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2133 %3 = icmp ugt <2 x i64> %2, <i64 21, i64 21>
2134 %4 = sext <2 x i1> %3 to <2 x i64>
2138 define <2 x i64> @ult_22_v2i64(<2 x i64> %0) {
2139 ; CHECK-LABEL: ult_22_v2i64:
2141 ; CHECK-NEXT: cnt v0.16b, v0.16b
2142 ; CHECK-NEXT: mov w8, #22
2143 ; CHECK-NEXT: dup v1.2d, x8
2144 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2145 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2146 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2147 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2149 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2150 %3 = icmp ult <2 x i64> %2, <i64 22, i64 22>
2151 %4 = sext <2 x i1> %3 to <2 x i64>
2155 define <2 x i64> @ugt_22_v2i64(<2 x i64> %0) {
2156 ; CHECK-LABEL: ugt_22_v2i64:
2158 ; CHECK-NEXT: cnt v0.16b, v0.16b
2159 ; CHECK-NEXT: mov w8, #22
2160 ; CHECK-NEXT: dup v1.2d, x8
2161 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2162 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2163 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2164 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2166 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2167 %3 = icmp ugt <2 x i64> %2, <i64 22, i64 22>
2168 %4 = sext <2 x i1> %3 to <2 x i64>
2172 define <2 x i64> @ult_23_v2i64(<2 x i64> %0) {
2173 ; CHECK-LABEL: ult_23_v2i64:
2175 ; CHECK-NEXT: cnt v0.16b, v0.16b
2176 ; CHECK-NEXT: mov w8, #23
2177 ; CHECK-NEXT: dup v1.2d, x8
2178 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2179 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2180 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2181 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2183 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2184 %3 = icmp ult <2 x i64> %2, <i64 23, i64 23>
2185 %4 = sext <2 x i1> %3 to <2 x i64>
2189 define <2 x i64> @ugt_23_v2i64(<2 x i64> %0) {
2190 ; CHECK-LABEL: ugt_23_v2i64:
2192 ; CHECK-NEXT: cnt v0.16b, v0.16b
2193 ; CHECK-NEXT: mov w8, #23
2194 ; CHECK-NEXT: dup v1.2d, x8
2195 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2196 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2197 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2198 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2200 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2201 %3 = icmp ugt <2 x i64> %2, <i64 23, i64 23>
2202 %4 = sext <2 x i1> %3 to <2 x i64>
2206 define <2 x i64> @ult_24_v2i64(<2 x i64> %0) {
2207 ; CHECK-LABEL: ult_24_v2i64:
2209 ; CHECK-NEXT: cnt v0.16b, v0.16b
2210 ; CHECK-NEXT: mov w8, #24
2211 ; CHECK-NEXT: dup v1.2d, x8
2212 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2213 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2214 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2215 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2217 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2218 %3 = icmp ult <2 x i64> %2, <i64 24, i64 24>
2219 %4 = sext <2 x i1> %3 to <2 x i64>
2223 define <2 x i64> @ugt_24_v2i64(<2 x i64> %0) {
2224 ; CHECK-LABEL: ugt_24_v2i64:
2226 ; CHECK-NEXT: cnt v0.16b, v0.16b
2227 ; CHECK-NEXT: mov w8, #24
2228 ; CHECK-NEXT: dup v1.2d, x8
2229 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2230 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2231 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2232 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2234 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2235 %3 = icmp ugt <2 x i64> %2, <i64 24, i64 24>
2236 %4 = sext <2 x i1> %3 to <2 x i64>
2240 define <2 x i64> @ult_25_v2i64(<2 x i64> %0) {
2241 ; CHECK-LABEL: ult_25_v2i64:
2243 ; CHECK-NEXT: cnt v0.16b, v0.16b
2244 ; CHECK-NEXT: mov w8, #25
2245 ; CHECK-NEXT: dup v1.2d, x8
2246 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2247 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2248 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2249 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2251 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2252 %3 = icmp ult <2 x i64> %2, <i64 25, i64 25>
2253 %4 = sext <2 x i1> %3 to <2 x i64>
2257 define <2 x i64> @ugt_25_v2i64(<2 x i64> %0) {
2258 ; CHECK-LABEL: ugt_25_v2i64:
2260 ; CHECK-NEXT: cnt v0.16b, v0.16b
2261 ; CHECK-NEXT: mov w8, #25
2262 ; CHECK-NEXT: dup v1.2d, x8
2263 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2264 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2265 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2266 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2268 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2269 %3 = icmp ugt <2 x i64> %2, <i64 25, i64 25>
2270 %4 = sext <2 x i1> %3 to <2 x i64>
2274 define <2 x i64> @ult_26_v2i64(<2 x i64> %0) {
2275 ; CHECK-LABEL: ult_26_v2i64:
2277 ; CHECK-NEXT: cnt v0.16b, v0.16b
2278 ; CHECK-NEXT: mov w8, #26
2279 ; CHECK-NEXT: dup v1.2d, x8
2280 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2281 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2282 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2283 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2285 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2286 %3 = icmp ult <2 x i64> %2, <i64 26, i64 26>
2287 %4 = sext <2 x i1> %3 to <2 x i64>
2291 define <2 x i64> @ugt_26_v2i64(<2 x i64> %0) {
2292 ; CHECK-LABEL: ugt_26_v2i64:
2294 ; CHECK-NEXT: cnt v0.16b, v0.16b
2295 ; CHECK-NEXT: mov w8, #26
2296 ; CHECK-NEXT: dup v1.2d, x8
2297 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2298 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2299 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2300 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2302 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2303 %3 = icmp ugt <2 x i64> %2, <i64 26, i64 26>
2304 %4 = sext <2 x i1> %3 to <2 x i64>
2308 define <2 x i64> @ult_27_v2i64(<2 x i64> %0) {
2309 ; CHECK-LABEL: ult_27_v2i64:
2311 ; CHECK-NEXT: cnt v0.16b, v0.16b
2312 ; CHECK-NEXT: mov w8, #27
2313 ; CHECK-NEXT: dup v1.2d, x8
2314 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2315 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2316 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2317 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2319 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2320 %3 = icmp ult <2 x i64> %2, <i64 27, i64 27>
2321 %4 = sext <2 x i1> %3 to <2 x i64>
2325 define <2 x i64> @ugt_27_v2i64(<2 x i64> %0) {
2326 ; CHECK-LABEL: ugt_27_v2i64:
2328 ; CHECK-NEXT: cnt v0.16b, v0.16b
2329 ; CHECK-NEXT: mov w8, #27
2330 ; CHECK-NEXT: dup v1.2d, x8
2331 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2332 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2333 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2334 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2336 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2337 %3 = icmp ugt <2 x i64> %2, <i64 27, i64 27>
2338 %4 = sext <2 x i1> %3 to <2 x i64>
2342 define <2 x i64> @ult_28_v2i64(<2 x i64> %0) {
2343 ; CHECK-LABEL: ult_28_v2i64:
2345 ; CHECK-NEXT: cnt v0.16b, v0.16b
2346 ; CHECK-NEXT: mov w8, #28
2347 ; CHECK-NEXT: dup v1.2d, x8
2348 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2349 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2350 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2351 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2353 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2354 %3 = icmp ult <2 x i64> %2, <i64 28, i64 28>
2355 %4 = sext <2 x i1> %3 to <2 x i64>
2359 define <2 x i64> @ugt_28_v2i64(<2 x i64> %0) {
2360 ; CHECK-LABEL: ugt_28_v2i64:
2362 ; CHECK-NEXT: cnt v0.16b, v0.16b
2363 ; CHECK-NEXT: mov w8, #28
2364 ; CHECK-NEXT: dup v1.2d, x8
2365 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2366 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2367 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2368 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2370 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2371 %3 = icmp ugt <2 x i64> %2, <i64 28, i64 28>
2372 %4 = sext <2 x i1> %3 to <2 x i64>
2376 define <2 x i64> @ult_29_v2i64(<2 x i64> %0) {
2377 ; CHECK-LABEL: ult_29_v2i64:
2379 ; CHECK-NEXT: cnt v0.16b, v0.16b
2380 ; CHECK-NEXT: mov w8, #29
2381 ; CHECK-NEXT: dup v1.2d, x8
2382 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2383 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2384 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2385 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2387 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2388 %3 = icmp ult <2 x i64> %2, <i64 29, i64 29>
2389 %4 = sext <2 x i1> %3 to <2 x i64>
2393 define <2 x i64> @ugt_29_v2i64(<2 x i64> %0) {
2394 ; CHECK-LABEL: ugt_29_v2i64:
2396 ; CHECK-NEXT: cnt v0.16b, v0.16b
2397 ; CHECK-NEXT: mov w8, #29
2398 ; CHECK-NEXT: dup v1.2d, x8
2399 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2400 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2401 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2402 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2404 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2405 %3 = icmp ugt <2 x i64> %2, <i64 29, i64 29>
2406 %4 = sext <2 x i1> %3 to <2 x i64>
2410 define <2 x i64> @ult_30_v2i64(<2 x i64> %0) {
2411 ; CHECK-LABEL: ult_30_v2i64:
2413 ; CHECK-NEXT: cnt v0.16b, v0.16b
2414 ; CHECK-NEXT: mov w8, #30
2415 ; CHECK-NEXT: dup v1.2d, x8
2416 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2417 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2418 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2419 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2421 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2422 %3 = icmp ult <2 x i64> %2, <i64 30, i64 30>
2423 %4 = sext <2 x i1> %3 to <2 x i64>
2427 define <2 x i64> @ugt_30_v2i64(<2 x i64> %0) {
2428 ; CHECK-LABEL: ugt_30_v2i64:
2430 ; CHECK-NEXT: cnt v0.16b, v0.16b
2431 ; CHECK-NEXT: mov w8, #30
2432 ; CHECK-NEXT: dup v1.2d, x8
2433 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2434 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2435 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2436 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2438 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2439 %3 = icmp ugt <2 x i64> %2, <i64 30, i64 30>
2440 %4 = sext <2 x i1> %3 to <2 x i64>
2444 define <2 x i64> @ult_31_v2i64(<2 x i64> %0) {
2445 ; CHECK-LABEL: ult_31_v2i64:
2447 ; CHECK-NEXT: cnt v0.16b, v0.16b
2448 ; CHECK-NEXT: mov w8, #31
2449 ; CHECK-NEXT: dup v1.2d, x8
2450 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2451 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2452 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2453 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2455 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2456 %3 = icmp ult <2 x i64> %2, <i64 31, i64 31>
2457 %4 = sext <2 x i1> %3 to <2 x i64>
2461 define <2 x i64> @ugt_31_v2i64(<2 x i64> %0) {
2462 ; CHECK-LABEL: ugt_31_v2i64:
2464 ; CHECK-NEXT: cnt v0.16b, v0.16b
2465 ; CHECK-NEXT: mov w8, #31
2466 ; CHECK-NEXT: dup v1.2d, x8
2467 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2468 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2469 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2470 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2472 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2473 %3 = icmp ugt <2 x i64> %2, <i64 31, i64 31>
2474 %4 = sext <2 x i1> %3 to <2 x i64>
2478 define <2 x i64> @ult_32_v2i64(<2 x i64> %0) {
2479 ; CHECK-LABEL: ult_32_v2i64:
2481 ; CHECK-NEXT: cnt v0.16b, v0.16b
2482 ; CHECK-NEXT: mov w8, #32
2483 ; CHECK-NEXT: dup v1.2d, x8
2484 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2485 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2486 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2487 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2489 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2490 %3 = icmp ult <2 x i64> %2, <i64 32, i64 32>
2491 %4 = sext <2 x i1> %3 to <2 x i64>
2495 define <2 x i64> @ugt_32_v2i64(<2 x i64> %0) {
2496 ; CHECK-LABEL: ugt_32_v2i64:
2498 ; CHECK-NEXT: cnt v0.16b, v0.16b
2499 ; CHECK-NEXT: mov w8, #32
2500 ; CHECK-NEXT: dup v1.2d, x8
2501 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2502 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2503 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2504 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2506 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2507 %3 = icmp ugt <2 x i64> %2, <i64 32, i64 32>
2508 %4 = sext <2 x i1> %3 to <2 x i64>
2512 define <2 x i64> @ult_33_v2i64(<2 x i64> %0) {
2513 ; CHECK-LABEL: ult_33_v2i64:
2515 ; CHECK-NEXT: cnt v0.16b, v0.16b
2516 ; CHECK-NEXT: mov w8, #33
2517 ; CHECK-NEXT: dup v1.2d, x8
2518 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2519 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2520 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2521 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2523 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2524 %3 = icmp ult <2 x i64> %2, <i64 33, i64 33>
2525 %4 = sext <2 x i1> %3 to <2 x i64>
2529 define <2 x i64> @ugt_33_v2i64(<2 x i64> %0) {
2530 ; CHECK-LABEL: ugt_33_v2i64:
2532 ; CHECK-NEXT: cnt v0.16b, v0.16b
2533 ; CHECK-NEXT: mov w8, #33
2534 ; CHECK-NEXT: dup v1.2d, x8
2535 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2536 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2537 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2538 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2540 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2541 %3 = icmp ugt <2 x i64> %2, <i64 33, i64 33>
2542 %4 = sext <2 x i1> %3 to <2 x i64>
2546 define <2 x i64> @ult_34_v2i64(<2 x i64> %0) {
2547 ; CHECK-LABEL: ult_34_v2i64:
2549 ; CHECK-NEXT: cnt v0.16b, v0.16b
2550 ; CHECK-NEXT: mov w8, #34
2551 ; CHECK-NEXT: dup v1.2d, x8
2552 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2553 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2554 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2555 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2557 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2558 %3 = icmp ult <2 x i64> %2, <i64 34, i64 34>
2559 %4 = sext <2 x i1> %3 to <2 x i64>
2563 define <2 x i64> @ugt_34_v2i64(<2 x i64> %0) {
2564 ; CHECK-LABEL: ugt_34_v2i64:
2566 ; CHECK-NEXT: cnt v0.16b, v0.16b
2567 ; CHECK-NEXT: mov w8, #34
2568 ; CHECK-NEXT: dup v1.2d, x8
2569 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2570 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2571 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2572 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2574 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2575 %3 = icmp ugt <2 x i64> %2, <i64 34, i64 34>
2576 %4 = sext <2 x i1> %3 to <2 x i64>
2580 define <2 x i64> @ult_35_v2i64(<2 x i64> %0) {
2581 ; CHECK-LABEL: ult_35_v2i64:
2583 ; CHECK-NEXT: cnt v0.16b, v0.16b
2584 ; CHECK-NEXT: mov w8, #35
2585 ; CHECK-NEXT: dup v1.2d, x8
2586 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2587 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2588 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2589 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2591 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2592 %3 = icmp ult <2 x i64> %2, <i64 35, i64 35>
2593 %4 = sext <2 x i1> %3 to <2 x i64>
2597 define <2 x i64> @ugt_35_v2i64(<2 x i64> %0) {
2598 ; CHECK-LABEL: ugt_35_v2i64:
2600 ; CHECK-NEXT: cnt v0.16b, v0.16b
2601 ; CHECK-NEXT: mov w8, #35
2602 ; CHECK-NEXT: dup v1.2d, x8
2603 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2604 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2605 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2606 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2608 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2609 %3 = icmp ugt <2 x i64> %2, <i64 35, i64 35>
2610 %4 = sext <2 x i1> %3 to <2 x i64>
2614 define <2 x i64> @ult_36_v2i64(<2 x i64> %0) {
2615 ; CHECK-LABEL: ult_36_v2i64:
2617 ; CHECK-NEXT: cnt v0.16b, v0.16b
2618 ; CHECK-NEXT: mov w8, #36
2619 ; CHECK-NEXT: dup v1.2d, x8
2620 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2621 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2622 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2623 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2625 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2626 %3 = icmp ult <2 x i64> %2, <i64 36, i64 36>
2627 %4 = sext <2 x i1> %3 to <2 x i64>
2631 define <2 x i64> @ugt_36_v2i64(<2 x i64> %0) {
2632 ; CHECK-LABEL: ugt_36_v2i64:
2634 ; CHECK-NEXT: cnt v0.16b, v0.16b
2635 ; CHECK-NEXT: mov w8, #36
2636 ; CHECK-NEXT: dup v1.2d, x8
2637 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2638 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2639 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2640 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2642 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2643 %3 = icmp ugt <2 x i64> %2, <i64 36, i64 36>
2644 %4 = sext <2 x i1> %3 to <2 x i64>
2648 define <2 x i64> @ult_37_v2i64(<2 x i64> %0) {
2649 ; CHECK-LABEL: ult_37_v2i64:
2651 ; CHECK-NEXT: cnt v0.16b, v0.16b
2652 ; CHECK-NEXT: mov w8, #37
2653 ; CHECK-NEXT: dup v1.2d, x8
2654 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2655 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2656 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2657 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2659 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2660 %3 = icmp ult <2 x i64> %2, <i64 37, i64 37>
2661 %4 = sext <2 x i1> %3 to <2 x i64>
2665 define <2 x i64> @ugt_37_v2i64(<2 x i64> %0) {
2666 ; CHECK-LABEL: ugt_37_v2i64:
2668 ; CHECK-NEXT: cnt v0.16b, v0.16b
2669 ; CHECK-NEXT: mov w8, #37
2670 ; CHECK-NEXT: dup v1.2d, x8
2671 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2672 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2673 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2674 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2676 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2677 %3 = icmp ugt <2 x i64> %2, <i64 37, i64 37>
2678 %4 = sext <2 x i1> %3 to <2 x i64>
2682 define <2 x i64> @ult_38_v2i64(<2 x i64> %0) {
2683 ; CHECK-LABEL: ult_38_v2i64:
2685 ; CHECK-NEXT: cnt v0.16b, v0.16b
2686 ; CHECK-NEXT: mov w8, #38
2687 ; CHECK-NEXT: dup v1.2d, x8
2688 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2689 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2690 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2691 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2693 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2694 %3 = icmp ult <2 x i64> %2, <i64 38, i64 38>
2695 %4 = sext <2 x i1> %3 to <2 x i64>
2699 define <2 x i64> @ugt_38_v2i64(<2 x i64> %0) {
2700 ; CHECK-LABEL: ugt_38_v2i64:
2702 ; CHECK-NEXT: cnt v0.16b, v0.16b
2703 ; CHECK-NEXT: mov w8, #38
2704 ; CHECK-NEXT: dup v1.2d, x8
2705 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2706 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2707 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2708 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2710 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2711 %3 = icmp ugt <2 x i64> %2, <i64 38, i64 38>
2712 %4 = sext <2 x i1> %3 to <2 x i64>
2716 define <2 x i64> @ult_39_v2i64(<2 x i64> %0) {
2717 ; CHECK-LABEL: ult_39_v2i64:
2719 ; CHECK-NEXT: cnt v0.16b, v0.16b
2720 ; CHECK-NEXT: mov w8, #39
2721 ; CHECK-NEXT: dup v1.2d, x8
2722 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2723 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2724 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2725 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2727 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2728 %3 = icmp ult <2 x i64> %2, <i64 39, i64 39>
2729 %4 = sext <2 x i1> %3 to <2 x i64>
2733 define <2 x i64> @ugt_39_v2i64(<2 x i64> %0) {
2734 ; CHECK-LABEL: ugt_39_v2i64:
2736 ; CHECK-NEXT: cnt v0.16b, v0.16b
2737 ; CHECK-NEXT: mov w8, #39
2738 ; CHECK-NEXT: dup v1.2d, x8
2739 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2740 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2741 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2742 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2744 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2745 %3 = icmp ugt <2 x i64> %2, <i64 39, i64 39>
2746 %4 = sext <2 x i1> %3 to <2 x i64>
2750 define <2 x i64> @ult_40_v2i64(<2 x i64> %0) {
2751 ; CHECK-LABEL: ult_40_v2i64:
2753 ; CHECK-NEXT: cnt v0.16b, v0.16b
2754 ; CHECK-NEXT: mov w8, #40
2755 ; CHECK-NEXT: dup v1.2d, x8
2756 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2757 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2758 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2759 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2761 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2762 %3 = icmp ult <2 x i64> %2, <i64 40, i64 40>
2763 %4 = sext <2 x i1> %3 to <2 x i64>
2767 define <2 x i64> @ugt_40_v2i64(<2 x i64> %0) {
2768 ; CHECK-LABEL: ugt_40_v2i64:
2770 ; CHECK-NEXT: cnt v0.16b, v0.16b
2771 ; CHECK-NEXT: mov w8, #40
2772 ; CHECK-NEXT: dup v1.2d, x8
2773 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2774 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2775 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2776 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2778 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2779 %3 = icmp ugt <2 x i64> %2, <i64 40, i64 40>
2780 %4 = sext <2 x i1> %3 to <2 x i64>
2784 define <2 x i64> @ult_41_v2i64(<2 x i64> %0) {
2785 ; CHECK-LABEL: ult_41_v2i64:
2787 ; CHECK-NEXT: cnt v0.16b, v0.16b
2788 ; CHECK-NEXT: mov w8, #41
2789 ; CHECK-NEXT: dup v1.2d, x8
2790 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2791 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2792 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2793 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2795 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2796 %3 = icmp ult <2 x i64> %2, <i64 41, i64 41>
2797 %4 = sext <2 x i1> %3 to <2 x i64>
2801 define <2 x i64> @ugt_41_v2i64(<2 x i64> %0) {
2802 ; CHECK-LABEL: ugt_41_v2i64:
2804 ; CHECK-NEXT: cnt v0.16b, v0.16b
2805 ; CHECK-NEXT: mov w8, #41
2806 ; CHECK-NEXT: dup v1.2d, x8
2807 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2808 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2809 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2810 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2812 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2813 %3 = icmp ugt <2 x i64> %2, <i64 41, i64 41>
2814 %4 = sext <2 x i1> %3 to <2 x i64>
2818 define <2 x i64> @ult_42_v2i64(<2 x i64> %0) {
2819 ; CHECK-LABEL: ult_42_v2i64:
2821 ; CHECK-NEXT: cnt v0.16b, v0.16b
2822 ; CHECK-NEXT: mov w8, #42
2823 ; CHECK-NEXT: dup v1.2d, x8
2824 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2825 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2826 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2827 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2829 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2830 %3 = icmp ult <2 x i64> %2, <i64 42, i64 42>
2831 %4 = sext <2 x i1> %3 to <2 x i64>
2835 define <2 x i64> @ugt_42_v2i64(<2 x i64> %0) {
2836 ; CHECK-LABEL: ugt_42_v2i64:
2838 ; CHECK-NEXT: cnt v0.16b, v0.16b
2839 ; CHECK-NEXT: mov w8, #42
2840 ; CHECK-NEXT: dup v1.2d, x8
2841 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2842 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2843 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2844 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2846 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2847 %3 = icmp ugt <2 x i64> %2, <i64 42, i64 42>
2848 %4 = sext <2 x i1> %3 to <2 x i64>
2852 define <2 x i64> @ult_43_v2i64(<2 x i64> %0) {
2853 ; CHECK-LABEL: ult_43_v2i64:
2855 ; CHECK-NEXT: cnt v0.16b, v0.16b
2856 ; CHECK-NEXT: mov w8, #43
2857 ; CHECK-NEXT: dup v1.2d, x8
2858 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2859 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2860 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2861 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2863 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2864 %3 = icmp ult <2 x i64> %2, <i64 43, i64 43>
2865 %4 = sext <2 x i1> %3 to <2 x i64>
2869 define <2 x i64> @ugt_43_v2i64(<2 x i64> %0) {
2870 ; CHECK-LABEL: ugt_43_v2i64:
2872 ; CHECK-NEXT: cnt v0.16b, v0.16b
2873 ; CHECK-NEXT: mov w8, #43
2874 ; CHECK-NEXT: dup v1.2d, x8
2875 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2876 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2877 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2878 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2880 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2881 %3 = icmp ugt <2 x i64> %2, <i64 43, i64 43>
2882 %4 = sext <2 x i1> %3 to <2 x i64>
2886 define <2 x i64> @ult_44_v2i64(<2 x i64> %0) {
2887 ; CHECK-LABEL: ult_44_v2i64:
2889 ; CHECK-NEXT: cnt v0.16b, v0.16b
2890 ; CHECK-NEXT: mov w8, #44
2891 ; CHECK-NEXT: dup v1.2d, x8
2892 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2893 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2894 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2895 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2897 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2898 %3 = icmp ult <2 x i64> %2, <i64 44, i64 44>
2899 %4 = sext <2 x i1> %3 to <2 x i64>
2903 define <2 x i64> @ugt_44_v2i64(<2 x i64> %0) {
2904 ; CHECK-LABEL: ugt_44_v2i64:
2906 ; CHECK-NEXT: cnt v0.16b, v0.16b
2907 ; CHECK-NEXT: mov w8, #44
2908 ; CHECK-NEXT: dup v1.2d, x8
2909 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2910 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2911 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2912 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2914 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2915 %3 = icmp ugt <2 x i64> %2, <i64 44, i64 44>
2916 %4 = sext <2 x i1> %3 to <2 x i64>
2920 define <2 x i64> @ult_45_v2i64(<2 x i64> %0) {
2921 ; CHECK-LABEL: ult_45_v2i64:
2923 ; CHECK-NEXT: cnt v0.16b, v0.16b
2924 ; CHECK-NEXT: mov w8, #45
2925 ; CHECK-NEXT: dup v1.2d, x8
2926 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2927 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2928 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2929 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2931 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2932 %3 = icmp ult <2 x i64> %2, <i64 45, i64 45>
2933 %4 = sext <2 x i1> %3 to <2 x i64>
2937 define <2 x i64> @ugt_45_v2i64(<2 x i64> %0) {
2938 ; CHECK-LABEL: ugt_45_v2i64:
2940 ; CHECK-NEXT: cnt v0.16b, v0.16b
2941 ; CHECK-NEXT: mov w8, #45
2942 ; CHECK-NEXT: dup v1.2d, x8
2943 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2944 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2945 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2946 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2948 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2949 %3 = icmp ugt <2 x i64> %2, <i64 45, i64 45>
2950 %4 = sext <2 x i1> %3 to <2 x i64>
2954 define <2 x i64> @ult_46_v2i64(<2 x i64> %0) {
2955 ; CHECK-LABEL: ult_46_v2i64:
2957 ; CHECK-NEXT: cnt v0.16b, v0.16b
2958 ; CHECK-NEXT: mov w8, #46
2959 ; CHECK-NEXT: dup v1.2d, x8
2960 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2961 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2962 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2963 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2965 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2966 %3 = icmp ult <2 x i64> %2, <i64 46, i64 46>
2967 %4 = sext <2 x i1> %3 to <2 x i64>
2971 define <2 x i64> @ugt_46_v2i64(<2 x i64> %0) {
2972 ; CHECK-LABEL: ugt_46_v2i64:
2974 ; CHECK-NEXT: cnt v0.16b, v0.16b
2975 ; CHECK-NEXT: mov w8, #46
2976 ; CHECK-NEXT: dup v1.2d, x8
2977 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2978 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2979 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2980 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2982 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
2983 %3 = icmp ugt <2 x i64> %2, <i64 46, i64 46>
2984 %4 = sext <2 x i1> %3 to <2 x i64>
2988 define <2 x i64> @ult_47_v2i64(<2 x i64> %0) {
2989 ; CHECK-LABEL: ult_47_v2i64:
2991 ; CHECK-NEXT: cnt v0.16b, v0.16b
2992 ; CHECK-NEXT: mov w8, #47
2993 ; CHECK-NEXT: dup v1.2d, x8
2994 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
2995 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
2996 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
2997 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2999 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3000 %3 = icmp ult <2 x i64> %2, <i64 47, i64 47>
3001 %4 = sext <2 x i1> %3 to <2 x i64>
3005 define <2 x i64> @ugt_47_v2i64(<2 x i64> %0) {
3006 ; CHECK-LABEL: ugt_47_v2i64:
3008 ; CHECK-NEXT: cnt v0.16b, v0.16b
3009 ; CHECK-NEXT: mov w8, #47
3010 ; CHECK-NEXT: dup v1.2d, x8
3011 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3012 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3013 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3014 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
3016 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3017 %3 = icmp ugt <2 x i64> %2, <i64 47, i64 47>
3018 %4 = sext <2 x i1> %3 to <2 x i64>
3022 define <2 x i64> @ult_48_v2i64(<2 x i64> %0) {
3023 ; CHECK-LABEL: ult_48_v2i64:
3025 ; CHECK-NEXT: cnt v0.16b, v0.16b
3026 ; CHECK-NEXT: mov w8, #48
3027 ; CHECK-NEXT: dup v1.2d, x8
3028 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3029 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3030 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3031 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
3033 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3034 %3 = icmp ult <2 x i64> %2, <i64 48, i64 48>
3035 %4 = sext <2 x i1> %3 to <2 x i64>
3039 define <2 x i64> @ugt_48_v2i64(<2 x i64> %0) {
3040 ; CHECK-LABEL: ugt_48_v2i64:
3042 ; CHECK-NEXT: cnt v0.16b, v0.16b
3043 ; CHECK-NEXT: mov w8, #48
3044 ; CHECK-NEXT: dup v1.2d, x8
3045 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3046 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3047 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3048 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
3050 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3051 %3 = icmp ugt <2 x i64> %2, <i64 48, i64 48>
3052 %4 = sext <2 x i1> %3 to <2 x i64>
3056 define <2 x i64> @ult_49_v2i64(<2 x i64> %0) {
3057 ; CHECK-LABEL: ult_49_v2i64:
3059 ; CHECK-NEXT: cnt v0.16b, v0.16b
3060 ; CHECK-NEXT: mov w8, #49
3061 ; CHECK-NEXT: dup v1.2d, x8
3062 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3063 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3064 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3065 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
3067 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3068 %3 = icmp ult <2 x i64> %2, <i64 49, i64 49>
3069 %4 = sext <2 x i1> %3 to <2 x i64>
3073 define <2 x i64> @ugt_49_v2i64(<2 x i64> %0) {
3074 ; CHECK-LABEL: ugt_49_v2i64:
3076 ; CHECK-NEXT: cnt v0.16b, v0.16b
3077 ; CHECK-NEXT: mov w8, #49
3078 ; CHECK-NEXT: dup v1.2d, x8
3079 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3080 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3081 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3082 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
3084 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3085 %3 = icmp ugt <2 x i64> %2, <i64 49, i64 49>
3086 %4 = sext <2 x i1> %3 to <2 x i64>
3090 define <2 x i64> @ult_50_v2i64(<2 x i64> %0) {
3091 ; CHECK-LABEL: ult_50_v2i64:
3093 ; CHECK-NEXT: cnt v0.16b, v0.16b
3094 ; CHECK-NEXT: mov w8, #50
3095 ; CHECK-NEXT: dup v1.2d, x8
3096 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3097 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3098 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3099 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
3101 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3102 %3 = icmp ult <2 x i64> %2, <i64 50, i64 50>
3103 %4 = sext <2 x i1> %3 to <2 x i64>
3107 define <2 x i64> @ugt_50_v2i64(<2 x i64> %0) {
3108 ; CHECK-LABEL: ugt_50_v2i64:
3110 ; CHECK-NEXT: cnt v0.16b, v0.16b
3111 ; CHECK-NEXT: mov w8, #50
3112 ; CHECK-NEXT: dup v1.2d, x8
3113 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3114 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3115 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3116 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
3118 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3119 %3 = icmp ugt <2 x i64> %2, <i64 50, i64 50>
3120 %4 = sext <2 x i1> %3 to <2 x i64>
3124 define <2 x i64> @ult_51_v2i64(<2 x i64> %0) {
3125 ; CHECK-LABEL: ult_51_v2i64:
3127 ; CHECK-NEXT: cnt v0.16b, v0.16b
3128 ; CHECK-NEXT: mov w8, #51
3129 ; CHECK-NEXT: dup v1.2d, x8
3130 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3131 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3132 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3133 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
3135 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3136 %3 = icmp ult <2 x i64> %2, <i64 51, i64 51>
3137 %4 = sext <2 x i1> %3 to <2 x i64>
3141 define <2 x i64> @ugt_51_v2i64(<2 x i64> %0) {
3142 ; CHECK-LABEL: ugt_51_v2i64:
3144 ; CHECK-NEXT: cnt v0.16b, v0.16b
3145 ; CHECK-NEXT: mov w8, #51
3146 ; CHECK-NEXT: dup v1.2d, x8
3147 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3148 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3149 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3150 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
3152 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3153 %3 = icmp ugt <2 x i64> %2, <i64 51, i64 51>
3154 %4 = sext <2 x i1> %3 to <2 x i64>
3158 define <2 x i64> @ult_52_v2i64(<2 x i64> %0) {
3159 ; CHECK-LABEL: ult_52_v2i64:
3161 ; CHECK-NEXT: cnt v0.16b, v0.16b
3162 ; CHECK-NEXT: mov w8, #52
3163 ; CHECK-NEXT: dup v1.2d, x8
3164 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3165 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3166 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3167 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
3169 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3170 %3 = icmp ult <2 x i64> %2, <i64 52, i64 52>
3171 %4 = sext <2 x i1> %3 to <2 x i64>
3175 define <2 x i64> @ugt_52_v2i64(<2 x i64> %0) {
3176 ; CHECK-LABEL: ugt_52_v2i64:
3178 ; CHECK-NEXT: cnt v0.16b, v0.16b
3179 ; CHECK-NEXT: mov w8, #52
3180 ; CHECK-NEXT: dup v1.2d, x8
3181 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3182 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3183 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3184 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
3186 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3187 %3 = icmp ugt <2 x i64> %2, <i64 52, i64 52>
3188 %4 = sext <2 x i1> %3 to <2 x i64>
3192 define <2 x i64> @ult_53_v2i64(<2 x i64> %0) {
3193 ; CHECK-LABEL: ult_53_v2i64:
3195 ; CHECK-NEXT: cnt v0.16b, v0.16b
3196 ; CHECK-NEXT: mov w8, #53
3197 ; CHECK-NEXT: dup v1.2d, x8
3198 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3199 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3200 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3201 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
3203 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3204 %3 = icmp ult <2 x i64> %2, <i64 53, i64 53>
3205 %4 = sext <2 x i1> %3 to <2 x i64>
3209 define <2 x i64> @ugt_53_v2i64(<2 x i64> %0) {
3210 ; CHECK-LABEL: ugt_53_v2i64:
3212 ; CHECK-NEXT: cnt v0.16b, v0.16b
3213 ; CHECK-NEXT: mov w8, #53
3214 ; CHECK-NEXT: dup v1.2d, x8
3215 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3216 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3217 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3218 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
3220 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3221 %3 = icmp ugt <2 x i64> %2, <i64 53, i64 53>
3222 %4 = sext <2 x i1> %3 to <2 x i64>
3226 define <2 x i64> @ult_54_v2i64(<2 x i64> %0) {
3227 ; CHECK-LABEL: ult_54_v2i64:
3229 ; CHECK-NEXT: cnt v0.16b, v0.16b
3230 ; CHECK-NEXT: mov w8, #54
3231 ; CHECK-NEXT: dup v1.2d, x8
3232 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3233 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3234 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3235 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
3237 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3238 %3 = icmp ult <2 x i64> %2, <i64 54, i64 54>
3239 %4 = sext <2 x i1> %3 to <2 x i64>
3243 define <2 x i64> @ugt_54_v2i64(<2 x i64> %0) {
3244 ; CHECK-LABEL: ugt_54_v2i64:
3246 ; CHECK-NEXT: cnt v0.16b, v0.16b
3247 ; CHECK-NEXT: mov w8, #54
3248 ; CHECK-NEXT: dup v1.2d, x8
3249 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3250 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3251 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3252 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
3254 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3255 %3 = icmp ugt <2 x i64> %2, <i64 54, i64 54>
3256 %4 = sext <2 x i1> %3 to <2 x i64>
3260 define <2 x i64> @ult_55_v2i64(<2 x i64> %0) {
3261 ; CHECK-LABEL: ult_55_v2i64:
3263 ; CHECK-NEXT: cnt v0.16b, v0.16b
3264 ; CHECK-NEXT: mov w8, #55
3265 ; CHECK-NEXT: dup v1.2d, x8
3266 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3267 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3268 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3269 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
3271 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3272 %3 = icmp ult <2 x i64> %2, <i64 55, i64 55>
3273 %4 = sext <2 x i1> %3 to <2 x i64>
3277 define <2 x i64> @ugt_55_v2i64(<2 x i64> %0) {
3278 ; CHECK-LABEL: ugt_55_v2i64:
3280 ; CHECK-NEXT: cnt v0.16b, v0.16b
3281 ; CHECK-NEXT: mov w8, #55
3282 ; CHECK-NEXT: dup v1.2d, x8
3283 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3284 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3285 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3286 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
3288 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3289 %3 = icmp ugt <2 x i64> %2, <i64 55, i64 55>
3290 %4 = sext <2 x i1> %3 to <2 x i64>
3294 define <2 x i64> @ult_56_v2i64(<2 x i64> %0) {
3295 ; CHECK-LABEL: ult_56_v2i64:
3297 ; CHECK-NEXT: cnt v0.16b, v0.16b
3298 ; CHECK-NEXT: mov w8, #56
3299 ; CHECK-NEXT: dup v1.2d, x8
3300 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3301 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3302 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3303 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
3305 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3306 %3 = icmp ult <2 x i64> %2, <i64 56, i64 56>
3307 %4 = sext <2 x i1> %3 to <2 x i64>
3311 define <2 x i64> @ugt_56_v2i64(<2 x i64> %0) {
3312 ; CHECK-LABEL: ugt_56_v2i64:
3314 ; CHECK-NEXT: cnt v0.16b, v0.16b
3315 ; CHECK-NEXT: mov w8, #56
3316 ; CHECK-NEXT: dup v1.2d, x8
3317 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3318 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3319 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3320 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
3322 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3323 %3 = icmp ugt <2 x i64> %2, <i64 56, i64 56>
3324 %4 = sext <2 x i1> %3 to <2 x i64>
3328 define <2 x i64> @ult_57_v2i64(<2 x i64> %0) {
3329 ; CHECK-LABEL: ult_57_v2i64:
3331 ; CHECK-NEXT: cnt v0.16b, v0.16b
3332 ; CHECK-NEXT: mov w8, #57
3333 ; CHECK-NEXT: dup v1.2d, x8
3334 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3335 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3336 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3337 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
3339 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3340 %3 = icmp ult <2 x i64> %2, <i64 57, i64 57>
3341 %4 = sext <2 x i1> %3 to <2 x i64>
3345 define <2 x i64> @ugt_57_v2i64(<2 x i64> %0) {
3346 ; CHECK-LABEL: ugt_57_v2i64:
3348 ; CHECK-NEXT: cnt v0.16b, v0.16b
3349 ; CHECK-NEXT: mov w8, #57
3350 ; CHECK-NEXT: dup v1.2d, x8
3351 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3352 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3353 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3354 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
3356 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3357 %3 = icmp ugt <2 x i64> %2, <i64 57, i64 57>
3358 %4 = sext <2 x i1> %3 to <2 x i64>
3362 define <2 x i64> @ult_58_v2i64(<2 x i64> %0) {
3363 ; CHECK-LABEL: ult_58_v2i64:
3365 ; CHECK-NEXT: cnt v0.16b, v0.16b
3366 ; CHECK-NEXT: mov w8, #58
3367 ; CHECK-NEXT: dup v1.2d, x8
3368 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3369 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3370 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3371 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
3373 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3374 %3 = icmp ult <2 x i64> %2, <i64 58, i64 58>
3375 %4 = sext <2 x i1> %3 to <2 x i64>
3379 define <2 x i64> @ugt_58_v2i64(<2 x i64> %0) {
3380 ; CHECK-LABEL: ugt_58_v2i64:
3382 ; CHECK-NEXT: cnt v0.16b, v0.16b
3383 ; CHECK-NEXT: mov w8, #58
3384 ; CHECK-NEXT: dup v1.2d, x8
3385 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3386 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3387 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3388 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
3390 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3391 %3 = icmp ugt <2 x i64> %2, <i64 58, i64 58>
3392 %4 = sext <2 x i1> %3 to <2 x i64>
3396 define <2 x i64> @ult_59_v2i64(<2 x i64> %0) {
3397 ; CHECK-LABEL: ult_59_v2i64:
3399 ; CHECK-NEXT: cnt v0.16b, v0.16b
3400 ; CHECK-NEXT: mov w8, #59
3401 ; CHECK-NEXT: dup v1.2d, x8
3402 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3403 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3404 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3405 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
3407 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3408 %3 = icmp ult <2 x i64> %2, <i64 59, i64 59>
3409 %4 = sext <2 x i1> %3 to <2 x i64>
3413 define <2 x i64> @ugt_59_v2i64(<2 x i64> %0) {
3414 ; CHECK-LABEL: ugt_59_v2i64:
3416 ; CHECK-NEXT: cnt v0.16b, v0.16b
3417 ; CHECK-NEXT: mov w8, #59
3418 ; CHECK-NEXT: dup v1.2d, x8
3419 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3420 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3421 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3422 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
3424 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3425 %3 = icmp ugt <2 x i64> %2, <i64 59, i64 59>
3426 %4 = sext <2 x i1> %3 to <2 x i64>
3430 define <2 x i64> @ult_60_v2i64(<2 x i64> %0) {
3431 ; CHECK-LABEL: ult_60_v2i64:
3433 ; CHECK-NEXT: cnt v0.16b, v0.16b
3434 ; CHECK-NEXT: mov w8, #60
3435 ; CHECK-NEXT: dup v1.2d, x8
3436 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3437 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3438 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3439 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
3441 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3442 %3 = icmp ult <2 x i64> %2, <i64 60, i64 60>
3443 %4 = sext <2 x i1> %3 to <2 x i64>
3447 define <2 x i64> @ugt_60_v2i64(<2 x i64> %0) {
3448 ; CHECK-LABEL: ugt_60_v2i64:
3450 ; CHECK-NEXT: cnt v0.16b, v0.16b
3451 ; CHECK-NEXT: mov w8, #60
3452 ; CHECK-NEXT: dup v1.2d, x8
3453 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3454 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3455 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3456 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
3458 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3459 %3 = icmp ugt <2 x i64> %2, <i64 60, i64 60>
3460 %4 = sext <2 x i1> %3 to <2 x i64>
3464 define <2 x i64> @ult_61_v2i64(<2 x i64> %0) {
3465 ; CHECK-LABEL: ult_61_v2i64:
3467 ; CHECK-NEXT: cnt v0.16b, v0.16b
3468 ; CHECK-NEXT: mov w8, #61
3469 ; CHECK-NEXT: dup v1.2d, x8
3470 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3471 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3472 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3473 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
3475 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3476 %3 = icmp ult <2 x i64> %2, <i64 61, i64 61>
3477 %4 = sext <2 x i1> %3 to <2 x i64>
3481 define <2 x i64> @ugt_61_v2i64(<2 x i64> %0) {
3482 ; CHECK-LABEL: ugt_61_v2i64:
3484 ; CHECK-NEXT: cnt v0.16b, v0.16b
3485 ; CHECK-NEXT: mov w8, #61
3486 ; CHECK-NEXT: dup v1.2d, x8
3487 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3488 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3489 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3490 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
3492 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3493 %3 = icmp ugt <2 x i64> %2, <i64 61, i64 61>
3494 %4 = sext <2 x i1> %3 to <2 x i64>
3498 define <2 x i64> @ult_62_v2i64(<2 x i64> %0) {
3499 ; CHECK-LABEL: ult_62_v2i64:
3501 ; CHECK-NEXT: cnt v0.16b, v0.16b
3502 ; CHECK-NEXT: mov w8, #62
3503 ; CHECK-NEXT: dup v1.2d, x8
3504 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3505 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3506 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3507 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
3509 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3510 %3 = icmp ult <2 x i64> %2, <i64 62, i64 62>
3511 %4 = sext <2 x i1> %3 to <2 x i64>
3515 define <2 x i64> @ugt_62_v2i64(<2 x i64> %0) {
3516 ; CHECK-LABEL: ugt_62_v2i64:
3518 ; CHECK-NEXT: cnt v0.16b, v0.16b
3519 ; CHECK-NEXT: mov w8, #62
3520 ; CHECK-NEXT: dup v1.2d, x8
3521 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3522 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3523 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3524 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
3526 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3527 %3 = icmp ugt <2 x i64> %2, <i64 62, i64 62>
3528 %4 = sext <2 x i1> %3 to <2 x i64>
3532 define <2 x i64> @ult_63_v2i64(<2 x i64> %0) {
3533 ; CHECK-LABEL: ult_63_v2i64:
3535 ; CHECK-NEXT: cnt v0.16b, v0.16b
3536 ; CHECK-NEXT: mov w8, #63
3537 ; CHECK-NEXT: dup v1.2d, x8
3538 ; CHECK-NEXT: uaddlp v0.8h, v0.16b
3539 ; CHECK-NEXT: uaddlp v0.4s, v0.8h
3540 ; CHECK-NEXT: uaddlp v0.2d, v0.4s
3541 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
3543 %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
3544 %3 = icmp ult <2 x i64> %2, <i64 63, i64 63>
3545 %4 = sext <2 x i1> %3 to <2 x i64>
3549 declare <16 x i8> @llvm.ctpop.v16i8(<16 x i8>)
3550 declare <8 x i16> @llvm.ctpop.v8i16(<8 x i16>)
3551 declare <4 x i32> @llvm.ctpop.v4i32(<4 x i32>)
3552 declare <2 x i64> @llvm.ctpop.v2i64(<2 x i64>)