From: Matthias Braun Date: Mon, 6 Oct 2008 20:44:07 +0000 (+0000) Subject: fix last fix (+ optimisation: don't do anything if copy and orig are the same) X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=fa3fbb2fd0773161a76ae4c4d31f944583497a00;p=libfirm fix last fix (+ optimisation: don't do anything if copy and orig are the same) [r22552] --- diff --git a/ir/opt/condeval.c b/ir/opt/condeval.c index d3b29d718..cc61e3d75 100644 --- a/ir/opt/condeval.c +++ b/ir/opt/condeval.c @@ -85,12 +85,6 @@ static ir_node *search_def_and_create_phis(ir_node *block, ir_mode *mode, if(is_Bad(block)) return new_Bad(); - /* already processed this block? */ - if(irn_visited(block)) { - ir_node *value = (ir_node*) get_irn_link(block); - return value; - } - /* the other defs can't be marked for cases where a user of the original * value is in the same block as the alternative definition. * In this case we mustn't use the alternative definition. @@ -100,6 +94,12 @@ static ir_node *search_def_and_create_phis(ir_node *block, ir_mode *mode, return ssa_second_def; } + /* already processed this block? */ + if(irn_visited(block)) { + ir_node *value = (ir_node*) get_irn_link(block); + return value; + } + irg = get_irn_irg(block); assert(block != get_irg_start_block(irg)); @@ -147,6 +147,10 @@ static void construct_ssa(ir_node *orig_block, ir_node *orig_val, const ir_edge_t *edge; const ir_edge_t *next; + /* no need to do anything */ + if (orig_val == second_val) + return; + irg = get_irn_irg(orig_val); inc_irg_visited(irg);