aboutsummaryrefslogtreecommitdiff
path: root/gcc/dce.c
diff options
context:
space:
mode:
authorAlexandre Oliva <aoliva@redhat.com>2012-06-28 07:39:25 +0000
committerAlexandre Oliva <aoliva@gcc.gnu.org>2012-06-28 07:39:25 +0000
commit6f9e260c80f8aa7d49a2c809e17d62686c5f13a6 (patch)
tree5cb806a55543696d39711d3f54d8308c3a5c7ce9 /gcc/dce.c
parentb94a8a1239c4ec4ec50bbcd24fa85cae912b3a8e (diff)
downloadgcc-6f9e260c80f8aa7d49a2c809e17d62686c5f13a6.zip
gcc-6f9e260c80f8aa7d49a2c809e17d62686c5f13a6.tar.gz
gcc-6f9e260c80f8aa7d49a2c809e17d62686c5f13a6.tar.bz2
re PR debug/53740 (--enable-checking=yes,rtl bootstrap failure with ada)
PR debug/53740 PR debug/52983 PR debug/48866 * dce.c (word_dce_process_block): Check whether inserting debug temps are needed even for needed insns. (dce_process_block): Likewise. * df-problems.c (dead_debug_add): Add comment about multi-regs. (dead_debug_insert_temp): Likewise. Don't subreg when we're setting fewer regs than a multi-reg requires. From-SVN: r189036
Diffstat (limited to 'gcc/dce.c')
-rw-r--r--gcc/dce.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/gcc/dce.c b/gcc/dce.c
index 8954d5c..2e58e43 100644
--- a/gcc/dce.c
+++ b/gcc/dce.c
@@ -864,9 +864,12 @@ 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);
+
/* Insert debug temps for dead REGs used in subsequent debug
- insns. */
- else if (debug.used && !bitmap_empty_p (debug.used))
+ insns. We may have to emit a debug temp even if the insn
+ was marked, in case the debug use was after the point of
+ death. */
+ if (debug.used && !bitmap_empty_p (debug.used))
{
df_ref *def_rec;
@@ -963,9 +966,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))
+ insns. We may have to emit a debug temp even if the insn
+ was marked, in case the debug use was after the point of
+ death. */
+ 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);