-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 unsigned check_alignment_constraints(ir_node *node)
+{
+ const arch_register_req_t *req = arch_get_irn_register_req(node);
+ // For larger than 1 variables, support only aligned constraints
+ assert(((!(req->type & arch_register_req_type_aligned)
+ && req->width == 1)
+ || (req->type & arch_register_req_type_aligned))
+ && "Unaligned large (width > 1) variables not supported");
+ return (req->type & arch_register_req_type_aligned) && req->width > 1;
+}