From a89c5d3539c36f160ca5b997324ebcd3d601d56e Mon Sep 17 00:00:00 2001 From: "Vladimir N. Makarov" Date: Mon, 18 Jan 2021 16:41:39 -0500 Subject: [PATCH] [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. --- gcc/ira.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) 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 -- 2.30.2