- implemented back propagation for RII reductions
[libfirm] / pbqp_node.c
1 #include "adt/array.h"
2
3 #include "assert.h"
4
5 #include "pbqp_node.h"
6 #include "pbqp_node_t.h"
7 #include "vector.h"
8
9 pbqp_node *alloc_node(pbqp *pbqp, unsigned node_index, vector *costs)
10 {
11         pbqp_node *node = obstack_alloc(&pbqp->obstack, sizeof(*node));
12         assert(node);
13
14         node->edges = NEW_ARR_F(pbqp_edge *, 0);
15         node->costs = vector_copy(pbqp, costs);
16         node->bucket_index = UINT_MAX;
17         node->solution = UINT_MAX;
18         node->index = node_index;
19
20         return node;
21 }
22
23 void disconnect_edge(pbqp_node *node, pbqp_edge *edge)
24 {
25         pbqp_edge **edges;
26         unsigned    edge_index;
27         unsigned    edge_len;
28
29         edges = node->edges;
30         edge_len = ARR_LEN(edges);
31
32         for (edge_index = 0; edge_index < edge_len; ++edge_index) {
33                 pbqp_edge *edge_candidate = edges[edge_index];
34                 if (edge_candidate == edge) {
35                         edges[edge_index] = edges[edge_len - 1];
36                         ARR_SHRINKLEN(edges, (int)edge_len - 1);
37                         break;
38                 }
39         }
40 }