aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernd Schmidt <bernds@cygnus.co.uk>1999-08-27 09:39:14 +0000
committerBernd Schmidt <crux@gcc.gnu.org>1999-08-27 09:39:14 +0000
commit6c1b3bf290b57d8adb19bda3ae15368a4a402a01 (patch)
treed990e8b1d637e4db51f9f8488d7b3a0e29227fea
parent7cfc8a78302146d7c2a27ab6fe838c47c8d33f9b (diff)
downloadgcc-6c1b3bf290b57d8adb19bda3ae15368a4a402a01.zip
gcc-6c1b3bf290b57d8adb19bda3ae15368a4a402a01.tar.gz
gcc-6c1b3bf290b57d8adb19bda3ae15368a4a402a01.tar.bz2
Fix for 'Deadly optimization bug' (see egcs mailing list archive)
From-SVN: r28928
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/combine.c5
2 files changed, 10 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2085fc8..6e6ffd4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Fri Aug 27 10:33:35 1999 Bernd Schmidt <bernds@cygnus.co.uk>
+
+ * combine.c (get_last_value): Don't look for earlier sets if the last
+ known set is somewhere in between the insns being combined.
+
Fri Aug 27 10:03:12 BST 1999 Nathan Sidwell <nathan@acm.org>
* configure.in: Don't use shell ! to negate exit codes
diff --git a/gcc/combine.c b/gcc/combine.c
index dcd60c2..9bedd61 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -10832,6 +10832,11 @@ get_last_value (x)
{
rtx insn, set;
+ /* We can't do anything if the value is set in between the insns we are
+ processing. */
+ if (INSN_CUID (reg_last_set[regno]) <= INSN_CUID (subst_insn))
+ return 0;
+
/* We can not do anything useful in this case, because there is
an instruction which is not on the insn chain. */
if (subst_prev_insn)