1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
2
; RUN: llc < %s -O0 -mtriple=aarch64-unknown-unknown | FileCheck %s
3
- ; RUN: llc < %s -mtriple=aarch64-unknown-unknown -mattr=+neon | FileCheck %s --check-prefix=NEON
4
- ; RUN: llc < %s -mtriple=aarch64-unknown-unknown -mattr=+neon,+dotprod | FileCheck %s --check-prefix=DOT
5
- ; RUN: llc < %s -mtriple=aarch64-unknown-unknown -mattr=+sve | FileCheck %s --check-prefix=SVE
3
+ ; RUN: llc < %s -mtriple=aarch64-unknown-unknown -mattr=+neon | FileCheck %s --check-prefix=CHECK, NEON
4
+ ; RUN: llc < %s -mtriple=aarch64-unknown-unknown -mattr=+neon,+dotprod | FileCheck %s --check-prefix=CHECK, DOT
5
+ ; RUN: llc < %s -mtriple=aarch64-unknown-unknown -mattr=+sve | FileCheck %s --check-prefix=CHECK, SVE
6
6
7
7
; Function Attrs: nobuiltin nounwind readonly
8
8
define i8 @popcount128 (ptr nocapture nonnull readonly %0 ) {
9
- ; CHECK-LABEL: popcount128:
10
- ; CHECK: // %bb.0: // %Entry
11
- ; CHECK-NEXT: ldr q0, [x0]
12
- ; CHECK-NEXT: cnt v0.16b, v0.16b
13
- ; CHECK-NEXT: uaddlv h0, v0.16b
14
- ; CHECK-NEXT: // kill: def $q0 killed $h0
15
- ; CHECK-NEXT: // kill: def $s0 killed $s0 killed $q0
16
- ; CHECK-NEXT: fmov w0, s0
17
- ; CHECK-NEXT: ret
18
- ;
19
9
; NEON-LABEL: popcount128:
20
10
; NEON: // %bb.0: // %Entry
21
11
; NEON-NEXT: ldr d0, [x0]
@@ -57,39 +47,6 @@ declare i128 @llvm.ctpop.i128(i128)
57
47
58
48
; Function Attrs: nobuiltin nounwind readonly
59
49
define i16 @popcount256 (ptr nocapture nonnull readonly %0 ) {
60
- ; CHECK-LABEL: popcount256:
61
- ; CHECK: // %bb.0: // %Entry
62
- ; CHECK-NEXT: ldr x11, [x0]
63
- ; CHECK-NEXT: ldr x10, [x0, #8]
64
- ; CHECK-NEXT: ldr x9, [x0, #16]
65
- ; CHECK-NEXT: ldr x8, [x0, #24]
66
- ; CHECK-NEXT: // implicit-def: $q1
67
- ; CHECK-NEXT: mov v1.d[0], x11
68
- ; CHECK-NEXT: mov v1.d[1], x10
69
- ; CHECK-NEXT: // implicit-def: $q0
70
- ; CHECK-NEXT: mov v0.d[0], x9
71
- ; CHECK-NEXT: mov v0.d[1], x8
72
- ; CHECK-NEXT: cnt v1.16b, v1.16b
73
- ; CHECK-NEXT: uaddlv h1, v1.16b
74
- ; CHECK-NEXT: // kill: def $q1 killed $h1
75
- ; CHECK-NEXT: // kill: def $s1 killed $s1 killed $q1
76
- ; CHECK-NEXT: fmov w0, s1
77
- ; CHECK-NEXT: mov w10, wzr
78
- ; CHECK-NEXT: mov w9, w0
79
- ; CHECK-NEXT: mov w8, w10
80
- ; CHECK-NEXT: bfi x9, x8, #32, #32
81
- ; CHECK-NEXT: cnt v0.16b, v0.16b
82
- ; CHECK-NEXT: uaddlv h0, v0.16b
83
- ; CHECK-NEXT: // kill: def $q0 killed $h0
84
- ; CHECK-NEXT: // kill: def $s0 killed $s0 killed $q0
85
- ; CHECK-NEXT: fmov w0, s0
86
- ; CHECK-NEXT: mov w8, w0
87
- ; CHECK-NEXT: // kill: def $x10 killed $w10
88
- ; CHECK-NEXT: bfi x8, x10, #32, #32
89
- ; CHECK-NEXT: adds x8, x8, x9
90
- ; CHECK-NEXT: mov w0, w8
91
- ; CHECK-NEXT: ret
92
- ;
93
50
; NEON-LABEL: popcount256:
94
51
; NEON: // %bb.0: // %Entry
95
52
; NEON-NEXT: ldr d0, [x0, #16]
@@ -151,23 +108,6 @@ Entry:
151
108
declare i256 @llvm.ctpop.i256 (i256 )
152
109
153
110
define <1 x i128 > @popcount1x128 (<1 x i128 > %0 ) {
154
- ; CHECK-LABEL: popcount1x128:
155
- ; CHECK: // %bb.0: // %Entry
156
- ; CHECK-NEXT: // implicit-def: $q0
157
- ; CHECK-NEXT: mov v0.d[0], x0
158
- ; CHECK-NEXT: mov v0.d[1], x1
159
- ; CHECK-NEXT: cnt v0.16b, v0.16b
160
- ; CHECK-NEXT: uaddlv h0, v0.16b
161
- ; CHECK-NEXT: // kill: def $q0 killed $h0
162
- ; CHECK-NEXT: mov x1, xzr
163
- ; CHECK-NEXT: // kill: def $s0 killed $s0 killed $q0
164
- ; CHECK-NEXT: fmov w0, s0
165
- ; CHECK-NEXT: mov w8, wzr
166
- ; CHECK-NEXT: // kill: def $x0 killed $w0
167
- ; CHECK-NEXT: // kill: def $x8 killed $w8
168
- ; CHECK-NEXT: bfi x0, x8, #32, #32
169
- ; CHECK-NEXT: ret
170
- ;
171
111
; NEON-LABEL: popcount1x128:
172
112
; NEON: // %bb.0: // %Entry
173
113
; NEON-NEXT: fmov d1, x0
@@ -211,14 +151,6 @@ Entry:
211
151
declare <1 x i128 > @llvm.ctpop.v1.i128 (<1 x i128 >)
212
152
213
153
define <2 x i64 > @popcount2x64 (<2 x i64 > %0 ) {
214
- ; CHECK-LABEL: popcount2x64:
215
- ; CHECK: // %bb.0: // %Entry
216
- ; CHECK-NEXT: cnt v0.16b, v0.16b
217
- ; CHECK-NEXT: uaddlp v0.8h, v0.16b
218
- ; CHECK-NEXT: uaddlp v0.4s, v0.8h
219
- ; CHECK-NEXT: uaddlp v0.2d, v0.4s
220
- ; CHECK-NEXT: ret
221
- ;
222
154
; NEON-LABEL: popcount2x64:
223
155
; NEON: // %bb.0: // %Entry
224
156
; NEON-NEXT: cnt v0.16b, v0.16b
@@ -251,13 +183,6 @@ Entry:
251
183
declare <2 x i64 > @llvm.ctpop.v2.i64 (<2 x i64 >)
252
184
253
185
define <4 x i32 > @popcount4x32 (<4 x i32 > %0 ) {
254
- ; CHECK-LABEL: popcount4x32:
255
- ; CHECK: // %bb.0: // %Entry
256
- ; CHECK-NEXT: cnt v0.16b, v0.16b
257
- ; CHECK-NEXT: uaddlp v0.8h, v0.16b
258
- ; CHECK-NEXT: uaddlp v0.4s, v0.8h
259
- ; CHECK-NEXT: ret
260
- ;
261
186
; NEON-LABEL: popcount4x32:
262
187
; NEON: // %bb.0: // %Entry
263
188
; NEON-NEXT: cnt v0.16b, v0.16b
@@ -287,13 +212,6 @@ Entry:
287
212
declare <4 x i32 > @llvm.ctpop.v4.i32 (<4 x i32 >)
288
213
289
214
define <2 x i32 > @popcount2x32 (<2 x i32 > %0 ) {
290
- ; CHECK-LABEL: popcount2x32:
291
- ; CHECK: // %bb.0: // %Entry
292
- ; CHECK-NEXT: cnt v0.8b, v0.8b
293
- ; CHECK-NEXT: uaddlp v0.4h, v0.8b
294
- ; CHECK-NEXT: uaddlp v0.2s, v0.4h
295
- ; CHECK-NEXT: ret
296
- ;
297
215
; NEON-LABEL: popcount2x32:
298
216
; NEON: // %bb.0: // %Entry
299
217
; NEON-NEXT: cnt v0.8b, v0.8b
@@ -329,24 +247,6 @@ define <8 x i16> @popcount8x16(<8 x i16> %0) {
329
247
; CHECK-NEXT: cnt v0.16b, v0.16b
330
248
; CHECK-NEXT: uaddlp v0.8h, v0.16b
331
249
; CHECK-NEXT: ret
332
- ;
333
- ; NEON-LABEL: popcount8x16:
334
- ; NEON: // %bb.0: // %Entry
335
- ; NEON-NEXT: cnt v0.16b, v0.16b
336
- ; NEON-NEXT: uaddlp v0.8h, v0.16b
337
- ; NEON-NEXT: ret
338
- ;
339
- ; DOT-LABEL: popcount8x16:
340
- ; DOT: // %bb.0: // %Entry
341
- ; DOT-NEXT: cnt v0.16b, v0.16b
342
- ; DOT-NEXT: uaddlp v0.8h, v0.16b
343
- ; DOT-NEXT: ret
344
- ;
345
- ; SVE-LABEL: popcount8x16:
346
- ; SVE: // %bb.0: // %Entry
347
- ; SVE-NEXT: cnt v0.16b, v0.16b
348
- ; SVE-NEXT: uaddlp v0.8h, v0.16b
349
- ; SVE-NEXT: ret
350
250
Entry:
351
251
%1 = tail call <8 x i16 > @llvm.ctpop.v8.i16 (<8 x i16 > %0 )
352
252
ret <8 x i16 > %1
@@ -360,24 +260,6 @@ define <4 x i16> @popcount4x16(<4 x i16> %0) {
360
260
; CHECK-NEXT: cnt v0.8b, v0.8b
361
261
; CHECK-NEXT: uaddlp v0.4h, v0.8b
362
262
; CHECK-NEXT: ret
363
- ;
364
- ; NEON-LABEL: popcount4x16:
365
- ; NEON: // %bb.0: // %Entry
366
- ; NEON-NEXT: cnt v0.8b, v0.8b
367
- ; NEON-NEXT: uaddlp v0.4h, v0.8b
368
- ; NEON-NEXT: ret
369
- ;
370
- ; DOT-LABEL: popcount4x16:
371
- ; DOT: // %bb.0: // %Entry
372
- ; DOT-NEXT: cnt v0.8b, v0.8b
373
- ; DOT-NEXT: uaddlp v0.4h, v0.8b
374
- ; DOT-NEXT: ret
375
- ;
376
- ; SVE-LABEL: popcount4x16:
377
- ; SVE: // %bb.0: // %Entry
378
- ; SVE-NEXT: cnt v0.8b, v0.8b
379
- ; SVE-NEXT: uaddlp v0.4h, v0.8b
380
- ; SVE-NEXT: ret
381
263
Entry:
382
264
%1 = tail call <4 x i16 > @llvm.ctpop.v4.i16 (<4 x i16 > %0 )
383
265
ret <4 x i16 > %1
0 commit comments