diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2011-01-18 21:29:11 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2011-01-18 21:29:11 +0000 |
commit | 1ecad98e4de3280e8e9951706f2e5251819fb92a (patch) | |
tree | 8cc1b63baa2f41820df5c80ec6e17cbd79ac56dd /gcc | |
parent | d4f2460a1bbcf6be3414aa26e79fa4a3fbb3716c (diff) | |
download | gcc-1ecad98e4de3280e8e9951706f2e5251819fb92a.zip gcc-1ecad98e4de3280e8e9951706f2e5251819fb92a.tar.gz gcc-1ecad98e4de3280e8e9951706f2e5251819fb92a.tar.bz2 |
re PR middle-end/46894 (vector tests fail on powerpc 32-bit)
PR middle-end/46894
* explow.c (allocate_dynamic_stack_space): Do not assume more than
BITS_PER_UNIT alignment if STACK_DYNAMIC_OFFSET or STACK_POINTER_OFFSET
are defined.
From-SVN: r168968
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/explow.c | 19 |
2 files changed, 19 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 00c85f8..736051c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2011-01-18 Eric Botcazou <ebotcazou@adacore.com> + + PR middle-end/46894 + * explow.c (allocate_dynamic_stack_space): Do not assume more than + BITS_PER_UNIT alignment if STACK_DYNAMIC_OFFSET or STACK_POINTER_OFFSET + are defined. + 2011-01-18 Ulrich Weigand <Ulrich.Weigand@de.ibm.com> PR tree-optimization/47179 diff --git a/gcc/explow.c b/gcc/explow.c index 836f244..2a18206 100644 --- a/gcc/explow.c +++ b/gcc/explow.c @@ -1148,6 +1148,7 @@ allocate_dynamic_stack_space (rtx size, unsigned size_align, { HOST_WIDE_INT stack_usage_size = -1; rtx final_label, final_target, target; + unsigned extra_align = 0; bool must_align; /* If we're asking for zero bytes, it doesn't matter what we point @@ -1231,21 +1232,25 @@ allocate_dynamic_stack_space (rtx size, unsigned size_align, that might result from the alignment operation. */ must_align = (crtl->preferred_stack_boundary < required_align); -#if defined (STACK_DYNAMIC_OFFSET) || defined (STACK_POINTER_OFFSET) - must_align = true; -#endif - if (must_align) { - unsigned extra, extra_align; - if (required_align > PREFERRED_STACK_BOUNDARY) extra_align = PREFERRED_STACK_BOUNDARY; else if (required_align > STACK_BOUNDARY) extra_align = STACK_BOUNDARY; else extra_align = BITS_PER_UNIT; - extra = (required_align - extra_align) / BITS_PER_UNIT; + } + + /* ??? STACK_POINTER_OFFSET is always defined now. */ +#if defined (STACK_DYNAMIC_OFFSET) || defined (STACK_POINTER_OFFSET) + must_align = true; + extra_align = BITS_PER_UNIT; +#endif + + if (must_align) + { + unsigned extra = (required_align - extra_align) / BITS_PER_UNIT; size = plus_constant (size, extra); size = force_operand (size, NULL_RTX); |