> --- 233,251 ---- if (gimple_assign_copy_p (stmt) && gimple_assign_lhs (stmt) == result && gimple_assign_rhs1 (stmt) == found) > ! { > ! unlink_stmt_vdef (stmt); > ! gsi_remove (&gsi, true); > ! } else Unrelated to your patch, but out of curiosity, shouldn't gsi_remove() automatically do an unlink_stmt_vdef() if the remove_permanently flag is true like it is here? Seems like an oversight bug waiting to happen... > --- 2537,2584 ---- > rebuild_jump_labels (get_insns ()); > find_exception_handler_labels (); > > + FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, next_bb) > + { > + edge e; > + edge_iterator ei; > + for (ei = ei_start (bb->succs); (e = ei_safe_edge (ei)); ) > + { > + if (e->insns.r) > + commit_one_edge_insertion (e); > + else > + ei_next (&ei); > + } > + } I do think this should be fixed in commit_edge_insertions and the common code factored out and called from here, but that can be done separately. Then commit_one_edge_insertion() could return to being a static function as well. Im guessing current_ir_type() is not IR_RTL_CFGLAYOUT, or you could just call commit_edge_insertions directly...