sparc: preliminary SwitchJmp implementation
[libfirm] / ir / be / becopyheur2.c
index 60f1e79..3f19981 100644 (file)
@@ -99,9 +99,9 @@ static be_ifg_dump_dot_cb_t ifg_dot_cb;
 
 typedef unsigned col_t;
 
-typedef struct _co2_irn_t       co2_irn_t;
-typedef struct _co2_cloud_t     co2_cloud_t;
-typedef struct _co2_cloud_irn_t co2_cloud_irn_t;
+typedef struct co2_irn_t       co2_irn_t;
+typedef struct co2_cloud_t     co2_cloud_t;
+typedef struct co2_cloud_irn_t co2_cloud_irn_t;
 
 typedef struct {
        col_t col;
@@ -119,7 +119,7 @@ typedef struct {
        DEBUG_ONLY(firm_dbg_module_t *dbg;)
 } co2_t;
 
-struct _co2_irn_t {
+struct co2_irn_t {
        const ir_node   *irn;
        affinity_node_t *aff;
        co2_irn_t       *touched_next;
@@ -133,8 +133,8 @@ struct _co2_irn_t {
        struct list_head changed_list;
 };
 
-struct _co2_cloud_irn_t {
-       struct _co2_irn_t  inh;
+struct co2_cloud_irn_t {
+       struct co2_irn_t   inh;
        co2_cloud_t       *cloud;
        int                visited;
        int                index;
@@ -151,7 +151,7 @@ struct _co2_cloud_irn_t {
        struct list_head   mst_list;
 };
 
-struct _co2_cloud_t {
+struct co2_cloud_t {
        co2_t            *env;
        struct obstack    obst;
        int               costs;
@@ -180,12 +180,12 @@ typedef struct {
 #define get_co2_irn(co2, irn)         ((co2_irn_t *)       phase_get_or_set_irn_data(&co2->ph, irn))
 #define get_co2_cloud_irn(co2, irn)   ((co2_cloud_irn_t *) phase_get_or_set_irn_data(&co2->ph, irn))
 
-static void *co2_irn_init(ir_phase *ph, const ir_node *irn, void *data)
+static void *co2_irn_init(ir_phase *ph, const ir_node *irn)
 {
        co2_t *env         = (co2_t *) ph;
        affinity_node_t *a = get_affinity_info(env->co, irn);
        size_t size        = a ? sizeof(co2_cloud_irn_t) : sizeof(co2_irn_t);
-       co2_irn_t *ci      = data ? data : phase_alloc(ph, size);
+       co2_irn_t *ci      = phase_alloc(ph, size);
 
        memset(ci, 0, size);
        INIT_LIST_HEAD(&ci->changed_list);
@@ -329,7 +329,7 @@ static void determine_color_costs(co2_t *env, co2_irn_t *ci, col_cost_pair_t *co
 
        unsigned elm;
        const ir_node *pos;
-       void *it;
+       neighbours_iter_t it;
        int i;
 
        /* Put all forbidden colors into the aux bitset. */
@@ -354,8 +354,7 @@ static void determine_color_costs(co2_t *env, co2_irn_t *ci, col_cost_pair_t *co
                }
        }
 
-       it = be_ifg_neighbours_iter_alloca(ifg);
-       be_ifg_foreach_neighbour(ifg, it, irn, pos) {
+       be_ifg_foreach_neighbour(ifg, &it, irn, pos) {
                col_t col = get_col(env, pos);
                if (color_is_fix(env, pos)) {
                        col_costs[col].costs  = INT_MAX;
@@ -365,7 +364,7 @@ static void determine_color_costs(co2_t *env, co2_irn_t *ci, col_cost_pair_t *co
                        col_costs[col].costs = add_saturated(col_costs[col].costs, 8 * be_ifg_degree(ifg, pos));
                }
        }
-       be_ifg_neighbours_break(ifg, it);
+       be_ifg_neighbours_break(&it);
 
        /* Set the costs to infinity for each color which is not allowed at this node. */
        bitset_foreach(forb, elm) {
@@ -430,7 +429,7 @@ static int recolor(co2_t *env, const ir_node *irn, col_cost_pair_t *col_list, st
 
                struct list_head changed;
                const ir_node *n;
-               void *it;
+               neighbours_iter_t it;
 
                DBG((env->dbg, LEVEL_3, "\t\t%2{firm:indent}trying color %d(%d) on %+F\n", depth, tgt_col, costs, irn));
 
@@ -452,8 +451,7 @@ static int recolor(co2_t *env, const ir_node *irn, col_cost_pair_t *col_list, st
                INIT_LIST_HEAD(&changed);
                list_add(&ci->changed_list, &changed);
 
-               it = be_ifg_neighbours_iter_alloca(ifg);
-               be_ifg_foreach_neighbour(ifg, it, irn, n) {
+               be_ifg_foreach_neighbour(ifg, &it, irn, n) {
 
                        /* try to re-color the neighbor if it has the target color. */
                        if (get_col(env, n) == tgt_col) {
@@ -472,7 +470,7 @@ static int recolor(co2_t *env, const ir_node *irn, col_cost_pair_t *col_list, st
                                        break;
                        }
                }
-               be_ifg_neighbours_break(ifg, it);
+               be_ifg_neighbours_break(&it);
 
                /*
                We managed to assign the target color to all neighbors, so from the perspective
@@ -616,7 +614,7 @@ static void node_color_badness(co2_cloud_irn_t *ci, int *badness)
 
        unsigned elm;
        const ir_node *irn;
-       void *it;
+       neighbours_iter_t it;
 
        admissible_colors(env, &ci->inh, bs);
        bitset_flip_all(bs);
@@ -624,8 +622,7 @@ static void node_color_badness(co2_cloud_irn_t *ci, int *badness)
                badness[elm] = ci->costs;
 
        /* Use constrained/fixed interfering neighbors to influence the color badness */
-       it = be_ifg_neighbours_iter_alloca(ifg);
-       be_ifg_foreach_neighbour(ifg, it, ir->irn, irn) {
+       be_ifg_foreach_neighbour(ifg, &it, ir->irn, irn) {
                co2_irn_t *ni = get_co2_irn(env, irn);
 
                admissible_colors(env, ni, bs);
@@ -639,7 +636,7 @@ static void node_color_badness(co2_cloud_irn_t *ci, int *badness)
                        badness[c] += ci->costs;
                }
        }
-       be_ifg_neighbours_break(ifg, it);
+       be_ifg_neighbours_break(&it);
 }
 
 /**
@@ -858,7 +855,7 @@ static void apply_coloring(co2_cloud_irn_t *ci, col_t col, int depth)
        // assert(ok && "Color changing may not fail while committing the coloring");
        materialize_coloring(&changed);
 
-       for (i = 0; i < ci->mst_n_childs; ++i) {
+       for (i = 0; i < ci->mst_n_childs; ++i) {
                apply_coloring(ci->mst_childs[i], front[i], depth + 1);
        }
 }
@@ -1230,13 +1227,13 @@ int co_solve_heuristic_new(copy_opt_t *co)
        co2_t env;
        FILE  *f;
 
-       phase_init(&env.ph, co->cenv->birg->irg, co2_irn_init);
+       phase_init(&env.ph, co->cenv->irg, co2_irn_init);
        env.touched     = NULL;
        env.visited     = 0;
        env.co          = co;
        env.n_regs      = co->cls->n_regs;
        env.ignore_regs = bitset_alloca(co->cls->n_regs);
-       be_put_ignore_regs(co->cenv->birg, co->cls, env.ignore_regs);
+       be_put_ignore_regs(co->cenv->irg, co->cls, env.ignore_regs);
        FIRM_DBG_REGISTER(env.dbg, "firm.be.co2");
        INIT_LIST_HEAD(&env.cloud_head);