X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fstat%2Fstat_dmp.c;h=fd71cca007ef76d5167c5fad41551f3d230a60fe;hb=2cc9db25f1d7780e24013ef1cc912a3cd770d7a5;hp=7ca6d7f205d8b19890896c62f09d6aadf72e09cd;hpb=05c0043facd79786feecb7c3b756c4e95628908c;p=libfirm diff --git a/ir/stat/stat_dmp.c b/ir/stat/stat_dmp.c index 7ca6d7f20..fd71cca00 100644 --- a/ir/stat/stat_dmp.c +++ b/ir/stat/stat_dmp.c @@ -1,12 +1,27 @@ /* - * Project: libFIRM - * File name: ir/ir/stat_dmp.c - * Purpose: Statistics for Firm. - * Author: Michael Beck - * Created: - * CVS-ID: $Id$ - * Copyright: (c) 2004 Universität Karlsruhe - * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE. + * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved. + * + * This file is part of libFirm. + * + * This file may be distributed and/or modified under the terms of the + * GNU General Public License version 2 as published by the Free Software + * Foundation and appearing in the file LICENSE.GPL included in the + * packaging of this file. + * + * Licensees holding valid libFirm Professional Edition licenses may use + * this file in accordance with the libFirm Commercial License. + * Agreement provided with the Software. + * + * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +/** + * @file + * @brief Statistics for Firm. Dumping. + * @author Michael Beck + * @version $Id$ */ #ifdef HAVE_CONFIG_H # include "config.h" @@ -190,8 +205,8 @@ static void simple_dump_be_block_reg_pressure(dumper_t *dmp, graph_entry_t *entr /** prints a distribution entry */ static void simple_dump_distrib_entry(const distrib_entry_t *entry, void *env) { - FILE *dmp_f = env; - fprintf(dmp_f, "%12d", cnt_to_uint(&entry->cnt)); + dumper_t *dmp = env; + fprintf(dmp->f, "%12d", cnt_to_uint(&entry->cnt)); } /* simple_dump_distrib_entry */ /** @@ -213,7 +228,7 @@ static void simple_dump_be_block_sched_ready(dumper_t *dmp, graph_entry_t *entry stat_insert_int_distrib_tbl(b_entry->sched_ready, i); fprintf(dmp->f, "BLK %6ld", b_entry->block_nr); - stat_iterate_distrib_tbl(b_entry->sched_ready, simple_dump_distrib_entry, dmp->f); + 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 */ @@ -398,20 +413,20 @@ static void simple_dump_graph(dumper_t *dmp, graph_entry_t *entry) " calls : %u\n" " indirect calls : %u\n", entry->is_deleted ? "DELETED " : "", - cnt_to_uint(&entry->cnt_walked), cnt_to_uint(&entry->cnt_walked_blocks), - cnt_to_uint(&entry->cnt_was_inlined), - cnt_to_uint(&entry->cnt_got_inlined), - cnt_to_uint(&entry->cnt_strength_red), + cnt_to_uint(&entry->cnt[gcnt_acc_walked]), cnt_to_uint(&entry->cnt[gcnt_acc_walked_blocks]), + cnt_to_uint(&entry->cnt[gcnt_acc_was_inlined]), + cnt_to_uint(&entry->cnt[gcnt_acc_got_inlined]), + cnt_to_uint(&entry->cnt[gcnt_acc_strength_red]), entry->is_leaf ? "YES" : "NO", entry->is_leaf_call == LCS_NON_LEAF_CALL ? "NO" : (entry->is_leaf_call == LCS_LEAF_CALL ? "Yes" : "Maybe"), entry->is_recursive ? "YES" : "NO", entry->is_chain_call ? "YES" : "NO", - cnt_to_uint(&entry->cnt_all_calls), - cnt_to_uint(&entry->cnt_indirect_calls) + cnt_to_uint(&entry->cnt[gcnt_all_calls]), + cnt_to_uint(&entry->cnt[gcnt_indirect_calls]) ); - for (i = 0; i < sizeof(entry->cnt_if_conv)/sizeof(entry->cnt_if_conv[0]); ++i) { - fprintf(dmp->f, " %s : %u\n", if_conv_names[i], cnt_to_uint(&entry->cnt_if_conv[i])); + 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"); @@ -423,17 +438,32 @@ static void simple_dump_graph(dumper_t *dmp, graph_entry_t *entry) fprintf(dmp->f, " pure address calc ops : %u\n" " all address calc ops : %u\n", - cnt_to_uint(&entry->cnt_pure_adr_ops), - cnt_to_uint(&entry->cnt_all_adr_ops)); + cnt_to_uint(&entry->cnt[gcnt_pure_adr_ops]), + cnt_to_uint(&entry->cnt[gcnt_all_adr_ops]) + ); + + /* Load/Store address classification */ + fprintf(dmp->f, + " global Ld/St address : %u\n" + " local Ld/St address : %u\n" + " this Ld/St address : %u\n" + " param Ld/St address : %u\n" + " other Ld/St address : %u\n", + cnt_to_uint(&entry->cnt[gcnt_global_adr]), + cnt_to_uint(&entry->cnt[gcnt_local_adr]), + cnt_to_uint(&entry->cnt[gcnt_this_adr]), + cnt_to_uint(&entry->cnt[gcnt_param_adr]), + cnt_to_uint(&entry->cnt[gcnt_other_adr]) + ); simple_dump_opcode_hash(dmp, entry->opcode_hash); - simple_dump_edges(dmp, &entry->cnt_edges); + simple_dump_edges(dmp, &entry->cnt[gcnt_edges]); /* effects of optimizations */ if (dump_opts) { int i; - simple_dump_real_func_calls(dmp, &entry->cnt_real_func_call); + simple_dump_real_func_calls(dmp, &entry->cnt[gcnt_acc_real_func_call]); simple_dump_tail_recursion(dmp, entry->num_tail_recursion); for (i = 0; i < sizeof(entry->opt_hash)/sizeof(entry->opt_hash[0]); ++i) { @@ -445,12 +475,12 @@ static void simple_dump_graph(dumper_t *dmp, graph_entry_t *entry) foreach_pset(entry->block_hash, b_entry) { fprintf(dmp->f, "BLK %6ld %12u %12u %12u %12u %12u %4.8f\n", b_entry->block_nr, - cnt_to_uint(&b_entry->cnt_nodes), - cnt_to_uint(&b_entry->cnt_edges), - cnt_to_uint(&b_entry->cnt_in_edges), - cnt_to_uint(&b_entry->cnt_out_edges), - cnt_to_uint(&b_entry->cnt_phi_data), - cnt_to_dbl(&b_entry->cnt_edges) / cnt_to_dbl(&b_entry->cnt_nodes) + cnt_to_uint(&b_entry->cnt[bcnt_nodes]), + cnt_to_uint(&b_entry->cnt[bcnt_edges]), + cnt_to_uint(&b_entry->cnt[bcnt_in_edges]), + cnt_to_uint(&b_entry->cnt[bcnt_out_edges]), + cnt_to_uint(&b_entry->cnt[bcnt_phi_data]), + cnt_to_dbl(&b_entry->cnt[bcnt_edges]) / cnt_to_dbl(&b_entry->cnt[bcnt_nodes]) ); } /* foreach_pset */ @@ -469,12 +499,12 @@ static void simple_dump_graph(dumper_t *dmp, graph_entry_t *entry) foreach_pset(entry->extbb_hash, eb_entry) { fprintf(dmp->f, "ExtBB %6ld %12u %12u %12u %12u %12u %4.8f\n", eb_entry->block_nr, - cnt_to_uint(&eb_entry->cnt_nodes), - cnt_to_uint(&eb_entry->cnt_edges), - cnt_to_uint(&eb_entry->cnt_in_edges), - cnt_to_uint(&eb_entry->cnt_out_edges), - cnt_to_uint(&eb_entry->cnt_phi_data), - cnt_to_dbl(&eb_entry->cnt_edges) / cnt_to_dbl(&eb_entry->cnt_nodes) + cnt_to_uint(&eb_entry->cnt[bcnt_nodes]), + cnt_to_uint(&eb_entry->cnt[bcnt_edges]), + cnt_to_uint(&eb_entry->cnt[bcnt_in_edges]), + cnt_to_uint(&eb_entry->cnt[bcnt_out_edges]), + cnt_to_uint(&eb_entry->cnt[bcnt_phi_data]), + cnt_to_dbl(&eb_entry->cnt[bcnt_edges]) / cnt_to_dbl(&eb_entry->cnt[bcnt_nodes]) ); } /* foreach_pset */ } /* if */ @@ -521,6 +551,31 @@ static void simple_dump_const_tbl(dumper_t *dmp, const constant_info_t *tbl) fprintf(dmp->f, "sum %12u\n", cnt_to_uint(&sum)); } /* simple_dump_const_tbl */ +/** + * Dumps a line of the parameter table + */ +static void dump_tbl_line(const distrib_entry_t *entry, void *env) { + dumper_t *dmp = env; + + fprintf(dmp->f, "%d : %u\n", PTR_TO_INT(entry->object), cnt_to_uint(&entry->cnt)); +} /* dump_tbl_line */ + +/** + * dumps the parameter distribution table + */ +static void simple_dump_param_tbl(dumper_t *dmp, const distrib_tbl_t *tbl, graph_entry_t *global) { + fprintf(dmp->f, "\nCall parameter Information:\n"); + fprintf(dmp->f, "---------------------\n"); + + stat_iterate_distrib_tbl(tbl, dump_tbl_line, dmp); + fprintf(dmp->f, "-------------------------------\n"); + + fprintf(dmp->f, "Number of Calls %12u\n", cnt_to_uint(&global->cnt[gcnt_all_calls])); + 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 */ + /** * initialize the simple dumper */ @@ -549,6 +604,7 @@ static void simple_finish(dumper_t *dmp) { const dumper_t simple_dumper = { simple_dump_graph, simple_dump_const_tbl, + simple_dump_param_tbl, simple_init, simple_finish, NULL, @@ -638,6 +694,13 @@ static void csv_dump_const_tbl(dumper_t *dmp, const constant_info_t *tbl) /* FIXME: NYI */ } /* csv_dump_const_tbl */ +/** + * dumps the parameter distribution table + */ +static void csv_dump_param_tbl(dumper_t *dmp, const distrib_tbl_t *tbl, graph_entry_t *global) { + /* FIXME: NYI */ +} /* csv_dump_param_tbl */ + /** * initialize the simple dumper */ @@ -667,6 +730,7 @@ static void csv_finish(dumper_t *dmp) const dumper_t csv_dumper = { csv_dump_graph, csv_dump_const_tbl, + csv_dump_param_tbl, csv_init, csv_finish, NULL,