diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2019-10-16 10:48:00 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2019-10-16 10:48:00 +0000 |
commit | 8e66b377a93e3fc371d0836768740d68ef8fffc5 (patch) | |
tree | 1e0cbd25323b44168468d6a6081b6937129bfe37 /gcc/config/aarch64 | |
parent | ab43763e519ed8efbbfdac801d008c338fbcb187 (diff) | |
download | gcc-8e66b377a93e3fc371d0836768740d68ef8fffc5.zip gcc-8e66b377a93e3fc371d0836768740d68ef8fffc5.tar.gz gcc-8e66b377a93e3fc371d0836768740d68ef8fffc5.tar.bz2 |
[AArch64] Add an assert to aarch64_layout_frame
This patch adds an assert that all the individual *_adjust allocations
add up to the full frame size. With that safety net, it seemed slightly
clearer to use crtl->outgoing_args_size as the final adjustment where
appropriate, to match what's used in the comments.
This is a bit overkill on its own, but I need to add more cases for SVE.
2019-10-16 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/aarch64/aarch64.c (aarch64_layout_frame): Assert
that all the adjustments add up to the full frame size.
Use crtl->outgoing_args_size directly as the final adjustment
where appropriate.
From-SVN: r277060
Diffstat (limited to 'gcc/config/aarch64')
-rw-r--r-- | gcc/config/aarch64/aarch64.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index 6d151cb..03a9f3f 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -5476,7 +5476,7 @@ aarch64_layout_frame (void) stp reg3, reg4, [sp, 16] sub sp, sp, outgoing_args_size */ frame.callee_adjust = const_fp_offset; - frame.final_adjust = frame.frame_size - frame.callee_adjust; + frame.final_adjust = crtl->outgoing_args_size; } else { @@ -5487,9 +5487,14 @@ aarch64_layout_frame (void) stp reg3, reg4, [sp, 16] sub sp, sp, outgoing_args_size */ frame.initial_adjust = frame.hard_fp_offset; - frame.final_adjust = frame.frame_size - frame.initial_adjust; + frame.final_adjust = crtl->outgoing_args_size; } + /* Make sure the individual adjustments add up to the full frame size. */ + gcc_assert (known_eq (frame.initial_adjust + + frame.callee_adjust + + frame.final_adjust, frame.frame_size)); + frame.laid_out = true; } |