X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeschedregpress.c;h=b939c8774b7fafe0a7cdcc37e98e1ecee2c27716;hb=d5975c9df2dee13abedf388f1d70397a2163b69f;hp=d43440e47c1d98706dff0e26e0b5c31fc6f2b385;hpb=0c92b911be3d9d02b4a49b2a142dab8d7ba978a6;p=libfirm diff --git a/ir/be/beschedregpress.c b/ir/be/beschedregpress.c index d43440e47..b939c8774 100644 --- a/ir/be/beschedregpress.c +++ b/ir/be/beschedregpress.c @@ -1,9 +1,28 @@ +/* + * Copyright (C) 1995-2007 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. + */ + /** - * Regpressure node selector. - * Originally implemented by Sebastian Hack. - * @author Christian Wuerdig - * @date 29.08.2006 - * @cvs-id $Id$ + * @file + * @brief Regpressure node selector. + * @author Sebastian Hack + * @date 29.08.2006 + * @version $Id$ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -37,7 +56,7 @@ typedef struct { struct obstack obst; const reg_pressure_main_env_t *main_env; usage_stats_t *root; - nodeset *already_scheduled; + ir_nodeset_t already_scheduled; } reg_pressure_selector_env_t; @@ -107,7 +126,7 @@ static int max_hops_walker(reg_pressure_selector_env_t *env, ir_node *irn, ir_no * If the node is in the current block but not * yet scheduled, we keep on searching from that node. */ - if(!nodeset_find(env->already_scheduled, irn)) { + if(!ir_nodeset_contains(&env->already_scheduled, irn)) { int i, n; int res = 0; for(i = 0, n = get_irn_ins_or_deps(irn); i < n; ++i) { @@ -181,7 +200,7 @@ static void *reg_pressure_block_init(void *graph_env, ir_node *bl) reg_pressure_selector_env_t *env = xmalloc(sizeof(env[0])); obstack_init(&env->obst); - env->already_scheduled = new_nodeset(32); + ir_nodeset_init(&env->already_scheduled); env->root = NULL; env->main_env = graph_env; @@ -219,7 +238,7 @@ static void reg_pressure_block_free(void *block_env) set_irn_link(us->irn, NULL); obstack_free(&env->obst, NULL); - del_nodeset(env->already_scheduled); + ir_nodeset_destroy(&env->already_scheduled); free(env); } @@ -257,15 +276,18 @@ static INLINE int reg_pr_costs(reg_pressure_selector_env_t *env, ir_node *irn) return sum; } -static ir_node *reg_pressure_select(void *block_env, nodeset *ready_set, nodeset *live_set) +static ir_node *reg_pressure_select(void *block_env, ir_nodeset_t *ready_set, + ir_nodeset_t *live_set) { + ir_nodeset_iterator_t iter; reg_pressure_selector_env_t *env = block_env; ir_node *irn, *res = NULL; int curr_cost = INT_MAX; - assert(nodeset_count(ready_set) > 0); + assert(ir_nodeset_size(ready_set) > 0); - for (irn = nodeset_first(ready_set); irn; irn = nodeset_next(ready_set)) { + ir_nodeset_iterator_init(&iter, ready_set); + while( (irn = ir_nodeset_iterator_next(&iter)) != NULL) { /* Ignore branch instructions for the time being. They should only be scheduled if there is nothing else. @@ -285,13 +307,13 @@ static ir_node *reg_pressure_select(void *block_env, nodeset *ready_set, nodeset */ if(!res) { - res = nodeset_first(ready_set); - nodeset_break(ready_set); + ir_nodeset_iterator_init(&iter, ready_set); + res = ir_nodeset_iterator_next(&iter); assert(res && "There must be a node scheduled."); } - nodeset_insert(env->already_scheduled, res); + ir_nodeset_insert(&env->already_scheduled, res); return res; }