11; 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
44; RUN: llc -force-streaming-compatible < %s | FileCheck %s --check-prefix=NONEON-NOSVE
55
66target triple = "aarch64-unknown-linux-gnu"
@@ -61,10 +61,10 @@ define <8 x i8> @concat_v8i8(<4 x i8> %op1, <4 x i8> %op2) {
6161define <16 x i8 > @concat_v16i8 (<8 x i8 > %op1 , <8 x i8 > %op2 ) {
6262; CHECK-LABEL: concat_v16i8:
6363; CHECK: // %bb.0:
64+ ; CHECK-NEXT: // kill: def $d1 killed $d1 killed $z0_z1 def $z0_z1
6465; 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 }
6868; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
6969; CHECK-NEXT: ret
7070;
@@ -172,10 +172,10 @@ define <4 x i16> @concat_v4i16(<2 x i16> %op1, <2 x i16> %op2) {
172172define <8 x i16 > @concat_v8i16 (<4 x i16 > %op1 , <4 x i16 > %op2 ) {
173173; CHECK-LABEL: concat_v8i16:
174174; CHECK: // %bb.0:
175+ ; CHECK-NEXT: // kill: def $d1 killed $d1 killed $z0_z1 def $z0_z1
175176; 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 }
179179; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
180180; CHECK-NEXT: ret
181181;
@@ -270,10 +270,10 @@ define <2 x i32> @concat_v2i32(<1 x i32> %op1, <1 x i32> %op2) {
270270define <4 x i32 > @concat_v4i32 (<2 x i32 > %op1 , <2 x i32 > %op2 ) {
271271; CHECK-LABEL: concat_v4i32:
272272; CHECK: // %bb.0:
273+ ; CHECK-NEXT: // kill: def $d1 killed $d1 killed $z0_z1 def $z0_z1
273274; 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 }
277277; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
278278; CHECK-NEXT: ret
279279;
@@ -340,10 +340,10 @@ define void @concat_v16i32(ptr %a, ptr %b, ptr %c) {
340340define <2 x i64 > @concat_v2i64 (<1 x i64 > %op1 , <1 x i64 > %op2 ) {
341341; CHECK-LABEL: concat_v2i64:
342342; CHECK: // %bb.0:
343+ ; CHECK-NEXT: // kill: def $d1 killed $d1 killed $z0_z1 def $z0_z1
343344; 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 }
347347; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
348348; CHECK-NEXT: ret
349349;
@@ -406,17 +406,33 @@ define void @concat_v8i64(ptr %a, ptr %b, ptr %c) {
406406;
407407
408408define <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
420436;
421437; NONEON-NOSVE-LABEL: concat_v4f16:
422438; NONEON-NOSVE: // %bb.0:
@@ -436,10 +452,10 @@ define <4 x half> @concat_v4f16(<2 x half> %op1, <2 x half> %op2) {
436452define <8 x half > @concat_v8f16 (<4 x half > %op1 , <4 x half > %op2 ) {
437453; CHECK-LABEL: concat_v8f16:
438454; CHECK: // %bb.0:
455+ ; CHECK-NEXT: // kill: def $d1 killed $d1 killed $z0_z1 def $z0_z1
439456; 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 }
443459; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
444460; CHECK-NEXT: ret
445461;
@@ -534,10 +550,10 @@ define <2 x float> @concat_v2f32(<1 x float> %op1, <1 x float> %op2) {
534550define <4 x float > @concat_v4f32 (<2 x float > %op1 , <2 x float > %op2 ) {
535551; CHECK-LABEL: concat_v4f32:
536552; CHECK: // %bb.0:
553+ ; CHECK-NEXT: // kill: def $d1 killed $d1 killed $z0_z1 def $z0_z1
537554; 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 }
541557; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
542558; CHECK-NEXT: ret
543559;
@@ -604,10 +620,10 @@ define void @concat_v16f32(ptr %a, ptr %b, ptr %c) {
604620define <2 x double > @concat_v2f64 (<1 x double > %op1 , <1 x double > %op2 ) {
605621; CHECK-LABEL: concat_v2f64:
606622; CHECK: // %bb.0:
623+ ; CHECK-NEXT: // kill: def $d1 killed $d1 killed $z0_z1 def $z0_z1
607624; 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 }
611627; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
612628; CHECK-NEXT: ret
613629;
0 commit comments