X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fopt%2Fcondeval.c;h=850becec6ce45ff9f8dc25e7a70bf0df6c63416b;hb=0cc8bfc863da28d3799e9eca1d1765d564b6e573;hp=d3b29d718d511a1c0c28bad60300ed06a7cb06d0;hpb=c54a5cb5366fb906b4c21c85cef6cba531c0935a;p=libfirm diff --git a/ir/opt/condeval.c b/ir/opt/condeval.c index d3b29d718..850becec6 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); @@ -409,9 +413,8 @@ static ir_node *find_const_or_confirm(condeval_env_t *env, ir_node *jump, ir_nod { ir_node *block = get_nodes_block(jump); - if (irn_visited(value)) + if (irn_visited_else_mark(value)) return NULL; - mark_irn_visited(value); if (is_Const_or_Confirm(value)) { if (eval_cmp(env, value) <= 0) { @@ -474,10 +477,9 @@ static ir_node *find_candidate(condeval_env_t *env, ir_node *jump, { ir_node *block = get_nodes_block(jump); - if(irn_visited(value)) { + if (irn_visited_else_mark(value)) { return NULL; } - mark_irn_visited(value); if (is_Const_or_Confirm(value)) { tarval *tv = get_Const_or_Confirm_tarval(value);