aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1998-04-04 06:54:26 -0700
committerJeff Law <law@gcc.gnu.org>1998-04-04 06:54:26 -0700
commitd6df9efb6d4a855e65f48967469cf2d29b2ebd7f (patch)
tree57006688a5896dc9b98a78d65100a17a1c0758fc /gcc
parent8e7bc3cd8ff0c23574e2523ef047d453cbd95bf5 (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/haifa-sched.c22
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;