1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
- ; RUN: llc -mattr=+sve -force-streaming-compatible < %s | FileCheck %s
3
- ; RUN: llc -mattr=+sme -force-streaming < %s | FileCheck %s
2
+ ; RUN: llc -mattr=+sve2 -force-streaming-compatible < %s | FileCheck %s --check-prefixes=CHECK,SVE2
3
+ ; RUN: llc -mattr=+sme -force-streaming < %s | FileCheck %s --check-prefixes=CHECK,SME
4
4
; RUN: llc -force-streaming-compatible < %s | FileCheck %s --check-prefix=NONEON-NOSVE
5
5
6
6
target triple = "aarch64-unknown-linux-gnu"
@@ -61,10 +61,10 @@ define <8 x i8> @concat_v8i8(<4 x i8> %op1, <4 x i8> %op2) {
61
61
define <16 x i8 > @concat_v16i8 (<8 x i8 > %op1 , <8 x i8 > %op2 ) {
62
62
; CHECK-LABEL: concat_v16i8:
63
63
; CHECK: // %bb.0:
64
+ ; CHECK-NEXT: // kill: def $d1 killed $d1 killed $z0_z1 def $z0_z1
64
65
; CHECK-NEXT: ptrue p0.b, vl8
65
- ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
66
- ; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
67
- ; CHECK-NEXT: splice z0.b, p0, z0.b, z1.b
66
+ ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0_z1 def $z0_z1
67
+ ; CHECK-NEXT: splice z0.b, p0, { z0.b, z1.b }
68
68
; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
69
69
; CHECK-NEXT: ret
70
70
;
@@ -172,10 +172,10 @@ define <4 x i16> @concat_v4i16(<2 x i16> %op1, <2 x i16> %op2) {
172
172
define <8 x i16 > @concat_v8i16 (<4 x i16 > %op1 , <4 x i16 > %op2 ) {
173
173
; CHECK-LABEL: concat_v8i16:
174
174
; CHECK: // %bb.0:
175
+ ; CHECK-NEXT: // kill: def $d1 killed $d1 killed $z0_z1 def $z0_z1
175
176
; CHECK-NEXT: ptrue p0.h, vl4
176
- ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
177
- ; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
178
- ; CHECK-NEXT: splice z0.h, p0, z0.h, z1.h
177
+ ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0_z1 def $z0_z1
178
+ ; CHECK-NEXT: splice z0.h, p0, { z0.h, z1.h }
179
179
; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
180
180
; CHECK-NEXT: ret
181
181
;
@@ -270,10 +270,10 @@ define <2 x i32> @concat_v2i32(<1 x i32> %op1, <1 x i32> %op2) {
270
270
define <4 x i32 > @concat_v4i32 (<2 x i32 > %op1 , <2 x i32 > %op2 ) {
271
271
; CHECK-LABEL: concat_v4i32:
272
272
; CHECK: // %bb.0:
273
+ ; CHECK-NEXT: // kill: def $d1 killed $d1 killed $z0_z1 def $z0_z1
273
274
; CHECK-NEXT: ptrue p0.s, vl2
274
- ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
275
- ; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
276
- ; CHECK-NEXT: splice z0.s, p0, z0.s, z1.s
275
+ ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0_z1 def $z0_z1
276
+ ; CHECK-NEXT: splice z0.s, p0, { z0.s, z1.s }
277
277
; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
278
278
; CHECK-NEXT: ret
279
279
;
@@ -340,10 +340,10 @@ define void @concat_v16i32(ptr %a, ptr %b, ptr %c) {
340
340
define <2 x i64 > @concat_v2i64 (<1 x i64 > %op1 , <1 x i64 > %op2 ) {
341
341
; CHECK-LABEL: concat_v2i64:
342
342
; CHECK: // %bb.0:
343
+ ; CHECK-NEXT: // kill: def $d1 killed $d1 killed $z0_z1 def $z0_z1
343
344
; CHECK-NEXT: ptrue p0.d, vl1
344
- ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
345
- ; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
346
- ; CHECK-NEXT: splice z0.d, p0, z0.d, z1.d
345
+ ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0_z1 def $z0_z1
346
+ ; CHECK-NEXT: splice z0.d, p0, { z0.d, z1.d }
347
347
; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
348
348
; CHECK-NEXT: ret
349
349
;
@@ -406,17 +406,33 @@ define void @concat_v8i64(ptr %a, ptr %b, ptr %c) {
406
406
;
407
407
408
408
define <4 x half > @concat_v4f16 (<2 x half > %op1 , <2 x half > %op2 ) {
409
- ; CHECK-LABEL: concat_v4f16:
410
- ; CHECK: // %bb.0:
411
- ; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
412
- ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
413
- ; CHECK-NEXT: mov z2.h, z1.h[1]
414
- ; CHECK-NEXT: mov z3.h, z0.h[1]
415
- ; CHECK-NEXT: zip1 z1.h, z1.h, z2.h
416
- ; CHECK-NEXT: zip1 z0.h, z0.h, z3.h
417
- ; CHECK-NEXT: zip1 z0.s, z0.s, z1.s
418
- ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
419
- ; CHECK-NEXT: ret
409
+ ; SVE2-LABEL: concat_v4f16:
410
+ ; SVE2: // %bb.0:
411
+ ; SVE2-NEXT: cnth x8
412
+ ; SVE2-NEXT: adrp x9, .LCPI15_0
413
+ ; SVE2-NEXT: adrp x10, .LCPI15_1
414
+ ; SVE2-NEXT: mov z2.h, w8
415
+ ; SVE2-NEXT: ldr q3, [x9, :lo12:.LCPI15_0]
416
+ ; SVE2-NEXT: ldr q4, [x10, :lo12:.LCPI15_1]
417
+ ; SVE2-NEXT: ptrue p0.h, vl8
418
+ ; SVE2-NEXT: // kill: def $d1 killed $d1 killed $z0_z1 def $z0_z1
419
+ ; SVE2-NEXT: // kill: def $d0 killed $d0 killed $z0_z1 def $z0_z1
420
+ ; SVE2-NEXT: mad z2.h, p0/m, z3.h, z4.h
421
+ ; SVE2-NEXT: tbl z0.h, { z0.h, z1.h }, z2.h
422
+ ; SVE2-NEXT: // kill: def $d0 killed $d0 killed $z0
423
+ ; SVE2-NEXT: ret
424
+ ;
425
+ ; SME-LABEL: concat_v4f16:
426
+ ; SME: // %bb.0:
427
+ ; SME-NEXT: // kill: def $d1 killed $d1 def $z1
428
+ ; SME-NEXT: // kill: def $d0 killed $d0 def $z0
429
+ ; SME-NEXT: mov z2.h, z1.h[1]
430
+ ; SME-NEXT: mov z3.h, z0.h[1]
431
+ ; SME-NEXT: zip1 z1.h, z1.h, z2.h
432
+ ; SME-NEXT: zip1 z0.h, z0.h, z3.h
433
+ ; SME-NEXT: zip1 z0.s, z0.s, z1.s
434
+ ; SME-NEXT: // kill: def $d0 killed $d0 killed $z0
435
+ ; SME-NEXT: ret
420
436
;
421
437
; NONEON-NOSVE-LABEL: concat_v4f16:
422
438
; NONEON-NOSVE: // %bb.0:
@@ -436,10 +452,10 @@ define <4 x half> @concat_v4f16(<2 x half> %op1, <2 x half> %op2) {
436
452
define <8 x half > @concat_v8f16 (<4 x half > %op1 , <4 x half > %op2 ) {
437
453
; CHECK-LABEL: concat_v8f16:
438
454
; CHECK: // %bb.0:
455
+ ; CHECK-NEXT: // kill: def $d1 killed $d1 killed $z0_z1 def $z0_z1
439
456
; CHECK-NEXT: ptrue p0.h, vl4
440
- ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
441
- ; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
442
- ; CHECK-NEXT: splice z0.h, p0, z0.h, z1.h
457
+ ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0_z1 def $z0_z1
458
+ ; CHECK-NEXT: splice z0.h, p0, { z0.h, z1.h }
443
459
; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
444
460
; CHECK-NEXT: ret
445
461
;
@@ -534,10 +550,10 @@ define <2 x float> @concat_v2f32(<1 x float> %op1, <1 x float> %op2) {
534
550
define <4 x float > @concat_v4f32 (<2 x float > %op1 , <2 x float > %op2 ) {
535
551
; CHECK-LABEL: concat_v4f32:
536
552
; CHECK: // %bb.0:
553
+ ; CHECK-NEXT: // kill: def $d1 killed $d1 killed $z0_z1 def $z0_z1
537
554
; CHECK-NEXT: ptrue p0.s, vl2
538
- ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
539
- ; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
540
- ; CHECK-NEXT: splice z0.s, p0, z0.s, z1.s
555
+ ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0_z1 def $z0_z1
556
+ ; CHECK-NEXT: splice z0.s, p0, { z0.s, z1.s }
541
557
; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
542
558
; CHECK-NEXT: ret
543
559
;
@@ -604,10 +620,10 @@ define void @concat_v16f32(ptr %a, ptr %b, ptr %c) {
604
620
define <2 x double > @concat_v2f64 (<1 x double > %op1 , <1 x double > %op2 ) {
605
621
; CHECK-LABEL: concat_v2f64:
606
622
; CHECK: // %bb.0:
623
+ ; CHECK-NEXT: // kill: def $d1 killed $d1 killed $z0_z1 def $z0_z1
607
624
; CHECK-NEXT: ptrue p0.d, vl1
608
- ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
609
- ; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
610
- ; CHECK-NEXT: splice z0.d, p0, z0.d, z1.d
625
+ ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0_z1 def $z0_z1
626
+ ; CHECK-NEXT: splice z0.d, p0, { z0.d, z1.d }
611
627
; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
612
628
; CHECK-NEXT: ret
613
629
;
0 commit comments