flow.c (insn_dead_p): A clobber of a dead hard register is a dead insn after reload.

* flow.c (insn_dead_p): A clobber of a dead hard register is a
	dead insn after reload.

From-SVN: r77674
This commit is contained in:
Richard Henderson 2004-02-11 14:05:08 -08:00 committed by Ian Lance Taylor
parent 05ac140eaf
commit a6abdce327
2 changed files with 20 additions and 7 deletions

View File

@ -1,3 +1,8 @@
2004-02-11 Richard Henderson <rth@redhat.com>
* flow.c (insn_dead_p): A clobber of a dead hard register is a
dead insn after reload.
2004-02-11 Ulrich Weigand <uweigand@de.ibm.com>
* tree.h (frame_base_decl): Add GTY marker.

View File

@ -2267,14 +2267,22 @@ insn_dead_p (struct propagate_block_info *pbi, rtx x, int call_ok,
}
/* A CLOBBER of a pseudo-register that is dead serves no purpose. That
is not necessarily true for hard registers. */
else if (code == CLOBBER && GET_CODE (XEXP (x, 0)) == REG
&& REGNO (XEXP (x, 0)) >= FIRST_PSEUDO_REGISTER
&& ! REGNO_REG_SET_P (pbi->reg_live, REGNO (XEXP (x, 0))))
return 1;
is not necessarily true for hard registers until after reload. */
else if (code == CLOBBER)
{
if (GET_CODE (XEXP (x, 0)) == REG
&& (REGNO (XEXP (x, 0)) >= FIRST_PSEUDO_REGISTER
|| reload_completed)
&& ! REGNO_REG_SET_P (pbi->reg_live, REGNO (XEXP (x, 0))))
return 1;
}
/* ??? A base USE is a historical relic. It ought not be needed anymore.
Instances where it is still used are either (1) temporary and the USE
escaped the pass, (2) cruft and the USE need not be emitted anymore,
or (3) hiding bugs elsewhere that are not properly representing data
flow. */
/* We do not check other CLOBBER or USE here. An insn consisting of just
a CLOBBER or just a USE should not be deleted. */
return 0;
}