X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=kaps.c;h=a948cb73cb267d298360b4e596bdb89dd7f55a11;hb=5aeb3af21f8b6a720f0167b9a1e2eb311d16b4bd;hp=3162c24131231e3f261078a7f4516793ab96f6d2;hpb=cb064ca96c3af233db91eded8fad3903085bc75f;p=libfirm diff --git a/kaps.c b/kaps.c index 3162c2413..a948cb73c 100644 --- a/kaps.c +++ b/kaps.c @@ -19,18 +19,21 @@ pbqp_edge *get_edge(pbqp *pbqp, unsigned src_index, unsigned tgt_index) int len; if (tgt_index < src_index) { - return get_edge(pbqp, tgt_index, src_index); + unsigned tmp = src_index; + src_index = tgt_index; + tgt_index = tmp; } pbqp_node *src_node = get_node(pbqp, src_index); + pbqp_node *tgt_node = get_node(pbqp, tgt_index); assert(src_node); - assert(get_node(pbqp, tgt_index)); + assert(tgt_node); len = ARR_LEN(src_node->edges); for (i = 0; i < len; ++i) { pbqp_edge *cur_edge = src_node->edges[i]; - if (cur_edge->tgt->index == tgt_index) { + if (cur_edge->tgt == tgt_node) { return cur_edge; } } @@ -46,8 +49,20 @@ pbqp *alloc_pbqp(unsigned number_nodes) pbqp->solution = 0; pbqp->num_nodes = number_nodes; +#if KAPS_DUMP + pbqp->dump_file = NULL; +#endif pbqp->nodes = obstack_alloc(&pbqp->obstack, number_nodes * sizeof(*pbqp->nodes)); + memset(pbqp->nodes, 0, number_nodes * sizeof(*pbqp->nodes)); +#if KAPS_STATISTIC + pbqp->num_bf = 0; + pbqp->num_edges = 0; + pbqp->num_r0 = 0; + pbqp->num_r1 = 0; + pbqp->num_r2 = 0; + pbqp->num_rn = 0; +#endif return pbqp; } @@ -75,6 +90,12 @@ void add_edge_costs(pbqp *pbqp, unsigned src_index, unsigned tgt_index, { pbqp_edge *edge = get_edge(pbqp, src_index, tgt_index); + if (tgt_index < src_index) { + pbqp_matrix_transpose(pbqp, costs); + add_edge_costs(pbqp, tgt_index, src_index, costs); + return; + } + if (edge == NULL) { edge = alloc_edge(pbqp, src_index, tgt_index, costs); } else { @@ -82,13 +103,23 @@ void add_edge_costs(pbqp *pbqp, unsigned src_index, unsigned tgt_index, } } +num get_node_solution(pbqp *pbqp, unsigned node_index) +{ + pbqp_node *node = get_node(pbqp, node_index); + assert(node); + + return node->solution; +} + num get_solution(pbqp *pbqp) { return pbqp->solution; } +#if KAPS_DUMP void set_dumpfile(pbqp *pbqp, FILE *f) { assert(pbqp); pbqp->dump_file = f; } +#endif