9 #include "becopystat.h"
12 struct list_head chain;
15 int interferers, lb, max;
17 //TODO double ilp_time;
20 typedef struct _all_stat_t {
21 const char *unit_name;
22 struct list_head irgs;
25 static all_stat_t *all_stats = NULL;
27 #define irg_list_entry(lh) list_entry(lh, irg_stat_t, chain)
29 irg_stat_t *new_irg_stat(copy_opt_t *co) {
30 irg_stat_t *is, *curr;
33 all_stats = calloc(1, sizeof(*all_stats));
34 all_stats->unit_name = get_irp_prog_name();
35 INIT_LIST_HEAD(&all_stats->irgs);
36 is = calloc(1, sizeof(*is));
37 is->irg_name = "CUMULATIVE";
38 list_add_tail(&is->chain, &all_stats->irgs);
41 /* look if we had this irg already */
42 list_for_each_entry(irg_stat_t, curr, &all_stats->irgs, chain)
43 if (curr->irg == co->irg)
46 /* else create a new entry */
47 is = calloc(1, sizeof(*is));
49 is->irg_name = get_entity_name(get_irg_entity(co->irg));
50 list_add_tail(&is->chain, &all_stats->irgs);
54 void irg_stat_count(irg_stat_t *is, copy_opt_t *co, int phase) {
56 int max = 0, copies = 0;
58 list_for_each_entry(unit_t, curr, &co->units, units) {
60 max += curr->interf + curr->node_count - 1;
61 const ir_node *root = curr->nodes[0];
62 int root_color = get_irn_color(root);
63 copies += curr->interf;
64 for (i=1; i<curr->node_count; ++i) {
65 const ir_node *arg = curr->nodes[i];
66 if (root_color != get_irn_color(arg))
71 is->copies[phase] += copies;
75 is->interferers += co_get_interferer_count(co);
76 is->lb += co_get_lower_bound(co);
80 void irg_stat_print(irg_stat_t *is) {
81 printf("Irg %s: %3d %3d %3d %3d %3d %3d", is->irg_name, is->interferers, is->lb, is->copies[0], is->copies[1], is->copies[2], is->max);
84 void all_stat_dump(void) {
86 irg_stat_t *cuml, *curr;
87 /* Compute cumulative values */
88 cuml = irg_list_entry(all_stats->irgs.next);
89 cuml->interferers = 0;
95 list_for_each_entry(irg_stat_t, curr, &all_stats->irgs, chain) {
97 cuml->interferers += curr->interferers;
99 cuml->max += curr->max;
101 cuml->copies[i] += curr->copies[i];
105 out = ffopen(all_stats->unit_name, "stats", "wt");
106 list_for_each_entry(irg_stat_t, curr, &all_stats->irgs, chain)
107 fprintf(out, "%15s %3d %3d %3d %3d %3d %3d", curr->irg_name, curr->interferers, curr->lb, curr->copies[0], curr->copies[1], curr->copies[2], curr->max);