summaryrefslogtreecommitdiff
path: root/gcc/dce.c
diff options
context:
space:
mode:
authoraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>2012-06-13 20:41:55 +0000
committeraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>2012-06-13 20:41:55 +0000
commit5ea3fd4b33dd596e31fa4146dd21b2c37c56bed1 (patch)
tree0f55319406217d4091a8647c69087d7dabaa4e73 /gcc/dce.c
parent4015e18c6d40af13aab1d0f96332bad503a20230 (diff)
downloadgcc-5ea3fd4b33dd596e31fa4146dd21b2c37c56bed1.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@188527 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/dce.c')
-rw-r--r--gcc/dce.c30
1 files changed, 16 insertions, 14 deletions
diff --git a/gcc/dce.c b/gcc/dce.c
index c706296c663..86edea11c55 100644
--- a/gcc/dce.c
+++ b/gcc/dce.c
@@ -857,8 +857,9 @@ word_dce_process_block (basic_block bb, bool redo_out)
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;
@@ -939,18 +940,13 @@ dce_process_block (basic_block bb, bool redo_out, bitmap au)
/* 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. */
@@ -960,6 +956,12 @@ dce_process_block (basic_block bb, bool redo_out, bitmap au)
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);