Commit eb996a4a by Kaz Kojima

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
parent 805ea2f3
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>
* 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);
}
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)
{
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);
mem = gen_tmp_stack_mem (Pmode, gen_rtx_POST_INC (Pmode, reg));
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;
}
const_reg = gen_rtx_REG (GET_MODE (reg), temp);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment