scripts: Generate accessor functions for nodes with a variable/dynamic number of...
[libfirm] / ir / stat / stat_dmp.c
index 0a7fb4d..9781ba9 100644 (file)
@@ -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 = "<Const code Irg>";
                        return;
                } else {
                        if (entry->ent)
                                name = get_entity_name(entry->ent);
                        else
                                name = "<UNKNOWN IRG>";
-               }  /* 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