From 8d71a51026ad5ce87d51be1915a2eb2ae88f9cd8 Mon Sep 17 00:00:00 2001
From: Jeffrey A Law <law@cygnus.com>
Date: Mon, 6 Sep 1999 08:44:50 +0000
Subject: [PATCH] cse.c (delete_trivially_dead_insns): Do not skip the last
 insn if it is a real insn.

        * cse.c (delete_trivially_dead_insns): Do not skip the last
        insn if it is a real insn.

From-SVN: r29138
---
 gcc/ChangeLog |  5 +++++
 gcc/cse.c     | 12 ++++++++++--
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 430e62bc6cb9..5e40c62f8a7f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Mon Sep  6 02:42:36 1999  Jeffrey A Law  (law@cygnus.com)
+
+	* cse.c (delete_trivially_dead_insns): Do not skip the last
+	insn if it is a real insn.
+
 Sun Sep  5 18:57:42 1999  Mark Mitchell  <mark@codesourcery.com>
 
 	* Makefile.in (ggc-simple.o): Depend on hash.h.
diff --git a/gcc/cse.c b/gcc/cse.c
index 68fe7b04a924..d1a2487cb410 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -9135,8 +9135,16 @@ delete_trivially_dead_insns (insns, nreg)
 
   /* Go from the last insn to the first and delete insns that only set unused
      registers or copy a register to itself.  As we delete an insn, remove
-     usage counts for registers it uses.  */
-  for (insn = prev_real_insn (get_last_insn ()); insn; insn = prev)
+     usage counts for registers it uses. 
+
+     The first jump optimization pass may leave a real insn as the last
+     insn in the function.   We must not skip that insn or we may end
+     up deleting code that is not really dead.   */
+  insn = get_last_insn ();
+  if (GET_RTX_CLASS (GET_CODE (insn)) != 'i')
+    insn = prev_real_insn (insn);
+
+  for ( ; insn; insn = prev)
     {
       int live_insn = 0;
       rtx note;
-- 
GitLab