[AArch64] Add an assert to aarch64_layout_frame
authorRichard Sandiford <richard.sandiford@arm.com>
Wed, 16 Oct 2019 10:48:00 +0000 (10:48 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Wed, 16 Oct 2019 10:48:00 +0000 (10:48 +0000)
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

gcc/ChangeLog
gcc/config/aarch64/aarch64.c

index dbdf07c88890891ba2f803689f51590e941315aa..4733dc4bfb874731ce98656d254061785756b432 100644 (file)
@@ -1,3 +1,10 @@
+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
index 6d151cb4724f78ac0d78637bc3aec7188bdd976b..03a9f3f2bbc1781289ab696cc6dbd44e25c7757d 100644 (file)
@@ -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;
 }