X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbelistsched.c;h=2d2ab76a854bb97cce5dc86e1a687f96bc927748;hb=a801e68c8aa279117fe7845fb2d4220750131553;hp=612cdddb8a381743fcc6c7cf12927c0e8b355d1b;hpb=4080eec4a207a1f6d231230677ecaacc16b87207;p=libfirm diff --git a/ir/be/belistsched.c b/ir/be/belistsched.c index 612cdddb8..2d2ab76a8 100644 --- a/ir/be/belistsched.c +++ b/ir/be/belistsched.c @@ -29,7 +29,7 @@ #include "beutil.h" #include "belive_t.h" #include "belistsched.h" -#include "bearch_firm.h" +#include "firm/bearch_firm.h" /** @@ -73,6 +73,8 @@ static ir_node *trivial_select(void *env, void *block_env, const struct list_head *sched_head, int curr_time, pset *ready_set) { + ir_node *res; + #if 0 int i, n = pset_count(ready_set); ir_node *irn; @@ -82,18 +84,8 @@ static ir_node *trivial_select(void *env, void *block_env, ready[i++] = irn; #endif - ir_node *irn, *res = NULL; - for(irn = pset_first(ready_set); irn; irn = pset_next(ready_set)) - if(!is_Imm(irn)) { - res = irn; - pset_break(ready_set); - break; - } - - if (!res) { - res = pset_first(ready_set); - pset_break(ready_set); - } + res = pset_first(ready_set); + pset_break(ready_set); return res; } @@ -109,23 +101,24 @@ const list_sched_selector_t *trivial_selector = &trivial_selector_struct; static void list_sched_block(ir_node *block, void *env_ptr); -void list_sched(ir_graph *irg, const list_sched_selector_t *selector) +void list_sched(const struct _arch_isa_t *isa, ir_graph *irg) { - sched_env_t env; + sched_env_t env; + const list_sched_selector_t *selector; - memset(&env, 0, sizeof(env)); - env.selector = selector; - env.selector_env = selector->init_graph ? selector->init_graph(irg) : NULL; - env.irg = irg; + memset(&env, 0, sizeof(env)); + selector = env.selector = isa->impl->get_list_sched_selector(isa); + env.selector_env = selector->init_graph ? selector->init_graph(isa, irg) : NULL; + env.irg = irg; - /* Assure, that the out edges are computed */ - edges_assure(irg); + /* Assure, that the out edges are computed */ + edges_assure(irg); - /* Schedule each single block. */ - irg_block_walk_graph(irg, list_sched_block, NULL, &env); + /* Schedule each single block. */ + irg_block_walk_graph(irg, list_sched_block, NULL, &env); - if(selector->finish_graph) - selector->finish_graph(env.selector_env, irg); + if(selector->finish_graph) + selector->finish_graph(env.selector_env, irg); } @@ -133,16 +126,13 @@ void list_sched(ir_graph *irg, const list_sched_selector_t *selector) * Environment for a block scheduler. */ typedef struct _block_sched_env_t { - int curr_time; - pset *ready_set; - pset *already_scheduled; - ir_node *block; - firm_dbg_module_t *dbg; + int curr_time; + pset *ready_set; + pset *already_scheduled; + ir_node *block; + firm_dbg_module_t *dbg; } block_sched_env_t; - - - /** * Try to put a node in the ready set. * @param env The block scheduler environment. @@ -206,7 +196,6 @@ static INLINE int make_ready(block_sched_env_t *env, ir_node *irn) */ static INLINE void make_users_ready(block_sched_env_t *env, ir_node *irn) { - int i, n; const ir_edge_t *edge; foreach_out_edge(irn, edge) { @@ -241,7 +230,6 @@ static ir_node *add_to_sched(block_sched_env_t *env, ir_node *irn) sched_info_t *info = get_irn_sched_info(irn); INIT_LIST_HEAD(&info->list); info->scheduled = 1; - assert(get_irn_opcode(irn) != iro_Unknown && "'Unknown' in schedule!"); sched_add_before(env->block, irn); DBG((env->dbg, LEVEL_2, "\tadding %+F\n", irn)); @@ -278,7 +266,6 @@ static ir_node *add_to_sched(block_sched_env_t *env, ir_node *irn) */ static void add_tuple_projs(block_sched_env_t *env, ir_node *irn) { - int i, n; const ir_edge_t *edge; assert(get_irn_mode(irn) == mode_T && "Mode of node must be tuple"); @@ -306,7 +293,7 @@ static void add_tuple_projs(block_sched_env_t *env, ir_node *irn) * Also the outs must have been computed. * * @param block The block node. - * @param env Schedulting environment. + * @param env Scheduling environment. */ static void list_sched_block(ir_node *block, void *env_ptr) { @@ -316,7 +303,7 @@ static void list_sched_block(ir_node *block, void *env_ptr) const list_sched_selector_t *selector = env->selector; const ir_edge_t *edge; ir_node *irn; - int i, n, j, m; + int j, m; int phi_seen = 0; sched_info_t *info = get_irn_sched_info(block);