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