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