aboutsummaryrefslogtreecommitdiff
path: root/gcc/lra.c
diff options
context:
space:
mode:
authorWilco Dijkstra <wdijkstr@arm.com>2017-01-17 19:34:26 +0000
committerWilco Dijkstra <wilco@gcc.gnu.org>2017-01-17 19:34:26 +0000
commit8144a493ddc0083b06d303f51a8e34d16c122c8c (patch)
tree7d5f87929af63c4e61ef125668d02add9f1aa5e8 /gcc/lra.c
parenta6607774860fae67f0913d98e30f3158aa0e77a5 (diff)
downloadgcc-8144a493ddc0083b06d303f51a8e34d16c122c8c.zip
gcc-8144a493ddc0083b06d303f51a8e34d16c122c8c.tar.gz
gcc-8144a493ddc0083b06d303f51a8e34d16c122c8c.tar.bz2
This patch simplifies the handling of EH return.
This patch simplifies the handling of EH return. We force the use of the frame pointer so the return location is always at FP + 8. This means we can emit a simple volatile access in EH_RETURN_HANDLER_RTX without needing md patterns, splitters and frame offset calculations. The new implementation also fixes various bugs in aarch64_final_eh_return_addr, which does not work with -fomit-frame-pointer, alloca or outgoing arguments. gcc/ * config/aarch64/aarch64.md (eh_return): Remove pattern and splitter. * config/aarch64/aarch64.h (AARCH64_EH_STACKADJ_REGNUM): Remove. (EH_RETURN_HANDLER_RTX): New define. * config/aarch64/aarch64.c (aarch64_frame_pointer_required): Force frame pointer in EH return functions. (aarch64_expand_epilogue): Add barrier for eh_return. (aarch64_final_eh_return_addr): Remove. (aarch64_eh_return_handler_rtx): New function. * config/aarch64/aarch64-protos.h (aarch64_final_eh_return_addr): Remove. (aarch64_eh_return_handler_rtx): New prototype. testsuite/ * gcc.target/aarch64/eh_return.c: New test. From-SVN: r244547
Diffstat (limited to 'gcc/lra.c')
0 files changed, 0 insertions, 0 deletions