aarch64: Fix sibcalls involving shared-ZT0 functions
commit6d56f590483b17c538e332097807a6c5a9225ea3
authorRichard Sandiford <richard.sandiford@arm.com>
Wed, 21 Feb 2024 11:12:28 +0000 (21 11:12 +0000)
committerRichard Sandiford <richard.sandiford@arm.com>
Wed, 21 Feb 2024 11:12:28 +0000 (21 11:12 +0000)
tree6d493b28a871842e2769106da45718980bffe875
parent22f0cf36ec0ad4ec76b50cd87eaab925bda74df8
aarch64: Fix sibcalls involving shared-ZT0 functions

In:

  void bar() __arm_inout("za");
  void foo() __arm_inout("za", "zt0") { bar(); }

foo cannot tail-call bar because foo needs to restore ZT0 after
the call.  I'd forgotten to update the ok_for_sibcall rules
to handle this when adding SME2.

Thanks to Sander de Smalen for the spot.

gcc/
* config/aarch64/aarch64.cc (aarch64_function_ok_for_sibcall):
Check that each individual piece of state is shared in the same
way, rather than using an aggregate check for PSTATE.ZA.

gcc/testsuite/
* gcc.target/aarch64/sme/sibcall_9.c: New test.
gcc/config/aarch64/aarch64.cc
gcc/testsuite/gcc.target/aarch64/sme/sibcall_9.c [new file with mode: 0644]