[gcc r16-9317] aarch64: Add ZTO_REGNUM and SME_STATE_REGNUM use to movt

Alice Carlotti via Gcc-cvs <[email protected]>
Newsgroups gmane.comp.gcc.cvs
Message-ID <[email protected]>
https://gcc.gnu.org/g:90c432f3c2c01556a4710b5f1f8cc6b842a5762c

commit r16-9317-g90c432f3c2c01556a4710b5f1f8cc6b842a5762c
Author: Alice Carlotti <[email protected]>
Date:   Fri Apr 17 19:00:57 2026 +0100

    aarch64: Add ZTO_REGNUM and SME_STATE_REGNUM use to movt
    
    Also replace unspec_volatile with plain unspec - there no need to
    prevent dead code elimination if the dependencies are correct.
    
    gcc/ChangeLog:
    
            * config/aarch64/aarch64-sme.md (aarch64_sme_write_zt): Add
            ZTO_REGNUM use and make unspec non-volatile.
    
    gcc/testsuite/ChangeLog:
    
            * gcc.target/aarch64/sme/zt0_state_8.c: New test.

Diff:
---
 gcc/config/aarch64/aarch64-sme.md                  |  6 ++++--
 gcc/testsuite/gcc.target/aarch64/sme/zt0_state_8.c | 14 ++++++++++++++
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/gcc/config/aarch64/aarch64-sme.md b/gcc/config/aarch64/aarch64-sme.md
index f24e91997fd6..7091f566ba8d 100644
--- a/gcc/config/aarch64/aarch64-sme.md
+++ b/gcc/config/aarch64/aarch64-sme.md
@@ -1067,8 +1067,10 @@
 ;;      __arm_streaming __arm_out ("zt0");
 (define_insn "@aarch64_sme_write_zt<SVE_FULL:mode>"
   [(set (reg:V8DI ZT0_REGNUM)
-	(unspec_volatile:V8DI
-	  [(match_operand:SVE_FULL 0 "register_operand" "w")
+	(unspec:V8DI
+	  [(reg:V8DI ZT0_REGNUM)
+	   (reg:DI SME_STATE_REGNUM)
+	   (match_operand:SVE_FULL 0 "register_operand" "w")
 	   (match_operand:DI       1 "const_int_operand")]
 	  UNSPEC_SME_WRITE))]
   "TARGET_SME_LUTv2 && TARGET_STREAMING"
diff --git a/gcc/testsuite/gcc.target/aarch64/sme/zt0_state_8.c b/gcc/testsuite/gcc.target/aarch64/sme/zt0_state_8.c
new file mode 100644
index 000000000000..8eb3d424f539
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sme/zt0_state_8.c
@@ -0,0 +1,14 @@
+// { dg-options "-O3 -fomit-frame-pointer -fno-optimize-sibling-calls" }
+
+#include <arm_sme.h>
+
+#pragma GCC target "+sme2+sme-lutv2"
+
+__arm_streaming __arm_inout("zt0")
+void foo(svfloat32_t z)
+{
+  svzero_zt (0);
+  svwrite_lane_zt_f32 (0, z, 1);
+}
+
+// { dg-final { scan-assembler "zero" } }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.