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.

Tested on aarch64-linux-gnu and aarch64_be-elf, applied as r277060.

Richard


2019-10-16  Richard Sandiford  <richard.sandif...@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.

Index: gcc/config/aarch64/aarch64.c
===================================================================
--- gcc/config/aarch64/aarch64.c        2019-10-16 11:44:27.776831039 +0100
+++ gcc/config/aarch64/aarch64.c        2019-10-16 11:47:06.023701540 +0100
@@ -5476,7 +5476,7 @@ #define SLOT_REQUIRED     (-1)
         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 @@ #define SLOT_REQUIRED     (-1)
         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;
 }
 

Reply via email to