tree-vrp.c (finalize_jump_threads): Do not call cleanup_cfg by hand.

* 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.

From-SVN: r120900
This commit is contained in:
Jan Hubicka 2007-01-18 15:56:33 +01:00 committed by Jan Hubicka
parent d85c755027
commit 1994bfea41
9 changed files with 43 additions and 33 deletions

View 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> 2007-01-18 Uros Bizjak <ubizjak@gmail.com>
* reg-stack.c (subst_stack_regs_pat) [UNSPEC_SINCOS_COS, * reg-stack.c (subst_stack_regs_pat) [UNSPEC_SINCOS_COS,

View File

@ -818,14 +818,19 @@ execute_function_todo (void *data)
if (!flags) if (!flags)
return; return;
/* Always cleanup the CFG before trying to update SSA . */ /* Always cleanup the CFG before trying to update SSA. */
if (flags & TODO_cleanup_cfg) if (flags & TODO_cleanup_cfg)
{ {
if (current_loops) bool cleanup;
cleanup_tree_cfg_loop ();
else
cleanup_tree_cfg ();
if (current_loops)
cleanup = cleanup_tree_cfg_loop ();
else
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 /* When cleanup_tree_cfg merges consecutive blocks, it may
perform some simplistic propagation when removing single perform some simplistic propagation when removing single
valued PHI nodes. This propagation may, in turn, cause the valued PHI nodes. This propagation may, in turn, cause the

View File

@ -237,7 +237,7 @@ struct tree_opt_pass pass_build_cfg =
PROP_cfg, /* properties_provided */ PROP_cfg, /* properties_provided */
0, /* properties_destroyed */ 0, /* properties_destroyed */
0, /* todo_flags_start */ 0, /* todo_flags_start */
TODO_verify_stmts, /* todo_flags_finish */ TODO_verify_stmts | TODO_cleanup_cfg, /* todo_flags_finish */
0 /* letter */ 0 /* letter */
}; };
@ -579,9 +579,6 @@ make_edges (void)
/* Fold COND_EXPR_COND of each COND_EXPR. */ /* Fold COND_EXPR_COND of each COND_EXPR. */
fold_cond_expr_cond (); fold_cond_expr_cond ();
/* Clean up the graph and warn for unreachable code. */
cleanup_tree_cfg ();
} }

View File

@ -574,7 +574,7 @@ cleanup_tree_cfg (void)
/* Cleanup cfg and repair loop structures. */ /* Cleanup cfg and repair loop structures. */
void bool
cleanup_tree_cfg_loop (void) cleanup_tree_cfg_loop (void)
{ {
bool changed = cleanup_tree_cfg (); bool changed = cleanup_tree_cfg ();
@ -597,6 +597,7 @@ cleanup_tree_cfg_loop (void)
#endif #endif
scev_reset (); scev_reset ();
} }
return changed;
} }
/* Merge the PHI nodes at BB into those at BB's sole successor. */ /* Merge the PHI nodes at BB into those at BB's sole successor. */

View File

@ -678,7 +678,7 @@ extern basic_block move_sese_region_to_fn (struct function *, basic_block,
/* In tree-cfgcleanup.c */ /* In tree-cfgcleanup.c */
extern bool cleanup_tree_cfg (void); 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. */ /* In tree-pretty-print.c. */
extern void dump_generic_bb (FILE *, basic_block, int, int); extern void dump_generic_bb (FILE *, basic_block, int, int);

View File

@ -2630,9 +2630,7 @@ execute_fold_all_builtins (void)
} }
/* Delete unreachable blocks. */ /* Delete unreachable blocks. */
if (cfg_changed) return cfg_changed ? TODO_cleanup_cfg : 0;
cleanup_tree_cfg ();
return 0;
} }

View File

@ -1041,7 +1041,7 @@ tree_ssa_forward_propagate_single_use_vars (void)
} }
if (cfg_changed) if (cfg_changed)
cleanup_tree_cfg (); todoflags |= TODO_cleanup_cfg;
return todoflags; return todoflags;
} }

View File

@ -829,8 +829,6 @@ add_virtual_phis (void)
if (!is_gimple_reg (var) && gimple_default_def (cfun, var) != NULL_TREE) if (!is_gimple_reg (var) && gimple_default_def (cfun, var) != NULL_TREE)
mark_sym_for_renaming (var); mark_sym_for_renaming (var);
} }
update_ssa (TODO_update_ssa_only_virtuals);
} }
/* Optimizes the tailcall described by T. If OPT_TAILCALLS is true, also /* 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 /* Optimizes tail calls in the function, turning the tail recursion
into iteration. */ into iteration. */
static void static unsigned int
tree_optimize_tail_calls_1 (bool opt_tailcalls) tree_optimize_tail_calls_1 (bool opt_tailcalls)
{ {
edge e; edge e;
@ -877,7 +875,7 @@ tree_optimize_tail_calls_1 (bool opt_tailcalls)
edge_iterator ei; edge_iterator ei;
if (!suitable_for_tail_opt_p ()) if (!suitable_for_tail_opt_p ())
return; return 0;
if (opt_tailcalls) if (opt_tailcalls)
opt_tailcalls = suitable_for_tail_call_opt_p (); opt_tailcalls = suitable_for_tail_call_opt_p ();
@ -985,20 +983,19 @@ tree_optimize_tail_calls_1 (bool opt_tailcalls)
} }
if (changed) if (changed)
{ free_dominance_info (CDI_DOMINATORS);
free_dominance_info (CDI_DOMINATORS);
cleanup_tree_cfg ();
}
if (phis_constructed) if (phis_constructed)
add_virtual_phis (); add_virtual_phis ();
if (changed)
return TODO_cleanup_cfg | TODO_update_ssa_only_virtuals;
return 0;
} }
static unsigned int static unsigned int
execute_tail_recursion (void) execute_tail_recursion (void)
{ {
tree_optimize_tail_calls_1 (false); return tree_optimize_tail_calls_1 (false);
return 0;
} }
static bool static bool
@ -1010,8 +1007,7 @@ gate_tail_calls (void)
static unsigned int static unsigned int
execute_tail_calls (void) execute_tail_calls (void)
{ {
tree_optimize_tail_calls_1 (true); return tree_optimize_tail_calls_1 (true);
return 0;
} }
struct tree_opt_pass pass_tail_recursion = struct tree_opt_pass pass_tail_recursion =

View File

@ -4894,13 +4894,9 @@ finalize_jump_threads (void)
cfg_altered = thread_through_all_blocks (); cfg_altered = thread_through_all_blocks ();
/* If we threaded jumps, then we need to recompute the dominance /* 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) if (cfg_altered)
{ free_dominance_info (CDI_DOMINATORS);
free_dominance_info (CDI_DOMINATORS);
cleanup_tree_cfg ();
calculate_dominance_info (CDI_DOMINATORS);
}
VEC_free (tree, heap, stack); VEC_free (tree, heap, stack);
} }