aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeffrey A Law <law@cygnus.com>1999-08-02 05:53:02 +0000
committerJeff Law <law@gcc.gnu.org>1999-08-01 23:53:02 -0600
commiteec9ef57bf59ea4e488f663e8007d11e6c599f21 (patch)
treed3635cb1f31aef2dde23078f449a1cfd2c6ddf75 /gcc
parent63429dd7f8b1ccc45f1ea712f7c0a06bdfb7e367 (diff)
downloadgcc-eec9ef57bf59ea4e488f663e8007d11e6c599f21.zip
gcc-eec9ef57bf59ea4e488f663e8007d11e6c599f21.tar.gz
gcc-eec9ef57bf59ea4e488f663e8007d11e6c599f21.tar.bz2
cse.c (cse_insn): Fix loop which deletes insns after a jump that has become an unconditional jump.
* cse.c (cse_insn): Fix loop which deletes insns after a jump that has become an unconditional jump. From-SVN: r28388
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog3
-rw-r--r--gcc/cse.c5
2 files changed, 7 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ba8058f..e7b6552 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,8 @@
Sun Aug 1 22:46:42 1999 Jeffrey A Law (law@cygnus.com)
+ * cse.c (cse_insn): Fix loop which deletes insns after a jump
+ that has become an unconditional jump.
+
* m68k.c (output_function_prologue): Fix typo in CPU32 case.
(output_function_epilogue): Similarly.
diff --git a/gcc/cse.c b/gcc/cse.c
index edd434b..2e89d0e 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -7424,9 +7424,12 @@ cse_insn (insn, libcall_insn)
&& GET_CODE (NEXT_INSN (p)) != BARRIER
&& GET_CODE (NEXT_INSN (p)) != CODE_LABEL)
{
+ /* Note, we must update P with the return value from
+ delete_insn, otherwise we could get an infinite loop
+ if NEXT_INSN (p) had INSN_DELETED_P set. */
if (GET_CODE (NEXT_INSN (p)) != NOTE
|| NOTE_LINE_NUMBER (NEXT_INSN (p)) == NOTE_INSN_DELETED)
- delete_insn (NEXT_INSN (p));
+ p = delete_insn (NEXT_INSN (p));
else
p = NEXT_INSN (p);
}