https://github.com/Amichaxx created https://github.com/llvm/llvm-project/pull/151703
When the target enables +sme2p2, the svcompact intrinsic is now available in streaming SVE mode. Amended existing ll tests sve-intrinsics-perm-select.ll and sve2p2-intrinsics.ll. Included Sema test acle_sve_compact.cpp. >From 4ecc2bcf87e9edca8a831cd253401f56ab799af9 Mon Sep 17 00:00:00 2001 From: Amina Chabane <amina.chab...@arm.com> Date: Fri, 1 Aug 2025 14:11:19 +0000 Subject: [PATCH] [AArch64] Updated predication of SVE Compact intrinsic to be available in streaming mode. Included Sema test acle_sve_compact.cpp. Amended existing ll tests sve-intrinsics-perm-select.ll and sve2p2-intrinsics.ll. --- clang/include/clang/Basic/arm_sve.td | 4 +- .../acle_sve_compact.cpp | 12 ++ .../AArch64/sve-intrinsics-perm-select.ll | 181 ++++++++++++++++-- .../test/CodeGen/AArch64/sve2p2-intrinsics.ll | 2 +- 4 files changed, 182 insertions(+), 17 deletions(-) create mode 100644 clang/test/Sema/aarch64-sve-intrinsics/acle_sve_compact.cpp diff --git a/clang/include/clang/Basic/arm_sve.td b/clang/include/clang/Basic/arm_sve.td index 76fd072a41d8b..3d28e4708cf76 100644 --- a/clang/include/clang/Basic/arm_sve.td +++ b/clang/include/clang/Basic/arm_sve.td @@ -1041,8 +1041,8 @@ defm SVCLASTA_N : SVEPerm<"svclasta[_n_{d}]", "sPsd", "aarch64_sve_clasta_n">; defm SVCLASTB : SVEPerm<"svclastb[_{d}]", "dPdd", "aarch64_sve_clastb">; defm SVCLASTB_N : SVEPerm<"svclastb[_n_{d}]", "sPsd", "aarch64_sve_clastb_n">; -let SVETargetGuard = "sve", SMETargetGuard = InvalidMode in { -def SVCOMPACT : SInst<"svcompact[_{d}]", "dPd", "ilUiUlfd", MergeNone, "aarch64_sve_compact">; +let SVETargetGuard = "sve", SMETargetGuard = "sme2p2" in { +def SVCOMPACT : SInst<"svcompact[_{d}]", "dPd", "ilUiUlfd", MergeNone, "aarch64_sve_compact", [VerifyRuntimeMode]>; } // Note: svdup_lane is implemented using the intrinsic for TBL to represent a diff --git a/clang/test/Sema/aarch64-sve-intrinsics/acle_sve_compact.cpp b/clang/test/Sema/aarch64-sve-intrinsics/acle_sve_compact.cpp new file mode 100644 index 0000000000000..b301e1622f326 --- /dev/null +++ b/clang/test/Sema/aarch64-sve-intrinsics/acle_sve_compact.cpp @@ -0,0 +1,12 @@ +// RUN: %clang_cc1 -triple aarch64-none-linux-gnu \ +// RUN: -target-feature +sve -target-feature +sme -target-feature +ssve -target-feature +sme2p2 \ +// RUN: -fsyntax-only -verify %s +// REQUIRES: aarch64-registered-target +// expected-no-diagnostics + + +#include <arm_sve.h> + +void test_svcompact_streaming(svbool_t pg, svfloat32_t op) __arm_streaming { + svcompact(pg, op); +} \ No newline at end of file diff --git a/llvm/test/CodeGen/AArch64/sve-intrinsics-perm-select.ll b/llvm/test/CodeGen/AArch64/sve-intrinsics-perm-select.ll index ef31badb5e1f5..573c5af4a872b 100644 --- a/llvm/test/CodeGen/AArch64/sve-intrinsics-perm-select.ll +++ b/llvm/test/CodeGen/AArch64/sve-intrinsics-perm-select.ll @@ -1,6 +1,7 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s --check-prefixes=CHECK,SVE ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2 < %s | FileCheck %s --check-prefixes=CHECK,SVE2 +; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme2p2,+sme -force-streaming < %s | FileCheck %s --check-prefixes=CHECK,SSVE ; ; CLASTA (Vectors) @@ -586,6 +587,14 @@ define <vscale x 2 x i64> @dupq_i64_range(<vscale x 2 x i64> %a) { ; SVE2-NEXT: add z1.d, z1.d, #8 // =0x8 ; SVE2-NEXT: tbl z0.d, { z0.d }, z1.d ; SVE2-NEXT: ret +; +; SSVE-LABEL: dupq_i64_range: +; SSVE: // %bb.0: +; SSVE-NEXT: index z1.d, #0, #1 +; SSVE-NEXT: and z1.d, z1.d, #0x1 +; SSVE-NEXT: add z1.d, z1.d, #8 // =0x8 +; SSVE-NEXT: tbl z0.d, { z0.d }, z1.d +; SSVE-NEXT: ret %out = call <vscale x 2 x i64> @llvm.aarch64.sve.dupq.lane.nxv2i64(<vscale x 2 x i64> %a, i64 4) ret <vscale x 2 x i64> %out } @@ -594,13 +603,29 @@ define <vscale x 2 x i64> @dupq_i64_range(<vscale x 2 x i64> %a) { ; define dso_local <vscale x 4 x float> @dupq_f32_repeat_complex(float %x, float %y) { -; CHECK-LABEL: dupq_f32_repeat_complex: -; CHECK: // %bb.0: -; CHECK-NEXT: // kill: def $s0 killed $s0 def $z0 -; CHECK-NEXT: // kill: def $s1 killed $s1 def $q1 -; CHECK-NEXT: mov v0.s[1], v1.s[0] -; CHECK-NEXT: mov z0.d, d0 -; CHECK-NEXT: ret +; SVE-LABEL: dupq_f32_repeat_complex: +; SVE: // %bb.0: +; SVE-NEXT: // kill: def $s0 killed $s0 def $z0 +; SVE-NEXT: // kill: def $s1 killed $s1 def $q1 +; SVE-NEXT: mov v0.s[1], v1.s[0] +; SVE-NEXT: mov z0.d, d0 +; SVE-NEXT: ret +; +; SVE2-LABEL: dupq_f32_repeat_complex: +; SVE2: // %bb.0: +; SVE2-NEXT: // kill: def $s0 killed $s0 def $z0 +; SVE2-NEXT: // kill: def $s1 killed $s1 def $q1 +; SVE2-NEXT: mov v0.s[1], v1.s[0] +; SVE2-NEXT: mov z0.d, d0 +; SVE2-NEXT: ret +; +; SSVE-LABEL: dupq_f32_repeat_complex: +; SSVE: // %bb.0: +; SSVE-NEXT: // kill: def $s0 killed $s0 def $z0 +; SSVE-NEXT: // kill: def $s1 killed $s1 def $z1 +; SSVE-NEXT: zip1 z0.s, z0.s, z1.s +; SSVE-NEXT: mov z0.d, d0 +; SSVE-NEXT: ret %1 = insertelement <4 x float> poison, float %x, i64 0 %2 = insertelement <4 x float> %1, float %y, i64 1 %3 = call <vscale x 4 x float> @llvm.vector.insert.nxv4f32.v4f32(<vscale x 4 x float> poison, <4 x float> %2, i64 0) @@ -611,13 +636,29 @@ define dso_local <vscale x 4 x float> @dupq_f32_repeat_complex(float %x, float % } define dso_local <vscale x 8 x half> @dupq_f16_repeat_complex(half %x, half %y) { -; CHECK-LABEL: dupq_f16_repeat_complex: -; CHECK: // %bb.0: -; CHECK-NEXT: // kill: def $h0 killed $h0 def $z0 -; CHECK-NEXT: // kill: def $h1 killed $h1 def $q1 -; CHECK-NEXT: mov v0.h[1], v1.h[0] -; CHECK-NEXT: mov z0.s, s0 -; CHECK-NEXT: ret +; SVE-LABEL: dupq_f16_repeat_complex: +; SVE: // %bb.0: +; SVE-NEXT: // kill: def $h0 killed $h0 def $z0 +; SVE-NEXT: // kill: def $h1 killed $h1 def $q1 +; SVE-NEXT: mov v0.h[1], v1.h[0] +; SVE-NEXT: mov z0.s, s0 +; SVE-NEXT: ret +; +; SVE2-LABEL: dupq_f16_repeat_complex: +; SVE2: // %bb.0: +; SVE2-NEXT: // kill: def $h0 killed $h0 def $z0 +; SVE2-NEXT: // kill: def $h1 killed $h1 def $q1 +; SVE2-NEXT: mov v0.h[1], v1.h[0] +; SVE2-NEXT: mov z0.s, s0 +; SVE2-NEXT: ret +; +; SSVE-LABEL: dupq_f16_repeat_complex: +; SSVE: // %bb.0: +; SSVE-NEXT: // kill: def $h0 killed $h0 def $z0 +; SSVE-NEXT: // kill: def $h1 killed $h1 def $z1 +; SSVE-NEXT: zip1 z0.h, z0.h, z1.h +; SSVE-NEXT: mov z0.s, s0 +; SSVE-NEXT: ret %1 = insertelement <8 x half> poison, half %x, i64 0 %2 = insertelement <8 x half> %1, half %y, i64 1 %3 = call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.v8f16(<vscale x 8 x half> poison, <8 x half> %2, i64 0) @@ -639,6 +680,13 @@ define <vscale x 16 x i8> @ext_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) ; SVE2-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 ; SVE2-NEXT: ext z0.b, { z0.b, z1.b }, #255 ; SVE2-NEXT: ret +; +; SSVE-LABEL: ext_i8: +; SSVE: // %bb.0: +; SSVE-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: ext z0.b, { z0.b, z1.b }, #255 +; SSVE-NEXT: ret %out = call <vscale x 16 x i8> @llvm.aarch64.sve.ext.nxv16i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b, i32 255) @@ -657,6 +705,13 @@ define <vscale x 8 x i16> @ext_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) ; SVE2-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 ; SVE2-NEXT: ext z0.b, { z0.b, z1.b }, #0 ; SVE2-NEXT: ret +; +; SSVE-LABEL: ext_i16: +; SSVE: // %bb.0: +; SSVE-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: ext z0.b, { z0.b, z1.b }, #0 +; SSVE-NEXT: ret %out = call <vscale x 8 x i16> @llvm.aarch64.sve.ext.nxv8i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b, i32 0) @@ -675,6 +730,13 @@ define <vscale x 4 x i32> @ext_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) ; SVE2-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 ; SVE2-NEXT: ext z0.b, { z0.b, z1.b }, #4 ; SVE2-NEXT: ret +; +; SSVE-LABEL: ext_i32: +; SSVE: // %bb.0: +; SSVE-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: ext z0.b, { z0.b, z1.b }, #4 +; SSVE-NEXT: ret %out = call <vscale x 4 x i32> @llvm.aarch64.sve.ext.nxv4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b, i32 1) @@ -693,6 +755,13 @@ define <vscale x 2 x i64> @ext_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) ; SVE2-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 ; SVE2-NEXT: ext z0.b, { z0.b, z1.b }, #16 ; SVE2-NEXT: ret +; +; SSVE-LABEL: ext_i64: +; SSVE: // %bb.0: +; SSVE-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: ext z0.b, { z0.b, z1.b }, #16 +; SSVE-NEXT: ret %out = call <vscale x 2 x i64> @llvm.aarch64.sve.ext.nxv2i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b, i32 2) @@ -711,6 +780,13 @@ define <vscale x 8 x bfloat> @ext_bf16(<vscale x 8 x bfloat> %a, <vscale x 8 x b ; SVE2-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 ; SVE2-NEXT: ext z0.b, { z0.b, z1.b }, #6 ; SVE2-NEXT: ret +; +; SSVE-LABEL: ext_bf16: +; SSVE: // %bb.0: +; SSVE-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: ext z0.b, { z0.b, z1.b }, #6 +; SSVE-NEXT: ret %out = call <vscale x 8 x bfloat> @llvm.aarch64.sve.ext.nxv8bf16(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b, i32 3) @@ -729,6 +805,13 @@ define <vscale x 8 x half> @ext_f16(<vscale x 8 x half> %a, <vscale x 8 x half> ; SVE2-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 ; SVE2-NEXT: ext z0.b, { z0.b, z1.b }, #6 ; SVE2-NEXT: ret +; +; SSVE-LABEL: ext_f16: +; SSVE: // %bb.0: +; SSVE-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: ext z0.b, { z0.b, z1.b }, #6 +; SSVE-NEXT: ret %out = call <vscale x 8 x half> @llvm.aarch64.sve.ext.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b, i32 3) @@ -747,6 +830,13 @@ define <vscale x 4 x float> @ext_f32(<vscale x 4 x float> %a, <vscale x 4 x floa ; SVE2-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 ; SVE2-NEXT: ext z0.b, { z0.b, z1.b }, #16 ; SVE2-NEXT: ret +; +; SSVE-LABEL: ext_f32: +; SSVE: // %bb.0: +; SSVE-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: ext z0.b, { z0.b, z1.b }, #16 +; SSVE-NEXT: ret %out = call <vscale x 4 x float> @llvm.aarch64.sve.ext.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b, i32 4) @@ -765,6 +855,13 @@ define <vscale x 2 x double> @ext_f64(<vscale x 2 x double> %a, <vscale x 2 x do ; SVE2-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 ; SVE2-NEXT: ext z0.b, { z0.b, z1.b }, #40 ; SVE2-NEXT: ret +; +; SSVE-LABEL: ext_f64: +; SSVE: // %bb.0: +; SSVE-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: ext z0.b, { z0.b, z1.b }, #40 +; SSVE-NEXT: ret %out = call <vscale x 2 x double> @llvm.aarch64.sve.ext.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b, i32 5) @@ -1158,6 +1255,13 @@ define <vscale x 16 x i8> @splice_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> ; SVE2-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 ; SVE2-NEXT: splice z0.b, p0, { z0.b, z1.b } ; SVE2-NEXT: ret +; +; SSVE-LABEL: splice_i8: +; SSVE: // %bb.0: +; SSVE-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: splice z0.b, p0, { z0.b, z1.b } +; SSVE-NEXT: ret %out = call <vscale x 16 x i8> @llvm.aarch64.sve.splice.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) @@ -1176,6 +1280,13 @@ define <vscale x 8 x i16> @splice_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> ; SVE2-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 ; SVE2-NEXT: splice z0.h, p0, { z0.h, z1.h } ; SVE2-NEXT: ret +; +; SSVE-LABEL: splice_i16: +; SSVE: // %bb.0: +; SSVE-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: splice z0.h, p0, { z0.h, z1.h } +; SSVE-NEXT: ret %out = call <vscale x 8 x i16> @llvm.aarch64.sve.splice.nxv8i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 8 x i16> %b) @@ -1194,6 +1305,13 @@ define <vscale x 4 x i32> @splice_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> ; SVE2-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 ; SVE2-NEXT: splice z0.s, p0, { z0.s, z1.s } ; SVE2-NEXT: ret +; +; SSVE-LABEL: splice_i32: +; SSVE: // %bb.0: +; SSVE-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: splice z0.s, p0, { z0.s, z1.s } +; SSVE-NEXT: ret %out = call <vscale x 4 x i32> @llvm.aarch64.sve.splice.nxv4i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b) @@ -1212,6 +1330,13 @@ define <vscale x 2 x i64> @splice_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> ; SVE2-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 ; SVE2-NEXT: splice z0.d, p0, { z0.d, z1.d } ; SVE2-NEXT: ret +; +; SSVE-LABEL: splice_i64: +; SSVE: // %bb.0: +; SSVE-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: splice z0.d, p0, { z0.d, z1.d } +; SSVE-NEXT: ret %out = call <vscale x 2 x i64> @llvm.aarch64.sve.splice.nxv2i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) @@ -1230,6 +1355,13 @@ define <vscale x 8 x bfloat> @splice_bf16(<vscale x 8 x i1> %pg, <vscale x 8 x b ; SVE2-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 ; SVE2-NEXT: splice z0.h, p0, { z0.h, z1.h } ; SVE2-NEXT: ret +; +; SSVE-LABEL: splice_bf16: +; SSVE: // %bb.0: +; SSVE-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: splice z0.h, p0, { z0.h, z1.h } +; SSVE-NEXT: ret %out = call <vscale x 8 x bfloat> @llvm.aarch64.sve.splice.nxv8bf16(<vscale x 8 x i1> %pg, <vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b) @@ -1248,6 +1380,13 @@ define <vscale x 8 x half> @splice_f16(<vscale x 8 x i1> %pg, <vscale x 8 x half ; SVE2-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 ; SVE2-NEXT: splice z0.h, p0, { z0.h, z1.h } ; SVE2-NEXT: ret +; +; SSVE-LABEL: splice_f16: +; SSVE: // %bb.0: +; SSVE-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: splice z0.h, p0, { z0.h, z1.h } +; SSVE-NEXT: ret %out = call <vscale x 8 x half> @llvm.aarch64.sve.splice.nxv8f16(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b) @@ -1266,6 +1405,13 @@ define <vscale x 4 x float> @splice_f32(<vscale x 4 x i1> %pg, <vscale x 4 x flo ; SVE2-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 ; SVE2-NEXT: splice z0.s, p0, { z0.s, z1.s } ; SVE2-NEXT: ret +; +; SSVE-LABEL: splice_f32: +; SSVE: // %bb.0: +; SSVE-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: splice z0.s, p0, { z0.s, z1.s } +; SSVE-NEXT: ret %out = call <vscale x 4 x float> @llvm.aarch64.sve.splice.nxv4f32(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b) @@ -1284,6 +1430,13 @@ define <vscale x 2 x double> @splice_f64(<vscale x 2 x i1> %pg, <vscale x 2 x do ; SVE2-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 ; SVE2-NEXT: splice z0.d, p0, { z0.d, z1.d } ; SVE2-NEXT: ret +; +; SSVE-LABEL: splice_f64: +; SSVE: // %bb.0: +; SSVE-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 +; SSVE-NEXT: splice z0.d, p0, { z0.d, z1.d } +; SSVE-NEXT: ret %out = call <vscale x 2 x double> @llvm.aarch64.sve.splice.nxv2f64(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b) diff --git a/llvm/test/CodeGen/AArch64/sve2p2-intrinsics.ll b/llvm/test/CodeGen/AArch64/sve2p2-intrinsics.ll index 6017070b114a5..464cdd6605b0e 100644 --- a/llvm/test/CodeGen/AArch64/sve2p2-intrinsics.ll +++ b/llvm/test/CodeGen/AArch64/sve2p2-intrinsics.ll @@ -1,7 +1,7 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2p2 < %s | FileCheck %s --check-prefixes=CHECK ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve,+sme2p2 < %s | FileCheck %s --check-prefixes=CHECK -; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme2p2 -force-streaming < %s | FileCheck %s --check-prefixes=CHECK +; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme2p2,+sme -force-streaming < %s | FileCheck %s --check-prefixes=CHECK ; ; COMPACT _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits