2012-06-13 Alexandre Oliva <aoliva@redhat.com>
+ PR debug/52983
+ PR debug/48866
+ * dce.c (word_dce_process_block): Insert debug temps only if the
+ insn is not marked.
+ (dce_process_block): Likewise, and if debug.used is not empty,
+ and only after iterating over all DEFs that might mark the insn.
+
+2012-06-13 Alexandre Oliva <aoliva@redhat.com>
+
* common.opt (ftree-coalesce-inlined-vars): New.
(ftree-coalesce-vars): New.
* doc/invoke.texi: Document them.
anything in local_live. */
if (marked_insn_p (insn))
df_word_lr_simulate_uses (insn, local_live);
-
- if (debug.used && !bitmap_empty_p (debug.used))
+ /* Insert debug temps for dead REGs used in subsequent debug
+ insns. */
+ else if (debug.used && !bitmap_empty_p (debug.used))
{
df_ref *def_rec;
/* The insn is needed if there is someone who uses the output. */
if (!needed)
for (def_rec = DF_INSN_DEFS (insn); *def_rec; def_rec++)
- {
- dead_debug_insert_temp (&debug, DF_REF_REGNO (*def_rec), insn,
- DEBUG_TEMP_BEFORE_WITH_VALUE);
-
- if (bitmap_bit_p (local_live, DF_REF_REGNO (*def_rec))
- || bitmap_bit_p (au, DF_REF_REGNO (*def_rec)))
- {
- needed = true;
- mark_insn (insn, true);
- break;
- }
- }
+ if (bitmap_bit_p (local_live, DF_REF_REGNO (*def_rec))
+ || bitmap_bit_p (au, DF_REF_REGNO (*def_rec)))
+ {
+ needed = true;
+ mark_insn (insn, true);
+ break;
+ }
/* No matter if the instruction is needed or not, we remove
any regno in the defs from the live set. */
anything in local_live. */
if (needed)
df_simulate_uses (insn, local_live);
+ /* Insert debug temps for dead REGs used in subsequent debug
+ insns. */
+ else if (debug.used && !bitmap_empty_p (debug.used))
+ for (def_rec = DF_INSN_DEFS (insn); *def_rec; def_rec++)
+ dead_debug_insert_temp (&debug, DF_REF_REGNO (*def_rec), insn,
+ DEBUG_TEMP_BEFORE_WITH_VALUE);
}
dead_debug_finish (&debug, NULL);