pbqp_edge **rm_bucket;
pbqp_node **node_buckets[4];
pbqp_node **reduced_bucket = NULL;
-static int buckets_filled = 0;
+pbqp_node *merged_node = NULL;
+static int buckets_filled = 0;
static void insert_into_edge_bucket(pbqp_edge *edge)
{
#if KAPS_TIMING
ir_timer_stop(t_fill_buckets);
- printf("PBQP Fill Nodes into buckets: %8.3lf msec\n", (double)ir_timer_elapsed_usec(t_fill_buckets) / 1000.0);
+ printf("PBQP Fill Nodes into buckets: %10.3lf msec\n", (double)ir_timer_elapsed_usec(t_fill_buckets) / 1000.0);
#endif
}
add_edge_costs(pbqp, tgt_node->index, other_node->index, new_matrix);
delete_edge(old_edge);
- reorder_node(src_node);
- reorder_node(other_node);
new_edge = get_edge(pbqp, tgt_node->index, other_node->index);
insert_into_rm_bucket(new_edge);
}
- /* Reduce the remaining source node via RI. */
- apply_RI(pbqp);
-
#if KAPS_STATISTIC
pbqp->num_r1--;
#endif
add_edge_costs(pbqp, src_node->index, other_node->index, new_matrix);
delete_edge(old_edge);
- reorder_node(tgt_node);
- reorder_node(other_node);
new_edge = get_edge(pbqp, src_node->index, other_node->index);
insert_into_rm_bucket(new_edge);
}
- /* Reduce the remaining source node via RI. */
- apply_RI(pbqp);
-
#if KAPS_STATISTIC
pbqp->num_r1--;
#endif
else
merge_source_into_target(pbqp, edge);
}
+
+ merged_node = node;
}
-void reorder_node(pbqp_node *node)
+void reorder_node_after_edge_deletion(pbqp_node *node)
{
unsigned degree = pbqp_node_get_degree(node);
/* Assume node lost one incident edge. */
/* Same bucket as before */
if (degree > 2) return;
- if (!node_bucket_contains(node_buckets[old_degree], node)) {
- /* Old arity is new arity, so we have nothing to do. */
- assert(node_bucket_contains(node_buckets[degree], node));
- return;
- }
-
/* Delete node from old bucket... */
node_bucket_remove(&node_buckets[old_degree], node);
assert(pbqp);
assert(edge);
+ (void) pbqp;
+
src_node = edge->src;
tgt_node = edge->tgt;
assert(src_node);
assert(tgt_node);
/* If edge are already deleted, we have nothing to do. */
- if (!is_connected(src_node, edge) || !is_connected(tgt_node, edge))
+ if (is_deleted(edge))
return;
#if KAPS_DUMP
#endif
delete_edge(edge);
- reorder_node(src_node);
- reorder_node(tgt_node);
}
}
#if KAPS_TIMING
ir_timer_stop(t_int_simpl);
- printf("PBQP Initial simplify edges: %8.3lf msec\n", (double)ir_timer_elapsed_usec(t_int_simpl) / 1000.0);
+ printf("PBQP Initial simplify edges: %10.3lf msec\n", (double)ir_timer_elapsed_usec(t_int_simpl) / 1000.0);
#endif
}
assert(pbqp);
+ (void) pbqp;
+
#if KAPS_DUMP
file = pbqp->dump_file;
#if KAPS_TIMING
ir_timer_stop(t_det_solution);
- printf("PBQP Determine Solution: %8.3lf msec\n", (double)ir_timer_elapsed_usec(t_det_solution) / 1000.0);
+ printf("PBQP Determine Solution: %10.3lf msec\n", (double)ir_timer_elapsed_usec(t_det_solution) / 1000.0);
#endif
return solution;
assert(pbqp);
assert(node);
+ (void) pbqp;
+
edge = node->edges[0];
mat = edge->costs;
is_src = edge->src == node;
}
#endif
- reorder_node(other_node);
+ reorder_node_after_edge_deletion(other_node);
#if KAPS_STATISTIC
pbqp->num_r1++;
/* Free local matrix. */
obstack_free(&pbqp->obstack, mat);
- reorder_node(src_node);
- reorder_node(tgt_node);
+ reorder_node_after_edge_deletion(src_node);
+ reorder_node_after_edge_deletion(tgt_node);
}
#if KAPS_DUMP
}
delete_edge(edge);
- reorder_node(src_node);
- reorder_node(tgt_node);
}
static void select_row(pbqp_edge *edge, unsigned row_index)
}
delete_edge(edge);
- reorder_node(src_node);
- reorder_node(tgt_node);
}
void select_alternative(pbqp_node *node, unsigned selected_index)