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:
parent
aa2cbb1a6c
commit
da75ca93f8
3 changed files with 19 additions and 9 deletions
|
@ -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>
|
||||
|
||||
* config/s390/vx-builtins.md ("vec_ceil", "vec_floor")
|
||||
|
|
|
@ -5725,10 +5725,13 @@ init_emit (void)
|
|||
REGNO_POINTER_ALIGN (HARD_FRAME_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_STACK_VARS_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_CFA_REGNUM) = BITS_PER_WORD;
|
||||
#endif
|
||||
|
||||
|
|
12
gcc/explow.c
12
gcc/explow.c
|
@ -1233,15 +1233,9 @@ 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. */
|
||||
|
||||
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);
|
||||
}
|
||||
extra = (required_align - BITS_PER_UNIT) / 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;
|
||||
|
|
Loading…
Add table
Reference in a new issue