cse.c (delete_trivially_dead_insns): Do not skip the last insn if it is a real insn.
authorJeffrey A Law <law@cygnus.com>
Mon, 6 Sep 1999 08:44:50 +0000 (08:44 +0000)
committerJeff Law <law@gcc.gnu.org>
Mon, 6 Sep 1999 08:44:50 +0000 (02:44 -0600)
        * cse.c (delete_trivially_dead_insns): Do not skip the last
        insn if it is a real insn.

From-SVN: r29138

gcc/ChangeLog
gcc/cse.c

index 430e62b..5e40c62 100644 (file)
@@ -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.
index 68fe7b0..d1a2487 100644 (file)
--- 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;