re PR target/28966 (-maltivec -m32 causes the stack to be saved and restored even though there is no need for it)

gcc/
	PR target/28966
	PR target/29248
	* reload1.c (reload): Realign stack after it changes size.
gcc/testsuite/
	PR target/28966
	PR target/29248
	* gcc.dg/rs6000-leaf.c: New.

From-SVN: r120102
This commit is contained in:
Nathan Sidwell 2006-12-21 09:03:18 +00:00 committed by Nathan Sidwell
parent a957d77fc3
commit 970af86771
4 changed files with 34 additions and 8 deletions

View file

@ -1,3 +1,9 @@
2006-12-21 Nathan Sidwell <nathan@codesourcery.com>
PR target/28966
PR target/29248
* reload1.c (reload): Realign stack after it changes size.
2006-12-20 Roger Sayle <roger@eyesopen.com>
* simplify-rtx.c (simplify_subreg): Use the correct mode when

View file

@ -888,16 +888,8 @@ reload (rtx first, int global)
{
int something_changed;
int did_spill;
HOST_WIDE_INT starting_frame_size;
/* Round size of stack frame to stack_alignment_needed. This must be done
here because the stack size may be a part of the offset computation
for register elimination, and there might have been new stack slots
created in the last iteration of this loop. */
if (cfun->stack_alignment_needed)
assign_stack_local (BLKmode, 0, cfun->stack_alignment_needed);
starting_frame_size = get_frame_size ();
set_initial_elim_offsets ();
@ -964,6 +956,20 @@ reload (rtx first, int global)
/* If we allocated another stack slot, redo elimination bookkeeping. */
if (starting_frame_size != get_frame_size ())
continue;
if (starting_frame_size && cfun->stack_alignment_needed)
{
/* If we have a stack frame, we must align it now. The
stack size may be a part of the offset computation for
register elimination. So if this changes the stack size,
then repeat the elimination bookkeeping. We don't
realign when there is no stack, as that will cause a
stack frame when none is needed should
STARTING_FRAME_OFFSET not be already aligned to
STACK_BOUNDARY. */
assign_stack_local (BLKmode, 0, cfun->stack_alignment_needed);
if (starting_frame_size != get_frame_size ())
continue;
}
if (caller_save_needed)
{

View file

@ -1,3 +1,9 @@
2006-12-21 Nathan Sidwell <nathan@codesourcery.com>
PR target/28966
PR target/29248
* gcc.dg/rs6000-leaf.c: New.
2006-12-20 Tobias Schlüter <tobias.schlueter@physik.uni-muenchen.de>
PR fortran/25392

View file

@ -0,0 +1,8 @@
/* { dg-do compile { target rs6000-*-* } } */
/* { dg-options "-O2" } */
/* { dg-final { scan-assembler-not "\tstwu 1,-\[0-9\]*(1)\n" } } */
int Leaf (int i)
{
return i + 1;
}