Message ID | mptsfipsbte.fsf@arm.com |
---|---|
State | New |
Headers | show |
Series | Handle epilogues that contain jumps | expand |
On 11/11/22 09:19, Richard Sandiford via Gcc-patches wrote: > 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. OK jeff
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); } }