diff options
author | Jeff Law <law@gcc.gnu.org> | 1998-04-04 06:54:26 -0700 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1998-04-04 06:54:26 -0700 |
commit | d6df9efb6d4a855e65f48967469cf2d29b2ebd7f (patch) | |
tree | 57006688a5896dc9b98a78d65100a17a1c0758fc | |
parent | 8e7bc3cd8ff0c23574e2523ef047d453cbd95bf5 (diff) | |
download | gcc-d6df9efb6d4a855e65f48967469cf2d29b2ebd7f.zip gcc-d6df9efb6d4a855e65f48967469cf2d29b2ebd7f.tar.gz gcc-d6df9efb6d4a855e65f48967469cf2d29b2ebd7f.tar.bz2 |
* Check in merge from gcc2. See ChangeLog.11 and ChangeLog.12
for details.
* haifa-sched.c: Mirror recent changes from gcc2.
From-SVN: r18988
-rw-r--r-- | gcc/haifa-sched.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c index 7ddbcc8..b5f4ace 100644 --- a/gcc/haifa-sched.c +++ b/gcc/haifa-sched.c @@ -4443,12 +4443,7 @@ attach_deaths (x, insn, set_p) #endif && regno != STACK_POINTER_REGNUM) { - /* ??? It is perhaps a dead_or_set_p bug that it does - not check for REG_UNUSED notes itself. This is necessary - for the case where the SET_DEST is a subreg of regno, as - dead_or_set_p handles subregs specially. */ - if (! all_needed && ! dead_or_set_p (insn, x) - && ! find_reg_note (insn, REG_UNUSED, x)) + if (! all_needed && ! dead_or_set_p (insn, x)) { /* Check for the case where the register dying partially overlaps the register set by this insn. */ @@ -4511,17 +4506,20 @@ attach_deaths (x, insn, set_p) return; case SUBREG: + attach_deaths (SUBREG_REG (x), insn, + set_p && ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))) + <= UNITS_PER_WORD) + || (GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))) + == GET_MODE_SIZE (GET_MODE ((x)))))); + return; + case STRICT_LOW_PART: - /* These two cases preserve the value of SET_P, so handle them - separately. */ - attach_deaths (XEXP (x, 0), insn, set_p); + attach_deaths (XEXP (x, 0), insn, 0); return; case ZERO_EXTRACT: case SIGN_EXTRACT: - /* This case preserves the value of SET_P for the first operand, but - clears it for the other two. */ - attach_deaths (XEXP (x, 0), insn, set_p); + attach_deaths (XEXP (x, 0), insn, 0); attach_deaths (XEXP (x, 1), insn, 0); attach_deaths (XEXP (x, 2), insn, 0); return; |