]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
aarch64: Add ZTO_REGNUM and SME_STATE_REGNUM use to movt
authorAlice Carlotti <alice.carlotti@arm.com>
Fri, 17 Apr 2026 18:00:57 +0000 (19:00 +0100)
committerAlice Carlotti <alice.carlotti@arm.com>
Wed, 22 Apr 2026 15:57:49 +0000 (16:57 +0100)
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.

gcc/config/aarch64/aarch64-sme.md
gcc/testsuite/gcc.target/aarch64/sme/zt0_state_8.c [new file with mode: 0644]

index f24e91997fd640f82c11353dd196fe334daec630..7091f566ba8defc17dd0087f04d38c7bfe1a0834 100644 (file)
 ;;      __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 (file)
index 0000000..8eb3d42
--- /dev/null
@@ -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" } }