From 05b50d8385255ff76b51f48809d806a8fa0a5d17 Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Fri, 31 Oct 2008 13:24:14 +0000 Subject: [PATCH] - BugFix: use remove_irp_irg() instead of free_ir_graph() to prevent double graph freeing - Put the constant result of stat_is_active() into variable [r23320] --- ir/be/bemain.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/ir/be/bemain.c b/ir/be/bemain.c index 371b4f9a6..c470ae317 100644 --- a/ir/be/bemain.c +++ b/ir/be/bemain.c @@ -514,14 +514,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); @@ -598,6 +598,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]; @@ -862,6 +866,12 @@ static void be_main_loop(FILE *file_handle, const char *cup_name) #undef LC_EMIT 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(); -- 2.20.1