+static int node_level_cmp(const void *a, const void *b)
+{
+ const dfs_node_t *p = *(const dfs_node_t **) a;
+ const dfs_node_t *q = *(const dfs_node_t **) b;
+
+ if (p->level == q->level)
+ return p->pre_num - q->pre_num;
+ return p->level - q->level;
+}
+
+void dfs_dump(const dfs_t *dfs, FILE *file)
+{
+ dfs_node_t **nodes = XMALLOCN(dfs_node_t*, dfs->pre_num);
+ int i, n = 0;
+
+ ir_fprintf(file, "digraph G {\nranksep=0.5\n");
+ foreach_set (dfs->nodes, dfs_node_t, node) {
+ nodes[n++] = node;