OSDN Git Service

* tree-vrp.c (finalize_jump_threads): Do not call cleanup_cfg by hand.
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 18 Jan 2007 14:56:33 +0000 (14:56 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 18 Jan 2007 14:56:33 +0000 (14:56 +0000)
* tree-tailcall (add_virtual_phis): Likewise.
(optimize_tail_call): Return TODOs.
(execute_tail_calls): Return TODOs.
* tree-ssa-ccp (execute_fold_all_builtins): Do cleanup_cfg via TODO.
* tree-cfgcleanup.c (cleanup_tree_cfg_loop): Return if something
changed.
* tree-ssa-forwprop.c (tree_ssa_forward_propagate_single_use_value):
Cleanup cfg using TODO.
* tree-flow.h (cleanup_tree_cfg_loop): Update prototype.
* passes.c (execute_function_todo): When cleanup did something, remove
unused locals.
* tree-cfg.c (pass_build_cfg): Add cleanup_cfg TODO.
(make_edges): Don't cleanup_cfg.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@120900 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/passes.c
gcc/tree-cfg.c
gcc/tree-cfgcleanup.c
gcc/tree-flow.h
gcc/tree-ssa-ccp.c
gcc/tree-ssa-forwprop.c
gcc/tree-tailcall.c
gcc/tree-vrp.c

index 7edc6df..4fae499 100644 (file)
@@ -1,3 +1,20 @@
+2007-01-18  Jan Hubicka  <jh@suse.cz>
+
+       * tree-vrp.c (finalize_jump_threads): Do not call cleanup_cfg by hand.
+       * tree-tailcall (add_virtual_phis): Likewise.
+       (optimize_tail_call): Return TODOs.
+       (execute_tail_calls): Return TODOs.
+       * tree-ssa-ccp (execute_fold_all_builtins): Do cleanup_cfg via TODO.
+       * tree-cfgcleanup.c (cleanup_tree_cfg_loop): Return if something
+       changed.
+       * tree-ssa-forwprop.c (tree_ssa_forward_propagate_single_use_value):
+       Cleanup cfg using TODO.
+       * tree-flow.h (cleanup_tree_cfg_loop): Update prototype.
+       * passes.c (execute_function_todo): When cleanup did something, remove
+       unused locals.
+       * tree-cfg.c (pass_build_cfg): Add cleanup_cfg TODO.
+       (make_edges): Don't cleanup_cfg.
+
 2007-01-18  Uros Bizjak  <ubizjak@gmail.com>
 
        * reg-stack.c (subst_stack_regs_pat) [UNSPEC_SINCOS_COS,
index 9cb2c52..0ab5f48 100644 (file)
@@ -818,14 +818,19 @@ execute_function_todo (void *data)
   if (!flags)
     return;
   
-  /* Always cleanup the CFG before trying to update SSA .  */
+  /* Always cleanup the CFG before trying to update SSA.  */
   if (flags & TODO_cleanup_cfg)
     {
+      bool cleanup;
+
       if (current_loops)
-       cleanup_tree_cfg_loop ();
+       cleanup = cleanup_tree_cfg_loop ();
       else
-       cleanup_tree_cfg ();
+       cleanup = cleanup_tree_cfg ();
 
+      if (cleanup && (cfun->curr_properties & PROP_ssa))
+       flags |= TODO_remove_unused_locals;
+       
       /* When cleanup_tree_cfg merges consecutive blocks, it may
         perform some simplistic propagation when removing single
         valued PHI nodes.  This propagation may, in turn, cause the
index e497138..e9111d9 100644 (file)
@@ -237,7 +237,7 @@ struct tree_opt_pass pass_build_cfg =
   PROP_cfg,                            /* properties_provided */
   0,                                   /* properties_destroyed */
   0,                                   /* todo_flags_start */
-  TODO_verify_stmts,                   /* todo_flags_finish */
+  TODO_verify_stmts | TODO_cleanup_cfg,        /* todo_flags_finish */
   0                                    /* letter */
 };
 
@@ -579,9 +579,6 @@ make_edges (void)
 
   /* Fold COND_EXPR_COND of each COND_EXPR.  */
   fold_cond_expr_cond ();
-
-  /* Clean up the graph and warn for unreachable code.  */
-  cleanup_tree_cfg ();
 }
 
 
index 13a3b0b..547b67a 100644 (file)
@@ -574,7 +574,7 @@ cleanup_tree_cfg (void)
 
 /* Cleanup cfg and repair loop structures.  */
 
-void
+bool
 cleanup_tree_cfg_loop (void)
 {
   bool changed = cleanup_tree_cfg ();
@@ -597,6 +597,7 @@ cleanup_tree_cfg_loop (void)
 #endif
       scev_reset ();
     }
+  return changed;
 }
 
 /* Merge the PHI nodes at BB into those at BB's sole successor.  */
index 7ebe52f..de2f0f9 100644 (file)
@@ -678,7 +678,7 @@ extern basic_block move_sese_region_to_fn (struct function *, basic_block,
 
 /* In tree-cfgcleanup.c  */
 extern bool cleanup_tree_cfg (void);
-extern void cleanup_tree_cfg_loop (void);
+extern bool cleanup_tree_cfg_loop (void);
 
 /* In tree-pretty-print.c.  */
 extern void dump_generic_bb (FILE *, basic_block, int, int);
index f2f09ed..b6c3599 100644 (file)
@@ -2630,9 +2630,7 @@ execute_fold_all_builtins (void)
     }
 
   /* Delete unreachable blocks.  */
-  if (cfg_changed)
-    cleanup_tree_cfg ();
-  return 0;
+  return cfg_changed ? TODO_cleanup_cfg : 0;
 }
 
 
index 66cc8b4..ca1d0a8 100644 (file)
@@ -1041,7 +1041,7 @@ tree_ssa_forward_propagate_single_use_vars (void)
     }
 
   if (cfg_changed)
-    cleanup_tree_cfg ();
+    todoflags |= TODO_cleanup_cfg;
   return todoflags;
 }
 
index c652e58..b569678 100644 (file)
@@ -829,8 +829,6 @@ add_virtual_phis (void)
       if (!is_gimple_reg (var) && gimple_default_def (cfun, var) != NULL_TREE)
        mark_sym_for_renaming (var);
     }
-
-  update_ssa (TODO_update_ssa_only_virtuals);
 }
 
 /* Optimizes the tailcall described by T.  If OPT_TAILCALLS is true, also
@@ -865,7 +863,7 @@ optimize_tail_call (struct tailcall *t, bool opt_tailcalls)
 /* Optimizes tail calls in the function, turning the tail recursion
    into iteration.  */
 
-static void
+static unsigned int
 tree_optimize_tail_calls_1 (bool opt_tailcalls)
 {
   edge e;
@@ -877,7 +875,7 @@ tree_optimize_tail_calls_1 (bool opt_tailcalls)
   edge_iterator ei;
 
   if (!suitable_for_tail_opt_p ())
-    return;
+    return 0;
   if (opt_tailcalls)
     opt_tailcalls = suitable_for_tail_call_opt_p ();
 
@@ -985,20 +983,19 @@ tree_optimize_tail_calls_1 (bool opt_tailcalls)
     }
 
   if (changed)
-    {
-      free_dominance_info (CDI_DOMINATORS);
-      cleanup_tree_cfg ();
-    }
+    free_dominance_info (CDI_DOMINATORS);
 
   if (phis_constructed)
     add_virtual_phis ();
+  if (changed)
+    return TODO_cleanup_cfg | TODO_update_ssa_only_virtuals;
+  return 0;
 }
 
 static unsigned int
 execute_tail_recursion (void)
 {
-  tree_optimize_tail_calls_1 (false);
-  return 0;
+  return tree_optimize_tail_calls_1 (false);
 }
 
 static bool
@@ -1010,8 +1007,7 @@ gate_tail_calls (void)
 static unsigned int
 execute_tail_calls (void)
 {
-  tree_optimize_tail_calls_1 (true);
-  return 0;
+  return tree_optimize_tail_calls_1 (true);
 }
 
 struct tree_opt_pass pass_tail_recursion = 
index e4f5e63..b466edf 100644 (file)
@@ -4894,13 +4894,9 @@ finalize_jump_threads (void)
   cfg_altered = thread_through_all_blocks ();
 
   /* If we threaded jumps, then we need to recompute the dominance
-     information, to safely do that we must clean up the CFG first.  */
+     information.  */
   if (cfg_altered)
-    {
-      free_dominance_info (CDI_DOMINATORS);
-      cleanup_tree_cfg ();
-      calculate_dominance_info (CDI_DOMINATORS);
-    }
+    free_dominance_info (CDI_DOMINATORS);
   VEC_free (tree, heap, stack);
 }