76 lines
2.7 KiB
Diff
76 lines
2.7 KiB
Diff
From 9b3d13d40d023b24e46bf3e255a89e15ab5aafc1 Mon Sep 17 00:00:00 2001
|
|
From: Richard Sandiford <richard.sandiford@arm.com>
|
|
Date: Tue, 12 Sep 2023 16:05:04 +0100
|
|
Subject: [PATCH 080/144] aarch64: Avoid a use of callee_offset
|
|
|
|
Reference: https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=f9ab771fa8cd747f34786c6f33deea32c2eb828b
|
|
|
|
When we emit the frame chain, i.e. when we reach Here in this statement
|
|
of aarch64_expand_prologue:
|
|
|
|
if (emit_frame_chain)
|
|
{
|
|
// Here
|
|
...
|
|
}
|
|
|
|
the stack is in one of two states:
|
|
|
|
- We've allocated up to the frame chain, but no more.
|
|
|
|
- We've allocated the whole frame, and the frame chain is within easy
|
|
reach of the new SP.
|
|
|
|
The offset of the frame chain from the current SP is available
|
|
in aarch64_frame as callee_offset. It is also available as the
|
|
chain_offset local variable, where the latter is calculated from other
|
|
data. (However, chain_offset is not always equal to callee_offset when
|
|
!emit_frame_chain, so chain_offset isn't redundant.)
|
|
|
|
In c600df9a4060da3c6121ff4d0b93f179eafd69d1 I switched to using
|
|
chain_offset for the initialisation of the hard frame pointer:
|
|
|
|
aarch64_add_offset (Pmode, hard_frame_pointer_rtx,
|
|
- stack_pointer_rtx, callee_offset,
|
|
+ stack_pointer_rtx, chain_offset,
|
|
tmp1_rtx, tmp0_rtx, frame_pointer_needed);
|
|
|
|
But the later REG_CFA_ADJUST_CFA handling still used callee_offset.
|
|
|
|
I think the difference is harmless, but it's more logical for the
|
|
CFA note to be in sync, and it's more convenient for later patches
|
|
if it uses chain_offset.
|
|
|
|
gcc/
|
|
* config/aarch64/aarch64.cc (aarch64_expand_prologue): Use
|
|
chain_offset rather than callee_offset.
|
|
---
|
|
gcc/config/aarch64/aarch64.cc | 4 +---
|
|
1 file changed, 1 insertion(+), 3 deletions(-)
|
|
|
|
diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
|
|
index faf7db11c..80412b6c5 100644
|
|
--- a/gcc/config/aarch64/aarch64.cc
|
|
+++ b/gcc/config/aarch64/aarch64.cc
|
|
@@ -10053,7 +10053,6 @@ aarch64_expand_prologue (void)
|
|
poly_int64 initial_adjust = frame.initial_adjust;
|
|
HOST_WIDE_INT callee_adjust = frame.callee_adjust;
|
|
poly_int64 final_adjust = frame.final_adjust;
|
|
- poly_int64 callee_offset = frame.callee_offset;
|
|
poly_int64 sve_callee_adjust = frame.sve_callee_adjust;
|
|
poly_int64 below_hard_fp_saved_regs_size
|
|
= frame.below_hard_fp_saved_regs_size;
|
|
@@ -10166,8 +10165,7 @@ aarch64_expand_prologue (void)
|
|
implicit. */
|
|
if (!find_reg_note (insn, REG_CFA_ADJUST_CFA, NULL_RTX))
|
|
{
|
|
- rtx src = plus_constant (Pmode, stack_pointer_rtx,
|
|
- callee_offset);
|
|
+ rtx src = plus_constant (Pmode, stack_pointer_rtx, chain_offset);
|
|
add_reg_note (insn, REG_CFA_ADJUST_CFA,
|
|
gen_rtx_SET (hard_frame_pointer_rtx, src));
|
|
}
|
|
--
|
|
2.19.1
|
|
|