On 10/07/2011 12:15 AM, Richard Henderson wrote:
diff --git a/gcc/recog.c b/gcc/recog.c index d3ecb73..e0557c5 100644 --- a/gcc/recog.c +++ b/gcc/recog.c @@ -3769,20 +3769,33 @@ struct rtl_opt_pass pass_split_all_insns = static unsigned int rest_of_handle_split_after_reload (void) { - /* If optimizing, then go ahead and split insns now. */ -#ifndef STACK_REGS - if (optimize> 0) -#endif - split_all_insns (); + df_live_add_problem (); + df_set_flags (DF_DEFER_INSN_RESCAN); + + split_all_insns (); + df_analyze (); + return 0; }
Setting TODO_df_finish (and perhaps TODO_df_verify) should be enough. The idea is:
df_finish_pass calls df_process_deferred_rescans -> calls df_bb_refs_record and df_insn_rescan -> calls df_set_bb_dirty -> sets df_lr->out_of_date_transfer_functions and this in turn skips the verification when that would fail. Paolo