From: Vladimir N. Makarov Date: Mon, 18 Jan 2021 21:41:39 +0000 (-0500) Subject: [PR97847] IRA: Skip abnormal critical edge splitting X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a89c5d3539c36f160ca5b997324ebcd3d601d56e;p=gcc.git [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. --- diff --git a/gcc/ira.c b/gcc/ira.c index 725b0ff0276..f0bdbc8cf56 100644 --- a/gcc/ira.c +++ b/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