mirror of git://gcc.gnu.org/git/gcc.git
IRA: Don't create new regs for debug insns (PR80429)
In split_live_ranges_for_shrink_wrap IRA also splits regs that are only used in debug insns, leading to -fcompare-debug failures. PR rtl-optimization/80429 * ira.c (split_live_ranges_for_shrink_wrap): Don't split regs that are only used in debug insns. From-SVN: r246991
This commit is contained in:
parent
46928a8fda
commit
fd1ca3fe77
|
|
@ -1,3 +1,9 @@
|
||||||
|
2017-04-19 Segher Boessenkool <segher@kernel.crashing.org>
|
||||||
|
|
||||||
|
PR rtl-optimization/80429
|
||||||
|
* ira.c (split_live_ranges_for_shrink_wrap): Don't split regs that
|
||||||
|
are only used in debug insns.
|
||||||
|
|
||||||
2017-04-19 Eric Botcazou <ebotcazou@adacore.com>
|
2017-04-19 Eric Botcazou <ebotcazou@adacore.com>
|
||||||
Vladimir Makarov <vmakarov@redhat.com>
|
Vladimir Makarov <vmakarov@redhat.com>
|
||||||
|
|
||||||
|
|
|
||||||
25
gcc/ira.c
25
gcc/ira.c
|
|
@ -4992,25 +4992,40 @@ split_live_ranges_for_shrink_wrap (void)
|
||||||
if (!dest || dest == pic_offset_table_rtx)
|
if (!dest || dest == pic_offset_table_rtx)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
rtx newreg = NULL_RTX;
|
bool need_newreg = false;
|
||||||
df_ref use, next;
|
df_ref use, next;
|
||||||
for (use = DF_REG_USE_CHAIN (REGNO (dest)); use; use = next)
|
for (use = DF_REG_USE_CHAIN (REGNO (dest)); use; use = next)
|
||||||
{
|
{
|
||||||
rtx_insn *uin = DF_REF_INSN (use);
|
rtx_insn *uin = DF_REF_INSN (use);
|
||||||
next = DF_REF_NEXT_REG (use);
|
next = DF_REF_NEXT_REG (use);
|
||||||
|
|
||||||
|
if (DEBUG_INSN_P (uin))
|
||||||
|
continue;
|
||||||
|
|
||||||
basic_block ubb = BLOCK_FOR_INSN (uin);
|
basic_block ubb = BLOCK_FOR_INSN (uin);
|
||||||
if (ubb == call_dom
|
if (ubb == call_dom
|
||||||
|| dominated_by_p (CDI_DOMINATORS, ubb, call_dom))
|
|| dominated_by_p (CDI_DOMINATORS, ubb, call_dom))
|
||||||
{
|
{
|
||||||
if (!newreg)
|
need_newreg = true;
|
||||||
newreg = ira_create_new_reg (dest);
|
break;
|
||||||
validate_change (uin, DF_REF_REAL_LOC (use), newreg, true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newreg)
|
if (need_newreg)
|
||||||
{
|
{
|
||||||
|
rtx newreg = ira_create_new_reg (dest);
|
||||||
|
|
||||||
|
for (use = DF_REG_USE_CHAIN (REGNO (dest)); use; use = next)
|
||||||
|
{
|
||||||
|
rtx_insn *uin = DF_REF_INSN (use);
|
||||||
|
next = DF_REF_NEXT_REG (use);
|
||||||
|
|
||||||
|
basic_block ubb = BLOCK_FOR_INSN (uin);
|
||||||
|
if (ubb == call_dom
|
||||||
|
|| dominated_by_p (CDI_DOMINATORS, ubb, call_dom))
|
||||||
|
validate_change (uin, DF_REF_REAL_LOC (use), newreg, true);
|
||||||
|
}
|
||||||
|
|
||||||
rtx_insn *new_move = gen_move_insn (newreg, dest);
|
rtx_insn *new_move = gen_move_insn (newreg, dest);
|
||||||
emit_insn_after (new_move, bb_note (call_dom));
|
emit_insn_after (new_move, bb_note (call_dom));
|
||||||
if (dump_file)
|
if (dump_file)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue