X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbemain.c;h=d6e5579a061707fa87bebec9577ecc31fba79fc8;hb=5474a1c188c9d59eea2c915515980cd9cbab58d8;hp=fa5fab8c1244091ae0646c036a4bcffc3be7363b;hpb=5609f2c7223b8482d8c2d9d79163608e6eec7cc0;p=libfirm diff --git a/ir/be/bemain.c b/ir/be/bemain.c index fa5fab8c1..d6e5579a0 100644 --- a/ir/be/bemain.c +++ b/ir/be/bemain.c @@ -49,6 +49,7 @@ #include "execfreq.h" #include "irprofile.h" #include "irpass_t.h" +#include "ircons.h" #include "bearch.h" #include "be_t.h" @@ -150,6 +151,15 @@ static void initialize_isa(void) if (isa_initialized) return; isa_if->init(); + isa_initialized = true; +} + +static void finish_isa(void) +{ + if (isa_initialized) { + isa_if->finish(); + isa_initialized = false; + } } void be_init_default_asm_constraint_flags(void) @@ -340,6 +350,7 @@ void firm_be_init(void) /* Finalize the Firm backend. */ void firm_be_finish(void) { + finish_isa(); be_quit_modules(); } @@ -368,8 +379,6 @@ static be_main_env_t *be_init_env(be_main_env_t *env, FILE *file_handle, env->pic_symbols_type = new_type_struct(NEW_ID("$PIC_SYMBOLS_TYPE")); env->cup_name = compilation_unit_name; - remove_irp_type(env->pic_trampolines_type); - remove_irp_type(env->pic_symbols_type); set_class_final(env->pic_trampolines_type, 1); memset(asm_constraint_flags, 0, sizeof(asm_constraint_flags)); @@ -420,6 +429,7 @@ static void initialize_birg(be_irg_t *birg, ir_graph *irg, be_main_env_t *env) birg->irg = irg; birg->main_env = env; obstack_init(&birg->obst); + birg->lv = be_liveness_new(irg); edges_deactivate_kind(irg, EDGE_KIND_DEP); edges_activate_kind(irg, EDGE_KIND_DEP); @@ -559,7 +569,7 @@ static void be_main_loop(FILE *file_handle, const char *cup_name) prof_filename); } } - if (be_options.opt_profile_generate) { + if (num_birgs > 0 && be_options.opt_profile_generate) { ir_graph *prof_init_irg = ir_profile_instrument(prof_filename); initialize_birg(&birgs[num_birgs], prof_init_irg, &env); @@ -721,8 +731,8 @@ static void be_main_loop(FILE *file_handle, const char *cup_name) dump(DUMP_RA, irg, "ra"); be_timer_push(T_FINISH); - if (arch_env->impl->finish != NULL) - arch_env->impl->finish(irg); + if (arch_env->impl->finish_graph != NULL) + arch_env->impl->finish_graph(irg); be_timer_pop(T_FINISH); dump(DUMP_FINAL, irg, "finish");