#include "util.h"
#include "irtools.h"
#include "irnodemap.h"
-
+#include "be_t.h"
#include "bemodule.h"
#include "beabi.h"
#include "benode.h"
#include "becopyopt.h"
#include "becopyopt_t.h"
#include "bechordal_t.h"
-#include "beirg.h"
#define DUMP_BEFORE 1
#define DUMP_AFTER 2
const ir_node *irn = ci->irn;
be_ifg_t *ifg = env->co->cenv->ifg;
int n_regs = env->co->cls->n_regs;
- bitset_t *forb = bitset_alloca(n_regs);
affinity_node_t *a = ci->aff;
- size_t elm;
const ir_node *pos;
neighbours_iter_t it;
int i;
/* Put all forbidden colors into the aux bitset. */
- admissible_colors(env, ci, forb);
- bitset_flip_all(forb);
+ bitset_t *const admissible = bitset_alloca(n_regs);
+ admissible_colors(env, ci, admissible);
for (i = 0; i < n_regs; ++i) {
col_costs[i].col = i;
}
if (a) {
- neighb_t *n;
-
co_gs_foreach_neighb(a, n) {
if (color_is_fix(env, n->irn)) {
col_t col = get_col(env, n->irn);
be_ifg_neighbours_break(&it);
/* Set the costs to infinity for each color which is not allowed at this node. */
- bitset_foreach(forb, elm) {
+ bitset_foreach_clear(admissible, elm) {
col_costs[elm].costs = INT_MAX;
}
static void reject_coloring(struct list_head *h)
{
- co2_irn_t *pos;
-
list_for_each_entry(co2_irn_t, pos, h, changed_list)
pos->tmp_fixed = 0;
}
static void materialize_coloring(struct list_head *h)
{
- co2_irn_t *pos;
-
list_for_each_entry(co2_irn_t, pos, h, changed_list) {
pos->orig_col = pos->tmp_col;
pos->tmp_fixed = 0;
be_ifg_t *ifg = env->co->cenv->ifg;
bitset_t *bs = bitset_alloca(n_regs);
- size_t elm;
const ir_node *irn;
neighbours_iter_t it;
admissible_colors(env, &ci->inh, bs);
- bitset_flip_all(bs);
- bitset_foreach(bs, elm)
+ bitset_foreach_clear(bs, elm)
badness[elm] = ci->costs;
/* Use constrained/fixed interfering neighbors to influence the color badness */
be_ifg_t *ifg = env->co->cenv->ifg;
co2_cloud_irn_t *ci = get_co2_cloud_irn(env, a->irn);
int costs = 0;
- neighb_t *n;
if (ci->cloud)
return;
static co2_cloud_t *new_cloud(co2_t *env, affinity_node_t *a)
{
co2_cloud_t *cloud = OALLOC(&env->obst, co2_cloud_t);
- co2_cloud_irn_t *ci;
int i;
DBG((env->dbg, LEVEL_2, "new cloud with %+F\n", a->irn));
obstack_init(&cloud->obst);
for (i = 0; i < cloud->n_memb; ++i) {
co2_cloud_irn_t *ci = cloud->seq[i];
- neighb_t *n;
co_gs_foreach_neighb(ci->inh.aff, n) {
co2_cloud_irn_t *ni = get_co2_cloud_irn(cloud->env, n->irn);
static int cloud_costs(co2_cloud_t *cloud)
{
int i, costs = 0;
- neighb_t *n;
for (i = 0; i < cloud->n_memb; ++i) {
co2_irn_t *ci = (co2_irn_t *) cloud->seq[i];
static void process(co2_t *env)
{
- co2_cloud_t *pos;
co2_cloud_t **clouds;
int n_clouds;
int i;