Commit fd1ca3fe by Segher Boessenkool Committed by Segher Boessenkool

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
parent 46928a8f
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>
......
...@@ -4992,25 +4992,40 @@ split_live_ranges_for_shrink_wrap (void) ...@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment