X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fstat%2Fstat_dmp.c;h=9781ba907feb8414973df6488c4e3fa143e8f651;hb=76a6cf6ff4e6fdcf17c8e8530f006b538f1d954c;hp=0a7fb4de36efa975a0e7dbc6307d891b8b34cfd0;hpb=26b9008643da89a023fd6839ded5b9abf21ef328;p=libfirm diff --git a/ir/stat/stat_dmp.c b/ir/stat/stat_dmp.c index 0a7fb4de3..9781ba907 100644 --- a/ir/stat/stat_dmp.c +++ b/ir/stat/stat_dmp.c @@ -114,7 +114,7 @@ static const struct { { (hook_opt_kind)FS_OPT_MUX_TO_MIN, "algebraic simplification: Mux(a < b, a, b) = Min(a,b)" }, { (hook_opt_kind)FS_OPT_MUX_TO_MAX, "algebraic simplification: Mux(a > b, a, b) = Max(a,b)" }, { (hook_opt_kind)FS_OPT_MUX_TO_BITOP, "algebraic simplification: Mux((a & 2^x) ==/!= 0, 2^x, 0) = (a & 2^x) (xor 2^x)" }, - { (hook_opt_kind)FS_OPT_IDEM_UNARY, "algebraic simplification: Idempotent unary operation" }, + { (hook_opt_kind)FS_OPT_INVOLUTION, "algebraic simplification: OP(OP(x)) = x" }, { (hook_opt_kind)FS_OPT_MINUS_NOT, "algebraic simplification: -(~x) = x + 1" }, { (hook_opt_kind)FS_OPT_NOT_MINUS_1, "algebraic simplification: ~(x - 1) = -x" }, { (hook_opt_kind)FS_OPT_NOT_PLUS_1, "algebraic simplification: ~x + 1 = -x" }, @@ -193,7 +193,6 @@ static const char *if_conv_names[IF_RESULT_LAST] = { */ static void simple_dump_opcode_hash(dumper_t *dmp, pset *set) { - node_entry_t *entry; counter_t f_alive; counter_t f_new_node; counter_t f_Id; @@ -205,7 +204,7 @@ static void simple_dump_opcode_hash(dumper_t *dmp, pset *set) cnt_clr(&f_normlized); fprintf(dmp->f, "%-16s %-8s %-8s %-8s %-8s\n", "Opcode", "alive", "created", "->Id", "normalized"); - foreach_pset(set, node_entry_t*, entry) { + foreach_pset(set, node_entry_t, entry) { fprintf(dmp->f, "%-16s %8u %8u %8u %8u\n", get_id_str(entry->op->name), cnt_to_uint(&entry->cnt_alive), @@ -218,7 +217,7 @@ static void simple_dump_opcode_hash(dumper_t *dmp, pset *set) cnt_add(&f_new_node, &entry->new_node); cnt_add(&f_Id, &entry->into_Id); cnt_add(&f_normlized, &entry->normalized); - } /* foreach_pset */ + } fprintf(dmp->f, "-------------------------------------------\n"); fprintf(dmp->f, "%-16s %8u %8u %8u %8u\n", "Sum", cnt_to_uint(&f_alive), @@ -226,7 +225,7 @@ static void simple_dump_opcode_hash(dumper_t *dmp, pset *set) cnt_to_uint(&f_Id), cnt_to_uint(&f_normlized) ); -} /* simple_dump_opcode_hash */ +} /** * Return the name of an optimization. @@ -236,7 +235,7 @@ static const char *get_opt_name(int index) assert(index < (int) ARRAY_SIZE(opt_names) && "index out of range"); assert((int) opt_names[index].kind == index && "opt_names broken"); return opt_names[index].name; -} /* get_opt_name */ +} /** * dumps an optimization hash into human readable form @@ -244,55 +243,52 @@ static const char *get_opt_name(int index) static void simple_dump_opt_hash(dumper_t *dmp, pset *set, int index) { if (pset_count(set) > 0) { - opt_entry_t *entry; const char *name = get_opt_name(index); fprintf(dmp->f, "\n%s:\n", name); fprintf(dmp->f, "%-16s %-8s\n", "Opcode", "deref"); - foreach_pset(set, opt_entry_t*, entry) { + foreach_pset(set, opt_entry_t, entry) { fprintf(dmp->f, "%-16s %8u\n", get_id_str(entry->op->name), cnt_to_uint(&entry->count)); - } /* foreach_pset */ - } /* if */ -} /* simple_dump_opt_hash */ + } + } +} /** * dumps the register pressure for each block and for each register class */ static void simple_dump_be_block_reg_pressure(dumper_t *dmp, graph_entry_t *entry) { - be_block_entry_t *b_entry = (be_block_entry_t*)pset_first(entry->be_block_hash); - reg_pressure_entry_t *rp_entry; - /* return if no be statistic information available */ - if (! b_entry) + be_block_entry_t *const b_first = pset_first(be_block_entry_t, entry->be_block_hash); + if (!b_first) return; fprintf(dmp->f, "\nREG PRESSURE:\n"); fprintf(dmp->f, "%12s", "Block Nr"); /* print table head (register class names) */ - foreach_pset(b_entry->reg_pressure, reg_pressure_entry_t*, rp_entry) + foreach_pset(b_first->reg_pressure, reg_pressure_entry_t, rp_entry) fprintf(dmp->f, "%15s", rp_entry->class_name); fprintf(dmp->f, "\n"); /* print the reg pressure for all blocks and register classes */ - foreach_pset(entry->block_hash, be_block_entry_t*, b_entry) { + foreach_pset(entry->block_hash, be_block_entry_t, b_entry) { fprintf(dmp->f, "BLK %6ld", b_entry->block_nr); - foreach_pset(b_entry->reg_pressure, reg_pressure_entry_t*, rp_entry) + foreach_pset(b_entry->reg_pressure, reg_pressure_entry_t, rp_entry) fprintf(dmp->f, "%15d", rp_entry->pressure); fprintf(dmp->f, "\n"); - } /* for */ -} /* simple_dump_be_block_reg_pressure */ + } +} /** prints a distribution entry */ static void simple_dump_distrib_entry(const distrib_entry_t *entry, void *env) { dumper_t *dmp = (dumper_t*)env; fprintf(dmp->f, "%12u", cnt_to_uint(&entry->cnt)); -} /* simple_dump_distrib_entry */ +} /** * dumps the distribution of the amount of ready nodes for each block @@ -300,14 +296,13 @@ static void simple_dump_distrib_entry(const distrib_entry_t *entry, void *env) static void simple_dump_be_block_sched_ready(dumper_t *dmp, graph_entry_t *entry) { if (pset_count(entry->be_block_hash) > 0) { - be_block_entry_t *b_entry; - int i; + int i; fprintf(dmp->f, "\nSCHEDULING: NUMBER OF READY NODES\n"); fprintf(dmp->f, "%12s %12s %12s %12s %12s %12s %12s\n", "Block Nr", "1 node", "2 nodes", "3 nodes", "4 nodes", "5 or more", "AVERAGE"); - foreach_pset(entry->be_block_hash, be_block_entry_t*, b_entry) { + foreach_pset(entry->be_block_hash, be_block_entry_t, b_entry) { /* this ensures that all keys from 1 to 5 are in the table */ for (i = 1; i < 6; ++i) stat_insert_int_distrib_tbl(b_entry->sched_ready, i); @@ -316,9 +311,9 @@ static void simple_dump_be_block_sched_ready(dumper_t *dmp, graph_entry_t *entry stat_iterate_distrib_tbl(b_entry->sched_ready, simple_dump_distrib_entry, dmp); fprintf(dmp->f, "%12.2lf", stat_calc_avg_distrib_tbl(b_entry->sched_ready)); fprintf(dmp->f, "\n"); - } /* foreach_pset */ - } /* if */ -} /* simple_dump_be_block_sched_ready */ + } + } +} /** * Adds the counter for given entry to another distribution table. @@ -328,18 +323,17 @@ static void add_distrib_entry(const distrib_entry_t *entry, void *env) distrib_tbl_t *sum_tbl = (distrib_tbl_t*)env; stat_add_int_distrib_tbl(sum_tbl, (int)PTR_TO_INT(entry->object), &entry->cnt); -} /* add_distrib_entry */ +} /** * dumps permutation statistics for one and block and one class */ static void simple_dump_be_block_permstat_class(dumper_t *dmp, perm_class_entry_t *entry) { - perm_stat_entry_t *ps_ent; - distrib_tbl_t *sum_chains = stat_new_int_distrib_tbl(); - distrib_tbl_t *sum_cycles = stat_new_int_distrib_tbl(); - char buf[16]; - int i; + distrib_tbl_t *sum_chains = stat_new_int_distrib_tbl(); + distrib_tbl_t *sum_cycles = stat_new_int_distrib_tbl(); + char buf[16]; + int i; fprintf(dmp->f, "%12s %12s %12s %12s %12s %12s\n", "size", @@ -350,7 +344,7 @@ static void simple_dump_be_block_permstat_class(dumper_t *dmp, perm_class_entry_ "# exchanges" ); - foreach_pset(entry->perm_stat, perm_stat_entry_t*, ps_ent) { + foreach_pset(entry->perm_stat, perm_stat_entry_t, ps_ent) { fprintf(dmp->f, "%12d %12d %12d %12d %12d %12d\n", ps_ent->size, ps_ent->real_size, @@ -365,7 +359,7 @@ static void simple_dump_be_block_permstat_class(dumper_t *dmp, perm_class_entry_ /* sum up distribution table for cycles */ stat_iterate_distrib_tbl(ps_ent->cycles, add_distrib_entry, sum_cycles); - } /* foreach_pset */ + } /* print chain distribution for all perms of this class in this block */ fprintf(dmp->f, "chain distribution:\n"); @@ -375,7 +369,7 @@ static void simple_dump_be_block_permstat_class(dumper_t *dmp, perm_class_entry_ snprintf(buf, sizeof(buf), "length %d", i); fprintf(dmp->f, "%12s", buf); stat_insert_int_distrib_tbl(sum_chains, i); - } /* for */ + } fprintf(dmp->f, "\n"); stat_iterate_distrib_tbl(sum_chains, simple_dump_distrib_entry, dmp); fprintf(dmp->f, "\n"); @@ -388,7 +382,7 @@ static void simple_dump_be_block_permstat_class(dumper_t *dmp, perm_class_entry_ snprintf(buf, sizeof(buf), "length %d", i); fprintf(dmp->f, "%12s", buf); stat_insert_int_distrib_tbl(sum_cycles, i); - } /* for */ + } fprintf(dmp->f, "\n"); stat_iterate_distrib_tbl(sum_cycles, simple_dump_distrib_entry, dmp); fprintf(dmp->f, "\n"); @@ -397,7 +391,7 @@ static void simple_dump_be_block_permstat_class(dumper_t *dmp, perm_class_entry_ stat_delete_distrib_tbl(sum_chains); stat_delete_distrib_tbl(sum_cycles); -} /* simple_dump_be_block_permstat_class */ +} /** * dumps statistics about perms @@ -405,25 +399,21 @@ static void simple_dump_be_block_permstat_class(dumper_t *dmp, perm_class_entry_ static void simple_dump_be_block_permstat(dumper_t *dmp, graph_entry_t *entry) { if (pset_count(entry->be_block_hash) > 0) { - be_block_entry_t *b_entry; - fprintf(dmp->f, "\nPERMUTATION STATISTICS BEGIN:\n"); - foreach_pset(entry->be_block_hash, be_block_entry_t*, b_entry) { - perm_class_entry_t *pc_ent; - + foreach_pset(entry->be_block_hash, be_block_entry_t, b_entry) { fprintf(dmp->f, "BLOCK %ld:\n", b_entry->block_nr); if (b_entry->perm_class_stat) { - foreach_pset(b_entry->perm_class_stat, perm_class_entry_t*, pc_ent) { + foreach_pset(b_entry->perm_class_stat, perm_class_entry_t, pc_ent) { fprintf(dmp->f, "register class %s:\n", pc_ent->class_name); simple_dump_be_block_permstat_class(dmp, pc_ent); - } /* foreach_pset */ - } /* if */ - } /* foreach_pset */ + } + } + } fprintf(dmp->f, "PERMUTATION STATISTICS END\n"); - } /* if */ -} /* simple_dump_be_block_permstat */ + } +} /** * dumps the number of real_function_call optimization @@ -436,8 +426,8 @@ static void simple_dump_real_func_calls(dumper_t *dmp, counter_t *cnt) if (! cnt_eq(cnt, 0)) { fprintf(dmp->f, "\nReal Function Calls optimized:\n"); fprintf(dmp->f, "%-16s %8u\n", "Call", cnt_to_uint(cnt)); - } /* if */ -} /* simple_dump_real_func_calls */ + } +} /** * dumps the number of tail_recursion optimization @@ -450,8 +440,8 @@ static void simple_dump_tail_recursion(dumper_t *dmp, unsigned num_tail_recursio if (num_tail_recursion > 0) { fprintf(dmp->f, "\nTail recursion optimized:\n"); fprintf(dmp->f, "%-16s %8u\n", "Call", num_tail_recursion); - } /* if */ -} /* simple_dump_tail_recursion */ + } +} /** * dumps the edges count @@ -462,7 +452,7 @@ static void simple_dump_edges(dumper_t *dmp, counter_t *cnt) return; fprintf(dmp->f, "%-16s %8u\n", "Edges", cnt_to_uint(cnt)); -} /* simple_dump_edges */ +} /** * dumps the IRG @@ -470,7 +460,6 @@ static void simple_dump_edges(dumper_t *dmp, counter_t *cnt) static void simple_dump_graph(dumper_t *dmp, graph_entry_t *entry) { int dump_opts = 1; - block_entry_t *b_entry; if (! dmp->f) return; @@ -486,7 +475,7 @@ static void simple_dump_graph(dumper_t *dmp, graph_entry_t *entry) fprintf(dmp->f, "\nEntity %s, Irg %p", get_entity_ld_name(entry->ent), (void *)entry->irg); else fprintf(dmp->f, "\nIrg %p", (void *)entry->irg); - } /* if */ + } fprintf(dmp->f, " %swalked %u over blocks %u:\n" " was inlined : %u\n" @@ -517,12 +506,12 @@ static void simple_dump_graph(dumper_t *dmp, graph_entry_t *entry) for (i = 0; i < IF_RESULT_LAST; ++i) { fprintf(dmp->f, " %s : %u\n", if_conv_names[i], cnt_to_uint(&entry->cnt[gcnt_if_conv + i])); - } /* for */ + } } else { fprintf(dmp->f, "\nGlobals counts:\n"); fprintf(dmp->f, "--------------\n"); dump_opts = 0; - } /* if */ + } /* address ops */ fprintf(dmp->f, @@ -558,11 +547,11 @@ static void simple_dump_graph(dumper_t *dmp, graph_entry_t *entry) for (i = 0; i != ARRAY_SIZE(entry->opt_hash); ++i) { simple_dump_opt_hash(dmp, entry->opt_hash[i], i); - } /* for */ + } /* dump block info */ fprintf(dmp->f, "\n%12s %12s %12s %12s %12s %12s %12s\n", "Block Nr", "Nodes", "intern E", "incoming E", "outgoing E", "Phi", "quot"); - foreach_pset(entry->block_hash, block_entry_t*, b_entry) { + foreach_pset(entry->block_hash, block_entry_t, b_entry) { fprintf(dmp->f, "BLK %6ld %12u %12u %12u %12u %12u %4.8f %s\n", b_entry->block_nr, cnt_to_uint(&b_entry->cnt[bcnt_nodes]), @@ -573,7 +562,7 @@ static void simple_dump_graph(dumper_t *dmp, graph_entry_t *entry) cnt_to_dbl(&b_entry->cnt[bcnt_edges]) / cnt_to_dbl(&b_entry->cnt[bcnt_nodes]), b_entry->is_start ? "START" : (b_entry->is_end ? "END" : "") ); - } /* foreach_pset */ + } /* dump block reg pressure */ simple_dump_be_block_reg_pressure(dmp, entry); @@ -584,7 +573,7 @@ static void simple_dump_graph(dumper_t *dmp, graph_entry_t *entry) /* dump block permutation statistics */ simple_dump_be_block_permstat(dmp, entry); } -} /* simple_dump_graph */ +} /** * dumps the constant table @@ -608,7 +597,7 @@ static void simple_dump_const_tbl(dumper_t *dmp, const constant_info_t *tbl) for (i = 0; i < ARRAY_SIZE(tbl->int_bits_count); ++i) { fprintf(dmp->f, "%5u %12u\n", (unsigned) (i + 1), cnt_to_uint(&tbl->int_bits_count[i])); cnt_add(&sum, &tbl->int_bits_count[i]); - } /* for */ + } fprintf(dmp->f, "-------------------------------\n"); fprintf(dmp->f, "\nFloating point constants classification\n"); @@ -616,7 +605,7 @@ static void simple_dump_const_tbl(dumper_t *dmp, const constant_info_t *tbl) for (i = 0; i < ARRAY_SIZE(tbl->floats); ++i) { fprintf(dmp->f, "%-10s %12u\n", stat_fc_name((float_classify_t)i), cnt_to_uint(&tbl->floats[i])); cnt_add(&sum, &tbl->floats[i]); - } /* for */ + } fprintf(dmp->f, "--------------------------------------\n"); fprintf(dmp->f, "other %12u\n", cnt_to_uint(&tbl->others)); @@ -624,7 +613,7 @@ static void simple_dump_const_tbl(dumper_t *dmp, const constant_info_t *tbl) fprintf(dmp->f, "-------------------------------\n"); fprintf(dmp->f, "sum %12u\n", cnt_to_uint(&sum)); -} /* simple_dump_const_tbl */ +} /** * Dumps a line of the parameter table @@ -635,7 +624,7 @@ static void dump_tbl_line(const distrib_entry_t *entry, void *env) fprintf(dmp->f, "%ld : %u\n", (long int)PTR_TO_INT(entry->object), cnt_to_uint(&entry->cnt)); -} /* dump_tbl_line */ +} /** * dumps the parameter distribution table @@ -654,7 +643,7 @@ static void simple_dump_param_tbl(dumper_t *dmp, const distrib_tbl_t *tbl, graph fprintf(dmp->f, "with const params %12u\n", cnt_to_uint(&global->cnt[gcnt_call_with_cnst_arg])); fprintf(dmp->f, "with all const params %12u\n", cnt_to_uint(&global->cnt[gcnt_call_with_all_cnst_arg])); fprintf(dmp->f, "with local var adr params %12u\n", cnt_to_uint(&global->cnt[gcnt_call_with_local_adr])); -} /* simple_dump_param_tbl */ +} /** * dumps the optimization counter table @@ -673,7 +662,7 @@ static void simple_dump_opt_cnt(dumper_t *dmp, const counter_t *tbl, unsigned le fprintf(dmp->f, "%8u %s\n", cnt, get_opt_name(i)); } } -} /* simple_dump_opt_cnt */ +} /** * initialize the simple dumper @@ -686,8 +675,8 @@ static void simple_init(dumper_t *dmp, const char *name) dmp->f = fopen(fname, "w"); if (! dmp->f) { perror(fname); - } /* if */ -} /* simple_init */ + } +} /** * finishes the simple dumper @@ -697,7 +686,7 @@ static void simple_finish(dumper_t *dmp) if (dmp->f) fclose(dmp->f); dmp->f = NULL; -} /* simple_finish */ +} /** * the simple human readable dumper @@ -728,13 +717,12 @@ const dumper_t simple_dumper = { */ static void csv_count_nodes(dumper_t *dmp, graph_entry_t *graph, counter_t cnt[]) { - node_entry_t *entry; int i; for (i = 0; i < 4; ++i) cnt_clr(&cnt[i]); - foreach_pset(graph->opcode_hash, node_entry_t*, entry) { + foreach_pset(graph->opcode_hash, node_entry_t, entry) { if (entry->op == op_Phi) { /* normal Phi */ cnt_add(&cnt[1], &entry->cnt_alive); @@ -747,9 +735,9 @@ static void csv_count_nodes(dumper_t *dmp, graph_entry_t *graph, counter_t cnt[] } else { /* all other nodes */ cnt_add(&cnt[0], &entry->cnt_alive); - } /* if */ - } /* foreach_pset */ -} /* csv_count_nodes */ + } + } +} /** * dumps the IRG @@ -766,14 +754,13 @@ static void csv_dump_graph(dumper_t *dmp, graph_entry_t *entry) ir_graph *const_irg = get_const_code_irg(); if (entry->irg == const_irg) { - name = ""; return; } else { if (entry->ent) name = get_entity_name(entry->ent); else name = ""; - } /* if */ + } csv_count_nodes(dmp, entry, cnt); @@ -785,8 +772,8 @@ static void csv_dump_graph(dumper_t *dmp, graph_entry_t *entry) cnt_to_uint(&cnt[2]), cnt_to_uint(&cnt[3]) ); - } /* if */ -} /* csv_dump_graph */ + } +} /** * dumps the IRG @@ -796,7 +783,7 @@ static void csv_dump_const_tbl(dumper_t *dmp, const constant_info_t *tbl) (void) dmp; (void) tbl; /* FIXME: NYI */ -} /* csv_dump_const_tbl */ +} /** * dumps the parameter distribution table @@ -807,7 +794,7 @@ static void csv_dump_param_tbl(dumper_t *dmp, const distrib_tbl_t *tbl, graph_en (void) tbl; (void) global; /* FIXME: NYI */ -} /* csv_dump_param_tbl */ +} /** * dumps the optimization counter @@ -818,7 +805,7 @@ static void csv_dump_opt_cnt(dumper_t *dmp, const counter_t *tbl, unsigned len) (void) tbl; (void) len; /* FIXME: NYI */ -} /* csv_dump_opt_cnt */ +} /** * initialize the simple dumper @@ -831,7 +818,7 @@ static void csv_init(dumper_t *dmp, const char *name) dmp->f = fopen(fname, "a"); if (! dmp->f) perror(fname); -} /* csv_init */ +} /** * finishes the simple dumper @@ -841,7 +828,7 @@ static void csv_finish(dumper_t *dmp) if (dmp->f) fclose(dmp->f); dmp->f = NULL; -} /* csv_finish */ +} /** * the simple human readable dumper