diff options
author | aoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-06-13 20:41:55 +0000 |
---|---|---|
committer | aoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-06-13 20:41:55 +0000 |
commit | 5ea3fd4b33dd596e31fa4146dd21b2c37c56bed1 (patch) | |
tree | 0f55319406217d4091a8647c69087d7dabaa4e73 /gcc/dce.c | |
parent | 4015e18c6d40af13aab1d0f96332bad503a20230 (diff) | |
download | gcc-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.c | 30 |
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); |