X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fana%2Fanalyze_irg_args.c;h=0425467a975c7b39157c1d5b6de78dfcd6b33453;hb=7fb8d0d5cb80fa51fef49bcd1c05117801a59c77;hp=5e0cf690f96d2771a02b34036ce7763a7ba8e267;hpb=81d4cf5aeab4d0c0bc2a5e7c461d58ee7a7522d6;p=libfirm diff --git a/ir/ana/analyze_irg_args.c b/ir/ana/analyze_irg_args.c index 5e0cf690f..0425467a9 100644 --- a/ir/ana/analyze_irg_args.c +++ b/ir/ana/analyze_irg_args.c @@ -23,13 +23,9 @@ * @author Beyhan Veliev * @version $Id$ */ -#ifdef HAVE_CONFIG_H #include "config.h" -#endif -#ifdef HAVE_STDLIB_H -# include -#endif +#include #include "irouts.h" #include "irnode_t.h" @@ -37,13 +33,9 @@ #include "array_t.h" #include "irprog.h" #include "entity_t.h" -#include "xmalloc.h" #include "analyze_irg_args.h" -static char v; -static void *VISITED = &v; - /** * Walk recursive the successors of a graph argument * with mode reference and mark if it will be read, @@ -52,18 +44,19 @@ static void *VISITED = &v; * @param arg The graph argument with mode reference, * that must be checked. */ -static unsigned analyze_arg(ir_node *arg, unsigned bits) { +static unsigned analyze_arg(ir_node *arg, unsigned bits) +{ int i, p; ir_node *succ; /* We must visit a node once to avoid endless recursion.*/ - set_irn_link(arg, VISITED); + mark_irn_visited(arg); for (i = get_irn_n_outs(arg) - 1; i >= 0; --i) { succ = get_irn_out(arg, i); /* We was here.*/ - if (get_irn_link(succ) == VISITED) + if (irn_visited(succ)) continue; /* We should not walk over the memory edge.*/ @@ -181,7 +174,8 @@ static unsigned analyze_arg(ir_node *arg, unsigned bits) { * * @param irg The ir graph to analyze. */ -static void analyze_ent_args(ir_entity *ent) { +static void analyze_ent_args(ir_entity *ent) +{ ir_graph *irg; ir_node *irg_args, *arg; ir_mode *arg_mode; @@ -265,7 +259,8 @@ static void analyze_ent_args(ir_entity *ent) { * * @param irg The ir graph to analyze. */ -void analyze_irg_args(ir_graph *irg) { +void analyze_irg_args(ir_graph *irg) +{ ir_entity *ent; if (irg == get_const_code_irg()) @@ -322,19 +317,20 @@ enum args_weight { * * @param arg The parameter them weight muss be computed. */ -static unsigned calc_method_param_weight(ir_node *arg) { +static unsigned calc_method_param_weight(ir_node *arg) +{ int i, j, k; ir_node *succ, *op; unsigned weight = null_weight; /* We mark the nodes to avoid endless recursion */ - set_irn_link(arg, VISITED); + mark_irn_visited(arg); for (i = get_irn_n_outs(arg) - 1; i >= 0; i--) { succ = get_irn_out(arg, i); /* We was here.*/ - if (get_irn_link(succ) == VISITED) + if (irn_visited(succ)) continue; /* We should not walk over the memory edge.*/ @@ -425,7 +421,8 @@ static unsigned calc_method_param_weight(ir_node *arg) { * * @param ent The entity of the ir_graph. */ -static void analyze_method_params_weight(ir_entity *ent) { +static void analyze_method_params_weight(ir_entity *ent) +{ ir_type *mtp; ir_graph *irg; int nparams, i, proj_nr; @@ -460,12 +457,6 @@ static void analyze_method_params_weight(ir_entity *ent) { proj_nr = get_Proj_proj(arg); ent->attr.mtd_attr.param_weight[proj_nr] += calc_method_param_weight(arg); } - -#if 0 - printf("\n%s:\n", get_entity_name(ent)); - for (i = nparams - 1; i >= 0; --i) - printf("The weight of argument %i is %f \n", i, ent->param_weight[i]); -#endif } /* @@ -504,13 +495,18 @@ unsigned get_method_param_weight(ir_entity *ent, int pos) * * @param irg The ir graph to analyze. */ -void analyze_irg_args_weight(ir_graph *irg) { - ir_entity *ent; +void analyze_irg_args_weight(ir_graph *irg) +{ + ir_entity *entity = get_irg_entity(irg); + if (entity == NULL) + return; - ent = get_irg_entity(irg); - if (ent == NULL) + assert(is_method_entity(entity)); + if (entity->attr.mtd_attr.param_weight != NULL) return; - if (! ent->attr.mtd_attr.param_weight) - analyze_method_params_weight(ent); + ir_reserve_resources(irg, IR_RESOURCE_IRN_VISITED); + inc_irg_visited(irg); + analyze_method_params_weight(entity); + ir_free_resources(irg, IR_RESOURCE_IRN_VISITED); }