X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fstat%2Ffirmstat.c;h=b7951c963a347c11809b4cea92b386f8f8b9dd20;hb=379bdf77d4ec20ca94e12e75aea168479c014bc9;hp=391bbc74ea0234c75a203aa0c4716e24b6be1419;hpb=6032e9e802d2d5c696b90fd17f4b4c9bf9a39540;p=libfirm diff --git a/ir/stat/firmstat.c b/ir/stat/firmstat.c index 391bbc74e..b7951c963 100644 --- a/ir/stat/firmstat.c +++ b/ir/stat/firmstat.c @@ -123,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) { @@ -275,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 */ @@ -322,7 +317,6 @@ 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 != ARRAY_SIZE(elem->opt_hash); ++i) elem->opt_hash[i] = new_pset(opt_cmp, 4); @@ -607,13 +601,12 @@ static ir_op *stat_get_irn_op(ir_node *node) */ static void undate_block_info(ir_node *node, graph_entry_t *graph) { - ir_op *op = get_irn_op(node); ir_node *block; block_entry_t *b_entry; int i, arity; /* check for block */ - if (op == op_Block) { + if (is_Block(node)) { arity = get_irn_arity(node); b_entry = block_get_entry(&graph->recalc_cnts, get_irn_node_nr(node), graph->block_hash); /* mark start end block to allow to filter them out */ @@ -637,7 +630,7 @@ static void undate_block_info(ir_node *node, graph_entry_t *graph) block = get_nodes_block(node); b_entry = block_get_entry(&graph->recalc_cnts, get_irn_node_nr(block), graph->block_hash); - if (op == op_Phi && mode_is_datab(get_irn_mode(node))) { + if (is_Phi(node) && mode_is_datab(get_irn_mode(node))) { /* count data Phi per block */ cnt_inc(&b_entry->cnt[bcnt_phi_data]); } /* if */ @@ -668,69 +661,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. @@ -969,12 +899,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) { @@ -1036,7 +960,8 @@ 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 const val = { node, 0 }; + address_mark_entry_t *value = set_find(address_mark_entry_t, graph->address_mark, &val, sizeof(val), hash_ptr(node)); return value ? value->mark : 0; } /* get_adr_mark */ @@ -1046,9 +971,8 @@ 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)); - - value->mark = val; + address_mark_entry_t const value = { node, val }; + (void)set_insert(address_mark_entry_t, graph->address_mark, &value, sizeof(value), hash_ptr(node)); } /* set_adr_mark */ #undef DUMP_ADR_MODE @@ -1176,11 +1100,10 @@ static void count_adr_ops(ir_node *node, void *env) */ static void update_graph_stat(graph_entry_t *global, graph_entry_t *graph) { - node_entry_t *entry; int i; /* clear first the alive counter in the graph */ - foreach_pset(graph->opcode_hash, node_entry_t*, entry) { + foreach_pset(graph->opcode_hash, node_entry_t, entry) { cnt_clr(&entry->cnt_alive); } /* foreach_pset */ @@ -1197,14 +1120,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 */ @@ -1224,7 +1139,7 @@ static void update_graph_stat(graph_entry_t *global, graph_entry_t *graph) graph->is_chain_call = 0; /* assume we walk every graph only ONCE, we could sum here the global count */ - foreach_pset(graph->opcode_hash, node_entry_t*, entry) { + foreach_pset(graph->opcode_hash, node_entry_t, entry) { node_entry_t *g_entry = opcode_get_entry(entry->op, global->opcode_hash); /* update the node counter */ @@ -1336,8 +1251,6 @@ static void stat_dump_registered(graph_entry_t *entry) for (dumper = status->dumper; dumper; dumper = dumper->next) { if (dumper->func_map) { - dump_graph_FUNC func; - foreach_pset(dumper->func_map, dump_graph_FUNC, func) func(dumper, entry); } /* if */ @@ -1412,7 +1325,7 @@ static void stat_dump_finish(void) /** * Register an additional function for all dumper. */ -void stat_register_dumper_func(dump_graph_FUNC func) +void stat_register_dumper_func(dump_graph_FUNC *const func) { dumper_t *dumper; @@ -1430,7 +1343,7 @@ void stat_register_dumper_func(dump_graph_FUNC func) */ 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 */ /** @@ -1759,9 +1672,8 @@ static void stat_merge_nodes( /* sometimes we did not detect, that it is replaced by a Const */ if (opt == HOOK_OPT_CONFIRM && new_num_entries == 1) { - ir_op *op = get_irn_op(new_node_array[0]); - - if (op == op_Const || op == op_SymConst) + ir_node *const irn = new_node_array[0]; + if (is_Const(irn) || is_SymConst(irn)) xopt = HOOK_OPT_CONFIRM_C; } /* if */ @@ -2115,7 +2027,6 @@ void stat_dump_snapshot(const char *name, const char *phase) STAT_ENTER; { - graph_entry_t *entry; graph_entry_t *global = graph_get_entry(NULL, status->irg_hash); /* @@ -2152,16 +2063,15 @@ void stat_dump_snapshot(const char *name, const char *phase) fname[0] = '\0'; p = name; } /* if */ - strncat(fname, "firmstat-", sizeof(fname)-1); - strncat(fname, phase, sizeof(fname)-1); - strncat(fname, "-", sizeof(fname)-1); - strncat(fname, p, sizeof(fname)-1); + strncat(fname, "firmstat-", sizeof(fname)-strlen(fname)-1); + strncat(fname, phase, sizeof(fname)-strlen(fname)-1); + strncat(fname, "-", sizeof(fname)-strlen(fname)-1); + strncat(fname, p, sizeof(fname)-strlen(fname)-1); stat_dump_init(fname); /* calculate the graph statistics */ - for (entry = (graph_entry_t*)pset_first(status->irg_hash); - entry != NULL; entry = (graph_entry_t*)pset_next(status->irg_hash)) { + foreach_pset(status->irg_hash, graph_entry_t, entry) { if (entry->irg == NULL) { /* special entry for the global count */ continue; @@ -2174,14 +2084,13 @@ void stat_dump_snapshot(const char *name, const char *phase) /* some calculations are dependent, we pushed them on the wait_q */ while (! pdeq_empty(status->wait_q)) { - entry = (graph_entry_t*)pdeq_getr(status->wait_q); + graph_entry_t *const entry = (graph_entry_t*)pdeq_getr(status->wait_q); update_graph_stat_2(global, entry); } /* while */ /* dump per graph */ - for (entry = (graph_entry_t*)pset_first(status->irg_hash); - entry != NULL; entry = (graph_entry_t*)pset_next(status->irg_hash)) { + foreach_pset(status->irg_hash, graph_entry_t, entry) { if (entry->irg == NULL) { /* special entry for the global count */ continue; @@ -2217,16 +2126,11 @@ void stat_dump_snapshot(const char *name, const char *phase) stat_finish_pattern_history(fname); /* clear the global counters here */ - { - node_entry_t *entry; - - for (entry = (node_entry_t*)pset_first(global->opcode_hash); - entry != NULL; entry = (node_entry_t*)pset_next(global->opcode_hash)) { - opcode_clear_entry(entry); - } /* for */ - /* clear all global counter */ - graph_clear_entry(global, /*all=*/1); - } + foreach_pset(global->opcode_hash, node_entry_t, entry) { + opcode_clear_entry(entry); + } /* for */ + /* clear all global counter */ + graph_clear_entry(global, /*all=*/1); } STAT_LEAVE; } /* stat_dump_snapshot */