cse.c (cse_insn): Avoid creating direct non-local jumps.
* cse.c (cse_insn): Avoid creating direct non-local jumps. * combine.c (can_combine_p): Likewise. * local-alloc. (update_equiv_regs): Likewise. From-SVN: r88258
This commit is contained in:
parent
b0b324b07f
commit
2f39b6caf6
@ -1,3 +1,9 @@
|
|||||||
|
2004-09-28 Ulrich Weigand <uweigand@de.ibm.com>
|
||||||
|
|
||||||
|
* cse.c (cse_insn): Avoid creating direct non-local jumps.
|
||||||
|
* combine.c (can_combine_p): Likewise.
|
||||||
|
* local-alloc. (update_equiv_regs): Likewise.
|
||||||
|
|
||||||
2004-09-28 Richard Henderson <rth@redhat.com>
|
2004-09-28 Richard Henderson <rth@redhat.com>
|
||||||
|
|
||||||
PR 17531
|
PR 17531
|
||||||
|
@ -1176,6 +1176,8 @@ can_combine_p (rtx insn, rtx i3, rtx pred ATTRIBUTE_UNUSED, rtx succ,
|
|||||||
/* Don't substitute into an incremented register. */
|
/* Don't substitute into an incremented register. */
|
||||||
|| FIND_REG_INC_NOTE (i3, dest)
|
|| FIND_REG_INC_NOTE (i3, dest)
|
||||||
|| (succ && FIND_REG_INC_NOTE (succ, dest))
|
|| (succ && FIND_REG_INC_NOTE (succ, dest))
|
||||||
|
/* Don't substitute into a non-local goto, this confuses CFG. */
|
||||||
|
|| (JUMP_P (i3) && find_reg_note (i3, REG_NON_LOCAL_GOTO, NULL_RTX))
|
||||||
#if 0
|
#if 0
|
||||||
/* Don't combine the end of a libcall into anything. */
|
/* Don't combine the end of a libcall into anything. */
|
||||||
/* ??? This gives worse code, and appears to be unnecessary, since no
|
/* ??? This gives worse code, and appears to be unnecessary, since no
|
||||||
|
@ -5395,6 +5395,11 @@ cse_insn (rtx insn, rtx libcall_insn)
|
|||||||
|| (GET_CODE (trial) == LABEL_REF
|
|| (GET_CODE (trial) == LABEL_REF
|
||||||
&& ! condjump_p (insn))))
|
&& ! condjump_p (insn))))
|
||||||
{
|
{
|
||||||
|
/* Don't substitute non-local labels, this confuses CFG. */
|
||||||
|
if (GET_CODE (trial) == LABEL_REF
|
||||||
|
&& LABEL_REF_NONLOCAL_P (trial))
|
||||||
|
continue;
|
||||||
|
|
||||||
SET_SRC (sets[i].rtl) = trial;
|
SET_SRC (sets[i].rtl) = trial;
|
||||||
cse_jumps_altered = 1;
|
cse_jumps_altered = 1;
|
||||||
break;
|
break;
|
||||||
|
@ -1010,6 +1010,11 @@ update_equiv_regs (void)
|
|||||||
if (! INSN_P (insn))
|
if (! INSN_P (insn))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
/* Don't substitute into a non-local goto, this confuses CFG. */
|
||||||
|
if (JUMP_P (insn)
|
||||||
|
&& find_reg_note (insn, REG_NON_LOCAL_GOTO, NULL_RTX))
|
||||||
|
continue;
|
||||||
|
|
||||||
for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
|
for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
|
||||||
{
|
{
|
||||||
if (REG_NOTE_KIND (link) == REG_DEAD
|
if (REG_NOTE_KIND (link) == REG_DEAD
|
||||||
|
Loading…
Reference in New Issue
Block a user