Let foreach_set() declare the iterator variable.
[libfirm] / ir / be / becopyheur.c
index 8ac0ea0..c58aabe 100644 (file)
@@ -22,7 +22,6 @@
  * @brief       First simple copy minimization heuristics.
  * @author      Daniel Grund
  * @date        12.04.2005
- * @version     $Id$
  *
  * Heuristic for minimizing copies using a queue which holds 'qnodes' not yet
  * examined. A qnode has a 'target color', nodes out of the opt unit and
@@ -127,7 +126,7 @@ static inline void qnode_add_conflict(const qnode_t *qn, const ir_node *n1, cons
                c.n1 = n2;
                c.n2 = n1;
        }
-       set_insert(qn->conflicts, &c, sizeof(c), HASH_CONFLICT(c));
+       set_insert(conflict_t, qn->conflicts, &c, sizeof(c), HASH_CONFLICT(c));
 }
 
 /**
@@ -147,7 +146,7 @@ static inline int qnode_are_conflicting(const qnode_t *qn, const ir_node *n1, co
                c.n1 = n2;
                c.n2 = n1;
        }
-       return set_find(qn->conflicts, &c, sizeof(c), HASH_CONFLICT(c)) != 0;
+       return set_find(conflict_t, qn->conflicts, &c, sizeof(c), HASH_CONFLICT(c)) != 0;
 }
 
 static int set_cmp_node_stat_t(const void *x, const void *y, size_t size)
@@ -163,7 +162,7 @@ static inline const node_stat_t *qnode_find_node(const qnode_t *qn, ir_node *irn
 {
        node_stat_t find;
        find.irn = irn;
-       return (const node_stat_t*)set_find(qn->changed_nodes, &find, sizeof(find), hash_irn(irn));
+       return set_find(node_stat_t, qn->changed_nodes, &find, sizeof(find), hash_irn(irn));
 }
 
 /**
@@ -176,7 +175,7 @@ static inline node_stat_t *qnode_find_or_insert_node(const qnode_t *qn, ir_node
        find.irn = irn;
        find.new_color = NO_COLOR;
        find.pinned_local = 0;
-       return (node_stat_t*)set_insert(qn->changed_nodes, &find, sizeof(find), hash_irn(irn));
+       return set_insert(node_stat_t, qn->changed_nodes, &find, sizeof(find), hash_irn(irn));
 }
 
 /**
@@ -261,7 +260,7 @@ static ir_node *qnode_color_irn(const qnode_t *qn, ir_node *irn, int col, const
        ir_node *sub_res, *curr;
        be_ifg_t *ifg = chordal_env->ifg;
        neighbours_iter_t iter;
-
+       const arch_register_req_t *req;
 
        DBG((dbg, LEVEL_3, "\t    %+F \tcaused col(%+F) \t%2d --> %2d\n", trigger, irn, irn_col, col));
 
@@ -277,13 +276,13 @@ static ir_node *qnode_color_irn(const qnode_t *qn, ir_node *irn, int col, const
                return irn;
        }
 
+       req = arch_get_irn_register_req(irn);
 #ifdef SEARCH_FREE_COLORS
        /* If we resolve conflicts (recursive calls) we can use any unused color.
         * In case of the first call @p col must be used.
         */
        if (irn != trigger) {
                bitset_t *free_cols = bitset_alloca(cls->n_regs);
-               const arch_register_req_t *req;
                ir_node *curr;
                int free_col;
 
@@ -291,7 +290,6 @@ static ir_node *qnode_color_irn(const qnode_t *qn, ir_node *irn, int col, const
                bitset_copy(free_cols, co->cenv->allocatable_regs);
 
                /* Exclude colors not assignable to the irn */
-               req = arch_get_register_req_out(irn);
                if (arch_register_req_is(req, limited)) {
                        bitset_t *limited = bitset_alloca(cls->n_regs);
                        rbitset_copy_to_bitset(req->limited, limited);
@@ -315,7 +313,7 @@ static ir_node *qnode_color_irn(const qnode_t *qn, ir_node *irn, int col, const
 #endif /* SEARCH_FREE_COLORS */
 
        /* If target color is not allocatable changing color is impossible */
-       if (!arch_reg_out_is_allocatable(irn, arch_register_for_index(cls, col))) {
+       if (!arch_reg_is_allocatable(req, arch_register_for_index(cls, col))) {
                DBG((dbg, LEVEL_3, "\t      %+F impossible\n", irn));
                return CHANGE_IMPOSSIBLE;
        }
@@ -567,7 +565,7 @@ static void ou_optimize(unit_t *ou)
        /* init queue */
        INIT_LIST_HEAD(&ou->queue);
 
-       req              = arch_get_register_req_out(ou->nodes[0]);
+       req              = arch_get_irn_register_req(ou->nodes[0]);
        allocatable_regs = ou->co->cenv->allocatable_regs;
        n_regs           = req->cls->n_regs;
        if (arch_register_req_is(req, limited)) {
@@ -610,7 +608,6 @@ static void ou_optimize(unit_t *ou)
 
        /* apply the best found qnode */
        if (curr->mis_size >= 2) {
-               node_stat_t *ns;
                int root_col = qnode_get_new_color(curr, ou->nodes[0]);
                DBG((dbg, LEVEL_1, "\t  Best color: %d  Costs: %d << %d << %d\n", curr->color, ou->min_nodes_costs, ou->all_nodes_costs - curr->mis_costs, ou->all_nodes_costs));
                /* globally pin root and all args which have the same color */
@@ -623,12 +620,11 @@ static void ou_optimize(unit_t *ou)
                }
 
                /* set color of all changed nodes */
-               for (ns = (node_stat_t*)set_first(curr->changed_nodes); ns != NULL;
-                    ns = (node_stat_t*)set_next(curr->changed_nodes)) {
+               foreach_set(curr->changed_nodes, node_stat_t, ns) {
                        /* NO_COLOR is possible, if we had an undo */
                        if (ns->new_color != NO_COLOR) {
                                DBG((dbg, LEVEL_1, "\t    color(%+F) := %d\n", ns->irn, ns->new_color));
-                               set_irn_col(ou->co, ns->irn, ns->new_color);
+                               set_irn_col(ou->co->cls, ns->irn, ns->new_color);
                        }
                }
        }
@@ -658,7 +654,7 @@ int co_solve_heuristic(copy_opt_t *co)
        return 0;
 }
 
-BE_REGISTER_MODULE_CONSTRUCTOR(be_init_copyheur);
+BE_REGISTER_MODULE_CONSTRUCTOR(be_init_copyheur)
 void be_init_copyheur(void)
 {
        static co_algo_info copyheur = {