1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
- ; RUN: llc < %s -mtriple=aarch64 -aarch64-neon-syntax=generic | FileCheck %s -check-prefixes=CHECK,CHECK-SD
3
- ; RUN: llc < %s -mtriple=aarch64 -global-isel=1 -global-isel-abort=2 - aarch64-neon-syntax=generic 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-GI
2
+ ; RUN: llc < %s -mtriple=aarch64 -aarch64-neon-syntax=generic | FileCheck %s -check-prefixes=CHECK,SDAG
3
+ ; RUN: llc < %s -mtriple=aarch64 -global-isel=1 -aarch64-neon-syntax=generic | FileCheck %s --check-prefixes=CHECK,GISEL
4
4
5
5
declare i8 @llvm.vector.reduce.add.v2i8 (<2 x i8 >)
6
6
declare i8 @llvm.vector.reduce.add.v3i8 (<3 x i8 >)
@@ -22,15 +22,6 @@ declare i64 @llvm.vector.reduce.add.v3i64(<3 x i64>)
22
22
declare i64 @llvm.vector.reduce.add.v4i64 (<4 x i64 >)
23
23
declare i128 @llvm.vector.reduce.add.v2i128 (<2 x i128 >)
24
24
25
- ; CHECK-GI: warning: Instruction selection used fallback path for addv_v2i8
26
- ; CHECK-GI-NEXT: warning: Instruction selection used fallback path for addv_v3i8
27
- ; CHECK-GI-NEXT: warning: Instruction selection used fallback path for addv_v4i8
28
- ; CHECK-GI-NEXT: warning: Instruction selection used fallback path for addv_v2i16
29
- ; CHECK-GI-NEXT: warning: Instruction selection used fallback path for addv_v3i16
30
- ; CHECK-GI-NEXT: warning: Instruction selection used fallback path for addv_v3i32
31
- ; CHECK-GI-NEXT: warning: Instruction selection used fallback path for addv_v3i64
32
- ; CHECK-GI-NEXT: warning: Instruction selection used fallback path for addv_v2i128
33
-
34
25
35
26
define i8 @add_B (ptr %arr ) {
36
27
; CHECK-LABEL: add_B:
@@ -256,15 +247,26 @@ entry:
256
247
}
257
248
258
249
define i8 @addv_v3i8 (<3 x i8 > %a ) {
259
- ; CHECK-LABEL: addv_v3i8:
260
- ; CHECK: // %bb.0: // %entry
261
- ; CHECK-NEXT: movi v0.2d, #0000000000000000
262
- ; CHECK-NEXT: mov v0.h[0], w0
263
- ; CHECK-NEXT: mov v0.h[1], w1
264
- ; CHECK-NEXT: mov v0.h[2], w2
265
- ; CHECK-NEXT: addv h0, v0.4h
266
- ; CHECK-NEXT: fmov w0, s0
267
- ; CHECK-NEXT: ret
250
+ ; SDAG-LABEL: addv_v3i8:
251
+ ; SDAG: // %bb.0: // %entry
252
+ ; SDAG-NEXT: movi v0.2d, #0000000000000000
253
+ ; SDAG-NEXT: mov v0.h[0], w0
254
+ ; SDAG-NEXT: mov v0.h[1], w1
255
+ ; SDAG-NEXT: mov v0.h[2], w2
256
+ ; SDAG-NEXT: addv h0, v0.4h
257
+ ; SDAG-NEXT: fmov w0, s0
258
+ ; SDAG-NEXT: ret
259
+ ;
260
+ ; GISEL-LABEL: addv_v3i8:
261
+ ; GISEL: // %bb.0: // %entry
262
+ ; GISEL-NEXT: fmov s0, w0
263
+ ; GISEL-NEXT: mov w8, #0 // =0x0
264
+ ; GISEL-NEXT: mov v0.h[1], w1
265
+ ; GISEL-NEXT: mov v0.h[2], w2
266
+ ; GISEL-NEXT: mov v0.h[3], w8
267
+ ; GISEL-NEXT: addv h0, v0.4h
268
+ ; GISEL-NEXT: fmov w0, s0
269
+ ; GISEL-NEXT: ret
268
270
entry:
269
271
%arg1 = call i8 @llvm.vector.reduce.add.v3i8 (<3 x i8 > %a )
270
272
ret i8 %arg1
@@ -327,13 +329,22 @@ entry:
327
329
}
328
330
329
331
define i16 @addv_v3i16 (<3 x i16 > %a ) {
330
- ; CHECK-LABEL: addv_v3i16:
331
- ; CHECK: // %bb.0: // %entry
332
- ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
333
- ; CHECK-NEXT: mov v0.h[3], wzr
334
- ; CHECK-NEXT: addv h0, v0.4h
335
- ; CHECK-NEXT: fmov w0, s0
336
- ; CHECK-NEXT: ret
332
+ ; SDAG-LABEL: addv_v3i16:
333
+ ; SDAG: // %bb.0: // %entry
334
+ ; SDAG-NEXT: // kill: def $d0 killed $d0 def $q0
335
+ ; SDAG-NEXT: mov v0.h[3], wzr
336
+ ; SDAG-NEXT: addv h0, v0.4h
337
+ ; SDAG-NEXT: fmov w0, s0
338
+ ; SDAG-NEXT: ret
339
+ ;
340
+ ; GISEL-LABEL: addv_v3i16:
341
+ ; GISEL: // %bb.0: // %entry
342
+ ; GISEL-NEXT: // kill: def $d0 killed $d0 def $q0
343
+ ; GISEL-NEXT: mov w8, #0 // =0x0
344
+ ; GISEL-NEXT: mov v0.h[3], w8
345
+ ; GISEL-NEXT: addv h0, v0.4h
346
+ ; GISEL-NEXT: fmov w0, s0
347
+ ; GISEL-NEXT: ret
337
348
entry:
338
349
%arg1 = call i16 @llvm.vector.reduce.add.v3i16 (<3 x i16 > %a )
339
350
ret i16 %arg1
@@ -431,17 +442,29 @@ entry:
431
442
}
432
443
433
444
define i64 @addv_v3i64 (<3 x i64 > %a ) {
434
- ; CHECK-LABEL: addv_v3i64:
435
- ; CHECK: // %bb.0: // %entry
436
- ; CHECK-NEXT: // kill: def $d2 killed $d2 def $q2
437
- ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
438
- ; CHECK-NEXT: // kill: def $d1 killed $d1 def $q1
439
- ; CHECK-NEXT: mov v0.d[1], v1.d[0]
440
- ; CHECK-NEXT: mov v2.d[1], xzr
441
- ; CHECK-NEXT: add v0.2d, v0.2d, v2.2d
442
- ; CHECK-NEXT: addp d0, v0.2d
443
- ; CHECK-NEXT: fmov x0, d0
444
- ; CHECK-NEXT: ret
445
+ ; SDAG-LABEL: addv_v3i64:
446
+ ; SDAG: // %bb.0: // %entry
447
+ ; SDAG-NEXT: // kill: def $d2 killed $d2 def $q2
448
+ ; SDAG-NEXT: // kill: def $d0 killed $d0 def $q0
449
+ ; SDAG-NEXT: // kill: def $d1 killed $d1 def $q1
450
+ ; SDAG-NEXT: mov v0.d[1], v1.d[0]
451
+ ; SDAG-NEXT: mov v2.d[1], xzr
452
+ ; SDAG-NEXT: add v0.2d, v0.2d, v2.2d
453
+ ; SDAG-NEXT: addp d0, v0.2d
454
+ ; SDAG-NEXT: fmov x0, d0
455
+ ; SDAG-NEXT: ret
456
+ ;
457
+ ; GISEL-LABEL: addv_v3i64:
458
+ ; GISEL: // %bb.0: // %entry
459
+ ; GISEL-NEXT: // kill: def $d0 killed $d0 def $q0
460
+ ; GISEL-NEXT: // kill: def $d2 killed $d2 def $q2
461
+ ; GISEL-NEXT: // kill: def $d1 killed $d1 def $q1
462
+ ; GISEL-NEXT: mov v0.d[1], v1.d[0]
463
+ ; GISEL-NEXT: mov v2.d[1], xzr
464
+ ; GISEL-NEXT: add v0.2d, v0.2d, v2.2d
465
+ ; GISEL-NEXT: addp d0, v0.2d
466
+ ; GISEL-NEXT: fmov x0, d0
467
+ ; GISEL-NEXT: ret
445
468
entry:
446
469
%arg1 = call i64 @llvm.vector.reduce.add.v3i64 (<3 x i64 > %a )
447
470
ret i64 %arg1
0 commit comments