- implemented __builtin_(ffs|ctz|clz|popcount|parity)
[libfirm] / ir / be / bemain.c
index 371b4f9..4d85dcc 100644 (file)
@@ -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. */
@@ -514,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);
 
@@ -598,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];
@@ -862,6 +867,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();