cleanup: Remove duplicate MIN/MAX macros.
[libfirm] / ir / ana / dfs.c
index 52d1cb0..ef48022 100644 (file)
@@ -1,24 +1,10 @@
 /*
- * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
- *
  * This file is part of libFirm.
- *
- * This file may be distributed and/or modified under the terms of the
- * GNU General Public License version 2 as published by the Free Software
- * Foundation and appearing in the file LICENSE.GPL included in the
- * packaging of this file.
- *
- * Licensees holding valid libFirm Professional Edition licenses may use
- * this file in accordance with the libFirm Commercial License.
- * Agreement provided with the Software.
- *
- * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
- * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE.
+ * Copyright (C) 2012 University of Karlsruhe.
  */
 
 /**
- * @file    dfs.c
+ * @file
  * @author  Sebastian Hack
  * @date    20.04.2007
  * @brief
@@ -35,7 +21,7 @@
 #include "irprintf.h"
 #include "irdom_t.h"
 #include "set.h"
-#include "statev.h"
+#include "statev_t.h"
 #include "dfs_t.h"
 #include "util.h"
 
@@ -68,7 +54,7 @@ static dfs_edge_t *get_edge(const dfs_t *self, const void *src, const void *tgt)
        templ.tgt = tgt;
        templ.kind = (dfs_edge_kind_t) -1;
 
-       return (dfs_edge_t*) set_insert(self->edges, &templ, sizeof(templ), hash);
+       return set_insert(dfs_edge_t, self->edges, &templ, sizeof(templ), hash);
 }
 
 static void dfs_perform(dfs_t *dfs, void *n, void *anc, int level)
@@ -113,13 +99,12 @@ static void dfs_perform(dfs_t *dfs, void *n, void *anc, int level)
 
 static void classify_edges(dfs_t *dfs)
 {
-       dfs_edge_t *edge;
        stat_ev_cnt_decl(anc);
        stat_ev_cnt_decl(back);
        stat_ev_cnt_decl(fwd);
        stat_ev_cnt_decl(cross);
 
-       foreach_set (dfs->edges, dfs_edge_t*, edge) {
+       foreach_set (dfs->edges, dfs_edge_t, edge) {
                dfs_node_t *src = edge->s;
                dfs_node_t *tgt = edge->t;
 
@@ -160,7 +145,6 @@ dfs_edge_kind_t dfs_get_edge_kind(const dfs_t *dfs, const void *a, const void *b
 dfs_t *dfs_new(const absgraph_t *graph_impl, void *graph_self)
 {
        dfs_t *res = XMALLOC(dfs_t);
-       dfs_node_t *node;
 
        res->graph_impl = graph_impl;
        res->graph      = graph_self;
@@ -176,7 +160,7 @@ dfs_t *dfs_new(const absgraph_t *graph_impl, void *graph_self)
        dfs_perform(res, graph_impl->get_root(graph_self), NULL, 0);
 
        /* make sure the end node (which might not be accessible) has a number */
-       node = get_node(res, graph_impl->get_end(graph_self));
+       dfs_node_t *const node = get_node(res, graph_impl->get_end(graph_self));
        if (!node->visited) {
                node->visited     = 1;
                node->node        = graph_impl->get_end(graph_self);
@@ -192,7 +176,7 @@ dfs_t *dfs_new(const absgraph_t *graph_impl, void *graph_self)
        assert(res->pre_num == res->post_num);
        res->pre_order  = XMALLOCN(dfs_node_t*, res->pre_num);
        res->post_order = XMALLOCN(dfs_node_t*, res->post_num);
-       foreach_set (res->nodes, dfs_node_t*, node) {
+       foreach_set (res->nodes, dfs_node_t, node) {
                assert(node->pre_num < res->pre_num);
                assert(node->post_num < res->post_num);
 
@@ -207,6 +191,7 @@ dfs_t *dfs_new(const absgraph_t *graph_impl, void *graph_self)
 
 void dfs_free(dfs_t *dfs)
 {
+       obstack_free(&dfs->obst, NULL);
        del_set(dfs->nodes);
        del_set(dfs->edges);
        xfree(dfs->pre_order);
@@ -249,12 +234,10 @@ static int node_level_cmp(const void *a, const void *b)
 void dfs_dump(const dfs_t *dfs, FILE *file)
 {
        dfs_node_t **nodes = XMALLOCN(dfs_node_t*, dfs->pre_num);
-       dfs_node_t *node;
-       dfs_edge_t *edge;
        int i, n = 0;
 
        ir_fprintf(file, "digraph G {\nranksep=0.5\n");
-       foreach_set (dfs->nodes, dfs_node_t*, node) {
+       foreach_set (dfs->nodes, dfs_node_t, node) {
                nodes[n++] = node;
        }
 
@@ -273,16 +256,11 @@ void dfs_dump(const dfs_t *dfs, FILE *file)
        }
 
        for (i = 0; i < n; ++i) {
-               node = nodes[i];
+               dfs_node_t *const node = nodes[i];
                ir_fprintf(file, "\tn%d [label=\"%d\"]\n", node->pre_num, get_Block_dom_tree_pre_num((ir_node*) node->node));
-#if 0
-               ir_fprintf(file, "\tn%d [shape=box,label=\"%+F\\l%d %d/%d %d\"];\n",
-                               node->pre_num, node->node, get_Block_dom_tree_pre_num(node->node),
-                               node->pre_num, node->post_num, node->max_pre_num);
-#endif
        }
 
-       foreach_set (dfs->edges, dfs_edge_t*, edge)
+       foreach_set (dfs->edges, dfs_edge_t, edge)
                dfs_dump_edge(edge, file);
 
        ir_fprintf(file, "}\n");