From: Michael Beck Date: Wed, 12 Oct 2005 14:25:44 +0000 (+0000) Subject: local_optimize() now kills unrteachable code if dominance info is available. X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=169fd803ea2ed08171113c1fd7ab4e528e1ebc26;hp=d1aa8c99b4e1326919e4ed2d19ad5599dae970be;p=libfirm local_optimize() now kills unrteachable code if dominance info is available. [r6687] --- diff --git a/ir/ir/irgopt.c b/ir/ir/irgopt.c index 208b8f220..560d47e08 100644 --- a/ir/ir/irgopt.c +++ b/ir/ir/irgopt.c @@ -92,6 +92,7 @@ optimize_in_place_wrapper (ir_node *n, void *env) { static INLINE void do_local_optimize(ir_node *n) { /* Handle graph state */ assert(get_irg_phase_state(current_ir_graph) != phase_building); + if (get_opt_global_cse()) set_irg_pinned(current_ir_graph, op_pin_state_floats); if (get_irg_outs_state(current_ir_graph) == outs_consistent) @@ -100,7 +101,6 @@ static INLINE void do_local_optimize(ir_node *n) { set_irg_dom_inconsistent(current_ir_graph); set_irg_loopinfo_inconsistent(current_ir_graph); - /* Clean the value_table in irg for the CSE. */ del_identities(current_ir_graph->value_table); current_ir_graph->value_table = new_identities(); @@ -118,11 +118,23 @@ void local_optimize_node(ir_node *n) { current_ir_graph = rem; } +/** + * Block-Walker: uses dominance depth to mark dead blocks. + */ +static void kill_dead_blocks(ir_node *block, void *env) +{ + if (get_Block_dom_depth(block) < 0) + set_Block_dead(block); +} + void local_optimize_graph (ir_graph *irg) { ir_graph *rem = current_ir_graph; current_ir_graph = irg; + if (get_irg_dom_state(current_ir_graph) == dom_consistent) + irg_block_walk_graph(irg, NULL, kill_dead_blocks, NULL); + do_local_optimize(irg->end); current_ir_graph = rem;