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

Reply via email to