> +/* Returns whether the control parents of BB are preserved. */
> +
> +static bool
> +control_parents_preserved_p (basic_block bb)
> +{
> + /* If we marked the control parents from BB they are preserved. */
> + if (bitmap_bit_p (visited_control_parents, bb->index))
> + return true;
> +
> + /* But they can also end up being marked from elsewhere. */
> + bitmap_iterator bi;
> + unsigned edge_number;
> + EXECUTE_IF_SET_IN_BITMAP (cd->get_edges_dependent_on (bb->index),
> + 0, edge_number, bi)
> + {
> + basic_block cd_bb = cd->get_edge_src (edge_number);
> + if (cd_bb != bb
> + && !bitmap_bit_p (last_stmt_necessary, cd_bb->index))
> + return false;
> + }
> + return true;
I suppose you can also set visited_control_parents bit here so the loop
is not re-done for every clobber in a BB.
Honza