X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeifg_list.c;h=c853b97a20de7f3680778e32021ac7e291f6f257;hb=04321ea9f9ac1185bd7092813c34683aa15cd05f;hp=5282d586193a7459a58b4325370c9c59e616e355;hpb=bb5461e3f6f900c09222814f2eec779684f28f73;p=libfirm diff --git a/ir/be/beifg_list.c b/ir/be/beifg_list.c index 5282d5861..c853b97a2 100644 --- a/ir/be/beifg_list.c +++ b/ir/be/beifg_list.c @@ -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. * @@ -24,26 +24,23 @@ * @date 18.11.2005 * @version $Id$ */ -#ifdef HAVE_CONFIG_H #include "config.h" -#endif #include -#include "benodesets.h" #include "list.h" #include "irnode_t.h" #include "irgraph_t.h" #include "irgwalk.h" -#include "bearch_t.h" +#include "beifg_impl.h" +#include "bearch.h" #include "be_t.h" #include "bera.h" #include "beifg_t.h" #include "bechordal_t.h" - typedef struct _adj_head_t adj_head_t; typedef struct _ifg_list_t { @@ -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);