X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbemain.c;h=4d85dccb7f72aa858493106d3e77a2460f162b51;hb=2c6cb525849141ca24634f4bf3eab578fe6361d2;hp=a44121ffed745750cefc2fa33bee6998eacbfff4;hpb=429d687f06baeeb63d04750f846d39e55fb62343;p=libfirm diff --git a/ir/be/bemain.c b/ir/be/bemain.c index a44121ffe..4d85dccb7 100644 --- a/ir/be/bemain.c +++ b/ir/be/bemain.c @@ -344,13 +344,14 @@ int be_parse_arg(const char *arg) { static const backend_params be_params = { 0, /* need dword lowering */ 0, /* don't support inline assembler yet */ - 0, /* no immediate floating point mode. */ - NULL, /* no additional opcodes */ NULL, /* will be set later */ NULL, /* but yet no creator function */ NULL, /* context for create_intrinsic_fkt */ NULL, /* no if conversion settings */ - NULL /* no immediate fp mode */ + NULL, /* no float arithmetic mode */ + 0, /* no trampoline support: size 0 */ + 0, /* no trampoline support: align 0 */ + NULL /* no trampoline support: no trampoline builder */ }; /* Perform schedule verification if requested. */ @@ -473,6 +474,7 @@ static void initialize_birg(be_irg_t *birg, ir_graph *irg, be_main_env_t *env) edges_assure(irg); set_irg_phase_state(irg, phase_backend); + be_info_init_irg(irg); dump(DUMP_INITIAL, irg, "-prepared", dump_ir_block_graph); } @@ -513,14 +515,14 @@ ir_timer_t *t_ra_other; */ static void be_main_loop(FILE *file_handle, const char *cup_name) { - int i; - be_main_env_t env; - char prof_filename[256]; static const char suffix[] = ".prof"; - be_irg_t *birgs; - int num_birgs; - ir_graph **irg_list, **backend_irg_list; - arch_env_t *arch_env; + + int i, num_birgs, stat_active = 0; + be_main_env_t env; + char prof_filename[256]; + be_irg_t *birgs; + ir_graph **irg_list, **backend_irg_list; + arch_env_t *arch_env; be_timing = (be_options.timing == BE_TIME_ON); @@ -567,11 +569,14 @@ static void be_main_loop(FILE *file_handle, const char *cup_name) num_birgs = backend_irg_list ? ARR_LEN(backend_irg_list) : get_irp_n_irgs(); birgs = ALLOCAN(be_irg_t, num_birgs + 1); + be_info_init(); + /* First: initialize all birgs */ for(i = 0; i < num_birgs; ++i) { ir_graph *irg = backend_irg_list ? backend_irg_list[i] : get_irp_irg(i); initialize_birg(&birgs[i], irg, &env); } + arch_env_handle_intrinsics(arch_env); DEL_ARR_F(irg_list); /* @@ -594,6 +599,10 @@ static void be_main_loop(FILE *file_handle, const char *cup_name) ir_profile_read(prof_filename); } +#ifdef FIRM_STATISTICS + stat_active = stat_is_active(); +#endif /* FIRM_STATISTICS */ + /* For all graphs */ for (i = 0; i < num_birgs; ++i) { be_irg_t *birg = &birgs[i]; @@ -604,8 +613,6 @@ static void be_main_loop(FILE *file_handle, const char *cup_name) /* set the current graph (this is important for several firm functions) */ current_ir_graph = irg; - be_sched_init_phase(irg); - /* reset the phi handler. */ be_phi_handler_reset(); @@ -859,13 +866,19 @@ static void be_main_loop(FILE *file_handle, const char *cup_name) ); #undef LC_EMIT - be_sched_free_phase(irg); - be_free_birg(birg); + + /* switched off due to statistics (statistic module needs all irgs) */ +#ifdef FIRM_STATISTICS + if (! stat_active) +#endif /* FIRM_STATISTICS */ + remove_irp_irg(irg); stat_ev_ctx_pop("bemain_irg"); } ir_profile_free(); be_done_env(&env); + + be_info_free(); } /* Main interface to the frontend. */