-static void build_coloring_cstr(ilp_env_t *ienv) {
- be_ifg_t *ifg = ienv->co->cenv->ifg;
- void *iter = be_ifg_nodes_iter_alloca(ifg);
- bitset_t *colors;
- ir_node *irn;
- char buf[16];
-
- colors = bitset_alloca(arch_register_class_n_regs(ienv->co->cls));
-
- be_ifg_foreach_node(ifg, iter, irn)
- if (!sr_is_removed(ienv->sr, irn)) {
- int col, cst_idx;
- arch_register_req_t req;
- int curr_node_color = get_irn_col(ienv->co, irn);
- int node_nr = (int)get_irn_node_nr(irn);
- local_env_t *lenv = ienv->env;
-
- pmap_insert(lenv->nr_2_irn, INT_TO_PTR(node_nr), irn);
-
- arch_get_register_req(ienv->co->aenv, &req, irn, -1);
-
- /* get assignable colors */
- if (arch_register_req_is(&req, limited))
- req.limited(req.limited_env, colors);
- else
- arch_put_non_ignore_regs(ienv->co->aenv, req.cls, colors);
-
- /* add the coloring constraint */
- cst_idx = lpp_add_cst(ienv->lp, NULL, lpp_equal, 1.0);
-
- bitset_foreach(colors, col) {
- int var_idx = lpp_add_var(ienv->lp, name_cdd(buf, 'x', node_nr, col), lpp_binary, 0.0);
- lpp_set_start_value(ienv->lp, var_idx, (col == curr_node_color) ? 1.0 : 0.0);
- lpp_set_factor_fast(ienv->lp, cst_idx, var_idx, 1);
-
- lenv->last_x_var = var_idx;
- if (lenv->first_x_var == -1)
- lenv->first_x_var = var_idx;
- }
+static void make_color_var_name(char *buf, size_t buf_size,
+ const ir_node *node, unsigned color)
+{
+ unsigned node_idx = get_irn_idx(node);
+ snprintf(buf, buf_size, "x_%u_%u", node_idx, color);
+}