Some refactoring.
[libfirm] / html_dumper.c
index 8f834a0..4f19150 100644 (file)
@@ -3,10 +3,21 @@
 
 #include "pbqp_edge_t.h"
 #include "pbqp_node_t.h"
+#include "heuristical.h"
 #include "html_dumper.h"
 #include "kaps.h"
 #include "pbqp_t.h"
 
+/* Caution: Due to static buffer use only once per statement */
+static const char *cost2a(num const cost)
+{
+       static char buf[10];
+
+       if (cost == INF_COSTS) return "inf";
+       sprintf(buf, "%10lld", cost);
+       return buf;
+}
+
 /* print vector */
 static void dump_vector(FILE *f, vector *vec)
 {
@@ -18,19 +29,10 @@ static void dump_vector(FILE *f, vector *vec)
        assert(len > 0);
        for (index = 0; index < len; ++index) {
 #if EXT_GRS_DEBUG
-               if (vec->entries[index].data == INF_COSTS) {
-                       fprintf(f, "<span title=\"%s\">inf</span>",
-                                       vec->entries[index].name);
-               } else {
-                       fprintf(f, "<span title=\"%s\">%6d</span>",
-                                       vec->entries[index].name, vec->entries[index].data);
-               }
+               fprintf(f, "<span title=\"%s\">%s</span> ",
+                               vec->entries[index].name, cost2a(vec->entries[index].data));
 #else
-               if (vec->entries[index].data == INF_COSTS) {
-                       fputs("inf", f);
-               } else {
-                       fprintf(f, "%6d", vec->entries[index].data);
-               }
+               fprintf(f, "%s ", cost2a(vec->entries[index].data));
 #endif
        }
        fprintf(f, " )</span>\n");
@@ -46,20 +48,10 @@ static void dump_matrix(FILE *f, pbqp_matrix *mat)
        assert(mat->rows> 0);
        fprintf(f, "\t\\begin{pmatrix}\n");
        for (row = 0; row < mat->rows; ++row) {
-               if (*p == INF_COSTS) {
-                       fputs("\t inf", f);
-                       p++;
-               } else {
-                       fprintf(f, "\t %6d", *p++);
-               }
+               fprintf(f, "\t %s", cost2a(*p++));
 
                for (col = 1; col < mat->cols; ++col) {
-                       if (*p == INF_COSTS) {
-                               fputs("& inf", f);
-                               p++;
-                       } else {
-                               fprintf(f, "& %6d", *p++);
-                       }
+                       fprintf(f, "& %s", cost2a(*p++));
                }
                fprintf(f, "\\\\\n");
        }
@@ -70,7 +62,7 @@ void dump_edge(pbqp *pbqp, pbqp_edge *edge)
 {
        fputs("<tex>\n", pbqp->dump_file);
        fprintf(pbqp->dump_file, "\t\\overline\n{C}_{%d,%d}=\n",
-                       edge->src, edge->tgt);
+                       edge->src->index, edge->tgt->index);
        dump_matrix(pbqp->dump_file, edge->costs);
        fputs("</tex><br>", pbqp->dump_file);
 }
@@ -93,7 +85,7 @@ static void dump_edge_costs(pbqp *pbqp)
                unsigned len = ARR_LEN(src_node->edges);
                for (edge_index = 0; edge_index < len; ++edge_index) {
                        pbqp_edge *edge = src_node->edges[edge_index];
-                       unsigned tgt_index = edge->tgt;
+                       unsigned tgt_index = edge->tgt->index;
                        if (src_index < tgt_index) {
                                dump_edge(pbqp, edge);
                        }
@@ -102,14 +94,13 @@ static void dump_edge_costs(pbqp *pbqp)
        fputs("</p>", pbqp->dump_file);
 }
 
-void dump_node(pbqp *pbqp, unsigned index)
+void dump_node(pbqp *pbqp, pbqp_node *node)
 {
        assert(pbqp);
        assert(pbqp->dump_file);
 
-       pbqp_node *node = get_node(pbqp, index);
        if (node) {
-               fprintf(pbqp->dump_file, "\tc<sub>%d</sub> = ", index);
+               fprintf(pbqp->dump_file, "\tc<sub>%d</sub> = ", node->index);
                dump_vector(pbqp->dump_file, node->costs);
                fputs("<br>\n", pbqp->dump_file);
        }
@@ -125,7 +116,7 @@ static void dump_node_costs(pbqp *pbqp)
        /* dump node costs */
        fputs("<p>", pbqp->dump_file);
        for (index = 0; index < pbqp->num_nodes; ++index) {
-               dump_node(pbqp, index);
+               dump_node(pbqp, get_node(pbqp, index));
        }
        fputs("</p>", pbqp->dump_file);
 }
@@ -147,7 +138,7 @@ void pbqp_dump_graph(pbqp *pbqp)
        fputs("<p>\n<graph>\n\tgraph input {\n", pbqp->dump_file);
        for (src_index = 0; src_index < pbqp->num_nodes; ++src_index) {
                pbqp_node *node = get_node(pbqp, src_index);
-               if (node) {
+               if (node && !node_is_reduced(node)) {
                        fprintf(pbqp->dump_file, "\t n%d;\n", src_index);
                }
        }
@@ -158,10 +149,17 @@ void pbqp_dump_graph(pbqp *pbqp)
                if (!node)
                        continue;
 
+               if (node_is_reduced(node))
+                       continue;
+
                unsigned len = ARR_LEN(node->edges);
                unsigned edge_index;
                for (edge_index = 0; edge_index < len; ++edge_index) {
-                       unsigned tgt_index = node->edges[edge_index]->tgt;
+                       pbqp_node *tgt_node = node->edges[edge_index]->tgt;
+                       unsigned tgt_index = tgt_node->index;
+
+                       if (node_is_reduced(tgt_node))
+                               continue;
 
                        if (src_index < tgt_index) {
                                fprintf(pbqp->dump_file, "\t n%d -- n%d;\n", src_index,