aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2019-10-16 10:48:00 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2019-10-16 10:48:00 +0000
commit8e66b377a93e3fc371d0836768740d68ef8fffc5 (patch)
tree1e0cbd25323b44168468d6a6081b6937129bfe37
parentab43763e519ed8efbbfdac801d008c338fbcb187 (diff)
downloadgcc-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
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/aarch64/aarch64.c9
2 files changed, 14 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index dbdf07c..4733dc4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,12 @@
2019-10-16 Richard Sandiford <richard.sandiford@arm.com>
+ * 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.
+
+2019-10-16 Richard Sandiford <richard.sandiford@arm.com>
+
* config/aarch64/aarch64.c (aarch64_layout_frame): Use a local
"frame" reference instead of always referring directly to
"cfun->machine->frame".
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;
}