]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
* cse.c (dead_libcall_p): Update counts.
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 8 May 2002 11:13:54 +0000 (11:13 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 8 May 2002 11:13:54 +0000 (11:13 +0000)
(delete_trivially_dead_insns): Update call of dead_libcall_p.

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

gcc/ChangeLog
gcc/cse.c

index bfeecda612b69de5a0da42840663dbee1bfe3bfc..686cacebee1626242612dc4b6cfc741f405de95a 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 c15c63fffb71bbf12576d487448c8a9bd0795a86..c292c5202400a3b82de3454ed729d96ad3e2918d 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;