[Bug rtl-optimization/92007] [9/10 Regression] ICE: verify_flow_info failed (error: EH edge crosses section boundary in bb 7)
iii at linux dot ibm.com
gcc-bugzilla@gcc.gnu.org
Wed Oct 16 11:19:00 GMT 2019
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);
More information about the Gcc-bugs
mailing list