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
/* 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;
}
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;
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 */
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);
aff_edge_t edge;
/* skip ignore nodes */
- if (arch_irn_is(m, ignore))
+ if (arch_irn_is_ignore(m))
continue;
edge.src = n;
int w = 0;
neighb_t *neigh;
- if (arch_irn_is(irn, ignore))
+ if (arch_irn_is_ignore(irn))
continue;
if (an) {
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));
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);
/**
* 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;
/* 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);
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);
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;
++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);
/* 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);