+2012-10-16 Steven Bosscher <steven@gcc.gnu.org>
+
+ * df-problems.c (df_kill_notes): Split up in two functions.
+ (df_remove_dead_and_unused_notes): New function, first half of
+ df_kill notes to remove all REG_DEAD and REG_UNUSED notes.
+ (df_remove_dead_eq_notes): New function, second half of df_kill_notes
+ to remove REG_EQUAL and REG_EQUIV notes referring to dead registers.
+ (df_note_bb_compute): Call df_remove_dead_and_unused_notes instead
+ of df_kill_notes. Call df_remove_dead_eq_notes after processing insn.
+
+ * web.c (web): Re-add DF_RD_PRUNE_DEAD_DEFS;
+
2012-10-16 Ian Lance Taylor <iant@google.com>
* doc/extend.texi (Return Address): Change
#endif
-/* Remove all of the REG_DEAD or REG_UNUSED notes from INSN and add
- them to OLD_DEAD_NOTES and OLD_UNUSED_NOTES. Remove also
- REG_EQUAL/REG_EQUIV notes referring to dead pseudos using LIVE
- as the bitmap of currently live registers. */
+/* Remove all of the REG_DEAD or REG_UNUSED notes from INSN. */
static void
-df_kill_notes (rtx insn, bitmap live)
+df_remove_dead_and_unused_notes (rtx insn)
{
rtx *pprev = ®_NOTES (insn);
rtx link = *pprev;
}
break;
+ default:
+ pprev = &XEXP (link, 1);
+ link = *pprev;
+ break;
+ }
+ }
+}
+
+/* Remove REG_EQUAL/REG_EQUIV notes referring to dead pseudos using LIVE
+ as the bitmap of currently live registers. */
+
+static void
+df_remove_dead_eq_notes (rtx insn, bitmap live)
+{
+ rtx *pprev = ®_NOTES (insn);
+ rtx link = *pprev;
+
+ while (link)
+ {
+ switch (REG_NOTE_KIND (link))
+ {
case REG_EQUAL:
case REG_EQUIV:
{
}
break;
}
+
default:
pprev = &XEXP (link, 1);
link = *pprev;
}
}
-
/* Set a NOTE_TYPE note for REG in INSN. */
static inline void
debug_insn = DEBUG_INSN_P (insn);
bitmap_clear (do_not_gen);
- df_kill_notes (insn, live);
+ df_remove_dead_and_unused_notes (insn);
/* Process the defs. */
if (CALL_P (insn))
}
}
+ df_remove_dead_eq_notes (insn, live);
+
if (debug_insn == -1)
{
/* ??? We could probably do better here, replacing dead
rtx insn;
df_set_flags (DF_NO_HARD_REGS + DF_EQ_NOTES);
- /* We can not RD_PRUNE_DEAD_DEFS, because we care about REG_EQUAL
- notes. */
+ df_set_flags (DF_RD_PRUNE_DEAD_DEFS);
df_chain_add_problem (DF_UD_CHAIN);
df_analyze ();
df_set_flags (DF_DEFER_INSN_RESCAN);