On Sat, Mar 19, 2011 at 08:48:55AM -0400, Kenneth Zadeck wrote:
> i think that there are two separate questions here:
> 
> 1) should your original patch go in as you did it, or should it go
> in with the last "return false" be an abort?

bool
df_get_bb_dirty (basic_block bb)
{
  return bitmap_bit_p ((df_live
                        ? df_live : df_lr)->out_of_date_transfer_functions,
                       bb->index);
}

would IMHO work equally well (no need to assert IMHO, it isn't much
different from just segfaulting).  From what I can see, df_get_bb_dirty
is called from ifcvt (both passes, but both are guarded with optimize > 0
and happen while df is computed) and crossjumping (run with -fcrossjumping
even at -O0, but after pass_df_initialize_no_opt, so df_lr is computed too
at least, if not even df_live).
I'd need to bootstrap/regtest it of course, but I don't expect any failures.

> 2) which dataflow problems should be used at what points during
...
> However, if it does not, then some form of your first patch is all
> that is necessary.

I believe it doesn't make any difference, but I'll let Paolo comment on it.
I could try to write a patch that would check for any differences
(basically compute for -O2 -fcrossjumping live_union from both DF_LR_OUT (bb)
and df_get_live_out (bb) and if it is different, run can_move_*across twice
and see whether it makes any difference).

        Jakub

Reply via email to