[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:
parent
32b6e917ac
commit
a89c5d3539
1 changed files with 11 additions and 1 deletions
12
gcc/ira.c
12
gcc/ira.c
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue