From 253c415a1acba50711c82693426391743ac18040 Mon Sep 17 00:00:00 2001 From: "Vladimir N. Makarov" Date: Sun, 15 Nov 2020 11:22:19 -0500 Subject: [PATCH] Do not put reload insns in the last empty BB. gcc/ * lra.c (lra_process_new_insns): Don't put reload insns in the last empty BB. --- gcc/lra.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/gcc/lra.c b/gcc/lra.c index 673554d0a4b..b318cfd7456 100644 --- a/gcc/lra.c +++ b/gcc/lra.c @@ -1903,15 +1903,23 @@ lra_process_new_insns (rtx_insn *insn, rtx_insn *before, rtx_insn *after, { /* We already made the edge no-critical in ira.c::ira */ lra_assert (!EDGE_CRITICAL_P (e)); - rtx_insn *tmp = BB_HEAD (e->dest); + rtx_insn *curr, *tmp = BB_HEAD (e->dest); if (LABEL_P (tmp)) tmp = NEXT_INSN (tmp); if (NOTE_INSN_BASIC_BLOCK_P (tmp)) tmp = NEXT_INSN (tmp); - start_sequence (); - for (rtx_insn *curr = after; - curr != NULL_RTX; + for (curr = tmp; + curr != NULL + && (!INSN_P (curr) || BLOCK_FOR_INSN (curr) == e->dest); curr = NEXT_INSN (curr)) + ; + /* Do not put reload insns if it is the last BB + without actual insns. In this case the reload insns + can get null BB after emitting. */ + if (curr == NULL) + continue; + start_sequence (); + for (curr = after; curr != NULL_RTX; curr = NEXT_INSN (curr)) emit_insn (copy_insn (PATTERN (curr))); rtx_insn *copy = get_insns (), *last = get_last_insn (); end_sequence (); -- 2.30.2