diff options
author | Richard Earnshaw <rearnsha@arm.com> | 2019-05-09 16:00:23 +0000 |
---|---|---|
committer | Richard Earnshaw <rearnsha@gcc.gnu.org> | 2019-05-09 16:00:23 +0000 |
commit | 4456525c4ebf97649f4976b4981318fba4564c31 (patch) | |
tree | 8c0fb9f89d43d84ba3d5a6052ee6623895abb4d5 /gcc/tree-switch-conversion.c | |
parent | fd4485aa04b5db3f0fc367ce7aefc8431112e1a1 (diff) | |
download | gcc-4456525c4ebf97649f4976b4981318fba4564c31.zip gcc-4456525c4ebf97649f4976b4981318fba4564c31.tar.gz gcc-4456525c4ebf97649f4976b4981318fba4564c31.tar.bz2 |
[arm] PR target/90405 fix regression for thumb1 with -mtpcs-leaf-frame
-mtpcs-leaf-frame causes an APCS-style backtrace frame to be created
on the stack. This should probably be deprecated, but it did reveal
an issue with the patch I committed previously to improve the code
generation when pushing high registers, in that
thumb_find_work_register had a different idea as to which registers
were available as scratch registers.
The new code actually does a better job of finding a viable work
register and doesn't rely so much on assumptions about the ABI, so it
seems better to adapt thumb_find_work_register to the new approach.
This way we can eliminate some rather crufty code.
gcc:
PR target/90405
* config/arm/arm.c (callee_saved_reg_p): Move before
thumb_find_work_register.
(thumb1_prologue_unused_call_clobbered_lo_regs): Move before
thumb_find_work_register. Only call df_get_live_out once.
(thumb1_epilogue_unused_call_clobbered_lo_regs): Likewise.
(thumb_find_work_register): Use
thumb1_prologue_unused_call_clobbered_lo_regs instead of ad hoc
algorithms to locate a spare call clobbered reg.
gcc/testsuite:
PR target/90405
* gcc.target/arm/pr90405.c: New test.
From-SVN: r271036
Diffstat (limited to 'gcc/tree-switch-conversion.c')
0 files changed, 0 insertions, 0 deletions