X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fstat%2Ffirmstat.c;h=2602ac2e598f432909f6a3e29569464546f3213d;hb=24d4d90a8a18fd1e2157787efc06fb3c9c7f2380;hp=3dffface236529ac45b9be41c10b2b17357e449f;hpb=1a3b7d363474ab544c13093a2f0b578718d37c7a;p=libfirm diff --git a/ir/stat/firmstat.c b/ir/stat/firmstat.c index 3dffface2..2602ac2e5 100644 --- a/ir/stat/firmstat.c +++ b/ir/stat/firmstat.c @@ -21,12 +21,9 @@ * @file * @brief Statistics for Firm. * @author Michael Beck - * @version $Id$ */ #include "config.h" -#ifdef FIRM_STATISTICS - #include #include #include @@ -42,6 +39,7 @@ #include "xmalloc.h" #include "irhooks.h" #include "util.h" +#include "ircons.h" /* * need this to be static: @@ -125,7 +123,7 @@ static int opt_cmp(const void *elt, const void *key) } /* opt_cmp */ /** - * Compare two elements of the block/extbb hash. + * Compare two elements of the block hash. */ static int block_cmp(const void *elt, const void *key) { @@ -277,11 +275,6 @@ static void graph_clear_entry(graph_entry_t *elem, int all) elem->block_hash = NULL; } /* if */ - if (elem->extbb_hash) { - del_pset(elem->extbb_hash); - elem->extbb_hash = NULL; - } /* if */ - obstack_free(&elem->recalc_cnts, NULL); obstack_init(&elem->recalc_cnts); } /* graph_clear_entry */ @@ -300,7 +293,7 @@ static graph_entry_t *graph_get_entry(ir_graph *irg, hmap_graph_entry_t *hmap) key.irg = irg; - elem = (graph_entry_t*)pset_find(hmap, &key, HASH_PTR(irg)); + elem = (graph_entry_t*)pset_find(hmap, &key, hash_ptr(irg)); if (elem) { /* create hash map backend block information */ @@ -324,12 +317,11 @@ static graph_entry_t *graph_get_entry(ir_graph *irg, hmap_graph_entry_t *hmap) /* these hash tables are created on demand */ elem->block_hash = NULL; - elem->extbb_hash = NULL; - for (i = 0; i < sizeof(elem->opt_hash)/sizeof(elem->opt_hash[0]); ++i) + for (i = 0; i != ARRAY_SIZE(elem->opt_hash); ++i) elem->opt_hash[i] = new_pset(opt_cmp, 4); - return (graph_entry_t*)pset_insert(hmap, elem, HASH_PTR(irg)); + return (graph_entry_t*)pset_insert(hmap, elem, hash_ptr(irg)); } /* graph_get_entry */ /** @@ -476,7 +468,7 @@ static perm_class_entry_t *perm_class_get_entry(struct obstack *obst, const char key.class_name = class_name; - elem = (perm_class_entry_t*)pset_find(hmap, &key, HASH_PTR(class_name)); + elem = (perm_class_entry_t*)pset_find(hmap, &key, hash_ptr(class_name)); if (elem) return elem; @@ -487,7 +479,7 @@ static perm_class_entry_t *perm_class_get_entry(struct obstack *obst, const char elem->class_name = class_name; - return (perm_class_entry_t*)pset_insert(hmap, elem, HASH_PTR(class_name)); + return (perm_class_entry_t*)pset_insert(hmap, elem, hash_ptr(class_name)); } /* perm_class_get_entry */ /** @@ -518,7 +510,7 @@ static perm_stat_entry_t *perm_stat_get_entry(struct obstack *obst, ir_node *per key.perm = perm; - elem = (perm_stat_entry_t*)pset_find(hmap, &key, HASH_PTR(perm)); + elem = (perm_stat_entry_t*)pset_find(hmap, &key, hash_ptr(perm)); if (elem) return elem; @@ -529,7 +521,7 @@ static perm_stat_entry_t *perm_stat_get_entry(struct obstack *obst, ir_node *per elem->perm = perm; - return (perm_stat_entry_t*)pset_insert(hmap, elem, HASH_PTR(perm)); + return (perm_stat_entry_t*)pset_insert(hmap, elem, hash_ptr(perm)); } /* perm_stat_get_entry */ /** @@ -598,7 +590,7 @@ static ir_op *stat_get_irn_op(ir_node *node) } /* if */ break; default: - ; + break; } /* switch */ return op; @@ -670,69 +662,6 @@ static void undate_block_info(ir_node *node, graph_entry_t *graph) } /* for */ } /* undate_block_info */ -/** - * Update the extended block counter. - */ -static void update_extbb_info(ir_node *node, graph_entry_t *graph) -{ - ir_op *op = get_irn_op(node); - ir_extblk *extbb; - extbb_entry_t *eb_entry; - int i, arity; - - /* check for block */ - if (op == op_Block) { - extbb = get_nodes_extbb(node); - arity = get_irn_arity(node); - eb_entry = block_get_entry(&graph->recalc_cnts, get_extbb_node_nr(extbb), graph->extbb_hash); - - /* count all incoming edges */ - for (i = 0; i < arity; ++i) { - ir_node *pred = get_irn_n(node, i); - ir_extblk *other_extbb = get_nodes_extbb(pred); - - if (extbb != other_extbb) { - extbb_entry_t *eb_entry_other = block_get_entry(&graph->recalc_cnts, get_extbb_node_nr(other_extbb), graph->extbb_hash); - - cnt_inc(&eb_entry->cnt[bcnt_in_edges]); /* an edge coming from another extbb */ - cnt_inc(&eb_entry_other->cnt[bcnt_out_edges]); - } /* if */ - } /* for */ - return; - } /* if */ - - extbb = get_nodes_extbb(node); - eb_entry = block_get_entry(&graph->recalc_cnts, get_extbb_node_nr(extbb), graph->extbb_hash); - - if (op == op_Phi && mode_is_datab(get_irn_mode(node))) { - /* count data Phi per extbb */ - cnt_inc(&eb_entry->cnt[bcnt_phi_data]); - } /* if */ - - /* we have a new node in our block */ - cnt_inc(&eb_entry->cnt[bcnt_nodes]); - - /* don't count keep-alive edges */ - if (is_End(node)) - return; - - arity = get_irn_arity(node); - - for (i = 0; i < arity; ++i) { - ir_node *pred = get_irn_n(node, i); - ir_extblk *other_extbb = get_nodes_extbb(pred); - - if (other_extbb == extbb) - cnt_inc(&eb_entry->cnt[bcnt_edges]); /* a in extbb edge */ - else { - extbb_entry_t *eb_entry_other = block_get_entry(&graph->recalc_cnts, get_extbb_node_nr(other_extbb), graph->extbb_hash); - - cnt_inc(&eb_entry->cnt[bcnt_in_edges]); /* an edge coming from another extbb */ - cnt_inc(&eb_entry_other->cnt[bcnt_out_edges]); - } /* if */ - } /* for */ -} /* update_extbb_info */ - /** * Calculates how many arguments of the call are const, updates * param distribution. @@ -948,7 +877,7 @@ end_parameter: ; } /* if */ } /* if */ default: - ; + break; } /* switch */ } /* stat_update_address */ @@ -971,12 +900,6 @@ static void update_node_stat(ir_node *node, void *env) /* count block edges */ undate_block_info(node, graph); - /* count extended block edges */ - if (status->stat_options & FIRMSTAT_COUNT_EXTBB) { - if (graph->irg != get_const_code_irg()) - update_extbb_info(node, graph); - } /* if */ - /* handle statistics for special node types */ switch (op->code) { @@ -1003,7 +926,7 @@ static void update_node_stat(ir_node *node, void *env) } } default: - ; + break; } /* switch */ /* we want to count the constant IN nodes, not the CSE'ed constant's itself */ @@ -1038,7 +961,7 @@ static void update_node_stat_2(ir_node *node, void *env) */ static unsigned get_adr_mark(graph_entry_t *graph, ir_node *node) { - address_mark_entry_t *value = (address_mark_entry_t*)set_find(graph->address_mark, &node, sizeof(*value), HASH_PTR(node)); + address_mark_entry_t *value = (address_mark_entry_t*)set_find(graph->address_mark, &node, sizeof(*value), hash_ptr(node)); return value ? value->mark : 0; } /* get_adr_mark */ @@ -1048,7 +971,7 @@ static unsigned get_adr_mark(graph_entry_t *graph, ir_node *node) */ static void set_adr_mark(graph_entry_t *graph, ir_node *node, unsigned val) { - address_mark_entry_t *value = (address_mark_entry_t*)set_insert(graph->address_mark, &node, sizeof(*value), HASH_PTR(node)); + address_mark_entry_t *value = (address_mark_entry_t*)set_insert(graph->address_mark, &node, sizeof(*value), hash_ptr(node)); value->mark = val; } /* set_adr_mark */ @@ -1199,14 +1122,6 @@ static void update_graph_stat(graph_entry_t *global, graph_entry_t *graph) /* we need dominator info */ if (graph->irg != get_const_code_irg()) { assure_doms(graph->irg); - - if (status->stat_options & FIRMSTAT_COUNT_EXTBB) { - /* we need extended basic blocks */ - compute_extbb(graph->irg); - - /* create new extbb counter */ - graph->extbb_hash = new_pset(block_cmp, 5); - } /* if */ } /* if */ /* count the nodes in the graph */ @@ -1307,8 +1222,7 @@ static void update_graph_stat_2(graph_entry_t *global, graph_entry_t *graph) static void stat_register_dumper(const dumper_t *dumper) { dumper_t *p = XMALLOC(dumper_t); - - memcpy(p, dumper, sizeof(*p)); + *p = *dumper; p->next = status->dumper; p->status = status; @@ -1431,9 +1345,9 @@ void stat_register_dumper_func(dump_graph_FUNC func) /* * Helper: get an ir_op from an opcode. */ -ir_op *stat_get_op_from_opcode(ir_opcode code) +ir_op *stat_get_op_from_opcode(unsigned code) { - return opcode_find_entry(code, status->ir_op_hash); + return opcode_find_entry((ir_opcode)code, status->ir_op_hash); } /* stat_get_op_from_opcode */ /** @@ -2002,7 +1916,7 @@ void stat_be_block_regpressure(ir_graph *irg, ir_node *block, int pressure, cons rp_ent->class_name = class_name; rp_ent->pressure = pressure; - pset_insert(block_ent->reg_pressure, rp_ent, HASH_PTR(class_name)); + pset_insert(block_ent->reg_pressure, rp_ent, hash_ptr(class_name)); } STAT_LEAVE; } /* stat_be_block_regpressure */ @@ -2452,16 +2366,3 @@ int stat_is_active(void) { return status != (stat_info_t *)&status_disable; } /* stat_is_active */ - -#else - -/* initialize the statistics module. */ -void firm_init_stat(unsigned enable_options) {} - -/* Dumps a statistics snapshot */ -void stat_dump_snapshot(const char *name, const char *phase) {} - -/* terminates the statistics module, frees all memory */ -void stat_term(void); - -#endif /* FIRM_STATISTICS */