cse.c (dead_libcall_p): Update counts.
authorJan Hubicka <jh@suse.cz>
Wed, 8 May 2002 11:13:54 +0000 (13:13 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Wed, 8 May 2002 11:13:54 +0000 (11:13 +0000)
* cse.c (dead_libcall_p): Update counts.
(delete_trivially_dead_insns): Update call of dead_libcall_p.

From-SVN: r53287

gcc/ChangeLog
gcc/cse.c

index bfeecda..686cace 100644 (file)
@@ -1,3 +1,8 @@
+Wed May  8 13:12:11 CEST 2002  Jan Hubicka  <jh@suse.cz>
+
+       * cse.c (dead_libcall_p): Update counts.
+       (delete_trivially_dead_insns): Update call of dead_libcall_p.
+
 Wed May  8 11:08:50 CEST 2002  Jan Hubicka  <jh@suse.cz>
 
        * cfglayout.c (function_tail_eff_head): Rename to ...
index c15c63f..c292c52 100644 (file)
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -691,7 +691,7 @@ static int check_dependence PARAMS ((rtx *, void *));
 static void flush_hash_table   PARAMS ((void));
 static bool insn_live_p                PARAMS ((rtx, int *));
 static bool set_live_p         PARAMS ((rtx, rtx, int *));
-static bool dead_libcall_p     PARAMS ((rtx));
+static bool dead_libcall_p     PARAMS ((rtx, int *));
 \f
 /* Dump the expressions in the equivalence class indicated by CLASSP.
    This function is used only for debugging.  */
@@ -7571,8 +7571,9 @@ insn_live_p (insn, counts)
 /* Return true if libcall is dead as a whole.  */
 
 static bool
-dead_libcall_p (insn)
+dead_libcall_p (insn, counts)
      rtx insn;
+     int *counts;
 {
   rtx note;
   /* See if there's a REG_EQUAL note on this insn and try to
@@ -7589,11 +7590,17 @@ dead_libcall_p (insn)
       if (!new)
        new = XEXP (note, 0);
 
+      /* While changing insn, we must update the counts accordingly.  */
+      count_reg_usage (insn, counts, NULL_RTX, -1);
+
       if (set && validate_change (insn, &SET_SRC (set), new, 0))
        {
+          count_reg_usage (insn, counts, NULL_RTX, 1);
          remove_note (insn, find_reg_note (insn, REG_RETVAL, NULL_RTX));
+         remove_note (insn, note);
          return true;
        }
+       count_reg_usage (insn, counts, NULL_RTX, 1);
     }
   return false;
 }
@@ -7652,7 +7659,7 @@ delete_trivially_dead_insns (insns, nreg)
            {
              in_libcall = 1;
              live_insn = 1;
-             dead_libcall = dead_libcall_p (insn);
+             dead_libcall = dead_libcall_p (insn, counts);
            }
          else if (in_libcall)
            live_insn = ! dead_libcall;