X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeschedrand.c;h=394b7713f208edb72f4dd8d15ef8c1106d9208b3;hb=3dff5ea08f916551668dc18b449327a8a593bc9f;hp=6472228d6aab4ff59f8f81cde8343f2a83ee68c7;hpb=a09efb2ccc91c6d720aa6aa8c5f7e3c562528b2a;p=libfirm diff --git a/ir/be/beschedrand.c b/ir/be/beschedrand.c index 6472228d6..394b7713f 100644 --- a/ir/be/beschedrand.c +++ b/ir/be/beschedrand.c @@ -22,7 +22,6 @@ * @brief Random node selector. * @author Matthias Braun * @date 29.08.2006 - * @version $Id$ */ #include "config.h" @@ -36,44 +35,39 @@ * The random selector: * Just assure that branches are executed last, otherwise select a random node */ -static ir_node *random_select(void *block_env, ir_nodeset_t *ready_set, - ir_nodeset_t *live_set) +static ir_node *random_select(void *block_env, ir_nodeset_t *ready_set) { - ir_nodeset_iterator_t iter; - ir_node *irn = NULL; int only_branches_left = 1; (void)block_env; - (void)live_set; /* assure that branches and constants are executed last */ - ir_nodeset_iterator_init(&iter, ready_set); - while ( (irn = ir_nodeset_iterator_next(&iter)) != NULL) { + foreach_ir_nodeset(ready_set, irn, iter) { if (!is_cfop(irn)) { only_branches_left = 0; break; } } + ir_node *rand_node = NULL; if (only_branches_left) { /* at last: schedule branches */ - ir_nodeset_iterator_init(&iter, ready_set); - irn = ir_nodeset_iterator_next(&iter); + rand_node = ir_nodeset_first(ready_set); } else { do { /* take 1 random node */ int n = rand() % ir_nodeset_size(ready_set); int i = 0; - ir_nodeset_iterator_init(&iter, ready_set); - while ((irn = ir_nodeset_iterator_next(&iter)) != NULL) { + foreach_ir_nodeset(ready_set, irn, iter) { + rand_node = irn; if (i == n) { break; } ++i; } - } while (is_cfop(irn)); + } while (is_cfop(rand_node)); } - return irn; + return rand_node; } static void *random_init_graph(ir_graph *irg) @@ -105,7 +99,7 @@ static void sched_random(ir_graph *irg) be_list_sched_graph(irg, &random_selector); } -BE_REGISTER_MODULE_CONSTRUCTOR(be_init_sched_rand); +BE_REGISTER_MODULE_CONSTRUCTOR(be_init_sched_rand) void be_init_sched_rand(void) { be_register_scheduler("random", sched_random);