X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbecopyheur2.c;h=3f199814adfe631af9b64175d2d0e364640485f5;hb=e50e95fbed5212b07773f5a118ee338c814ff368;hp=60f1e79d130d39e55ea5527488234f666a58ee39;hpb=10cfe14d793d33b930a6e1243dbeb17e6dc28b16;p=libfirm diff --git a/ir/be/becopyheur2.c b/ir/be/becopyheur2.c index 60f1e79d1..3f199814a 100644 --- a/ir/be/becopyheur2.c +++ b/ir/be/becopyheur2.c @@ -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);