projects
/
libfirm
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Now it is possible to use UINT data type instead of INTMAX
[libfirm]
/
kaps.c
diff --git
a/kaps.c
b/kaps.c
index
3fcd139
..
a948cb7
100644
(file)
--- a/
kaps.c
+++ b/
kaps.c
@@
-25,14
+25,15
@@
pbqp_edge *get_edge(pbqp *pbqp, unsigned src_index, unsigned tgt_index)
}
pbqp_node *src_node = get_node(pbqp, src_index);
}
pbqp_node *src_node = get_node(pbqp, src_index);
+ pbqp_node *tgt_node = get_node(pbqp, tgt_index);
assert(src_node);
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];
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;
}
}
return cur_edge;
}
}
@@
-48,10
+49,20
@@
pbqp *alloc_pbqp(unsigned number_nodes)
pbqp->solution = 0;
pbqp->num_nodes = number_nodes;
pbqp->solution = 0;
pbqp->num_nodes = number_nodes;
+#if KAPS_DUMP
pbqp->dump_file = NULL;
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));
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;
}
return pbqp;
}
@@
-79,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);
{
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 {
if (edge == NULL) {
edge = alloc_edge(pbqp, src_index, tgt_index, costs);
} else {
@@
-99,8
+116,10
@@
num get_solution(pbqp *pbqp)
return pbqp->solution;
}
return pbqp->solution;
}
+#if KAPS_DUMP
void set_dumpfile(pbqp *pbqp, FILE *f)
{
assert(pbqp);
pbqp->dump_file = f;
}
void set_dumpfile(pbqp *pbqp, FILE *f)
{
assert(pbqp);
pbqp->dump_file = f;
}
+#endif