- add missing else
[libfirm] / ir / be / becopyheur4.c
index ecebdc2..76a1930 100644 (file)
@@ -378,7 +378,7 @@ static void *co_mst_irn_init(ir_phase *ph, const ir_node *irn, void *old) {
                res->adm_colors = bitset_obstack_alloc(phase_obst(ph), env->n_regs);
 
                /* Exclude colors not assignable to the irn */
-               req = arch_get_register_req(irn, -1);
+               req = arch_get_register_req_out(irn);
                if (arch_register_req_is(req, limited))
                        rbitset_copy_to_bitset(req->limited, res->adm_colors);
                else
@@ -396,7 +396,7 @@ static void *co_mst_irn_init(ir_phase *ph, const ir_node *irn, void *old) {
                /* build list of interfering neighbours */
                len = 0;
                be_ifg_foreach_neighbour(env->ifg, nodes_it, irn, neigh) {
-                       if (!arch_irn_is(neigh, ignore)) {
+                       if (!arch_irn_is_ignore(neigh)) {
                                obstack_ptr_grow(phase_obst(ph), neigh);
                                ++len;
                        }
@@ -552,10 +552,9 @@ static void aff_chunk_assure_weight(co_mst_env_t *env, aff_chunk_t *c) {
                        if (an != NULL) {
                                neighb_t *neigh;
                                co_gs_foreach_neighb(an, neigh) {
-                                       const ir_node *m    = neigh->irn;
+                                       const ir_node *m = neigh->irn;
 
-                                       /* skip ignore nodes */
-                                       if (arch_irn_is(m, ignore))
+                                       if (arch_irn_is_ignore(m))
                                                continue;
 
                                        w += node_contains(c->n, m) ? neigh->costs : 0;
@@ -585,8 +584,7 @@ static int count_interfering_aff_neighs(co_mst_env_t *env, const affinity_node_t
                const ir_node *n = neigh->irn;
                int           i;
 
-               /* skip ignore nodes */
-               if (arch_irn_is(n, ignore))
+               if (arch_irn_is_ignore(n))
                        continue;
 
                /* check if the affinity neighbour interfere */
@@ -621,8 +619,7 @@ static void build_affinity_chunks(co_mst_env_t *env) {
                co_mst_irn_t    *n1;
                affinity_node_t *an;
 
-               /* skip ignore nodes */
-               if (arch_irn_is(n, ignore))
+               if (arch_irn_is_ignore(n))
                        continue;
 
                n1 = get_co_mst_irn(env, n);
@@ -645,7 +642,7 @@ static void build_affinity_chunks(co_mst_env_t *env) {
                                        aff_edge_t   edge;
 
                                        /* skip ignore nodes */
-                                       if (arch_irn_is(m, ignore))
+                                       if (arch_irn_is_ignore(m))
                                                continue;
 
                                        edge.src = n;
@@ -721,7 +718,7 @@ static __attribute__((unused)) void chunk_order_nodes(co_mst_env_t *env, aff_chu
                int w = 0;
                neighb_t *neigh;
 
-               if (arch_irn_is(irn, ignore))
+               if (arch_irn_is_ignore(irn))
                        continue;
 
                if (an) {
@@ -747,9 +744,9 @@ static __attribute__((unused)) void chunk_order_nodes(co_mst_env_t *env, aff_chu
                while (!pqueue_empty(grow)) {
                        ir_node *irn = pqueue_pop_front(grow);
                        affinity_node_t *an = get_affinity_info(env->co, irn);
-                       neighb_t *neigh;
+                       neighb_t        *neigh;
 
-                       if (arch_irn_is(irn, ignore))
+                       if (arch_irn_is_ignore(irn))
                                continue;
 
                        assert(i <= ARR_LEN(chunk->n));
@@ -802,8 +799,7 @@ static void expand_chunk_from(co_mst_env_t *env, co_mst_irn_t *node, bitset_t *v
                                int            m_idx = get_irn_idx(m);
                                co_mst_irn_t *n2;
 
-                               /* skip ignore nodes */
-                               if (arch_irn_is(m, ignore))
+                               if (arch_irn_is_ignore(m))
                                        continue;
 
                                n2 = get_co_mst_irn(env, m);
@@ -932,11 +928,12 @@ static inline int is_loose(co_mst_irn_t *node)
 /**
  * Determines the costs for each color if it would be assigned to node @p node.
  */
-static void determine_color_costs(co_mst_env_t *env, co_mst_irn_t *node, col_cost_t *costs) {
-       int *neigh_cols = alloca(env->n_regs * sizeof(*neigh_cols));
-       int n_loose = 0;
+static void determine_color_costs(co_mst_env_t *env, co_mst_irn_t *node, col_cost_t *costs)
+{
+       int   *neigh_cols = ALLOCAN(int, env->n_regs);
+       int    n_loose    = 0;
        real_t coeff;
-       int i;
+       int    i;
 
        for (i = 0; i < env->n_regs; ++i) {
                neigh_cols[i] = 0;
@@ -981,7 +978,7 @@ static int change_node_color_excluded(co_mst_env_t *env, co_mst_irn_t *node, int
 
        /* The node has the color it should not have _and_ has not been visited yet. */
        if (is_loose(node)) {
-               col_cost_t *costs = alloca(env->n_regs * sizeof(costs[0]));
+               col_cost_t *costs = ALLOCAN(col_cost_t, env->n_regs);
 
                /* Get the costs for giving the node a specific color. */
                determine_color_costs(env, node, costs);
@@ -1045,8 +1042,7 @@ static int recolor_nodes(co_mst_env_t *env, co_mst_irn_t *node, col_cost_t *cost
 
                        neigh = node->int_neighs[j];
 
-                       /* skip ignore nodes */
-                       if (arch_irn_is(neigh, ignore))
+                       if (arch_irn_is_ignore(neigh))
                                continue;
 
                        nn = get_co_mst_irn(env, neigh);
@@ -1149,7 +1145,7 @@ static void color_aff_chunk(co_mst_env_t *env, aff_chunk_t *c) {
        int         n_int_chunks  = 0;
        waitq       *tmp_chunks   = new_waitq();
        waitq       *best_starts  = NULL;
-       col_cost_t  *order        = alloca(env->n_regs * sizeof(order[0]));
+       col_cost_t  *order        = ALLOCANZ(col_cost_t, env->n_regs);
        bitset_t    *visited;
        int         idx, len, i, nidx, pos;
        struct list_head changed;
@@ -1163,8 +1159,6 @@ static void color_aff_chunk(co_mst_env_t *env, aff_chunk_t *c) {
        ++env->chunk_visited;
 
        /* compute color preference */
-       memset(order, 0, env->n_regs * sizeof(order[0]));
-
        for (pos = 0, len = ARR_LEN(c->interfere); pos < len; ++pos) {
                const ir_node *n = c->interfere[pos];
                co_mst_irn_t *node = get_co_mst_irn(env, n);
@@ -1445,10 +1439,10 @@ int co_solve_heuristic_mst(copy_opt_t *co) {
 
        /* apply coloring */
        foreach_phase_irn(&mst_env.ph, irn) {
-               co_mst_irn_t *mirn;
+               co_mst_irn_t          *mirn;
                const arch_register_t *reg;
 
-               if (arch_irn_is(irn, ignore))
+               if (arch_irn_is_ignore(irn))
                        continue;
 
                mirn = get_co_mst_irn(&mst_env, irn);