X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firgopt.c;h=47d00d64f5bf93d96cc76ad45457f560f0f9d1ae;hb=23ea16875f38dc0c067cce24f64b5c70f3acc496;hp=0dbdff611a2a9045e83e164dbe2b8d16f0999b94;hpb=36b5e2c7b7ec3e12264f01fef6ecca8c5a01712a;p=libfirm diff --git a/ir/ir/irgopt.c b/ir/ir/irgopt.c index 0dbdff611..47d00d64f 100644 --- a/ir/ir/irgopt.c +++ b/ir/ir/irgopt.c @@ -457,22 +457,23 @@ static void copy_graph(ir_graph *irg, int copy_node_nr) { /*- ... and now the keep alives. -*/ /* First pick the not marked block nodes and walk them. We must pick these first as else we will oversee blocks reachable from Phis. */ - irn_arity = get_irn_arity(oe); + irn_arity = get_End_n_keepalives(oe); for (i = 0; i < irn_arity; i++) { - ka = get_irn_intra_n(oe, i); - if (is_Block(ka) && - (get_irn_visited(ka) <= vfl)) { - /* We must keep the block alive and copy everything reachable */ - set_irg_visited(irg, vfl); - irg_walk(ka, copy_node, copy_preds, INT_TO_PTR(copy_node_nr)); + ka = get_End_keepalive(oe, i); + if (is_Block(ka)) { + if (get_irn_visited(ka) <= vfl) { + /* We must keep the block alive and copy everything reachable */ + set_irg_visited(irg, vfl); + irg_walk(ka, copy_node, copy_preds, INT_TO_PTR(copy_node_nr)); + } add_End_keepalive(ne, get_new_node(ka)); } } /* Now pick other nodes. Here we will keep all! */ - irn_arity = get_irn_arity(oe); + irn_arity = get_End_n_keepalives(oe); for (i = 0; i < irn_arity; i++) { - ka = get_irn_intra_n(oe, i); + ka = get_End_keepalive(oe, i); if (!is_Block(ka)) { if (get_irn_visited(ka) <= vfl) { /* We didn't copy the node yet. */ @@ -583,7 +584,7 @@ dead_node_elimination(ir_graph *irg) { irg->value_table = new_identities(); /* Copy the graph from the old to the new obstack */ - copy_graph_env(1); + copy_graph_env(/*copy_node_nr=*/1); /* Free memory from old unoptimized obstack */ obstack_free(graveyard_obst, 0); /* First empty the obstack ... */ @@ -911,7 +912,7 @@ int inline_method(ir_node *call, ir_graph *called_graph) { ir_type *called_frame; irg_inline_property prop = get_irg_inline_property(called_graph); - if ( (prop != irg_inline_forced) && + if ( (prop < irg_inline_forced) && (!get_opt_optimize() || !get_opt_inline() || (prop == irg_inline_forbidden))) return 0; /* Do not inline variadic functions. */ @@ -1355,7 +1356,7 @@ void inline_small_irgs(ir_graph *irg, int size) { ir_graph *callee; callee = get_entity_irg(get_SymConst_entity(get_Call_ptr(env.calls[i]))); if (((_obstack_memory_used(callee->obst) - (int)obstack_room(callee->obst)) < size) || - (get_irg_inline_property(callee) == irg_inline_forced)) { + (get_irg_inline_property(callee) >= irg_inline_forced)) { inline_method(env.calls[i], callee); } } @@ -1538,7 +1539,7 @@ void inline_leave_functions(int maxsize, int leavesize, int size) { if (callee && ((is_smaller(callee, size) && (env->n_nodes < maxsize)) || /* small function */ - (get_irg_inline_property(callee) == irg_inline_forced))) { + (get_irg_inline_property(callee) >= irg_inline_forced))) { if (!phiproj_computed) { phiproj_computed = 1; collect_phiprojs(current_ir_graph);