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" } }

Reply via email to