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
This commit is contained in:
Eric Botcazou 2017-02-02 12:39:09 +00:00 committed by Eric Botcazou
parent aa2cbb1a6c
commit da75ca93f8
3 changed files with 19 additions and 9 deletions

View File

@ -1,3 +1,16 @@
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")

View File

@ -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

View File

@ -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;