Commit d7931859 by Dominik Vogt Committed by Andreas Krebbel

Re-apply: Drop excess size used for run time allocated stack variables.

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
parent a7790c71
2016-11-18 Dominik Vogt <vogt@linux.vnet.ibm.com> 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 PR bootstrap/77359
* config/rs6000/rs6000.c (rs6000_stack_info): Properly align local * config/rs6000/rs6000.c (rs6000_stack_info): Properly align local
variables in functions calling alloca. Also update the ASCII variables in functions calling alloca. Also update the ASCII
...@@ -1233,9 +1233,15 @@ get_dynamic_stack_size (rtx *psize, unsigned size_align, ...@@ -1233,9 +1233,15 @@ get_dynamic_stack_size (rtx *psize, unsigned size_align,
example), so we must preventively align the value. We leave space example), so we must preventively align the value. We leave space
in SIZE for the hole that might result from the alignment operation. */ in SIZE for the hole that might result from the alignment operation. */
extra = (required_align - BITS_PER_UNIT) / BITS_PER_UNIT; 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 = plus_constant (Pmode, size, extra);
size = force_operand (size, NULL_RTX); size = force_operand (size, NULL_RTX);
}
if (flag_stack_usage_info && pstack_usage_size) if (flag_stack_usage_info && pstack_usage_size)
*pstack_usage_size += extra; *pstack_usage_size += extra;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment