X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeschedregpress.c;h=49357c29a7d9e259c66e11e604baff36c5d021f2;hb=12aaa3fc53618991634823a6738f50360a54633b;hp=42e0abe9999b09810f369ebc3ba6d4ce7b125995;hpb=0df5e0ea5d4d6a566339ac4b93a73719858e81e1;p=libfirm diff --git a/ir/be/beschedregpress.c b/ir/be/beschedregpress.c index 42e0abe99..49357c29a 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" @@ -152,8 +152,6 @@ static int compute_max_hops(reg_pressure_selector_env_t *env, ir_node *irn) ir_graph *irg = get_irn_irg(bl); int res = 0; - const ir_edge_t *edge; - foreach_out_edge(irn, edge) { ir_node *user = get_edge_src_irn(edge); unsigned visited_nr = get_irg_visited(irg) + 1; @@ -176,7 +174,6 @@ static void *reg_pressure_graph_init(ir_graph *irg) static void *reg_pressure_block_init(void *graph_env, ir_node *bl) { - ir_node *irn; reg_pressure_selector_env_t *env = XMALLOC(reg_pressure_selector_env_t); (void) graph_env; @@ -188,12 +185,7 @@ static void *reg_pressure_block_init(void *graph_env, ir_node *bl) * Collect usage statistics. */ sched_foreach(bl, irn) { - int i, n; - if (is_Proj(irn) - || (arch_irn_get_flags(irn) & arch_irn_flags_not_scheduled)) - continue; - - for (i = 0, n = get_irn_arity(irn); i < n; ++i) { + for (int 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)) @@ -224,8 +216,6 @@ static int get_result_hops_sum(reg_pressure_selector_env_t *env, ir_node *irn) { int res = 0; if (get_irn_mode(irn) == mode_T) { - const ir_edge_t *edge; - foreach_out_edge(irn, edge) res += get_result_hops_sum(env, get_edge_src_irn(edge)); } @@ -246,7 +236,7 @@ static inline int reg_pr_costs(reg_pressure_selector_env_t *env, ir_node *irn) ir_node *op = get_irn_n(irn, i); if (is_Proj(op) - || (arch_irn_get_flags(op) & arch_irn_flags_not_scheduled)) + || (arch_get_irn_flags(op) & arch_irn_flags_not_scheduled)) continue; sum += compute_max_hops(env, op); @@ -259,15 +249,13 @@ static inline int reg_pr_costs(reg_pressure_selector_env_t *env, ir_node *irn) 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; + ir_node *res = NULL; + int curr_cost = INT_MAX; assert(ir_nodeset_size(ready_set) > 0); - ir_nodeset_iterator_init(&iter, ready_set); - while ( (irn = ir_nodeset_iterator_next(&iter)) != NULL) { + foreach_ir_nodeset(ready_set, irn, iter) { /* Ignore branch instructions for the time being. They should only be scheduled if there is nothing else. @@ -287,9 +275,7 @@ static ir_node *reg_pressure_select(void *block_env, ir_nodeset_t *ready_set) */ if (!res) { - ir_nodeset_iterator_init(&iter, ready_set); - res = ir_nodeset_iterator_next(&iter); - + res = ir_nodeset_first(ready_set); assert(res && "There must be a node scheduled."); }