X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbecopystat.c;h=2d7fcce0369db5a4cae247b54d5c67cb1929093c;hb=9181bbbb24cd351c0e21c538bcf0341674e0c3fc;hp=c7e665231c0cd671e0730cd63f3f123952724084;hpb=a8d6e45f13a40f6c9269608bf937e3e641d0b715;p=libfirm diff --git a/ir/be/becopystat.c b/ir/be/becopystat.c index c7e665231..2d7fcce03 100644 --- a/ir/be/becopystat.c +++ b/ir/be/becopystat.c @@ -1,20 +1,6 @@ /* - * Copyright (C) 1995-2008 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. + * Copyright (C) 2012 University of Karlsruhe. */ /** @@ -22,7 +8,6 @@ * @brief Copy node statistics. * @author Daniel Grund * @date 19.04.2005 - * @version $Id$ */ #include "config.h" @@ -40,7 +25,6 @@ #include "beutil.h" #include "becopyopt_t.h" #include "becopystat.h" -#include "beirg.h" #include "bemodule.h" #include "beintlive_t.h" @@ -61,23 +45,23 @@ enum vals_t { I_BLOCKS, /* phi nodes */ - I_PHI_CNT, /* number of phi nodes */ - I_PHI_ARG_CNT, /* number of arguments of phis */ - I_PHI_ARG_SELF, /* number of arguments of phis being the phi itself */ - I_PHI_ARG_CONST, /* number of arguments of phis being consts */ - I_PHI_ARG_PRED, /* ... being defined in a cf-pred */ - I_PHI_ARG_GLOB, /* ... being defined elsewhere */ + I_PHI_CNT, /* number of phi nodes */ + I_PHI_ARG_CNT, /* number of arguments of phis */ + I_PHI_ARG_SELF, /* number of arguments of phis being the phi itself */ + I_PHI_ARG_CONST, /* number of arguments of phis being consts */ + I_PHI_ARG_PRED, /* ... being defined in a cf-pred */ + I_PHI_ARG_GLOB, /* ... being defined elsewhere */ I_PHI_ARITY_S, I_PHI_ARITY_E = I_PHI_ARITY_S+MAX_ARITY, /* copy nodes */ - I_CPY_CNT, /* number of copynodes */ + I_CPY_CNT, /* number of copynodes */ /* phi classes */ - I_CLS_CNT, /* number of phi classes */ - I_CLS_IF_FREE, /* number of pc having no interference */ - I_CLS_IF_MAX, /* number of possible interferences in all classes */ - I_CLS_IF_CNT, /* number of actual interferences in all classes */ + I_CLS_CNT, /* number of phi classes */ + I_CLS_IF_FREE, /* number of pc having no interference */ + I_CLS_IF_MAX, /* number of possible interferences in all classes */ + I_CLS_IF_CNT, /* number of actual interferences in all classes */ I_CLS_SIZE_S, I_CLS_SIZE_E = I_CLS_SIZE_S+MAX_CLS_SIZE, I_CLS_PHIS_S, @@ -87,20 +71,20 @@ enum vals_t { /* all of them are external set */ /* ilp values */ - I_HEUR_TIME, /* solving time in milli seconds */ - I_ILP_TIME, /* solving time in milli seconds */ + I_HEUR_TIME, /* solving time in milli seconds */ + I_ILP_TIME, /* solving time in milli seconds */ I_ILP_VARS, I_ILP_CSTR, - I_ILP_ITER, /* number of simplex iterations */ + I_ILP_ITER, /* number of simplex iterations */ /* copy instructions */ - I_COPIES_MAX, /* max possible costs of copies*/ - I_COPIES_INIT, /* number of copies in initial allocation */ - I_COPIES_HEUR, /* number of copies after heuristic */ - I_COPIES_5SEC, /* number of copies after ilp with max n sec */ - I_COPIES_30SEC, /* number of copies after ilp with max n sec */ - I_COPIES_OPT, /* number of copies after ilp */ - I_COPIES_IF, /* number of copies inevitable due to root-arg-interf */ + I_COPIES_MAX, /* max possible costs of copies*/ + I_COPIES_INIT, /* number of copies in initial allocation */ + I_COPIES_HEUR, /* number of copies after heuristic */ + I_COPIES_5SEC, /* number of copies after ilp with max n sec */ + I_COPIES_30SEC, /* number of copies after ilp with max n sec */ + I_COPIES_OPT, /* number of copies after ilp */ + I_COPIES_IF, /* number of copies inevitable due to root-arg-interf */ ASIZE }; @@ -108,37 +92,45 @@ enum vals_t { /** * Holds current values. Values are added till next copystat_reset */ -int curr_vals[ASIZE]; +static int curr_vals[ASIZE]; static ir_nodeset_t *all_phi_nodes; static ir_nodeset_t *all_copy_nodes; -void be_init_copystat(void) { +BE_REGISTER_MODULE_CONSTRUCTOR(be_init_copystat) +void be_init_copystat(void) +{ FIRM_DBG_REGISTER(dbg, "firm.be.copystat"); all_phi_nodes = ir_nodeset_new(64); all_copy_nodes = ir_nodeset_new(64); memset(curr_vals, 0, sizeof(curr_vals)); } -BE_REGISTER_MODULE_CONSTRUCTOR(be_init_copystat); -void be_quit_copystat(void) { - ir_nodeset_del(all_phi_nodes); - ir_nodeset_del(all_copy_nodes); +BE_REGISTER_MODULE_DESTRUCTOR(be_quit_copystat) +void be_quit_copystat(void) +{ + if (all_phi_nodes != NULL) { + ir_nodeset_del(all_phi_nodes); + all_phi_nodes = NULL; + } + if (all_copy_nodes != NULL) { + ir_nodeset_del(all_copy_nodes); + all_copy_nodes = NULL; + } } -BE_REGISTER_MODULE_DESTRUCTOR(be_quit_copystat); /** * @return 1 if the block at pos @p pos removed a critical edge - * 0 else + * 0 else */ -static inline int was_edge_critical(const ir_node *bl, int pos) { +static inline int was_edge_critical(const ir_node *bl, int pos) +{ const ir_edge_t *edge; const ir_node *bl_at_pos, *bl_before; - assert(is_Block(bl)); /* Does bl have several predecessors ?*/ - if (get_irn_arity(bl) <= 1) + if (get_Block_n_cfgpreds(bl) <= 1) return 0; /* Does the pred have exactly one predecessor */ @@ -152,49 +144,75 @@ static inline int was_edge_critical(const ir_node *bl, int pos) { return get_block_succ_next(bl_before, edge) ? 1 : 0; } -void copystat_add_max_costs(int costs) { +void copystat_add_max_costs(int costs) +{ curr_vals[I_COPIES_MAX] += costs; } -void copystat_add_inevit_costs(int costs) { +void copystat_add_inevit_costs(int costs) +{ curr_vals[I_COPIES_IF] += costs; } -void copystat_add_init_costs(int costs) { +void copystat_add_init_costs(int costs) +{ curr_vals[I_COPIES_INIT] += costs; } -void copystat_add_heur_costs(int costs) { +void copystat_add_heur_costs(int costs) +{ curr_vals[I_COPIES_HEUR] += costs; } -void copystat_add_ilp_5_sec_costs(int costs) { - curr_vals[I_COPIES_5SEC] += costs; -} -void copystat_add_ilp_30_sec_costs(int costs) { - curr_vals[I_COPIES_30SEC] += costs; -} -void copystat_add_opt_costs(int costs) { +void copystat_add_opt_costs(int costs) +{ curr_vals[I_COPIES_OPT] += costs; } -void copystat_add_heur_time(int time) { +void copystat_add_heur_time(int time) +{ curr_vals[I_HEUR_TIME] += time; } -#ifdef WITH_ILP - -void copystat_add_ilp_time(int time) { +void copystat_add_ilp_5_sec_costs(int costs) +{ + curr_vals[I_COPIES_5SEC] += costs; +} +void copystat_add_ilp_30_sec_costs(int costs) +{ + curr_vals[I_COPIES_30SEC] += costs; +} +void copystat_add_ilp_time(int time) +{ curr_vals[I_ILP_TIME] += time; } -void copystat_add_ilp_vars(int vars) { +void copystat_add_ilp_vars(int vars) +{ curr_vals[I_ILP_VARS] += vars; } -void copystat_add_ilp_csts(int csts) { +void copystat_add_ilp_csts(int csts) +{ curr_vals[I_ILP_CSTR] += csts; } -void copystat_add_ilp_iter(int iters) { +void copystat_add_ilp_iter(int iters) +{ curr_vals[I_ILP_ITER] += iters; } -#endif /* WITH_ILP */ +/** + * Opens a file named base.ext with the mode mode. + */ +static FILE *be_ffopen(const char *base, const char *ext, const char *mode) +{ + FILE *out; + char buf[1024]; + + snprintf(buf, sizeof(buf), "%s.%s", base, ext); + buf[sizeof(buf) - 1] = '\0'; + if (! (out = fopen(buf, mode))) { + fprintf(stderr, "Cannot open file %s in mode %s\n", buf, mode); + return NULL; + } + return out; +} -void copystat_dump(ir_graph *irg) { +void copystat_dump(ir_graph *irg) +{ int i; char buf[1024]; FILE *out; @@ -203,22 +221,16 @@ void copystat_dump(ir_graph *irg) { buf[sizeof(buf) - 1] = '\0'; out = be_ffopen(buf, "stat", "wt"); - fprintf(out, "%d\n", ASIZE); + fprintf(out, "%d\n", (int)ASIZE); for (i = 0; i < ASIZE; i++) { -#if 0 - if (i >= I_PHI_ARITY_S && i <= I_PHI_ARITY_E) - fprintf(out, "%i %i\n", curr_vals[i], curr_vals[I_PHI_CNT]); - else if (i >= I_CLS_SIZE_S && i <= I_CLS_SIZE_E) - fprintf(out, "%i %i\n", curr_vals[i], curr_vals[I_CLS_CNT]); - else -#endif - fprintf(out, "%i\n", curr_vals[i]); + fprintf(out, "%i\n", curr_vals[i]); } fclose(out); } -void copystat_dump_pretty(ir_graph *irg) { +void copystat_dump_pretty(ir_graph *irg) +{ int i; char buf[1024]; FILE *out;