diff options
author | Richard Henderson <rth@redhat.com> | 2004-02-11 14:05:08 -0800 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2004-02-11 22:05:08 +0000 |
commit | a6abdce327180878f4753126647b351026b2dcd0 (patch) | |
tree | 035316708f577cbd4734f79077c152014d4035d3 | |
parent | 05ac140eafdf7c0bf6f41df0ea466d98ba26ac1a (diff) | |
download | gcc-a6abdce327180878f4753126647b351026b2dcd0.zip gcc-a6abdce327180878f4753126647b351026b2dcd0.tar.gz gcc-a6abdce327180878f4753126647b351026b2dcd0.tar.bz2 |
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
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/flow.c | 24 |
2 files changed, 21 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9c1aa8a..9c73440 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. @@ -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; - - /* We do not check other CLOBBER or USE here. An insn consisting of just - a CLOBBER or just a USE should not be deleted. */ + 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. */ + return 0; } |