diff options
author | Vlad Lazar <vlad.lazar@arm.com> | 2018-09-13 09:36:58 +0000 |
---|---|---|
committer | Vlad Lazar <vladlazar@gcc.gnu.org> | 2018-09-13 09:36:58 +0000 |
commit | 0795f659b09677e0c51832ecaef0680863049424 (patch) | |
tree | fab0627e3c22f529120f6e8a8091e9197c69fb90 /gcc | |
parent | 54de7d7dd08a28f1783ee7c99bf57b5ac93614ef (diff) | |
download | gcc-0795f659b09677e0c51832ecaef0680863049424.zip gcc-0795f659b09677e0c51832ecaef0680863049424.tar.gz gcc-0795f659b09677e0c51832ecaef0680863049424.tar.bz2 |
[AArch64] Add support for TARGET_COMPUTE_FRAME_LAYOUT
The patch adds support for the TARGET_COMPUTE_FRAME_LAYOUT hook on AArch64
and removes unneeded frame layout recalculation.
2018-09-13 Vlad Lazar <vlad.lazar@arm.com>
* config/aarch64/aarch64.h (TARGET_COMPUTE_FRAME_LAYOUT): Define.
* config/aarch64/aarch64.c (aarch64_expand_prologue): Remove
aarch64_layout_frame call.
(aarch64_expand_epilogue): Likewise.
(aarch64_initial_elimination_offset): Likewise.
(aarch64_get_separate_components): Likewise.
(aarch64_use_return_insn_p): Likewise.
(aarch64_layout_frame): Remove unneeded check.
From-SVN: r264263
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/config/aarch64/aarch64.c | 15 | ||||
-rw-r--r-- | gcc/config/aarch64/aarch64.h | 3 |
3 files changed, 15 insertions, 14 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 99493e4..d9a383f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2018-09-13 Vlad Lazar <vlad.lazar@arm.com> + + * config/aarch64/aarch64.h (TARGET_COMPUTE_FRAME_LAYOUT): Define. + * config/aarch64/aarch64.c (aarch64_expand_prologue): Remove + aarch64_layout_frame call. + (aarch64_expand_epilogue): Likewise. + (aarch64_initial_elimination_offset): Likewise. + (aarch64_get_separate_components): Likewise. + (aarch64_use_return_insn_p): Likewise. + (aarch64_layout_frame): Remove unneeded check. + 2018-09-13 Jakub Jelinek <jakub@redhat.com> * configure.ac: Only append diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index d088ef7..1240bed 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -3938,9 +3938,6 @@ aarch64_layout_frame (void) HOST_WIDE_INT offset = 0; int regno, last_fp_reg = INVALID_REGNUM; - if (reload_completed && cfun->machine->frame.laid_out) - return; - cfun->machine->frame.emit_frame_chain = aarch64_needs_frame_chain (); #define SLOT_NOT_REQUIRED (-2) @@ -4484,8 +4481,6 @@ offset_12bit_unsigned_scaled_p (machine_mode mode, poly_int64 offset) static sbitmap aarch64_get_separate_components (void) { - aarch64_layout_frame (); - sbitmap components = sbitmap_alloc (LAST_SAVED_REGNUM + 1); bitmap_clear (components); @@ -4509,7 +4504,7 @@ aarch64_get_separate_components (void) unsigned reg1 = cfun->machine->frame.wb_candidate1; unsigned reg2 = cfun->machine->frame.wb_candidate2; - /* If aarch64_layout_frame has chosen registers to store/restore with + /* If registers have been chosen to be stored/restored with writeback don't interfere with them to avoid having to output explicit stack adjustment instructions. */ if (reg2 != INVALID_REGNUM) @@ -4767,8 +4762,6 @@ aarch64_add_cfa_expression (rtx_insn *insn, unsigned int reg, void aarch64_expand_prologue (void) { - aarch64_layout_frame (); - poly_int64 frame_size = cfun->machine->frame.frame_size; poly_int64 initial_adjust = cfun->machine->frame.initial_adjust; HOST_WIDE_INT callee_adjust = cfun->machine->frame.callee_adjust; @@ -4881,8 +4874,6 @@ aarch64_use_return_insn_p (void) if (crtl->profile) return false; - aarch64_layout_frame (); - return known_eq (cfun->machine->frame.frame_size, 0); } @@ -4894,8 +4885,6 @@ aarch64_use_return_insn_p (void) void aarch64_expand_epilogue (bool for_sibcall) { - aarch64_layout_frame (); - poly_int64 initial_adjust = cfun->machine->frame.initial_adjust; HOST_WIDE_INT callee_adjust = cfun->machine->frame.callee_adjust; poly_int64 final_adjust = cfun->machine->frame.final_adjust; @@ -7414,8 +7403,6 @@ aarch64_can_eliminate (const int from ATTRIBUTE_UNUSED, const int to) poly_int64 aarch64_initial_elimination_offset (unsigned from, unsigned to) { - aarch64_layout_frame (); - if (to == HARD_FRAME_POINTER_REGNUM) { if (from == ARG_POINTER_REGNUM) diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h index c121850..5c5a226 100644 --- a/gcc/config/aarch64/aarch64.h +++ b/gcc/config/aarch64/aarch64.h @@ -480,6 +480,9 @@ extern unsigned aarch64_architecture_version; #undef DONT_USE_BUILTIN_SETJMP #define DONT_USE_BUILTIN_SETJMP 1 +#undef TARGET_COMPUTE_FRAME_LAYOUT +#define TARGET_COMPUTE_FRAME_LAYOUT aarch64_layout_frame + /* Register in which the structure value is to be returned. */ #define AARCH64_STRUCT_VALUE_REGNUM R8_REGNUM |