remove #ifdef HAVE_CONFIG_Hs
[libfirm] / ir / common / statistics.c
1 /*
2  * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
3  *
4  * This file is part of libFirm.
5  *
6  * This file may be distributed and/or modified under the terms of the
7  * GNU General Public License version 2 as published by the Free Software
8  * Foundation and appearing in the file LICENSE.GPL included in the
9  * packaging of this file.
10  *
11  * Licensees holding valid libFirm Professional Edition licenses may use
12  * this file in accordance with the libFirm Commercial License.
13  * Agreement provided with the Software.
14  *
15  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
16  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE.
18  */
19
20 /**
21  * @file
22  * @brief    Compute statistics about firm library.
23  * @author   Goetz Lindenmaier
24  * @version  $Id$
25  */
26 #include "config.h"
27
28 #include "statistics.h"
29 #include "irgraph_t.h"
30 #include "irnode_t.h"
31 #include "irprog.h"
32 #include "irgwalk.h"
33
34 /***********************************************************************/
35 /* Statistics about allocated datastructures: counts.                  */
36
37 static void count_nodes(ir_node *n, void *env) {
38         int * counter_ptr = (int *)env;
39         (void) n;
40         (*counter_ptr)++;
41 }
42
43
44 /** Prints number of irgraphs, number of nodes in them and
45  *  totals. */
46 void print_graph_counts(int verbosity) {
47   int i, counter, total = 0;
48   ir_graph *old = current_ir_graph;
49
50 #ifdef INTERPROCEDURAL_VIEW
51   int view = get_interprocedural_view();
52   set_interprocedural_view(0);
53 #endif
54
55   for (i = 0; i < get_irp_n_irgs(); i++) {
56     counter = 0;
57     irg_walk_graph(get_irp_irg(i), count_nodes, NULL, &counter);
58     if (verbosity == 1)
59       printf(" +%4d nodes in graph %s.\n", counter, get_entity_name(get_irg_entity(get_irp_irg(i))));
60     total += counter;
61   }
62   printf(" +++ There are %d graphs with total %d nodes.\n", get_irp_n_irgs(), total);
63
64   current_ir_graph = old;
65 #ifdef INTERPROCEDURAL_VIEW
66   set_interprocedural_view(view);
67 #endif
68 }
69
70 /** Prints number of types, number of entities and totals.
71  *   */
72 void print_type_counts(int verbosity) {
73   int i, counter, total = 0;
74   for (i = 0; i < get_irp_n_types(); i++) {
75     ir_type *tp = get_irp_type(i);
76     counter = -1;
77     if (is_Class_type(tp)) counter = get_class_n_members(tp);
78     if (is_Struct_type(tp)) counter = get_struct_n_members(tp);
79     if (is_Union_type(tp)) counter = get_union_n_members(tp);
80     if (counter > -1) {
81       if (verbosity == 1)
82     printf(" +%3d entities in %s type %s.\n", counter, get_type_tpop_name(tp), get_type_name(tp));
83       total += counter;
84     }
85   }
86   printf(" +++ There are %d types with total %d entities.\n", get_irp_n_types(), total);
87   printf(" +++ Global type has %d entities\n",
88      get_class_n_members(get_glob_type()));
89
90 }
91
92 /** Prints number of tarvals.
93  *   */
94 void print_tarval_counts(int verbosity) {
95   (void) verbosity;
96   printf("tarval count not implemented.\n\n");
97 }
98
99 /** Prints number of idents.
100  *   */
101 void print_ident_counts(int verbosity) {
102   (void) verbosity;
103   printf("ident count not implemented.\n\n");
104 }
105
106
107 void print_all_counts(int verbosity) {
108   printf(" +++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
109   print_graph_counts(verbosity);
110   printf(" +++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
111   print_type_counts(verbosity);
112   printf(" +++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
113   /*
114   print_tarval_counts(verbosity);
115   printf(" +++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
116   print_ident_counts(verbosity);
117   printf(" +++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
118   */
119 }