2 * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
4 * This file is part of libFirm.
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.
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.
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
22 * @brief Compute statistics about firm library.
23 * @author Goetz Lindenmaier
30 #include "statistics.h"
31 #include "irgraph_t.h"
36 /***********************************************************************/
37 /* Statistics about allocated datastructures: counts. */
39 static void count_nodes(ir_node *n, void *env) {
40 int * counter_ptr = (int *)env;
46 /** Prints number of irgraphs, number of nodes in them and
48 void print_graph_counts(int verbosity) {
49 int i, counter, total = 0;
50 ir_graph *old = current_ir_graph;
52 #ifdef INTERPROCEDURAL_VIEW
53 int view = get_interprocedural_view();
54 set_interprocedural_view(0);
57 for (i = 0; i < get_irp_n_irgs(); i++) {
59 irg_walk_graph(get_irp_irg(i), count_nodes, NULL, &counter);
61 printf(" +%4d nodes in graph %s.\n", counter, get_entity_name(get_irg_entity(get_irp_irg(i))));
64 printf(" +++ There are %d graphs with total %d nodes.\n", get_irp_n_irgs(), total);
66 current_ir_graph = old;
67 #ifdef INTERPROCEDURAL_VIEW
68 set_interprocedural_view(view);
72 /** Prints number of types, number of entities and totals.
74 void print_type_counts(int verbosity) {
75 int i, counter, total = 0;
76 for (i = 0; i < get_irp_n_types(); i++) {
77 ir_type *tp = get_irp_type(i);
79 if (is_Class_type(tp)) counter = get_class_n_members(tp);
80 if (is_Struct_type(tp)) counter = get_struct_n_members(tp);
81 if (is_Union_type(tp)) counter = get_union_n_members(tp);
84 printf(" +%3d entities in %s type %s.\n", counter, get_type_tpop_name(tp), get_type_name(tp));
88 printf(" +++ There are %d types with total %d entities.\n", get_irp_n_types(), total);
89 printf(" +++ Global type has %d entities\n",
90 get_class_n_members(get_glob_type()));
94 /** Prints number of tarvals.
96 void print_tarval_counts(int verbosity) {
98 printf("tarval count not implemented.\n\n");
101 /** Prints number of idents.
103 void print_ident_counts(int verbosity) {
105 printf("ident count not implemented.\n\n");
109 void print_all_counts(int verbosity) {
110 printf(" +++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
111 print_graph_counts(verbosity);
112 printf(" +++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
113 print_type_counts(verbosity);
114 printf(" +++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
116 print_tarval_counts(verbosity);
117 printf(" +++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
118 print_ident_counts(verbosity);
119 printf(" +++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");