Commit da75ca93 by Eric Botcazou Committed by Eric Botcazou

re PR middle-end/78468 (libgomp.c/reduction-10.c and many more FAIL)

	PR middle-end/78468
	* emit-rtl.c (init_emit): Add ??? comment for problematic alignment
	settings of the virtual registers.

	Revert again
	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.

From-SVN: r245124
parent aa2cbb1a
2017-02-02 Eric Botcazou <ebotcazou@adacore.com>
PR middle-end/78468
* emit-rtl.c (init_emit): Add ??? comment for problematic alignment
settings of the virtual registers.
Revert again
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.
2017-02-02 Andreas Krebbel <krebbel@linux.vnet.ibm.com> 2017-02-02 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* config/s390/vx-builtins.md ("vec_ceil", "vec_floor") * config/s390/vx-builtins.md ("vec_ceil", "vec_floor")
......
...@@ -5725,10 +5725,13 @@ init_emit (void) ...@@ -5725,10 +5725,13 @@ init_emit (void)
REGNO_POINTER_ALIGN (HARD_FRAME_POINTER_REGNUM) = STACK_BOUNDARY; REGNO_POINTER_ALIGN (HARD_FRAME_POINTER_REGNUM) = STACK_BOUNDARY;
REGNO_POINTER_ALIGN (ARG_POINTER_REGNUM) = STACK_BOUNDARY; REGNO_POINTER_ALIGN (ARG_POINTER_REGNUM) = STACK_BOUNDARY;
/* ??? These are problematic (for example, 3 out of 4 are wrong on
32-bit SPARC and cannot be all fixed because of the ABI). */
REGNO_POINTER_ALIGN (VIRTUAL_INCOMING_ARGS_REGNUM) = STACK_BOUNDARY; REGNO_POINTER_ALIGN (VIRTUAL_INCOMING_ARGS_REGNUM) = STACK_BOUNDARY;
REGNO_POINTER_ALIGN (VIRTUAL_STACK_VARS_REGNUM) = STACK_BOUNDARY; REGNO_POINTER_ALIGN (VIRTUAL_STACK_VARS_REGNUM) = STACK_BOUNDARY;
REGNO_POINTER_ALIGN (VIRTUAL_STACK_DYNAMIC_REGNUM) = STACK_BOUNDARY; REGNO_POINTER_ALIGN (VIRTUAL_STACK_DYNAMIC_REGNUM) = STACK_BOUNDARY;
REGNO_POINTER_ALIGN (VIRTUAL_OUTGOING_ARGS_REGNUM) = STACK_BOUNDARY; REGNO_POINTER_ALIGN (VIRTUAL_OUTGOING_ARGS_REGNUM) = STACK_BOUNDARY;
REGNO_POINTER_ALIGN (VIRTUAL_CFA_REGNUM) = BITS_PER_WORD; REGNO_POINTER_ALIGN (VIRTUAL_CFA_REGNUM) = BITS_PER_WORD;
#endif #endif
......
...@@ -1233,15 +1233,9 @@ get_dynamic_stack_size (rtx *psize, unsigned size_align, ...@@ -1233,15 +1233,9 @@ 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. */
unsigned known_align = REGNO_POINTER_ALIGN (VIRTUAL_STACK_DYNAMIC_REGNUM); extra = (required_align - BITS_PER_UNIT) / BITS_PER_UNIT;
if (known_align == 0) size = plus_constant (Pmode, size, extra);
known_align = BITS_PER_UNIT; size = force_operand (size, NULL_RTX);
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) 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