X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbechordal_main.c;h=67f9eaede3621673c2ba34b86f1921fa1b1f5560;hb=fef8dc3eff6468d7d65485af8e1ac9884c504e1a;hp=d81321e4a73cf1f42811248495c2954ae7234105;hpb=921aa67bde2a1cbd73962480d6d8e2d19cce7f92;p=libfirm diff --git a/ir/be/bechordal_main.c b/ir/be/bechordal_main.c index d81321e4a..67f9eaede 100644 --- a/ir/be/bechordal_main.c +++ b/ir/be/bechordal_main.c @@ -39,7 +39,7 @@ #include "ircons_t.h" #include "irmode_t.h" #include "irgraph_t.h" -#include "irprintf_t.h" +#include "irprintf.h" #include "irgwalk.h" #include "ircons.h" #include "irdump.h" @@ -88,10 +88,6 @@ static be_ra_chordal_opts_t options = { BE_CH_VRFY_WARN }; -typedef struct post_spill_env_t { - be_chordal_env_t cenv; -} post_spill_env_t; - static const lc_opt_enum_int_items_t lower_perm_items[] = { { "copy", BE_CH_LOWER_PERM_COPY }, { "swap", BE_CH_LOWER_PERM_SWAP }, @@ -229,10 +225,8 @@ static be_node_stats_t last_node_stats; /** * Perform things which need to be done per register class before spilling. */ -static void pre_spill(post_spill_env_t *pse, const arch_register_class_t *cls, ir_graph *const irg) +static void pre_spill(be_chordal_env_t *const chordal_env, arch_register_class_t const *const cls, ir_graph *const irg) { - be_chordal_env_t *chordal_env = &pse->cenv; - chordal_env->cls = cls; chordal_env->border_heads = pmap_create(); chordal_env->allocatable_regs = bitset_malloc(chordal_env->cls->n_regs); @@ -252,12 +246,10 @@ static void pre_spill(post_spill_env_t *pse, const arch_register_class_t *cls, i /** * Perform things which need to be done per register class after spilling. */ -static void post_spill(post_spill_env_t *const pse, ir_graph *const irg) +static void post_spill(be_chordal_env_t *const chordal_env, ir_graph *const irg) { - be_chordal_env_t *chordal_env = &pse->cenv; - int allocatable_regs = be_get_n_allocatable_regs(irg, chordal_env->cls); - /* some special classes contain only ignore regs, no work to be done */ + int const allocatable_regs = be_get_n_allocatable_regs(irg, chordal_env->cls); if (allocatable_regs > 0) { /* If we have a backend provided spiller, post spill is @@ -352,24 +344,17 @@ static void be_ra_chordal_main(ir_graph *irg) const arch_env_t *arch_env = be_get_irg_arch_env(irg); int j; int m; - be_chordal_env_t chordal_env; - struct obstack obst; be_timer_push(T_RA_OTHER); - be_timer_push(T_RA_PROLOG); - - chordal_env.obst = &obst; + be_chordal_env_t chordal_env; + obstack_init(&chordal_env.obst); chordal_env.opts = &options; chordal_env.irg = irg; chordal_env.border_heads = NULL; chordal_env.ifg = NULL; chordal_env.allocatable_regs = NULL; - obstack_init(&obst); - - be_timer_pop(T_RA_PROLOG); - if (stat_ev_enabled) { be_collect_node_stats(&last_node_stats, irg); } @@ -378,7 +363,6 @@ static void be_ra_chordal_main(ir_graph *irg) /* Perform the following for each register class. */ for (j = 0, m = arch_env->n_register_classes; j < m; ++j) { - post_spill_env_t pse; const arch_register_class_t *cls = &arch_env->register_classes[j]; if (arch_register_class_flags(cls) & arch_register_class_flag_manual_ra) @@ -393,8 +377,7 @@ static void be_ra_chordal_main(ir_graph *irg) pre_spill_cost = be_estimate_irg_costs(irg); } - pse.cenv = chordal_env; - pre_spill(&pse, cls, irg); + pre_spill(&chordal_env, cls, irg); be_timer_push(T_RA_SPILL); be_do_spill(irg, cls); @@ -404,7 +387,7 @@ static void be_ra_chordal_main(ir_graph *irg) stat_ev_dbl("bechordal_spillcosts", be_estimate_irg_costs(irg) - pre_spill_cost); - post_spill(&pse, irg); + post_spill(&chordal_env, irg); if (stat_ev_enabled) { be_node_stats_t node_stats; @@ -431,7 +414,7 @@ static void be_ra_chordal_main(ir_graph *irg) lower_nodes_after_ra(irg, options.lower_perm_opt == BE_CH_LOWER_PERM_COPY); dump(BE_CH_DUMP_LOWER, irg, NULL, "belower-after-ra"); - obstack_free(&obst, NULL); + obstack_free(&chordal_env.obst, NULL); be_invalidate_live_sets(irg); be_timer_pop(T_RA_EPILOG);