https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92007
--- Comment #10 from Ilya Leoshkevich <iii at linux dot ibm.com> --- > Question is how to figure out which to do when. I would always do the former before reload, and always the latter after reload. However, I have a concern regarding this approach: in more complicated cases instead of just a single 11/COLD we might have a larger lump of cold basic blocks. In order to avoid introducing new crossing edges, we would have to make them all hot (using e.g. a simple worklist algorithm). Is such an end result desirable? I'd also still like to understand the motivation behind doing this pass after reload. When I introduced it in r266734, the only goal was to clean up the CFG after combine. I was advised to put it where it is now, and back then I did not see any downsides to doing so. But now that this problem has arisen - what is the advantage of doing this after the following 16 additional passes? What would be the downside of doing it between pass_combine and pass_partition_blocks? NEXT_PASS (pass_combine); -- NEXT_PASS (pass_if_after_combine); NEXT_PASS (pass_partition_blocks); NEXT_PASS (pass_outof_cfg_layout_mode); NEXT_PASS (pass_split_all_insns); NEXT_PASS (pass_lower_subreg3); NEXT_PASS (pass_df_initialize_no_opt); NEXT_PASS (pass_stack_ptr_mod); NEXT_PASS (pass_mode_switching); NEXT_PASS (pass_match_asm_constraints); NEXT_PASS (pass_sms); NEXT_PASS (pass_live_range_shrinkage); NEXT_PASS (pass_sched); NEXT_PASS (pass_early_remat); NEXT_PASS (pass_ira); NEXT_PASS (pass_reload); NEXT_PASS (pass_postreload); PUSH_INSERT_PASSES_WITHIN (pass_postreload) -- NEXT_PASS (pass_postreload_jump);