]> git.ipfire.org Git - thirdparty/gcc.git/commit
aarch64: Put LR save slot first in more cases
authorRichard Sandiford <richard.sandiford@arm.com>
Tue, 17 Oct 2023 22:46:33 +0000 (23:46 +0100)
committerRichard Sandiford <richard.sandiford@arm.com>
Tue, 17 Oct 2023 22:46:33 +0000 (23:46 +0100)
commit773306e9ef4ea1407f89686eb513a50602493666
tree385805da3c1f69f88ace1bc12a8ecf7c7b774f1b
parent575858508090b18dcbc176db285c9f55227ca4c0
aarch64: Put LR save slot first in more cases

Now that the prologue and epilogue code iterates over saved
registers in offset order, we can put the LR save slot first
without compromising LDP/STP formation.

This isn't worthwhile when shadow call stacks are enabled, since the
first two registers are also push/pop candidates, and LR cannot be
popped when shadow call stacks are enabled.  (LR is instead loaded
first and compared against the shadow stack's value.)

But otherwise, it seems better to put the LR save slot first,
to reduce unnecessary variation with the layout for stack clash
protection.

gcc/
* config/aarch64/aarch64.cc (aarch64_layout_frame): Don't make
the position of the LR save slot dependent on stack clash
protection unless shadow call stacks are enabled.

gcc/testsuite/
* gcc.target/aarch64/test_frame_2.c: Expect x30 to come before x19.
* gcc.target/aarch64/test_frame_4.c: Likewise.
* gcc.target/aarch64/test_frame_7.c: Likewise.
* gcc.target/aarch64/test_frame_10.c: Likewise.
gcc/config/aarch64/aarch64.cc
gcc/testsuite/gcc.target/aarch64/test_frame_10.c
gcc/testsuite/gcc.target/aarch64/test_frame_2.c
gcc/testsuite/gcc.target/aarch64/test_frame_4.c
gcc/testsuite/gcc.target/aarch64/test_frame_7.c