[PR97847] IRA: Skip abnormal critical edge splitting

PPC64 can generate jumps with clobbered pseudo-regs and a BB with
such jump can have abnormal output edges.  IRA hits an assert when trying
to split abnormal critical edge to deal with asm goto output reloads
later.  The patch just skips splitting abnormal edges.  It is assumed
that asm-goto with output reloads can not be in BB with output abnormal edges.

gcc/ChangeLog:

	PR target/97847
	* ira.c (ira): Skip abnormal critical edge splitting.
This commit is contained in:
Vladimir N. Makarov 2021-01-18 16:41:39 -05:00
parent 32b6e917ac
commit a89c5d3539

View file

@ -5433,12 +5433,22 @@ ira (FILE *f)
for (int i = 0; i < recog_data.n_operands; i++)
if (recog_data.operand_type[i] != OP_IN)
{
bool skip_p = false;
FOR_EACH_EDGE (e, ei, bb->succs)
if (EDGE_CRITICAL_P (e)
&& e->dest != EXIT_BLOCK_PTR_FOR_FN (cfun)
&& (e->flags & EDGE_ABNORMAL))
{
skip_p = true;
break;
}
if (skip_p)
break;
output_jump_reload_p = true;
FOR_EACH_EDGE (e, ei, bb->succs)
if (EDGE_CRITICAL_P (e)
&& e->dest != EXIT_BLOCK_PTR_FOR_FN (cfun))
{
ira_assert (!(e->flags & EDGE_ABNORMAL));
start_sequence ();
/* We need to put some no-op insn here. We can
not put a note as commit_edges insertion will