* @file dfs.c
* @author Sebastian Hack
* @date 20.04.2007
- * @version $Id$
* @brief
*
* Simple depth first search on CFGs.
#define DISABLE_STATEV
#include <assert.h>
-#include "irtools.h"
#include "irprintf.h"
-#include "irdom.h"
+#include "irdom_t.h"
#include "set.h"
#include "statev.h"
#include "dfs_t.h"
+#include "util.h"
static int cmp_edge(const void *a, const void *b, size_t sz)
{
static dfs_edge_t *get_edge(const dfs_t *self, const void *src, const void *tgt)
{
- unsigned hash = HASH_COMBINE(HASH_PTR(src), HASH_PTR(tgt));
+ unsigned hash = hash_combine(hash_ptr(src), hash_ptr(tgt));
dfs_edge_t templ;
templ.src = src;
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;
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);
void dfs_free(dfs_t *dfs)
{
+ obstack_free(&dfs->obst, NULL);
del_set(dfs->nodes);
del_set(dfs->edges);
xfree(dfs->pre_order);
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;
}
}
for (i = 0; i < n; ++i) {
- dfs_node_t *node = nodes[i];
+ 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",
#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");