X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fana%2Fanalyze_irg_args.c;h=1a6082c2194b49bf211742e4368c43543d274314;hb=793165ad171bd938143e0d466efafebde94b348a;hp=fa10cbce71568317796f9d1a60b0ebdf9353b5fd;hpb=24be66840a207d58dd74a2e41086a652b301641c;p=libfirm diff --git a/ir/ana/analyze_irg_args.c b/ir/ana/analyze_irg_args.c index fa10cbce7..1a6082c21 100644 --- a/ir/ana/analyze_irg_args.c +++ b/ir/ana/analyze_irg_args.c @@ -21,7 +21,6 @@ * @file * @brief read/write analyze of graph argument, which have mode reference. * @author Beyhan Veliev - * @version $Id$ */ #include "config.h" @@ -44,7 +43,7 @@ * @param arg The graph argument with mode reference, * that must be checked. */ -static unsigned analyze_arg(ir_node *arg, unsigned bits) +static ptr_access_kind analyze_arg(ir_node *arg, ptr_access_kind bits) { int i, p; ir_node *succ; @@ -80,8 +79,8 @@ static unsigned analyze_arg(ir_node *arg, unsigned bits) } else { ir_entity *meth_ent; - if (is_Global(ptr)) { - meth_ent = get_Global_entity(ptr); + if (is_SymConst_addr_ent(ptr)) { + meth_ent = get_SymConst_entity(ptr); for (p = get_Call_n_params(succ) - 1; p >= 0; --p) { if (get_Call_param(succ, p) == arg) { @@ -91,14 +90,15 @@ static unsigned analyze_arg(ir_node *arg, unsigned bits) } } else if (is_Sel(ptr) && get_irp_callee_info_state() == irg_callee_info_consistent) { /* is be a polymorphic call but callee information is available */ - int i, n_params = get_Call_n_params(succ); + int n_params = get_Call_n_params(succ); + int c; /* simply look into ALL possible callees */ - for (i = get_Call_n_callees(succ) - 1; i >= 0; --i) { - meth_ent = get_Call_callee(succ, i); + for (c = get_Call_n_callees(succ) - 1; c >= 0; --c) { + meth_ent = get_Call_callee(succ, c); /* unknown_entity is used to signal that we don't know what is called */ - if (meth_ent == unknown_entity) { + if (is_unknown_entity(meth_ent)) { bits |= ptr_access_all; break; } @@ -234,31 +234,8 @@ static void analyze_ent_args(ir_entity *ent) /* copy the temporary info */ memcpy(ent->attr.mtd_attr.param_access, rw_info, nparams * sizeof(ent->attr.mtd_attr.param_access[0])); - -#if 0 - printf("\n%s:\n", get_entity_name(ent)); - for (i = 0; i < nparams; ++i) { - if (is_Pointer_type(get_method_param_type(mtp, i))) - if (ent->attr.mtd_attr.param_access[i] != ptr_access_none) { - printf(" Pointer Arg %d access: ", i); - if (ent->attr.mtd_attr.param_access[i] & ptr_access_read) - printf("READ "); - if (ent->attr.mtd_attr.param_access[i] & ptr_access_write) - printf("WRITE "); - if (ent->attr.mtd_attr.param_access[i] & ptr_access_store) - printf("STORE "); - printf("\n"); - } - } -#endif } -/** - * Analyze how pointer arguments of a given - * ir graph are accessed. - * - * @param irg The ir graph to analyze. - */ void analyze_irg_args(ir_graph *irg) { ir_entity *ent; @@ -274,17 +251,13 @@ void analyze_irg_args(ir_graph *irg) analyze_ent_args(ent); } -/* - * Compute for a method with pointer parameter(s) - * if they will be read or written. - */ -ptr_access_kind get_method_param_access(ir_entity *ent, int pos) +ptr_access_kind get_method_param_access(ir_entity *ent, size_t pos) { #ifndef NDEBUG ir_type *mtp = get_entity_type(ent); int is_variadic = get_method_variadicity(mtp) == variadicity_variadic; - assert(0 <= pos && (is_variadic || pos < get_method_n_params(mtp))); + assert(is_variadic || pos < get_method_n_params(mtp)); #endif if (ent->attr.mtd_attr.param_access) { @@ -459,20 +432,7 @@ static void analyze_method_params_weight(ir_entity *ent) } } -/* - * Returns for a method the 'weight' that every parameter - * has on optimization possibility. Higher values allows - * higher optimization with procedure cloning. - * - * The values are calculation on demand only. - * - * @param ent the entity to analyze - * @param pos the argument number - * - * @return the parameter weight or null_weight if pos is greater - * than the number of arguments. - */ -unsigned get_method_param_weight(ir_entity *ent, int pos) +unsigned get_method_param_weight(ir_entity *ent, size_t pos) { if (ent->attr.mtd_attr.param_weight) { if (pos < ARR_LEN(ent->attr.mtd_attr.param_weight)) @@ -489,12 +449,6 @@ unsigned get_method_param_weight(ir_entity *ent, int pos) return null_weight; } -/** - * Analyze argument's weight of a given - * ir graph. - * - * @param irg The ir graph to analyze. - */ void analyze_irg_args_weight(ir_graph *irg) { ir_entity *entity = get_irg_entity(irg); @@ -502,11 +456,11 @@ void analyze_irg_args_weight(ir_graph *irg) return; assert(is_method_entity(entity)); - if (ent->attr.mtd_attr.param_weight != NULL) + if (entity->attr.mtd_attr.param_weight != NULL) return; ir_reserve_resources(irg, IR_RESOURCE_IRN_VISITED); inc_irg_visited(irg); - analyze_method_params_weight(ent); + analyze_method_params_weight(entity); ir_free_resources(irg, IR_RESOURCE_IRN_VISITED); }