re PR debug/54953 (New sra-1.c FAILs on powerpc)

PR debug/54953
	* valtrack.h (DEBUG_TEMP_AFTER_WITH_REG_FORCE): New.
	* valtrack.c (dead_debug_insert_temp): Use emit_debug_insn_after
	even for where == DEBUG_TEMP_AFTER_WITH_REG_FORCE.
	* dce.c (word_dce_process_block, dce_process_block): Pass
	DEBUG_TEMP_AFTER_WITH_REG_FORCE if insn is needed and therefore
	not going to be eliminated.

From-SVN: r192978
This commit is contained in:
Jakub Jelinek 2012-10-30 09:08:01 +01:00 committed by Jakub Jelinek
parent d863d14312
commit 85d874975a
4 changed files with 26 additions and 5 deletions

View File

@ -1,3 +1,13 @@
2012-10-30 Jakub Jelinek <jakub@redhat.com>
PR debug/54953
* valtrack.h (DEBUG_TEMP_AFTER_WITH_REG_FORCE): New.
* valtrack.c (dead_debug_insert_temp): Use emit_debug_insn_after
even for where == DEBUG_TEMP_AFTER_WITH_REG_FORCE.
* dce.c (word_dce_process_block, dce_process_block): Pass
DEBUG_TEMP_AFTER_WITH_REG_FORCE if insn is needed and therefore
not going to be eliminated.
2012-10-29 Lawrence Crowl <crowl@google.com>
* sbitmap.h (sbitmap_copy): Rename bitmap_copy.

View File

@ -1,5 +1,5 @@
/* RTL dead code elimination.
Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
Free Software Foundation, Inc.
This file is part of GCC.
@ -880,7 +880,10 @@ word_dce_process_block (basic_block bb, bool redo_out,
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);
marked_insn_p (insn)
&& !control_flow_insn_p (insn)
? DEBUG_TEMP_AFTER_WITH_REG_FORCE
: DEBUG_TEMP_BEFORE_WITH_VALUE);
}
if (dump_file)
@ -981,7 +984,9 @@ dce_process_block (basic_block bb, bool redo_out, bitmap au,
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);
needed && !control_flow_insn_p (insn)
? DEBUG_TEMP_AFTER_WITH_REG_FORCE
: DEBUG_TEMP_BEFORE_WITH_VALUE);
}
dead_debug_local_finish (&debug, NULL);

View File

@ -684,7 +684,8 @@ dead_debug_insert_temp (struct dead_debug_local *debug, unsigned int uregno,
DEBUG_EXPR_TREE_DECL (dval), breg,
VAR_INIT_STATUS_INITIALIZED);
if (where == DEBUG_TEMP_AFTER_WITH_REG)
if (where == DEBUG_TEMP_AFTER_WITH_REG
|| where == DEBUG_TEMP_AFTER_WITH_REG_FORCE)
bind = emit_debug_insn_after (bind, insn);
else
bind = emit_debug_insn_before (bind, insn);

View File

@ -131,7 +131,12 @@ enum debug_temp_where
/* Bind a newly-created debug temporary to a REG for UREGNO, and
insert the debug insn after INSN. REG is expected to be set at
INSN. */
DEBUG_TEMP_AFTER_WITH_REG = 1
DEBUG_TEMP_AFTER_WITH_REG = 1,
/* Like DEBUG_TEMP_AFTER_WITH_REG, but force addition of a debug
temporary even if there is just a single debug use. This is used
on regs that are becoming REG_DEAD on INSN and so uses of the
reg later on are invalid. */
DEBUG_TEMP_AFTER_WITH_REG_FORCE = 2
};
extern void dead_debug_global_init (struct dead_debug_global *, bitmap);