progress = false;
for (i = g->count - 1; i >= 0; i--) {
- if (g->nodes[i].in_stack || g->nodes[i].reg != NO_REG)
- continue;
-
- if (pq_test(g, i)) {
- decrement_q(g, i);
- g->stack[g->stack_count] = i;
- g->stack_count++;
- g->nodes[i].in_stack = true;
- progress = true;
- } else {
- unsigned int new_q_total = g->nodes[i].q_total;
- if (new_q_total < lowest_q_total) {
- best_optimistic_node = i;
- lowest_q_total = new_q_total;
- }
- }
+ if (g->nodes[i].in_stack || g->nodes[i].reg != NO_REG)
+ continue;
+
+ if (pq_test(g, i)) {
+ decrement_q(g, i);
+ g->stack[g->stack_count] = i;
+ g->stack_count++;
+ g->nodes[i].in_stack = true;
+ progress = true;
+ } else {
+ unsigned int new_q_total = g->nodes[i].q_total;
+ if (new_q_total < lowest_q_total) {
+ best_optimistic_node = i;
+ lowest_q_total = new_q_total;
+ }
+ }
}
if (!progress && best_optimistic_node != ~0U) {
if (stack_optimistic_start == UINT_MAX)
stack_optimistic_start = g->stack_count;
- decrement_q(g, best_optimistic_node);
- g->stack[g->stack_count] = best_optimistic_node;
- g->stack_count++;
- g->nodes[best_optimistic_node].in_stack = true;
- progress = true;
+ decrement_q(g, best_optimistic_node);
+ g->stack[g->stack_count] = best_optimistic_node;
+ g->stack_count++;
+ g->nodes[best_optimistic_node].in_stack = true;
+ progress = true;
}
}
float benefit;
if (cost <= 0.0f)
- continue;
+ continue;
if (g->nodes[n].in_stack)
continue;
benefit = ra_get_spill_benefit(g, n);
if (benefit / cost > best_benefit) {
- best_benefit = benefit / cost;
- best_node = n;
+ best_benefit = benefit / cost;
+ best_node = n;
}
}
void ra_set_allocate_round_robin(struct ra_regs *regs);
unsigned int ra_alloc_reg_class(struct ra_regs *regs);
void ra_add_reg_conflict(struct ra_regs *regs,
- unsigned int r1, unsigned int r2);
+ unsigned int r1, unsigned int r2);
void ra_add_transitive_reg_conflict(struct ra_regs *regs,
- unsigned int base_reg, unsigned int reg);
+ unsigned int base_reg, unsigned int reg);
void ra_make_reg_conflicts_transitive(struct ra_regs *regs, unsigned int reg);
void ra_class_add_reg(struct ra_regs *regs, unsigned int c, unsigned int reg);
void ra_set_num_conflicts(struct ra_regs *regs, unsigned int class_a,
* graph.
*/
struct ra_graph *ra_alloc_interference_graph(struct ra_regs *regs,
- unsigned int count);
+ unsigned int count);
void ra_set_node_class(struct ra_graph *g, unsigned int n, unsigned int c);
void ra_set_select_reg_callback(struct ra_graph *g,
unsigned int (*callback)(struct ra_graph *g,
void *data),
void *data);
void ra_add_node_interference(struct ra_graph *g,
- unsigned int n1, unsigned int n2);
+ unsigned int n1, unsigned int n2);
/** @} */
/** @{ Graph-coloring register allocation */