The prologue/epilogue pass allows the prologue sequence to contain jumps. The sequence is then partitioned into basic blocks using find_many_sub_basic_blocks.
This patch treats epilogues in the same way. It's needed for a follow-on aarch64 patch that adds conditional code to both the prologue and the epilogue. Tested on aarch64-linux-gnu (including with a follow-on patch) and x86_64-linux-gnu. OK to install? Richard gcc/ * function.cc (thread_prologue_and_epilogue_insns): Handle epilogues that contain jumps. --- gcc/function.cc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/gcc/function.cc b/gcc/function.cc index d3da20ede7f..b54a1d81a3b 100644 --- a/gcc/function.cc +++ b/gcc/function.cc @@ -6136,6 +6136,11 @@ thread_prologue_and_epilogue_insns (void) && returnjump_p (BB_END (e->src))) e->flags &= ~EDGE_FALLTHRU; } + + auto_sbitmap blocks (last_basic_block_for_fn (cfun)); + bitmap_clear (blocks); + bitmap_set_bit (blocks, BLOCK_FOR_INSN (epilogue_seq)->index); + find_many_sub_basic_blocks (blocks); } else if (next_active_insn (BB_END (exit_fallthru_edge->src))) { @@ -6234,6 +6239,11 @@ thread_prologue_and_epilogue_insns (void) set_insn_locations (seq, epilogue_location); emit_insn_before (seq, insn); + + auto_sbitmap blocks (last_basic_block_for_fn (cfun)); + bitmap_clear (blocks); + bitmap_set_bit (blocks, BLOCK_FOR_INSN (insn)->index); + find_many_sub_basic_blocks (blocks); } } -- 2.25.1