mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-11 14:05:19 +08:00
re PR target/31701 (SH: wrong epilogue for sibling calls)
PR target/31701 * config/sh/sh.c (output_stack_adjust): Avoid using the frame register itself to hold the offset constant. Tell flow the use of r4 and r5 when they are used. From-SVN: r124248
This commit is contained in:
parent
805ea2f32d
commit
eb996a4ac9
@ -1,3 +1,10 @@
|
|||||||
|
2007-04-27 Kaz Kojima <kkojima@gcc.gnu.org>
|
||||||
|
|
||||||
|
PR target/31701
|
||||||
|
* config/sh/sh.c (output_stack_adjust): Avoid using the frame
|
||||||
|
register itself to hold the offset constant. Tell flow the use
|
||||||
|
of r4 and r5 when they are used.
|
||||||
|
|
||||||
2007-04-27 Richard Guenther <rguenther@suse.de>
|
2007-04-27 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
* tree-ssa-forwprop.c (forward_propagate_into_cond): Keep track
|
* tree-ssa-forwprop.c (forward_propagate_into_cond): Keep track
|
||||||
|
@ -5619,7 +5619,13 @@ output_stack_adjust (int size, rtx reg, int epilogue_p,
|
|||||||
temp = scavenge_reg (&temps);
|
temp = scavenge_reg (&temps);
|
||||||
}
|
}
|
||||||
if (temp < 0 && live_regs_mask)
|
if (temp < 0 && live_regs_mask)
|
||||||
temp = scavenge_reg (live_regs_mask);
|
{
|
||||||
|
HARD_REG_SET temps;
|
||||||
|
|
||||||
|
COPY_HARD_REG_SET (temps, *live_regs_mask);
|
||||||
|
CLEAR_HARD_REG_BIT (temps, REGNO (reg));
|
||||||
|
temp = scavenge_reg (&temps);
|
||||||
|
}
|
||||||
if (temp < 0)
|
if (temp < 0)
|
||||||
{
|
{
|
||||||
rtx adj_reg, tmp_reg, mem;
|
rtx adj_reg, tmp_reg, mem;
|
||||||
@ -5668,6 +5674,9 @@ output_stack_adjust (int size, rtx reg, int epilogue_p,
|
|||||||
emit_move_insn (adj_reg, mem);
|
emit_move_insn (adj_reg, mem);
|
||||||
mem = gen_tmp_stack_mem (Pmode, gen_rtx_POST_INC (Pmode, reg));
|
mem = gen_tmp_stack_mem (Pmode, gen_rtx_POST_INC (Pmode, reg));
|
||||||
emit_move_insn (tmp_reg, mem);
|
emit_move_insn (tmp_reg, mem);
|
||||||
|
/* Tell flow the insns that pop r4/r5 aren't dead. */
|
||||||
|
emit_insn (gen_rtx_USE (VOIDmode, tmp_reg));
|
||||||
|
emit_insn (gen_rtx_USE (VOIDmode, adj_reg));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const_reg = gen_rtx_REG (GET_MODE (reg), temp);
|
const_reg = gen_rtx_REG (GET_MODE (reg), temp);
|
||||||
|
Loading…
Reference in New Issue
Block a user