X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeschedregpress.c;h=c7fe6a930110a712ad1d0c0475750e5ce55571ab;hb=b42d141b27222454d6176f233327c594d71be554;hp=111fa7e40e13d7875716e350dd46bce82298190b;hpb=1a26f4853c07d1ecd68a097409dd602edfe29eff;p=libfirm diff --git a/ir/be/beschedregpress.c b/ir/be/beschedregpress.c index 111fa7e40..c7fe6a930 100644 --- a/ir/be/beschedregpress.c +++ b/ir/be/beschedregpress.c @@ -37,9 +37,9 @@ #include "benode.h" -typedef struct _usage_stats_t { +typedef struct usage_stats_t { ir_node *irn; - struct _usage_stats_t *next; + struct usage_stats_t *next; int max_hops; int uses_in_block; /**< Number of uses inside the current block. */ int already_consumed; /**< Number of insns using this value already @@ -88,7 +88,7 @@ static int cmp_usage(const void *a, const void *b) static inline usage_stats_t *get_or_set_usage_stats(reg_pressure_selector_env_t *env, ir_node *irn) { - usage_stats_t *us = get_irn_link(irn); + usage_stats_t *us = (usage_stats_t*)get_irn_link(irn); if (!us) { us = OALLOC(&env->obst, usage_stats_t); @@ -105,7 +105,7 @@ static inline usage_stats_t *get_or_set_usage_stats(reg_pressure_selector_env_t static inline usage_stats_t *get_usage_stats(ir_node *irn) { - usage_stats_t *us = get_irn_link(irn); + usage_stats_t *us = (usage_stats_t*)get_irn_link(irn); assert(us && "This node must have usage stats"); return us; } @@ -171,26 +171,16 @@ static int compute_max_hops(reg_pressure_selector_env_t *env, ir_node *irn) return res; } -static void *reg_pressure_graph_init(const list_sched_selector_t *vtab, const be_irg_t *birg) +static void *reg_pressure_graph_init(const list_sched_selector_t *vtab, ir_graph *irg) { reg_pressure_main_env_t *main_env = XMALLOC(reg_pressure_main_env_t); main_env->vtab = vtab; - irg_walk_graph(be_get_birg_irg(birg), firm_clear_link, NULL, NULL); + irg_walk_graph(irg, firm_clear_link, NULL, NULL); return main_env; } -static inline int must_appear_in_schedule(const list_sched_selector_t *sel, void *block_env, const ir_node *irn) -{ - int res = -1; - - if (sel->to_appear_in_schedule) - res = sel->to_appear_in_schedule(block_env, irn); - - return res >= 0 ? res : (to_appear_in_schedule(irn) || be_is_Keep(irn) || be_is_CopyKeep(irn) || be_is_Start(irn)); -} - static void *reg_pressure_block_init(void *graph_env, ir_node *bl) { ir_node *irn; @@ -199,18 +189,18 @@ static void *reg_pressure_block_init(void *graph_env, ir_node *bl) obstack_init(&env->obst); ir_nodeset_init(&env->already_scheduled); env->root = NULL; - env->main_env = graph_env; + env->main_env = (reg_pressure_main_env_t*)graph_env; /* * Collect usage statistics. */ sched_foreach(bl, irn) { - if (must_appear_in_schedule(env->main_env->vtab, env, irn)) { + if (to_appear_in_schedule(irn)) { int i, n; for (i = 0, n = get_irn_arity(irn); i < n; ++i) { //ir_node *op = get_irn_n(irn, i); - if (must_appear_in_schedule(env->main_env->vtab, env, irn)) { + if (to_appear_in_schedule(irn)) { usage_stats_t *us = get_or_set_usage_stats(env, irn); #if 0 /* Liveness is not computed here! */ if (is_live_end(bl, op)) @@ -228,7 +218,7 @@ static void *reg_pressure_block_init(void *graph_env, ir_node *bl) static void reg_pressure_block_free(void *block_env) { - reg_pressure_selector_env_t *env = block_env; + reg_pressure_selector_env_t *env = (reg_pressure_selector_env_t*)block_env; usage_stats_t *us; for (us = env->root; us; us = us->next) @@ -264,7 +254,7 @@ static inline int reg_pr_costs(reg_pressure_selector_env_t *env, ir_node *irn) for (i = 0, n = get_irn_arity(irn); i < n; ++i) { ir_node *op = get_irn_n(irn, i); - if (must_appear_in_schedule(env->main_env->vtab, env, op)) + if (to_appear_in_schedule(op)) sum += compute_max_hops(env, op); } @@ -277,7 +267,7 @@ static ir_node *reg_pressure_select(void *block_env, ir_nodeset_t *ready_set, ir_nodeset_t *live_set) { ir_nodeset_iterator_t iter; - reg_pressure_selector_env_t *env = block_env; + reg_pressure_selector_env_t *env = (reg_pressure_selector_env_t*)block_env; ir_node *irn, *res = NULL; int curr_cost = INT_MAX; (void) live_set; @@ -319,7 +309,6 @@ const list_sched_selector_t reg_pressure_selector = { reg_pressure_graph_init, reg_pressure_block_init, reg_pressure_select, - NULL, /* to_appear_in_schedule */ NULL, /* node_ready */ NULL, /* node_selected */ NULL, /* exectime */