diff options
author | Jan Hubicka <jh@suse.cz> | 2010-06-04 15:27:51 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2010-06-04 13:27:51 +0000 |
commit | f251709af54dc788d21dd2c6a7d7e74d7167acef (patch) | |
tree | a4ceb7e97bfde2381fe3c825e778ba184c7d2b8f | |
parent | 8ff49c29fd93d56df978cfe1e4e41812251d7773 (diff) | |
download | gcc-f251709af54dc788d21dd2c6a7d7e74d7167acef.zip gcc-f251709af54dc788d21dd2c6a7d7e74d7167acef.tar.gz gcc-f251709af54dc788d21dd2c6a7d7e74d7167acef.tar.bz2 |
* dce.c (dce_process_block): Do not re-scan already marked instructions.
From-SVN: r160262
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/dce.c | 23 |
2 files changed, 15 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fa0304f..9063edc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2010-06-04 Jan Hubicka <jh@suse.cz> + + * dce.c (dce_process_block): Do not re-scan already marked instructions. + 2010-06-04 Bernd Schmidt <bernds@codesourcery.com> PR rtl-optimization/39871 @@ -904,19 +904,18 @@ dce_process_block (basic_block bb, bool redo_out, bitmap au) FOR_BB_INSNS_REVERSE (bb, insn) if (INSN_P (insn)) { - bool needed = false; + bool needed = marked_insn_p (insn); /* The insn is needed if there is someone who uses the output. */ - for (def_rec = DF_INSN_DEFS (insn); *def_rec; def_rec++) - if (bitmap_bit_p (local_live, DF_REF_REGNO (*def_rec)) - || bitmap_bit_p (au, DF_REF_REGNO (*def_rec))) - { - needed = true; - break; - } - - if (needed) - mark_insn (insn, true); + if (!needed) + for (def_rec = DF_INSN_DEFS (insn); *def_rec; def_rec++) + 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. */ @@ -924,7 +923,7 @@ dce_process_block (basic_block bb, bool redo_out, bitmap au) /* On the other hand, we do not allow the dead uses to set anything in local_live. */ - if (marked_insn_p (insn)) + if (needed) df_simulate_uses (insn, local_live); } |