OSDN Git Service

* cfgrtl.c (delete_insn): Assert insn hasn't been deleted yet.
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 11 Jan 2002 02:44:48 +0000 (02:44 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 11 Jan 2002 02:44:48 +0000 (02:44 +0000)
        * reload1.c (delete_output_reload): Zap spill_reg_store.  Take
        care not to delete instructions twice.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@48760 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/cfgrtl.c
gcc/reload1.c

index d6061ff..5c67d6d 100644 (file)
@@ -1,3 +1,9 @@
+2002-01-10  Richard Henderson  <rth@redhat.com>
+
+       * cfgrtl.c (delete_insn): Assert insn hasn't been deleted yet.
+       * reload1.c (delete_output_reload): Zap spill_reg_store.  Take
+       care not to delete instructions twice.
+
 2002-01-10  Zack Weinberg  <zack@codesourcery.com>
 
        * toplev.c: Don't declare environ (it's not used anywhere).
@@ -154,7 +160,7 @@ Thu Jan 10 22:35:54 CET 2002  Jan Hubicka  <jh@suse.cz>
 Thu Jan 10 17:19:12 CET 2002  Jan Hubicka  <jh@suse.cz>
 
        * cfgcleanup.c (try_forward_edges): Properly initialize nthreaded_edges;
-        update edge probabilities to match.
+       update edge probabilities to match.
 
 2002-01-10  Joseph S. Myers  <jsm28@cam.ac.uk>
 
@@ -187,7 +193,7 @@ Thu Jan 10 11:19:18 CET 2002  Jan Hubicka  <jh@suse.cz>
 2002-01-20  Graham Stott  <grahams@redhat.com>
 
        * dwarf2out.c (indirect_string_alloc, output_indirect_string):
-        Move prototype into DWARF2_DEBUGGING_INFO conditional block.
+       Move prototype into DWARF2_DEBUGGING_INFO conditional block.
 
 2002-01-10  Richard Henderson  <rth@redhat.com>
 
@@ -287,8 +293,8 @@ Thu Jan 10 11:19:18 CET 2002  Jan Hubicka  <jh@suse.cz>
 
 2002-01-09  Herman A.J. ten Brugge  <Haj.Ten.Brugge@net.HCC.nl>
 
-        * real.c (c4xtoe, toc4x): Do some special conversion on long doubles
-        for the c4x target. Also improve layout.
+       * real.c (c4xtoe, toc4x): Do some special conversion on long doubles
+       for the c4x target. Also improve layout.
 
 2002-01-09  Richard Henderson  <rth@redhat.com>
 
index a4f25f8..f318798 100644 (file)
@@ -135,6 +135,9 @@ delete_insn (insn)
 
   if (really_delete)
     {
+      /* If this insn has already been deleted, something is very wrong.  */
+      if (INSN_DELETED_P (insn))
+       abort ();
       remove_insn (insn);
       INSN_DELETED_P (insn) = 1;
     }
index 58449c0..22d3b3d 100644 (file)
@@ -7537,9 +7537,8 @@ gen_reload (out, in, opnum, type)
   return last ? NEXT_INSN (last) : get_insns ();
 }
 \f
-/* Delete a previously made output-reload
-   whose result we now believe is not needed.
-   First we double-check.
+/* Delete a previously made output-reload whose result we now believe
+   is not needed.  First we double-check.
 
    INSN is the insn now being processed.
    LAST_RELOAD_REG is the hard register number for which we want to delete
@@ -7633,15 +7632,21 @@ delete_output_reload (insn, j, last_reload_reg)
        }
     }
 
+  /* We will be deleting the insn.  Remove the spill reg information.  */
+  for (k = HARD_REGNO_NREGS (last_reload_reg, GET_MODE (reg)); k-- > 0; )
+    {
+      spill_reg_store[last_reload_reg + k] = 0;
+      spill_reg_stored_to[last_reload_reg + k] = 0;
+    }
+
   /* The caller has already checked that REG dies or is set in INSN.
-     It has also checked that we are optimizing, and thus some inaccurancies
-     in the debugging information are acceptable.
-     So we could just delete output_reload_insn.
-     But in some cases we can improve the debugging information without
-     sacrificing optimization - maybe even improving the code:
-     See if the pseudo reg has been completely replaced
-     with reload regs.  If so, delete the store insn
-     and forget we had a stack slot for the pseudo.  */
+     It has also checked that we are optimizing, and thus some
+     inaccurancies in the debugging information are acceptable.
+     So we could just delete output_reload_insn.  But in some cases
+     we can improve the debugging information without sacrificing
+     optimization - maybe even improving the code: See if the pseudo
+     reg has been completely replaced with reload regs.  If so, delete
+     the store insn and forget we had a stack slot for the pseudo.  */
   if (rld[j].out != rld[j].in
       && REG_N_DEATHS (REGNO (reg)) == 1
       && REG_N_SETS (REGNO (reg)) == 1
@@ -7650,11 +7655,10 @@ delete_output_reload (insn, j, last_reload_reg)
     {
       rtx i2;
 
-      /* We know that it was used only between here
-        and the beginning of the current basic block.
-        (We also know that the last use before INSN was
-        the output reload we are thinking of deleting, but never mind that.)
-        Search that range; see if any ref remains.  */
+      /* We know that it was used only between here and the beginning of
+        the current basic block.  (We also know that the last use before
+        INSN was the output reload we are thinking of deleting, but never
+        mind that.)  Search that range; see if any ref remains.  */
       for (i2 = PREV_INSN (insn); i2; i2 = PREV_INSN (i2))
        {
          rtx set = single_set (i2);
@@ -7677,7 +7681,8 @@ delete_output_reload (insn, j, last_reload_reg)
            }
        }
 
-      /* Delete the now-dead stores into this pseudo.  */
+      /* Delete the now-dead stores into this pseudo.  Note that this
+        loop also takes care of deleting output_reload_insn.  */
       for (i2 = PREV_INSN (insn); i2; i2 = PREV_INSN (i2))
        {
          rtx set = single_set (i2);
@@ -7685,8 +7690,6 @@ delete_output_reload (insn, j, last_reload_reg)
          if (set != 0 && SET_DEST (set) == reg)
            {
              delete_address_reloads (i2, insn);
-             /* This might be a basic block head,
-                thus don't use delete_insn.  */
              delete_insn (i2);
            }
          if (GET_CODE (i2) == CODE_LABEL
@@ -7694,14 +7697,15 @@ delete_output_reload (insn, j, last_reload_reg)
            break;
        }
 
-      /* For the debugging info,
-        say the pseudo lives in this reload reg.  */
+      /* For the debugging info, say the pseudo lives in this reload reg.  */
       reg_renumber[REGNO (reg)] = REGNO (rld[j].reg_rtx);
       alter_reg (REGNO (reg), -1);
     }
-  delete_address_reloads (output_reload_insn, insn);
-  delete_insn (output_reload_insn);
-
+  else
+    {
+      delete_address_reloads (output_reload_insn, insn);
+      delete_insn (output_reload_insn);
+    }
 }
 
 /* We are going to delete DEAD_INSN.  Recursively delete loads of