X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=heuristical.c;h=23d04887db0bc0c9c0281d99333de7bece12bd54;hb=eb32c39340c33ad210747b1361f2d586198e93dc;hp=48c7dc9e66d60315ec5befbf42fb33fde15bb961;hpb=d9cdf3b405ac7d5b79ba085ad52d9d805e641327;p=libfirm diff --git a/heuristical.c b/heuristical.c index 48c7dc9e6..23d04887d 100644 --- a/heuristical.c +++ b/heuristical.c @@ -855,17 +855,11 @@ static void apply_brute_force_reductions(pbqp *pbqp) static unsigned get_minimal_alternative(pbqp *pbqp, pbqp_node *node) { - pbqp_edge *edge; vector *node_vec; - vector *vec; - pbqp_matrix *mat; - unsigned edge_index; - unsigned max_degree = 0; unsigned node_index; unsigned node_len; unsigned min_index = 0; num min = INF_COSTS; - int is_src; assert(pbqp); assert(node); @@ -873,7 +867,7 @@ static unsigned get_minimal_alternative(pbqp *pbqp, pbqp_node *node) node_len = node_vec->len; for (node_index = 0; node_index < node_len; ++node_index) { - num value = node_vec->entries[node_index].data; + num value; /* Some node buckets and the edge bucket should be empty. */ assert(node_bucket_get_length(node_buckets[1]) == 0); @@ -885,15 +879,39 @@ static unsigned get_minimal_alternative(pbqp *pbqp, pbqp_node *node) pbqp_node_bucket *bucket_deg3 = node_bucket_deep_copy(node_buckets[3]); pbqp_node_bucket *bucket_red = node_bucket_deep_copy(reduced_bucket); - /* TODO */ + /* Select alternative and solve PBQP recursively. */ + select_alternative(node, node_index); apply_brute_force_reductions(pbqp); + value = determine_solution(pbqp->dump_file); + if (value < min) { min = value; min_index = node_index; } + + /* Some node buckets and the edge bucket should still be empty. */ + assert(node_bucket_get_length(node_buckets[1]) == 0); + assert(node_bucket_get_length(node_buckets[2]) == 0); + assert(edge_bucket_get_length(edge_bucket) == 0); + + /* Clear modified buckets... */ + node_bucket_clear(&node_buckets[0]); + node_bucket_clear(&node_buckets[3]); + node_bucket_clear(&reduced_bucket); + + /* ... and restore old PBQP state. */ + node_bucket_copy(&node_buckets[0], bucket_deg0); + node_bucket_copy(&node_buckets[3], bucket_deg3); + node_bucket_copy(&reduced_bucket, bucket_red); + + /* Free copies. */ + node_bucket_free(bucket_deg0); + node_bucket_free(bucket_deg3); + node_bucket_free(bucket_red); } - return 0; + + return min_index; } void apply_Brute_Force(pbqp *pbqp)