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