Hello, EDGE_CAN_FALLTHRU is internal to bb-reorder.c, set_edge_can_fallthru_flag() clears it on all edges and computes it fresh for bb-reorder.
The test in rtl_verify_flow_info_1 has to stay because bb-reorder doesn't clean up the flag after it's done. Bootstrapped&tested on powerpc64-unknown-linux-gnu. OK? Ciao! Steven * haifa-sched.c (init_before_recovery): Do not set EDGE_CAN_FALLTHRU. * cfgrtl.c (force_nonfallthru_and_redirect): Likewise. Index: haifa-sched.c =================================================================== --- haifa-sched.c (revision 189478) +++ haifa-sched.c (working copy) @@ -7193,8 +7193,7 @@ init_before_recovery (basic_block *before_recovery redirect_edge_succ (e, single); make_single_succ_edge (single, empty, 0); - make_single_succ_edge (empty, EXIT_BLOCK_PTR, - EDGE_FALLTHRU | EDGE_CAN_FALLTHRU); + make_single_succ_edge (empty, EXIT_BLOCK_PTR, EDGE_FALLTHRU); label = block_label (empty); x = emit_jump_insn_after (gen_jump (label), BB_END (single)); Index: cfgrtl.c =================================================================== --- cfgrtl.c (revision 189478) +++ cfgrtl.c (working copy) @@ -1365,8 +1365,8 @@ force_nonfallthru_and_redirect (edge e, basic_bloc one and create separate abnormal edge to original destination. This allows bb-reorder to make such edge non-fallthru. */ gcc_assert (e->dest == target); - abnormal_edge_flags = e->flags & ~(EDGE_FALLTHRU | EDGE_CAN_FALLTHRU); - e->flags &= EDGE_FALLTHRU | EDGE_CAN_FALLTHRU; + abnormal_edge_flags = e->flags & ~EDGE_FALLTHRU; + e->flags &= EDGE_FALLTHRU; } else {