Fixed indentation.
[libfirm] / ir / be / bemain.c
index fa5fab8..918e887 100644 (file)
@@ -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));
@@ -559,7 +568,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 +730,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");