X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=ir%2Fbe%2Fbeifg.c;h=0914d608388915d0c6726c7357dd0853a5966bb8;hb=71712d24f429b174d735ae063bcfcf529acc8489;hp=3b3b4394c350c659536f6d5c48aece940060ff15;hpb=02046d6f22e734521c84dfb2f342cf61e6442c2f;p=libfirm diff --git a/ir/be/beifg.c b/ir/be/beifg.c index 3b3b4394c..0914d6083 100644 --- a/ir/be/beifg.c +++ b/ir/be/beifg.c @@ -1,10 +1,28 @@ -/** - * @file beifg.c - * @date 18.11.2005 - * @author Sebastian Hack +/* + * 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. * - * Copyright (C) 2005 Universitaet Karlsruhe - * Released under the GPL + * 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 Interface for interference graphs. + * @author Sebastian Hack + * @date 18.11.2005 + * @version $Id$ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -12,26 +30,11 @@ #include -#ifdef HAVE_MALLOC_H -#include -#endif - -#ifdef __linux__ -#include -#endif /* __linux__ */ - -#ifdef HAVE_ALLOCA_H -#include -#endif - -#ifdef WITH_LIBCORE -#include -#include -#include -#endif /* WITH_LIBCORE */ +#include "lc_opts.h" +#include "lc_opts_enum.h" +#include "timing.h" #include "bitset.h" - #include "irgwalk.h" #include "irnode_t.h" #include "irprintf.h" @@ -39,14 +42,14 @@ #include "irbitset.h" #include "beifg_t.h" #include "beifg_impl.h" -#include "irphase.h" #include "irphase_t.h" -#include "bechordal.h" #include "error.h" +#include "xmalloc.h" #include "becopystat.h" #include "becopyopt.h" #include "beirg_t.h" +#include "bemodule.h" /** Defines values for the ifg performance test */ #define BE_CH_PERFORMANCETEST_MIN_NODES (50) @@ -55,9 +58,9 @@ typedef struct _coloring_t coloring_t; struct _coloring_t { - phase_t ph; + ir_phase ph; const arch_env_t *arch_env; - ir_graph *irg; + ir_graph *irg; }; size_t (be_ifg_nodes_iter_size)(const be_ifg_t *ifg) @@ -75,15 +78,17 @@ size_t (be_ifg_cliques_iter_size)(const be_ifg_t *ifg) return ifg->impl->cliques_iter_size; } -static void *regs_irn_data_init(phase_t *ph, ir_node *irn, void *data) +static void *regs_irn_data_init(ir_phase *ph, const ir_node *irn, void *data) { coloring_t *coloring = (coloring_t *) ph; + (void) data; + return (void *) arch_get_irn_register(coloring->arch_env, irn); } coloring_t *coloring_init(coloring_t *c, ir_graph *irg, const arch_env_t *aenv) { - phase_init(&c->ph, "regs_map", irg, PHASE_DEFAULT_GROWTH, regs_irn_data_init); + phase_init(&c->ph, "regs_map", irg, PHASE_DEFAULT_GROWTH, regs_irn_data_init, NULL); c->arch_env = aenv; c->irg = irg; return c; @@ -256,8 +261,8 @@ static int be_ifg_check_cmp_nodes(const void *a, const void *b) const ir_node *node_a = *(ir_node **)a; const ir_node *node_b = *(ir_node **)b; - long nr_a = get_irn_node_nr(node_a); - long nr_b = get_irn_node_nr(node_b); + long nr_a = get_irn_idx(node_a); + long nr_b = get_irn_idx(node_b); return QSORT_CMP(nr_a, nr_b); } @@ -380,7 +385,6 @@ void be_ifg_check_sorted_to_file(const be_ifg_t *ifg, FILE *f) void be_ifg_check_performance(be_chordal_env_t *chordal_env) { -#ifdef WITH_LIBCORE int tests = BE_CH_PERFORMANCETEST_COUNT; coloring_t coloring; @@ -391,30 +395,30 @@ void be_ifg_check_performance(be_chordal_env_t *chordal_env) copy_opt_t *co; be_ifg_t *old_if = chordal_env->ifg; - lc_timer_t *timer = lc_timer_register("getTime","get Time of copy minimization using the ifg"); + ir_timer_t *timer = ir_timer_register("getTime","get Time of copy minimization using the ifg"); unsigned long elapsed_usec = 0; if (get_irg_estimated_node_cnt(chordal_env->irg) >= BE_CH_PERFORMANCETEST_MIN_NODES) { - coloring_init(&coloring, chordal_env->irg, chordal_env->birg->main_env->arch_env); + coloring_init(&coloring, chordal_env->irg, &chordal_env->birg->main_env->arch_env); coloring_save(&coloring); - lc_timer_reset(timer); + ir_timer_reset(timer); for (i = 0; iifg = be_ifg_std_new(chordal_env); - lc_timer_stop(timer); - rt = lc_timer_leave_high_priority(); + ir_timer_stop(timer); + rt = ir_timer_leave_high_priority(); - used_memory = lc_get_heap_used_bytes() - used_memory; + used_memory = ir_get_heap_used_bytes() - used_memory; coloring_restore(&coloring); @@ -423,13 +427,13 @@ void be_ifg_check_performance(be_chordal_env_t *chordal_env) co_build_ou_structure(co); co_build_graph_structure(co); - rt = lc_timer_enter_high_priority(); - lc_timer_start(timer); + rt = ir_timer_enter_high_priority(); + ir_timer_start(timer); co_solve_heuristic_new(co); - lc_timer_stop(timer); - rt = lc_timer_leave_high_priority(); + ir_timer_stop(timer); + rt = ir_timer_leave_high_priority(); co_free_graph_structure(co); co_free_ou_structure(co); @@ -438,7 +442,7 @@ void be_ifg_check_performance(be_chordal_env_t *chordal_env) } - elapsed_usec = lc_timer_elapsed_usec(timer); + elapsed_usec = ir_timer_elapsed_usec(timer); /* calculating average */ elapsed_usec = elapsed_usec / tests; @@ -449,17 +453,17 @@ void be_ifg_check_performance(be_chordal_env_t *chordal_env) for (i = 0; iifg = be_ifg_clique_new(chordal_env); - lc_timer_stop(timer); - rt = lc_timer_leave_high_priority(); + ir_timer_stop(timer); + rt = ir_timer_leave_high_priority(); - used_memory = lc_get_heap_used_bytes() - used_memory; + used_memory = ir_get_heap_used_bytes() - used_memory; coloring_restore(&coloring); @@ -468,13 +472,13 @@ void be_ifg_check_performance(be_chordal_env_t *chordal_env) co_build_ou_structure(co); co_build_graph_structure(co); - rt = lc_timer_enter_high_priority(); - lc_timer_start(timer); + rt = ir_timer_enter_high_priority(); + ir_timer_start(timer); co_solve_heuristic_new(co); - lc_timer_stop(timer); - rt = lc_timer_leave_high_priority(); + ir_timer_stop(timer); + rt = ir_timer_leave_high_priority(); co_free_graph_structure(co); co_free_ou_structure(co); @@ -483,7 +487,7 @@ void be_ifg_check_performance(be_chordal_env_t *chordal_env) } - elapsed_usec = lc_timer_elapsed_usec(timer); + elapsed_usec = ir_timer_elapsed_usec(timer); /* calculating average */ elapsed_usec = elapsed_usec / tests; @@ -494,17 +498,17 @@ void be_ifg_check_performance(be_chordal_env_t *chordal_env) for (i = 0; iifg = be_ifg_list_new(chordal_env); - lc_timer_stop(timer); - rt = lc_timer_leave_high_priority(); + ir_timer_stop(timer); + rt = ir_timer_leave_high_priority(); - used_memory = lc_get_heap_used_bytes() - used_memory; + used_memory = ir_get_heap_used_bytes() - used_memory; coloring_restore(&coloring); @@ -513,13 +517,13 @@ void be_ifg_check_performance(be_chordal_env_t *chordal_env) co_build_ou_structure(co); co_build_graph_structure(co); - rt = lc_timer_enter_high_priority(); - lc_timer_start(timer); + rt = ir_timer_enter_high_priority(); + ir_timer_start(timer); co_solve_heuristic_new(co); - lc_timer_stop(timer); - rt = lc_timer_leave_high_priority(); + ir_timer_stop(timer); + rt = ir_timer_leave_high_priority(); co_free_graph_structure(co); co_free_ou_structure(co); @@ -528,7 +532,7 @@ void be_ifg_check_performance(be_chordal_env_t *chordal_env) } - elapsed_usec = lc_timer_elapsed_usec(timer); + elapsed_usec = ir_timer_elapsed_usec(timer); /* calculating average */ elapsed_usec = elapsed_usec / tests; @@ -539,17 +543,17 @@ void be_ifg_check_performance(be_chordal_env_t *chordal_env) for (i = 0; iifg = be_ifg_pointer_new(chordal_env); - lc_timer_stop(timer); - rt = lc_timer_leave_high_priority(); + ir_timer_stop(timer); + rt = ir_timer_leave_high_priority(); - used_memory = lc_get_heap_used_bytes() - used_memory; + used_memory = ir_get_heap_used_bytes() - used_memory; coloring_restore(&coloring); @@ -558,13 +562,13 @@ void be_ifg_check_performance(be_chordal_env_t *chordal_env) co_build_ou_structure(co); co_build_graph_structure(co); - rt = lc_timer_enter_high_priority(); - lc_timer_start(timer); + rt = ir_timer_enter_high_priority(); + ir_timer_start(timer); co_solve_heuristic_new(co); - lc_timer_stop(timer); - rt = lc_timer_leave_high_priority(); + ir_timer_stop(timer); + rt = ir_timer_leave_high_priority(); co_free_graph_structure(co); co_free_ou_structure(co); @@ -573,7 +577,7 @@ void be_ifg_check_performance(be_chordal_env_t *chordal_env) } - elapsed_usec = lc_timer_elapsed_usec(timer); + elapsed_usec = ir_timer_elapsed_usec(timer); /* calculating average */ elapsed_usec = elapsed_usec / tests; @@ -585,7 +589,6 @@ void be_ifg_check_performance(be_chordal_env_t *chordal_env) } chordal_env->ifg = old_if; -#endif /* WITH_LIBCORE */ } void be_ifg_dump_dot(be_ifg_t *ifg, ir_graph *irg, FILE *file, const be_ifg_dump_dot_cb_t *cb, void *self) @@ -643,7 +646,7 @@ static void int_comp_rec(be_irg_t *birg, be_ifg_t *ifg, ir_node *n, bitset_t *se ir_node *m; be_ifg_foreach_neighbour(ifg, neigh_it, n, m) { - if(!bitset_contains_irn(seen, m) && !arch_irn_is(birg->main_env->arch_env, m, ignore)) { + if(!bitset_contains_irn(seen, m) && !arch_irn_is(&birg->main_env->arch_env, m, ignore)) { bitset_add_irn(seen, m); int_comp_rec(birg, ifg, m, seen); } @@ -660,7 +663,7 @@ static int int_component_stat(be_irg_t *birg, be_ifg_t *ifg) ir_node *n; be_ifg_foreach_node(ifg, nodes_it, n) { - if (! bitset_contains_irn(seen, n) && ! arch_irn_is(birg->main_env->arch_env, n, ignore)) { + if (! bitset_contains_irn(seen, n) && ! arch_irn_is(&birg->main_env->arch_env, n, ignore)) { ++n_comp; bitset_add_irn(seen, n); int_comp_rec(birg, ifg, n, seen); @@ -719,7 +722,7 @@ static lc_opt_enum_int_var_t ifg_flavor_var = { static const lc_opt_table_entry_t be_ifg_options[] = { LC_OPT_ENT_ENUM_PTR ("ifg", "interference graph flavour", &ifg_flavor_var), - { NULL } + LC_OPT_LAST }; void be_init_ifg(void)