X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbechordal_main.c;h=a7159f971bc55d66858d315a1670db7417c8b42e;hb=4ed245f5007168dab7850942a7ee6b6b29a19817;hp=a2d03927c90764ce2b73beec1f1dee7beb755424;hpb=ff9b23893ba556b55fb18b0203a804179a4ea5d4;p=libfirm diff --git a/ir/be/bechordal_main.c b/ir/be/bechordal_main.c index a2d03927c..a7159f971 100644 --- a/ir/be/bechordal_main.c +++ b/ir/be/bechordal_main.c @@ -140,6 +140,7 @@ static be_ra_timer_t ra_timer = { NULL, NULL, NULL, + NULL, }; #ifdef WITH_LIBCORE @@ -231,6 +232,9 @@ static const lc_opt_table_entry_t be_chordal_options[] = { { NULL } }; +extern void be_spill_remat_register_options(lc_opt_entry_t *ent); + + static void be_ra_chordal_register_options(lc_opt_entry_t *grp) { static int run_once = 0; @@ -245,6 +249,9 @@ static void be_ra_chordal_register_options(lc_opt_entry_t *grp) co_register_options(chordal_grp); be_java_coal_register_options(chordal_grp); +#ifdef WITH_ILP + be_spill_remat_register_options(chordal_grp); +#endif } #endif /* WITH_LIBCORE */ @@ -378,6 +385,7 @@ static be_ra_timer_t *be_ra_chordal_main(const be_irg_t *bi) ra_timer.t_epilog = lc_timer_register("ra_epilog", "regalloc epilog"); ra_timer.t_live = lc_timer_register("ra_liveness", "be liveness"); ra_timer.t_spill = lc_timer_register("ra_spill", "spiller"); + ra_timer.t_spillslots = lc_timer_register("ra_spillslots", "spillslots"); ra_timer.t_color = lc_timer_register("ra_color", "graph coloring"); ra_timer.t_ifg = lc_timer_register("ra_ifg", "interference graph"); ra_timer.t_copymin = lc_timer_register("ra_copymin", "copy minimization"); @@ -389,6 +397,7 @@ static be_ra_timer_t *be_ra_chordal_main(const be_irg_t *bi) LC_STOP_AND_RESET_TIMER(ra_timer.t_epilog); LC_STOP_AND_RESET_TIMER(ra_timer.t_live); LC_STOP_AND_RESET_TIMER(ra_timer.t_spill); + LC_STOP_AND_RESET_TIMER(ra_timer.t_spillslots); LC_STOP_AND_RESET_TIMER(ra_timer.t_color); LC_STOP_AND_RESET_TIMER(ra_timer.t_ifg); LC_STOP_AND_RESET_TIMER(ra_timer.t_copymin); @@ -480,7 +489,9 @@ static be_ra_timer_t *be_ra_chordal_main(const be_irg_t *bi) ); dump(BE_CH_DUMP_SPILL, irg, chordal_env.cls, "-spill", dump_ir_block_graph_sched); + check_for_memory_operands(&chordal_env); + be_abi_fix_stack_nodes(bi->abi, chordal_env.lv); BE_TIMER_PUSH(ra_timer.t_verify); @@ -575,9 +586,24 @@ static be_ra_timer_t *be_ra_chordal_main(const be_irg_t *bi) bitset_free(chordal_env.ignore_colors); } + BE_TIMER_PUSH(ra_timer.t_spillslots); + be_coalesce_spillslots(&chordal_env); dump(BE_CH_DUMP_SPILLSLOTS, irg, NULL, "-spillslots", dump_ir_block_graph_sched); + BE_TIMER_POP(ra_timer.t_spillslots); + + BE_TIMER_PUSH(ra_timer.t_verify); + + /* verify spillslots */ + if (options.vrfy_option == BE_CH_VRFY_WARN) { + be_verify_spillslots(main_env->arch_env, irg); + } + else if (options.vrfy_option == BE_CH_VRFY_ASSERT) { + assert(be_verify_spillslots(main_env->arch_env, irg) && "Spillslot verification failed"); + } + BE_TIMER_POP(ra_timer.t_verify); + BE_TIMER_PUSH(ra_timer.t_epilog); dump(BE_CH_DUMP_LOWER, irg, NULL, "-spilloff", dump_ir_block_graph_sched);