X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbemain.c;h=f04f0a186f8adfc4add75362d898ec1b366d506f;hb=f4bdc23a4d5b9505069ff776006bf2da1cf0a8c0;hp=30ce5c1db35a0397d6e9becb58ec5e2122f9c945;hpb=7ac90687a76ac7f73c98dca2881b641f2f77ed55;p=libfirm diff --git a/ir/be/bemain.c b/ir/be/bemain.c index 30ce5c1db..f04f0a186 100644 --- a/ir/be/bemain.c +++ b/ir/be/bemain.c @@ -31,6 +31,9 @@ #include "bearch.h" #include "firm/bearch_firm.h" #include "ia32/bearch_ia32.h" +#include "arm/bearch_arm.h" +#include "ppc32/bearch_ppc32.h" +#include "mips/bearch_mips.h" #include "be_t.h" #include "benumb_t.h" @@ -53,12 +56,12 @@ #include "beabi.h" #include "belower.h" -#define DUMP_INITIAL (1 << 0) -#define DUMP_ABI (1 << 1) -#define DUMP_SCHED (1 << 2) -#define DUMP_PREPARED (1 << 3) -#define DUMP_RA (1 << 4) -#define DUMP_FINAL (1 << 5) +#define DUMP_INITIAL (1 << 0) +#define DUMP_ABI (1 << 1) +#define DUMP_SCHED (1 << 2) +#define DUMP_PREPARED (1 << 3) +#define DUMP_RA (1 << 4) +#define DUMP_FINAL (1 << 5) /* options visible for anyone */ static be_options_t be_options = { @@ -105,6 +108,9 @@ static const lc_opt_enum_const_ptr_items_t ra_items[] = { static const lc_opt_enum_const_ptr_items_t isa_items[] = { { "firm", &firm_isa }, { "ia32", &ia32_isa_if }, + { "arm", &arm_isa_if }, + { "ppc", &ppc32_isa_if }, + { "mips", &mips_isa_if }, { NULL, NULL } }; @@ -176,9 +182,9 @@ static be_main_env_t *be_init_env(be_main_env_t *env) { memset(env, 0, sizeof(*env)); obstack_init(&env->obst); - env->dbg = firm_dbg_register("be.main"); env->arch_env = obstack_alloc(&env->obst, sizeof(env->arch_env[0])); env->options = &be_options; + FIRM_DBG_REGISTER(env->dbg, "be.main"); arch_env_init(env->arch_env, isa_if); @@ -297,7 +303,7 @@ static void be_main_loop(FILE *file_handle) * Note that this requires disabling the edges here. */ edges_deactivate(irg); - dead_node_elimination(irg); + //dead_node_elimination(irg); edges_activate(irg); /* Compute loop nesting information (for weighting copies) */ @@ -336,11 +342,28 @@ static void be_main_loop(FILE *file_handle) be_done_env(&env); } +/* Main interface to the frontend. */ void be_main(FILE *file_handle) { /* never build code for pseudo irgs */ - set_visit_pseudo_irgs(0); + set_visit_pseudo_irgs(0); be_node_init(); be_main_loop(file_handle); } + +/** The debug info retriever function. */ +static retrieve_dbg_func retrieve_dbg = NULL; + +/* Sets a debug info retriever. */ +void be_set_debug_retrieve(retrieve_dbg_func func) { + retrieve_dbg = func; +} + +/* Retrieve the debug info. */ +const char *be_retrieve_dbg_info(const dbg_info *dbg, unsigned *line) { + if (retrieve_dbg) + return retrieve_dbg(dbg, line); + *line = 0; + return NULL; +}