+ /* insert pbqp node into reverse peo */
+ plist_insert_back(pbqp_co->rpeo, get_node(pbqp_co->pbqp, get_irn_idx(irn)));
+ }
+ }
+
+ /* free priority queues */
+ del_pqueue(queue);
+ del_pqueue(restrictedNodesQueue);
+}
+
+static int co_solve_heuristic_pbqp(copy_opt_t *co) {
+ void *nodes_it = be_ifg_nodes_iter_alloca(co->cenv->ifg);
+ void *neigh_it = be_ifg_neighbours_iter_alloca(co->cenv->ifg);
+ unsigned number_registers = co->cls->n_regs;
+ unsigned number_nodes = get_irg_last_idx(co->irg);
+ ir_timer_t *t_ra_copymin_pbqp_create = ir_timer_register("be_co_pbqp_create", "copy minimization pbqp create");
+ ir_timer_t *t_ra_copymin_pbqp_solve = ir_timer_register("be_co_pbqp_solve", "copy minimization pbqp solve");
+ ir_node *ifg_node;
+ ir_node *if_neighb_node;
+ pbqp_co_t pbqp_co;
+ unsigned row, col;
+
+ #if KAPS_TIMING
+ printf("==>> START PBQP TIMING on IRG %s (%s) <<==\n", get_entity_name(get_irg_entity(co->irg)), arch_register_class_name(co->cls));
+ #endif
+
+ /* start timer */
+ ir_timer_reset_and_start(t_ra_copymin_pbqp_create);
+
+ /* create and initialize data structure for pbqp copy minimization optimization */
+ pbqp_co.cls = co->cls;
+ pbqp_co.rpeo = plist_new();
+ pbqp_co.pbqp = alloc_pbqp(number_nodes);
+ pbqp_co.ignore_reg = bitset_malloc(number_registers);
+ pbqp_co.restricted_nodes = bitset_malloc(number_nodes);
+ pbqp_co.ifg = co->cenv->ifg;
+
+ /* no node is restricted at the beginning */
+ bitset_clear_all(pbqp_co.restricted_nodes);
+
+ /* get ignored registers */
+ be_put_ignore_regs(co->cenv->birg, co->cls, pbqp_co.ignore_reg);
+
+ /* add costs vector to nodes */