X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbesched.c;h=1270c29682231d1dc2b52861f5186f8c2a412ff9;hb=a25c9abc4bc057c1c09f40afb150920aadbb7a42;hp=7a0c078fec9a623c330cc62d147a649b66679dba;hpb=7a2c7fed8fdbe29fa0b6e1901865a901f71a6c5f;p=libfirm diff --git a/ir/be/besched.c b/ir/be/besched.c index 7a0c078fe..1270c2968 100644 --- a/ir/be/besched.c +++ b/ir/be/besched.c @@ -21,7 +21,6 @@ * @file * @brief Scheduling utilities for nodes in Blocks and Blocks. * @author Sebastian Hack - * @version $Id$ */ #include "config.h" @@ -44,6 +43,10 @@ #include "belistsched.h" #include "belive.h" +#include "lc_opts.h" +#include "lc_opts_enum.h" +#include "irtools.h" + #define SCHED_INITIAL_GRANULARITY (1 << 14) static void sched_renumber(const ir_node *block) @@ -145,7 +148,27 @@ void sched_remove(ir_node *irn) info->prev = NULL; } -BE_REGISTER_MODULE_CONSTRUCTOR(be_init_sched); + + +static be_module_list_entry_t *schedulers; +static schedule_func scheduler; + +void be_register_scheduler(const char *name, schedule_func func) +{ + if (scheduler == NULL) + scheduler = func; + be_add_module_to_list(&schedulers, name, func); +} + +void be_schedule_graph(ir_graph *irg) +{ + scheduler(irg); +} + +BE_REGISTER_MODULE_CONSTRUCTOR(be_init_sched) void be_init_sched(void) { + lc_opt_entry_t *be_grp = lc_opt_get_grp(firm_opt_get_root(), "be"); + be_add_module_list_opt(be_grp, "scheduler", "scheduling algorithm", + &schedulers, (void**)&scheduler); }