X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeschedregpress.c;h=7c90b4d63e5e20dea420da5f4748c83f7afa088b;hb=5474a1c188c9d59eea2c915515980cd9cbab58d8;hp=a1bfeed127338d10b15ecef289984e8e413f6c8d;hpb=a09efb2ccc91c6d720aa6aa8c5f7e3c562528b2a;p=libfirm diff --git a/ir/be/beschedregpress.c b/ir/be/beschedregpress.c index a1bfeed12..7c90b4d63 100644 --- a/ir/be/beschedregpress.c +++ b/ir/be/beschedregpress.c @@ -22,7 +22,6 @@ * @brief Register pressure node selector. * @author Sebastian Hack * @date 29.08.2006 - * @version $Id$ */ #include "config.h" @@ -31,6 +30,7 @@ #include "iredges_t.h" #include "irgwalk.h" #include "irtools.h" +#include "util.h" #include "besched.h" #include "belistsched.h" @@ -188,21 +188,19 @@ static void *reg_pressure_block_init(void *graph_env, ir_node *bl) * Collect usage statistics. */ sched_foreach(bl, irn) { - if (to_appear_in_schedule(irn)) { - int i, n; + int i, n; + if (is_Proj(irn) + || (arch_get_irn_flags(irn) & arch_irn_flags_not_scheduled)) + continue; - for (i = 0, n = get_irn_arity(irn); i < n; ++i) { - //ir_node *op = get_irn_n(irn, i); - if (to_appear_in_schedule(irn)) { - usage_stats_t *us = get_or_set_usage_stats(env, irn); + for (i = 0, n = get_irn_arity(irn); i < n; ++i) { + usage_stats_t *us = get_or_set_usage_stats(env, irn); #if 0 /* Liveness is not computed here! */ - if (is_live_end(bl, op)) - us->uses_in_block = 99999; - else + if (is_live_end(bl, op)) + us->uses_in_block = 99999; + else #endif - us->uses_in_block++; - } - } + us->uses_in_block++; } } @@ -247,8 +245,11 @@ 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 (to_appear_in_schedule(op)) - sum += compute_max_hops(env, op); + if (is_Proj(op) + || (arch_get_irn_flags(op) & arch_irn_flags_not_scheduled)) + continue; + + sum += compute_max_hops(env, op); } sum += get_result_hops_sum(env, irn); @@ -256,14 +257,12 @@ static inline int reg_pr_costs(reg_pressure_selector_env_t *env, ir_node *irn) return sum; } -static ir_node *reg_pressure_select(void *block_env, ir_nodeset_t *ready_set, - ir_nodeset_t *live_set) +static ir_node *reg_pressure_select(void *block_env, ir_nodeset_t *ready_set) { ir_nodeset_iterator_t iter; 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; assert(ir_nodeset_size(ready_set) > 0); @@ -312,7 +311,7 @@ static void sched_reg_pressure(ir_graph *irg) be_list_sched_graph(irg, ®_pressure_selector); } -BE_REGISTER_MODULE_CONSTRUCTOR(be_init_sched_regpress); +BE_REGISTER_MODULE_CONSTRUCTOR(be_init_sched_regpress) void be_init_sched_regpress(void) { be_register_scheduler("regpress", sched_reg_pressure);