use more IR_RESOURCE_TYPE_VISITED, remove pointless inc_master_type_visited calls
[libfirm] / ir / be / beifg_list.c
index 5282d58..117815e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1995-2007 University of Karlsruhe.  All right reserved.
+ * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
  *
  * This file is part of libFirm.
  *
  * @date        18.11.2005
  * @version     $Id$
  */
-#ifdef HAVE_CONFIG_H
 #include "config.h"
-#endif
 
 #include <stdlib.h>
 
-#include "benodesets.h"
 #include "list.h"
 
 #include "irnode_t.h"
 #include "irgraph_t.h"
 #include "irgwalk.h"
 
-#include "bearch_t.h"
+#include "bearch.h"
 #include "be_t.h"
 #include "bera.h"
 #include "beifg_t.h"
@@ -86,7 +83,7 @@ static void create_node(ifg_list_t *ifg, ir_node *irn)
        adj_head = ifg->adj_heads[irn->node_idx];
        if (!adj_head)
        {
-               adj_head = obstack_alloc(&ifg->obst, sizeof(*adj_head));
+               adj_head = OALLOC(&ifg->obst, adj_head_t);
                adj_head->irn = irn;
                adj_head->first_adj_element = NULL;
                adj_head->degree = 0;
@@ -98,7 +95,7 @@ static adj_element_t *create_adj_element(ifg_list_t *ifg, ir_node *irn)
 {
        adj_element_t *element = NULL;
 
-       element = obstack_alloc(&ifg->obst, sizeof(*element));
+       element = OALLOC(&ifg->obst, adj_element_t);
        element->next_adj_element = NULL;
        element->neighbour = irn;
 
@@ -171,10 +168,12 @@ static void find_neighbour_walker(ir_node *bl, void *data)
 {
        ifg_list_t       *ifg      = data;
        struct list_head *head     = get_block_border_head(ifg->env, bl);
-       nodeset          *live     = new_nodeset(ifg->env->cls->n_regs);
+       ir_nodeset_t      live;
        ir_node          *live_irn = NULL;
        border_t         *b        = NULL;
 
+       ir_nodeset_init(&live);
+
        assert(is_Block(bl) && "There is no block to work on");
 
        foreach_border_head(head, b) /* follow the borders of each block */
@@ -182,10 +181,12 @@ static void find_neighbour_walker(ir_node *bl, void *data)
                if (b->is_def)
                {
                        create_node(ifg, b->irn); /* add the node to the array of all nodes of this ifg implementation */
-                       nodeset_insert(live, b->irn);
+                       ir_nodeset_insert(&live, b->irn);
                        if (b->is_real) /* this is a new node */
                        {
-                               foreach_nodeset(live, live_irn)
+                               ir_nodeset_iterator_t iter;
+
+                               foreach_ir_nodeset(&live, live_irn, iter)
                                {
                                        if (b->irn != live_irn) /* add a as a neighbour to b and vice versa */
                                                add_edge(ifg, b->irn, live_irn);
@@ -194,13 +195,11 @@ static void find_neighbour_walker(ir_node *bl, void *data)
                }
                else /* b->irn is now dead */
                {
-                       if (nodeset_find(live, b->irn))
-                               nodeset_remove(live, b->irn);
+                       ir_nodeset_remove(&live, b->irn);
                }
        }
 
-       if (live)
-               del_nodeset(live);
+       ir_nodeset_destroy(&live);
 }
 
 static ir_node *get_first_node(const ifg_list_t *ifg, nodes_iter_t *it)
@@ -426,13 +425,12 @@ static const be_ifg_impl_t ifg_list_impl = {
 
 be_ifg_t *be_ifg_list_new(const be_chordal_env_t *env)
 {
-       ifg_list_t *ifg = xmalloc(sizeof(*ifg));
-       adj_head_t **adj_heads_array = xmalloc(env->irg->last_node_idx * sizeof(adj_heads_array[0]));
+       ifg_list_t  *ifg             = XMALLOC(ifg_list_t);
+       adj_head_t **adj_heads_array = XMALLOCNZ(adj_head_t*, env->irg->last_node_idx);
 
        ifg->impl = &ifg_list_impl;
        ifg->env  = env;
 
-       memset(adj_heads_array, 0, env->irg->last_node_idx * sizeof(adj_heads_array[0]));
        ifg->adj_heads = adj_heads_array;
 
        obstack_init(&ifg->obst);