+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 ...
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. */
/* 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
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;
}
{
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;