diff options
author | Vladimir N. Makarov <vmakarov@redhat.com> | 2020-11-15 11:22:19 -0500 |
---|---|---|
committer | Vladimir N. Makarov <vmakarov@redhat.com> | 2020-11-15 11:30:50 -0500 |
commit | 253c415a1acba50711c82693426391743ac18040 (patch) | |
tree | 600a63f76292e6aa56e9ccf8df4116a3fbf7f948 /gcc | |
parent | 26285af40f98dfdb809b98b08386073c63b65db1 (diff) | |
download | gcc-253c415a1acba50711c82693426391743ac18040.zip gcc-253c415a1acba50711c82693426391743ac18040.tar.gz gcc-253c415a1acba50711c82693426391743ac18040.tar.bz2 |
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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/lra.c | 16 |
1 files changed, 12 insertions, 4 deletions
@@ -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 (); |