Commit d444b5e8 by Richard Henderson Committed by Richard Henderson

flow.c (propagate_one_insn): Preserve live-at-end registers across tail calls.

        * flow.c (propagate_one_insn): Preserve live-at-end registers
        across tail calls.

From-SVN: r68544
parent 4dbda6f0
2003-06-26 Richard Henderson <rth@redhat.com>
* flow.c (propagate_one_insn): Preserve live-at-end registers
across tail calls.
2003-06-26 J"orn Rennecke <joern.rennecke@superh.com> 2003-06-26 J"orn Rennecke <joern.rennecke@superh.com>
* reload.c (can_reload_into): New function. * reload.c (can_reload_into): New function.
......
...@@ -1770,8 +1770,10 @@ propagate_one_insn (pbi, insn) ...@@ -1770,8 +1770,10 @@ propagate_one_insn (pbi, insn)
if (GET_CODE (insn) == CALL_INSN) if (GET_CODE (insn) == CALL_INSN)
{ {
int i; regset live_at_end;
bool sibcall_p;
rtx note, cond; rtx note, cond;
int i;
cond = NULL_RTX; cond = NULL_RTX;
if (GET_CODE (PATTERN (insn)) == COND_EXEC) if (GET_CODE (PATTERN (insn)) == COND_EXEC)
...@@ -1796,9 +1798,14 @@ propagate_one_insn (pbi, insn) ...@@ -1796,9 +1798,14 @@ propagate_one_insn (pbi, insn)
mark_set_1 (pbi, CLOBBER, XEXP (XEXP (note, 0), 0), mark_set_1 (pbi, CLOBBER, XEXP (XEXP (note, 0), 0),
cond, insn, pbi->flags); cond, insn, pbi->flags);
/* Calls change all call-used and global registers. */ /* Calls change all call-used and global registers; sibcalls do not
clobber anything that must be preserved at end-of-function. */
sibcall_p = SIBLING_CALL_P (insn);
live_at_end = EXIT_BLOCK_PTR->global_live_at_start;
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
if (TEST_HARD_REG_BIT (regs_invalidated_by_call, i)) if (TEST_HARD_REG_BIT (regs_invalidated_by_call, i)
&& ! (sibcall_p && REGNO_REG_SET_P (live_at_end, i)))
{ {
/* We do not want REG_UNUSED notes for these registers. */ /* We do not want REG_UNUSED notes for these registers. */
mark_set_1 (pbi, CLOBBER, regno_reg_rtx[i], cond, insn, mark_set_1 (pbi, CLOBBER, regno_reg_rtx[i], cond, insn,
......
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