X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fopt%2Ffunccall.c;h=8f7af6f8ec8e61bdd30c7b825bdaeeb2f7b31794;hb=3df3d2e3436415a80afaa2a04bf9e02378888101;hp=d448818d4c46b42870e6f6959edd739f0ad3fc1e;hpb=1756591cc23ec31079415b349785559a21ae3254;p=libfirm diff --git a/ir/opt/funccall.c b/ir/opt/funccall.c index d448818d4..8f7af6f8e 100644 --- a/ir/opt/funccall.c +++ b/ir/opt/funccall.c @@ -5,7 +5,7 @@ * Author: Michael Beck * Created: * CVS-ID: $Id$ - * Copyright: (c) 1998-2004 Universität Karlsruhe + * Copyright: (c) 1998-2004 Universit�t Karlsruhe * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE. */ #include "irnode_t.h" @@ -49,10 +49,9 @@ static void rem_mem_from_const_fkt_calls(ir_node *node, void *env) ptr = get_Call_ptr(call); if (get_irn_op(ptr) == op_SymConst && get_SymConst_kind(ptr) == symconst_addr_ent) { - ent = get_SymConst_entity(ptr); - if ((get_entity_additional_properties(ent) & irg_const_function) == 0) + if ((get_entity_additional_properties(ent) & mtp_property_const) == 0) return; ++ctx->n_calls_removed_SymConst; } @@ -67,8 +66,12 @@ static void rem_mem_from_const_fkt_calls(ir_node *node, void *env) return; for (i = 0; i < n_callees; ++i) { ent = get_Call_callee(call, i); - if ((get_entity_additional_properties(ent) & irg_const_function) == 0) - return; + if (ent == unknown_entity) { + /* we don't know which entity is called here */ + return; + } + if ((get_entity_additional_properties(ent) & mtp_property_const) == 0) + return; } ++ctx->n_calls_removed_Sel; } @@ -134,7 +137,7 @@ void optimize_funccalls(int force_run) change = 0; - if (get_irg_additional_properties(irg) & irg_const_function) { + if (get_irg_additional_properties(irg) & mtp_property_const) { /* already marked as a const function */ ++num_pure; } @@ -175,7 +178,7 @@ void optimize_funccalls(int force_run) if (mode_M != get_irn_mode(mem)) continue; - change = mem != gforce_runet_irg_initial_mem(irg); + change = mem != get_irg_initial_mem(irg); if (change) break; } @@ -183,7 +186,7 @@ void optimize_funccalls(int force_run) if (! change) { /* no memory changes found, it's a const function */ - set_irg_additional_property(irg, irg_const_function); + set_irg_additional_property(irg, mtp_property_const); ++num_pure; } } @@ -200,7 +203,7 @@ void optimize_funccalls(int force_run) ir_graph *irg = get_irp_irg(i); /* no need to do this on const functions */ - if ((get_irg_additional_properties(irg) & irg_const_function) == 0) { + if ((get_irg_additional_properties(irg) & mtp_property_const) == 0) { ctx.changed = 0; irg_walk_graph(irg, NULL, rem_mem_from_const_fkt_calls, &ctx); @@ -224,44 +227,3 @@ void optimize_funccalls(int force_run) } } } - -/** - * Walker: Walks over all graphs and evaluates calls with - * constant arguments. - * Currently used only for non-virtual calls. - */ -static void eval_calls(ir_node *call, void *env) -{ - ir_node *ptr, *param; - entity *ent; - ir_graph *irg; - int i; - - if (get_irn_op(call) != op_Call) - return; - - ptr = get_Call_ptr(call); - - if (get_irn_op(ptr) != op_SymConst) - return; - - if (get_SymConst_kind(ptr) != symconst_addr_ent) - return; - - ent = get_SymConst_entity(ptr); - irg = get_entity_irg(ent); - - if (! irg) - return; - - /* ok, we found the called graph here, check for const args */ - for (i = get_Call_n_params(call) - 1; i >= 0; --i) { - param = get_Call_param(call, i); - - if (is_irn_constlike(param)) { - /* Found one: add to statistics */ - - ir_printf("%+F called with const %+F at position %d\n", ent, param, i); - } - } -}