X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=ir%2Fcommon%2Ffirm.c;h=97edf99ab7a8e5ac134a27b9a3d5fd22cf39e0fc;hb=354ec538057abddc8b757c5b0ba8e3c15115438b;hp=ff38ac3c49668b832817c845b43498229190fefe;hpb=bbc6291b6a4ed4fe5bd8d1c2ddd57f4e6a0c8a74;p=libfirm diff --git a/ir/common/firm.c b/ir/common/firm.c index ff38ac3c4..97edf99ab 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) { @@ -109,7 +114,7 @@ void init_firm(const firm_parameter_t *param) /* create the type kinds. */ init_tpop(); /* create an obstack and put all tarvals in a pdeq */ - init_tarval_1(0l); + init_tarval_1(0l, /* support_quad_precision */0); /* Builds a basic program representation, so modes can be added. */ init_irprog_1(); /* initialize all modes an ir node can consist of */ @@ -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. */