X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbechordal_main.c;h=1eb578f4ed6d8f955f7e2df7073fda45006686c7;hb=b152c943b88744d5e212f86d315a36c7b43ae574;hp=ba6d9ff9e917de8d474f54fe5b05b38d8263c640;hpb=4eccff9cdc2a5e114606e8b83745f1339c83c932;p=libfirm diff --git a/ir/be/bechordal_main.c b/ir/be/bechordal_main.c index ba6d9ff9e..1eb578f4e 100644 --- a/ir/be/bechordal_main.c +++ b/ir/be/bechordal_main.c @@ -70,7 +70,6 @@ #include "be_t.h" #include "bera.h" #include "beirg.h" -#include "bedump_minir.h" #include "bestack.h" #include "bespillslots.h" @@ -145,13 +144,10 @@ static lc_opt_enum_int_var_t be_ch_vrfy_var = { &options.vrfy_option, be_ch_vrfy_items }; -static char minir_file[256] = ""; - static const lc_opt_table_entry_t be_chordal_options[] = { LC_OPT_ENT_ENUM_PTR ("perm", "perm lowering options", &lower_perm_var), LC_OPT_ENT_ENUM_MASK("dump", "select dump phases", &dump_var), LC_OPT_ENT_ENUM_PTR ("verify", "verify options", &be_ch_vrfy_var), - LC_OPT_ENT_STR ("minirout", "dump MinIR to file", minir_file, sizeof(minir_file)), LC_OPT_LAST }; @@ -168,10 +164,7 @@ void be_register_chordal_coloring(const char *name, be_ra_chordal_coloring_t *co static void be_ra_chordal_coloring(be_chordal_env_t *env) { - assert(selected_coloring != NULL); - if (selected_coloring != NULL) { - selected_coloring->allocate(env); - } + selected_coloring->allocate(env); } static void dump(unsigned mask, ir_graph *irg, @@ -224,9 +217,10 @@ static void memory_operand_walker(ir_node *irn, void *env) /* kill the Reload */ if (get_irn_n_edges(irn) == 0) { ir_graph *irg = get_irn_irg(irn); + ir_mode *frame_mode = get_irn_mode(get_irn_n(irn, n_be_Reload_frame)); sched_remove(irn); - set_irn_n(irn, be_pos_Reload_mem, new_r_Bad(irg)); - set_irn_n(irn, be_pos_Reload_frame, new_r_Bad(irg)); + set_irn_n(irn, n_be_Reload_mem, new_r_Bad(irg, mode_X)); + set_irn_n(irn, n_be_Reload_frame, new_r_Bad(irg, frame_mode)); } } @@ -250,10 +244,10 @@ static void pre_spill(post_spill_env_t *pse, const arch_register_class_t *cls) ir_graph *irg = pse->irg; ir_exec_freq *exec_freq = be_get_irg_exec_freq(irg); - pse->cls = cls; - chordal_env->cls = cls; - chordal_env->border_heads = pmap_create(); - chordal_env->ignore_colors = bitset_malloc(chordal_env->cls->n_regs); + pse->cls = cls; + chordal_env->cls = cls; + chordal_env->border_heads = pmap_create(); + chordal_env->allocatable_regs = bitset_malloc(chordal_env->cls->n_regs); be_assure_liveness(irg); be_liveness_assure_chk(be_get_irg_liveness(irg)); @@ -261,7 +255,7 @@ static void pre_spill(post_spill_env_t *pse, const arch_register_class_t *cls) stat_ev_do(pse->pre_spill_cost = be_estimate_irg_costs(irg, exec_freq)); /* put all ignore registers into the ignore register set. */ - be_put_ignore_regs(irg, pse->cls, chordal_env->ignore_colors); + be_put_allocatable_regs(irg, pse->cls, chordal_env->allocatable_regs); be_timer_push(T_RA_CONSTR); be_pre_spill_prepare_constr(irg, chordal_env->cls); @@ -278,9 +272,7 @@ static void post_spill(post_spill_env_t *pse, int iteration) be_chordal_env_t *chordal_env = &pse->cenv; ir_graph *irg = pse->irg; ir_exec_freq *exec_freq = be_get_irg_exec_freq(irg); - int colors_n = arch_register_class_n_regs(chordal_env->cls); - int allocatable_regs - = colors_n - be_put_ignore_regs(irg, chordal_env->cls, NULL); + int allocatable_regs = be_get_n_allocatable_regs(irg, chordal_env->cls); /* some special classes contain only ignore regs, no work to be done */ if (allocatable_regs > 0) { @@ -342,22 +334,6 @@ static void post_spill(post_spill_env_t *pse, int iteration) } be_timer_push(T_RA_COPYMIN); - if (minir_file[0] != '\0') { - FILE *out; - - if (strcmp(minir_file, "-") == 0) { - out = stdout; - } else { - out = fopen(minir_file, "w"); - if (out == NULL) { - panic("Cound't open minir output '%s'", minir_file); - } - } - - be_export_minir(out, irg); - if (out != stdout) - fclose(out); - } co_driver(chordal_env); be_timer_pop(T_RA_COPYMIN); @@ -382,7 +358,7 @@ static void post_spill(post_spill_env_t *pse, int iteration) /* free some always allocated data structures */ pmap_destroy(chordal_env->border_heads); - bitset_free(chordal_env->ignore_colors); + bitset_free(chordal_env->allocatable_regs); } /** @@ -406,12 +382,12 @@ static void be_ra_chordal_main(ir_graph *irg) be_assure_liveness(irg); - chordal_env.obst = &obst; - chordal_env.opts = &options; - chordal_env.irg = irg; - chordal_env.border_heads = NULL; - chordal_env.ifg = NULL; - chordal_env.ignore_colors = NULL; + chordal_env.obst = &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); @@ -438,7 +414,7 @@ static void be_ra_chordal_main(ir_graph *irg) be_do_stat_reg_pressure(irg, cls); } - memcpy(&pse.cenv, &chordal_env, sizeof(chordal_env)); + pse.cenv = chordal_env; pse.irg = irg; pre_spill(&pse, cls); @@ -483,7 +459,7 @@ static void be_ra_chordal_main(ir_graph *irg) be_timer_pop(T_RA_OTHER); } -BE_REGISTER_MODULE_CONSTRUCTOR(be_init_chordal_main); +BE_REGISTER_MODULE_CONSTRUCTOR(be_init_chordal_main) void be_init_chordal_main(void) { static be_ra_t be_ra_chordal_allocator = {