fix names of some dumped vcg files
[libfirm] / ir / kaps / optimal.c
index fe82844..221bdda 100644 (file)
@@ -31,7 +31,7 @@
 #include "error.h"
 
 #include "bucket.h"
-#if    KAPS_DUMP
+#if KAPS_DUMP
 #include "html_dumper.h"
 #endif
 #include "kaps.h"
@@ -47,7 +47,7 @@
 #include "timing.h"
 
 pbqp_edge_t **edge_bucket;
-pbqp_edge_t **rm_bucket;
+static pbqp_edge_t **rm_bucket;
 pbqp_node_t **node_buckets[4];
 pbqp_node_t **reduced_bucket = NULL;
 pbqp_node_t  *merged_node = NULL;
@@ -106,7 +106,6 @@ void fill_node_buckets(pbqp_t *pbqp)
        unsigned node_index;
        unsigned node_len;
 
-       assert(pbqp);
        node_len = pbqp->num_nodes;
 
        #if KAPS_TIMING
@@ -150,17 +149,11 @@ static void normalize_towards_source(pbqp_edge_t *edge)
        unsigned        src_index;
        unsigned        new_infinity = 0;
 
-       assert(edge);
-
        src_node = edge->src;
        tgt_node = edge->tgt;
-       assert(src_node);
-       assert(tgt_node);
 
        src_vec = src_node->costs;
        tgt_vec = tgt_node->costs;
-       assert(src_vec);
-       assert(tgt_vec);
 
        src_len = src_vec->len;
        tgt_len = tgt_vec->len;
@@ -168,7 +161,6 @@ static void normalize_towards_source(pbqp_edge_t *edge)
        assert(tgt_len > 0);
 
        mat = edge->costs;
-       assert(mat);
 
        /* Normalize towards source node. */
        for (src_index = 0; src_index < src_len; ++src_index) {
@@ -216,17 +208,11 @@ static void normalize_towards_target(pbqp_edge_t *edge)
        unsigned        tgt_index;
        unsigned        new_infinity = 0;
 
-       assert(edge);
-
        src_node = edge->src;
        tgt_node = edge->tgt;
-       assert(src_node);
-       assert(tgt_node);
 
        src_vec = src_node->costs;
        tgt_vec = tgt_node->costs;
-       assert(src_vec);
-       assert(tgt_vec);
 
        src_len = src_vec->len;
        tgt_len = tgt_vec->len;
@@ -234,7 +220,6 @@ static void normalize_towards_target(pbqp_edge_t *edge)
        assert(tgt_len > 0);
 
        mat = edge->costs;
-       assert(mat);
 
        /* Normalize towards target node. */
        for (tgt_index = 0; tgt_index < tgt_len; ++tgt_index) {
@@ -286,23 +271,15 @@ static void merge_source_into_target(pbqp_t *pbqp, pbqp_edge_t *edge)
        unsigned       *mapping;
        unsigned        src_len;
        unsigned        tgt_len;
-       unsigned        src_index;
        unsigned        tgt_index;
        unsigned        edge_index;
        unsigned        edge_len;
 
-       assert(pbqp);
-       assert(edge);
-
        src_node = edge->src;
        tgt_node = edge->tgt;
-       assert(src_node);
-       assert(tgt_node);
 
        src_vec = src_node->costs;
        tgt_vec = tgt_node->costs;
-       assert(src_vec);
-       assert(tgt_vec);
 
        src_len = src_vec->len;
        tgt_len = tgt_vec->len;
@@ -312,13 +289,13 @@ static void merge_source_into_target(pbqp_t *pbqp, pbqp_edge_t *edge)
        assert(tgt_len > 1);
 
        mat = edge->costs;
-       assert(mat);
 
        mapping = NEW_ARR_F(unsigned, tgt_len);
 
        /* Check that each column has at most one zero entry. */
        for (tgt_index = 0; tgt_index < tgt_len; ++tgt_index) {
                unsigned onlyOneZero = 0;
+               unsigned src_index;
 
                if (tgt_vec->entries[tgt_index].data == INF_COSTS)
                        continue;
@@ -348,7 +325,7 @@ static void merge_source_into_target(pbqp_t *pbqp, pbqp_edge_t *edge)
        pbqp->num_rm++;
 #endif
 
-#if    KAPS_DUMP
+#if KAPS_DUMP
        if (pbqp->dump_file) {
                char txt[100];
                sprintf(txt, "Merging n%d into n%d", src_node->index, tgt_node->index);
@@ -366,15 +343,12 @@ static void merge_source_into_target(pbqp_t *pbqp, pbqp_edge_t *edge)
                vector_t      *other_vec;
                unsigned       other_len;
                unsigned       other_index;
-               unsigned       tgt_index;
 
                assert(old_edge);
-
                if (old_edge == edge)
                        continue;
 
                old_matrix = old_edge->costs;
-               assert(old_matrix);
 
                if (old_edge->tgt == src_node) {
                        other_node = old_edge->src;
@@ -384,7 +358,6 @@ static void merge_source_into_target(pbqp_t *pbqp, pbqp_edge_t *edge)
                        other_node = old_edge->tgt;
                        other_len = old_matrix->cols;
                }
-               assert(other_node);
                other_vec = other_node->costs;
 
                new_matrix = pbqp_matrix_alloc(pbqp, tgt_len, other_len);
@@ -461,22 +434,14 @@ static void merge_target_into_source(pbqp_t *pbqp, pbqp_edge_t *edge)
        unsigned        src_len;
        unsigned        tgt_len;
        unsigned        src_index;
-       unsigned        tgt_index;
        unsigned        edge_index;
        unsigned        edge_len;
 
-       assert(pbqp);
-       assert(edge);
-
        src_node = edge->src;
        tgt_node = edge->tgt;
-       assert(src_node);
-       assert(tgt_node);
 
        src_vec = src_node->costs;
        tgt_vec = tgt_node->costs;
-       assert(src_vec);
-       assert(tgt_vec);
 
        src_len = src_vec->len;
        tgt_len = tgt_vec->len;
@@ -486,13 +451,13 @@ static void merge_target_into_source(pbqp_t *pbqp, pbqp_edge_t *edge)
        assert(tgt_len > 1);
 
        mat = edge->costs;
-       assert(mat);
 
        mapping = NEW_ARR_F(unsigned, src_len);
 
        /* Check that each row has at most one zero entry. */
        for (src_index = 0; src_index < src_len; ++src_index) {
                unsigned onlyOneZero = 0;
+               unsigned tgt_index;
 
                if (src_vec->entries[src_index].data == INF_COSTS)
                        continue;
@@ -522,7 +487,7 @@ static void merge_target_into_source(pbqp_t *pbqp, pbqp_edge_t *edge)
        pbqp->num_rm++;
 #endif
 
-#if    KAPS_DUMP
+#if KAPS_DUMP
        if (pbqp->dump_file) {
                char txt[100];
                sprintf(txt, "Merging n%d into n%d", tgt_node->index, src_node->index);
@@ -540,7 +505,6 @@ static void merge_target_into_source(pbqp_t *pbqp, pbqp_edge_t *edge)
                vector_t      *other_vec;
                unsigned       other_len;
                unsigned       other_index;
-               unsigned       src_index;
 
                assert(old_edge);
 
@@ -548,7 +512,6 @@ static void merge_target_into_source(pbqp_t *pbqp, pbqp_edge_t *edge)
                        continue;
 
                old_matrix = old_edge->costs;
-               assert(old_matrix);
 
                if (old_edge->tgt == tgt_node) {
                        other_node = old_edge->src;
@@ -558,7 +521,6 @@ static void merge_target_into_source(pbqp_t *pbqp, pbqp_edge_t *edge)
                        other_node = old_edge->tgt;
                        other_len = old_matrix->cols;
                }
-               assert(other_node);
                other_vec = other_node->costs;
 
                new_matrix = pbqp_matrix_alloc(pbqp, src_len, other_len);
@@ -627,9 +589,6 @@ void apply_RM(pbqp_t *pbqp, pbqp_node_t *node)
        unsigned      edge_index;
        unsigned      edge_len;
 
-       assert(node);
-       assert(pbqp);
-
        edges    = node->edges;
        edge_len = pbqp_node_get_degree(node);
 
@@ -643,7 +602,6 @@ void apply_RM(pbqp_t *pbqp, pbqp_node_t *node)
        /* ALAP: Merge neighbors into given node. */
        while(edge_bucket_get_length(rm_bucket) > 0) {
                pbqp_edge_t *edge = edge_bucket_pop(&rm_bucket);
-               assert(edge);
 
                /* If the edge is not deleted: Try a merge. */
                if (edge->src == node)
@@ -701,9 +659,6 @@ void simplify_edge(pbqp_t *pbqp, pbqp_edge_t *edge)
        int            src_len;
        int            tgt_len;
 
-       assert(pbqp);
-       assert(edge);
-
        (void) pbqp;
 
        src_node = edge->src;
@@ -715,7 +670,7 @@ void simplify_edge(pbqp_t *pbqp, pbqp_edge_t *edge)
        if (is_deleted(edge))
                return;
 
-#if    KAPS_DUMP
+#if KAPS_DUMP
        if (pbqp->dump_file) {
                char txt[100];
                sprintf(txt, "Simplification of Edge n%d-n%d", src_node->index, tgt_node->index);
@@ -725,8 +680,6 @@ void simplify_edge(pbqp_t *pbqp, pbqp_edge_t *edge)
 
        src_vec = src_node->costs;
        tgt_vec = tgt_node->costs;
-       assert(src_vec);
-       assert(tgt_vec);
 
        src_len = src_vec->len;
        tgt_len = tgt_vec->len;
@@ -734,9 +687,8 @@ void simplify_edge(pbqp_t *pbqp, pbqp_edge_t *edge)
        assert(tgt_len > 0);
 
        mat = edge->costs;
-       assert(mat);
 
-#if    KAPS_DUMP
+#if KAPS_DUMP
        if (pbqp->dump_file) {
                fputs("Input:<br>\n", pbqp->dump_file);
                dump_simplifyedge(pbqp, edge);
@@ -746,7 +698,7 @@ void simplify_edge(pbqp_t *pbqp, pbqp_edge_t *edge)
        normalize_towards_source(edge);
        normalize_towards_target(edge);
 
-#if    KAPS_DUMP
+#if KAPS_DUMP
        if (pbqp->dump_file) {
                fputs("<br>\nOutput:<br>\n", pbqp->dump_file);
                dump_simplifyedge(pbqp, edge);
@@ -754,7 +706,7 @@ void simplify_edge(pbqp_t *pbqp, pbqp_edge_t *edge)
 #endif
 
        if (pbqp_matrix_is_zero(mat, src_vec, tgt_vec)) {
-#if    KAPS_DUMP
+#if KAPS_DUMP
                if (pbqp->dump_file) {
                        fputs("edge has been eliminated<br>\n", pbqp->dump_file);
                }
@@ -773,14 +725,12 @@ void initial_simplify_edges(pbqp_t *pbqp)
        unsigned node_index;
        unsigned node_len;
 
-       assert(pbqp);
-
        #if KAPS_TIMING
                ir_timer_t *t_int_simpl = ir_timer_new();
                ir_timer_start(t_int_simpl);
        #endif
 
-#if    KAPS_DUMP
+#if KAPS_DUMP
        if (pbqp->dump_file) {
                pbqp_dump_input(pbqp);
                dump_section(pbqp->dump_file, 1, "2. Simplification of Cost Matrices");
@@ -830,15 +780,13 @@ num determine_solution(pbqp_t *pbqp)
                ir_timer_reset_and_start(t_det_solution);
        #endif
 
-#if    KAPS_DUMP
+#if KAPS_DUMP
        FILE     *file;
 #endif
 
-       assert(pbqp);
-
        (void) pbqp;
 
-#if    KAPS_DUMP
+#if KAPS_DUMP
        file = pbqp->dump_file;
 
        if (file) {
@@ -856,13 +804,12 @@ num determine_solution(pbqp_t *pbqp)
 
        for (node_index = 0; node_index < node_len; ++node_index) {
                pbqp_node_t *node = node_buckets[0][node_index];
-               assert(node);
 
                node->solution = vector_get_min_index(node->costs);
                solution       = pbqp_add(solution,
                                node->costs->entries[node->solution].data);
 
-#if    KAPS_DUMP
+#if KAPS_DUMP
                if (file) {
                        fprintf(file, "node n%d is set to %d<br>\n", node->index, node->solution);
                        dump_node(file, node);
@@ -870,7 +817,7 @@ num determine_solution(pbqp_t *pbqp)
 #endif
        }
 
-#if    KAPS_DUMP
+#if KAPS_DUMP
        if (file) {
                dump_section(file, 2, "Minimum");
 #if KAPS_USE_UNSIGNED
@@ -896,10 +843,6 @@ static void back_propagate_RI(pbqp_t *pbqp, pbqp_node_t *node)
        pbqp_matrix_t *mat;
        vector_t      *vec;
        int            is_src;
-
-       assert(pbqp);
-       assert(node);
-
        (void) pbqp;
 
        edge = node->edges[0];
@@ -909,17 +852,13 @@ static void back_propagate_RI(pbqp_t *pbqp, pbqp_node_t *node)
 
        if (is_src) {
                other = edge->tgt;
-               assert(other);
-
                node->solution = pbqp_matrix_get_col_min_index(mat, other->solution, vec);
        } else {
                other = edge->src;
-               assert(other);
-
                node->solution = pbqp_matrix_get_row_min_index(mat, other->solution, vec);
        }
 
-#if    KAPS_DUMP
+#if KAPS_DUMP
        if (pbqp->dump_file) {
                fprintf(pbqp->dump_file, "node n%d is set to %d<br>\n", node->index, node->solution);
        }
@@ -941,8 +880,6 @@ static void back_propagate_RII(pbqp_t *pbqp, pbqp_node_t *node)
        unsigned       col_index;
        unsigned       row_index;
 
-       assert(pbqp);
-
        if (src_is_src) {
                src_node = src_edge->tgt;
        } else {
@@ -996,7 +933,7 @@ static void back_propagate_RII(pbqp_t *pbqp, pbqp_node_t *node)
 
        node->solution = vector_get_min_index(vec);
 
-#if    KAPS_DUMP
+#if KAPS_DUMP
        if (pbqp->dump_file) {
                fprintf(pbqp->dump_file, "node n%d is set to %d<br>\n", node->index, node->solution);
        }
@@ -1010,9 +947,7 @@ void back_propagate(pbqp_t *pbqp)
        unsigned node_index;
        unsigned node_len   = node_bucket_get_length(reduced_bucket);
 
-       assert(pbqp);
-
-#if    KAPS_DUMP
+#if KAPS_DUMP
        if (pbqp->dump_file) {
                dump_section(pbqp->dump_file, 2, "Back Propagation");
        }
@@ -1030,7 +965,6 @@ void back_propagate(pbqp_t *pbqp)
                                break;
                        default:
                                panic("Only nodes with degree one or two should be in this bucket");
-                               break;
                }
        }
 }
@@ -1050,7 +984,7 @@ void apply_RI(pbqp_t *pbqp)
        int            is_src = edge->src == node;
        pbqp_node_t   *other_node;
 
-       (void ) pbqp;
+       (void) pbqp;
        assert(pbqp_node_get_degree(node) == 1);
 
        if (is_src) {
@@ -1059,7 +993,7 @@ void apply_RI(pbqp_t *pbqp)
                other_node = edge->src;
        }
 
-#if    KAPS_DUMP
+#if KAPS_DUMP
        if (pbqp->dump_file) {
                char     txt[100];
                sprintf(txt, "RI-Reduction of Node n%d", node->index);
@@ -1081,7 +1015,7 @@ void apply_RI(pbqp_t *pbqp)
        }
        disconnect_edge(other_node, edge);
 
-#if    KAPS_DUMP
+#if KAPS_DUMP
        if (pbqp->dump_file) {
                fputs("<br>\nAfter reduction:<br>\n", pbqp->dump_file);
                dump_node(pbqp->dump_file, other_node);
@@ -1109,6 +1043,7 @@ void apply_RII(pbqp_t *pbqp)
        pbqp_matrix_t *tgt_mat;
        pbqp_node_t   *src_node;
        pbqp_node_t   *tgt_node;
+       pbqp_edge_t   *edge;
        pbqp_matrix_t *mat;
        vector_t      *vec;
        vector_t      *node_vec;
@@ -1118,9 +1053,7 @@ void apply_RII(pbqp_t *pbqp)
        unsigned       col_len;
        unsigned       row_index;
        unsigned       row_len;
-       unsigned       node_len;
 
-       assert(pbqp);
        assert(pbqp_node_get_degree(node) == 2);
 
        if (src_is_src) {
@@ -1152,7 +1085,7 @@ void apply_RII(pbqp_t *pbqp)
                tgt_is_src = tgt_edge->src == node;
        }
 
-#if    KAPS_DUMP
+#if KAPS_DUMP
        if (pbqp->dump_file) {
                char     txt[100];
                sprintf(txt, "RII-Reduction of Node n%d", node->index);
@@ -1176,7 +1109,6 @@ void apply_RII(pbqp_t *pbqp)
 
        row_len  = src_vec->len;
        col_len  = tgt_vec->len;
-       node_len = node_vec->len;
 
        mat = pbqp_matrix_alloc(pbqp, row_len, col_len);
 
@@ -1202,7 +1134,7 @@ void apply_RII(pbqp_t *pbqp)
                }
        }
 
-       pbqp_edge_t *edge = get_edge(pbqp, src_node->index, tgt_node->index);
+       edge = get_edge(pbqp, src_node->index, tgt_node->index);
 
        /* Disconnect node. */
        disconnect_edge(src_node, src_edge);
@@ -1228,7 +1160,7 @@ void apply_RII(pbqp_t *pbqp)
                reorder_node_after_edge_deletion(tgt_node);
        }
 
-#if    KAPS_DUMP
+#if KAPS_DUMP
        if (pbqp->dump_file) {
                fputs("<br>\nAfter reduction:<br>\n", pbqp->dump_file);
                dump_edge(pbqp->dump_file, edge);
@@ -1251,17 +1183,11 @@ static void select_column(pbqp_edge_t *edge, unsigned col_index)
        unsigned        src_index;
        unsigned        new_infinity = 0;
 
-       assert(edge);
-
        src_node = edge->src;
        tgt_node = edge->tgt;
-       assert(src_node);
-       assert(tgt_node);
 
        src_vec = src_node->costs;
        tgt_vec = tgt_node->costs;
-       assert(src_vec);
-       assert(tgt_vec);
 
        src_len = src_vec->len;
        tgt_len = tgt_vec->len;
@@ -1269,7 +1195,6 @@ static void select_column(pbqp_edge_t *edge, unsigned col_index)
        assert(tgt_len > 0);
 
        mat = edge->costs;
-       assert(mat);
 
        for (src_index = 0; src_index < src_len; ++src_index) {
                num elem = mat->entries[src_index * tgt_len + col_index];
@@ -1302,27 +1227,20 @@ static void select_column(pbqp_edge_t *edge, unsigned col_index)
 static void select_row(pbqp_edge_t *edge, unsigned row_index)
 {
        pbqp_matrix_t  *mat;
-       pbqp_node_t    *src_node;
        pbqp_node_t    *tgt_node;
        vector_t       *tgt_vec;
        unsigned        tgt_len;
        unsigned        tgt_index;
        unsigned        new_infinity = 0;
 
-       assert(edge);
-
-       src_node = edge->src;
        tgt_node = edge->tgt;
-       assert(tgt_node);
 
        tgt_vec = tgt_node->costs;
-       assert(tgt_vec);
 
        tgt_len = tgt_vec->len;
        assert(tgt_len > 0);
 
        mat = edge->costs;
-       assert(mat);
 
        for (tgt_index = 0; tgt_index < tgt_len; ++tgt_index) {
                num elem = mat->entries[row_index * tgt_len + tgt_index];
@@ -1360,7 +1278,6 @@ void select_alternative(pbqp_node_t *node, unsigned selected_index)
        vector_t *node_vec;
        unsigned  max_degree = pbqp_node_get_degree(node);
 
-       assert(node);
        node->solution = selected_index;
        node_vec = node->costs;
        node_len = node_vec->len;
@@ -1419,8 +1336,6 @@ unsigned get_local_minimal_alternative(pbqp_t *pbqp, pbqp_node_t *node)
        num            min          = INF_COSTS;
        int            is_src;
 
-       assert(pbqp);
-       assert(node);
        node_vec   = node->costs;
        node_len   = node_vec->len;
        max_degree = pbqp_node_get_degree(node);