X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fcommon%2Ffirm.c;h=7ebdf3ee007493c3a406724bbcc87a132d16e65e;hb=d44b3844af84684de9b0213b77c175f80f8b84ee;hp=ff38ac3c49668b832817c845b43498229190fefe;hpb=bbc6291b6a4ed4fe5bd8d1c2ddd57f4e6a0c8a74;p=libfirm diff --git a/ir/common/firm.c b/ir/common/firm.c index ff38ac3c4..7ebdf3ee0 100644 --- a/ir/common/firm.c +++ b/ir/common/firm.c @@ -63,12 +63,14 @@ #include "funccall_t.h" #include "irhooks.h" #include "iredges_t.h" +#include "tropt.h" #include "debugger.h" +#include "be_t.h" /* returns the firm root */ lc_opt_entry_t *firm_opt_get_root(void) { static lc_opt_entry_t *grp = NULL; - if(!grp) + if (!grp) grp = lc_opt_get_grp(lc_opt_root_grp(), "firm"); return grp; } @@ -83,6 +85,9 @@ void init_firm(const firm_parameter_t *param) firm_parameter_t def_params; unsigned int size; + /* for historical reasons be_init must be run first */ + firm_be_init(); + memset(&def_params, 0, sizeof(def_params)); if (param) { @@ -141,6 +146,8 @@ void init_firm(const firm_parameter_t *param) firm_init_entity(); /* allocate a hash table. */ init_type_identify(def_params.ti_if); + /* class cast optimization */ + firm_init_class_casts_opt(); /* Init architecture dependent optimizations. */ arch_dep_init(arch_dep_default_factory); @@ -167,13 +174,14 @@ void free_firm(void) { for (i = get_irp_n_types() - 1; i >= 0; --i) free_type(get_irp_type(i)); - finish_op(); free_ir_prog(); finish_tarval(); finish_mode(); finish_tpop(); finish_ident(); + + firm_be_finish(); } /* Returns the libFirm version number. */