aboutsummaryrefslogtreecommitdiff
path: root/gcc/combine.c
diff options
context:
space:
mode:
authorJohn Wehle <john@feith.com>2000-08-04 19:16:05 +0000
committerJeff Law <law@gcc.gnu.org>2000-08-04 13:16:05 -0600
commitc1194d740388113a485bd42652d40d4e901152ee (patch)
treeebeabc1facd97c63f7e49bcb69e2a7d42313c684 /gcc/combine.c
parent4f3aeae1dc3432c4869b606e88b8ed898d4d0272 (diff)
downloadgcc-c1194d740388113a485bd42652d40d4e901152ee.zip
gcc-c1194d740388113a485bd42652d40d4e901152ee.tar.gz
gcc-c1194d740388113a485bd42652d40d4e901152ee.tar.bz2
combine.c (recog_for_combine): Remove the old notes prior to attempting to recognize the new pattern.
* combine.c (recog_for_combine): Remove the old notes prior to attempting to recognize the new pattern. (distribute_notes): Ignore REG_NONNEG notes. From-SVN: r35492
Diffstat (limited to 'gcc/combine.c')
-rw-r--r--gcc/combine.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/gcc/combine.c b/gcc/combine.c
index 9f1c59e..0d43891 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -9569,6 +9569,7 @@ recog_for_combine (pnewpat, insn, pnotes)
int num_clobbers_to_add = 0;
int i;
rtx notes = 0;
+ rtx old_notes;
/* If PAT is a PARALLEL, check to see if it contains the CLOBBER
we use to indicate that something didn't match. If we find such a
@@ -9579,6 +9580,10 @@ recog_for_combine (pnewpat, insn, pnotes)
&& XEXP (XVECEXP (pat, 0, i), 0) == const0_rtx)
return -1;
+ /* Remove the old notes prior to trying to recognize the new pattern. */
+ old_notes = REG_NOTES (insn);
+ REG_NOTES (insn) = 0;
+
/* Is the result of combination a valid instruction? */
insn_code_number = recog (pat, insn, &num_clobbers_to_add);
@@ -9608,6 +9613,8 @@ recog_for_combine (pnewpat, insn, pnotes)
insn_code_number = recog (pat, insn, &num_clobbers_to_add);
}
+ REG_NOTES (insn) = old_notes;
+
/* If we had any clobbers to add, make a new pattern than contains
them. Then check to make sure that all of them are dead. */
if (num_clobbers_to_add)
@@ -12079,7 +12086,6 @@ distribute_notes (notes, from_insn, i3, i2, elim_i2, elim_i1)
case REG_EQUAL:
case REG_EQUIV:
- case REG_NONNEG:
case REG_NOALIAS:
/* These notes say something about results of an insn. We can
only support them if they used to be on I3 in which case they
@@ -12137,9 +12143,12 @@ distribute_notes (notes, from_insn, i3, i2, elim_i2, elim_i1)
}
break;
+ case REG_NONNEG:
case REG_WAS_0:
- /* It is too much trouble to try to see if this note is still
- correct in all situations. It is better to simply delete it. */
+ /* These notes say something about the value of a register prior
+ to the execution of an insn. It is too much trouble to see
+ if the note is still correct in all situations. It is better
+ to simply delete it. */
break;
case REG_RETVAL: