From da75ca93f8f17847f75ff50d00796e98ccf8509d Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Thu, 2 Feb 2017 12:39:09 +0000 Subject: [PATCH] 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 * 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 --- gcc/ChangeLog | 13 +++++++++++++ gcc/emit-rtl.c | 3 +++ gcc/explow.c | 12 +++--------- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cc3e98bf605..7a11db8b0d7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +2017-02-02 Eric Botcazou + + 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 + + * 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 * config/s390/vx-builtins.md ("vec_ceil", "vec_floor") diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index 0b9552b3541..0d25d4ec17e 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -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 diff --git a/gcc/explow.c b/gcc/explow.c index 4e081fb42a2..67cb6ff1513 100644 --- a/gcc/explow.c +++ b/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; -- 2.30.2