Re-apply: Drop excess size used for run time allocated stack variables.
authorDominik Vogt <vogt@linux.vnet.ibm.com>
Fri, 18 Nov 2016 14:44:54 +0000 (14:44 +0000)
committerAndreas Krebbel <krebbel@gcc.gnu.org>
Fri, 18 Nov 2016 14:44:54 +0000 (14:44 +0000)
The patch got reverted after hitting PR77359 which turned out to be a
rs6000 backend problem.  Reapplying after the PR got fixed.

gcc/ChangeLog:

2016-11-18  Dominik Vogt  <vogt@linux.vnet.ibm.com>

Re-apply after PR bootstrap/77359 is fixed:
2016-08-23  Dominik Vogt  <vogt@linux.vnet.ibm.com>

        * explow.c (get_dynamic_stack_size): Take known alignment of stack
        pointer + STACK_DYNAMIC_OFFSET into account when calculating the
        size needed.

--This line, and those below, will be
ignored--

M    gcc/ChangeLog
M    gcc/explow.c

From-SVN: r242590

gcc/ChangeLog
gcc/explow.c

index 95506d39c0f190c90b9670640ba64938ff019e1b..b3f2b7327f7f76882ab30349abdb545aa06b083d 100644 (file)
@@ -1,3 +1,12 @@
+2016-11-18  Dominik Vogt  <vogt@linux.vnet.ibm.com>
+
+       Re-apply after PR bootstrap/77359 is fixed:
+       2016-08-23  Dominik Vogt  <vogt@linux.vnet.ibm.com>
+
+        * explow.c (get_dynamic_stack_size): Take known alignment of stack
+        pointer + STACK_DYNAMIC_OFFSET into account when calculating the
+        size needed.
+
 2016-11-18  Dominik Vogt  <vogt@linux.vnet.ibm.com>
 
        PR bootstrap/77359
index 75af333c1c318bcd17ef166d6de27263eafb83cc..6758cca87e78d9ce4b12505a85230341442205d0 100644 (file)
@@ -1233,9 +1233,15 @@ get_dynamic_stack_size (rtx *psize, unsigned size_align,
      example), so we must preventively align the value.  We leave space
      in SIZE for the hole that might result from the alignment operation.  */
 
-  extra = (required_align - BITS_PER_UNIT) / BITS_PER_UNIT;
-  size = plus_constant (Pmode, size, extra);
-  size = force_operand (size, NULL_RTX);
+  unsigned known_align = REGNO_POINTER_ALIGN (VIRTUAL_STACK_DYNAMIC_REGNUM);
+  if (known_align == 0)
+    known_align = BITS_PER_UNIT;
+  if (required_align > known_align)
+    {
+      extra = (required_align - known_align) / BITS_PER_UNIT;
+      size = plus_constant (Pmode, size, extra);
+      size = force_operand (size, NULL_RTX);
+    }
 
   if (flag_stack_usage_info && pstack_usage_size)
     *pstack_usage_size += extra;