beifg: Let be_ifg_foreach_node() declare its iterator internally.
authorChristoph Mallon <christoph.mallon@gmx.de>
Sat, 15 Dec 2012 09:28:50 +0000 (10:28 +0100)
committerChristoph Mallon <christoph.mallon@gmx.de>
Sat, 15 Dec 2012 21:03:45 +0000 (22:03 +0100)
ir/be/becopyheur4.c
ir/be/becopyilp.c
ir/be/becopyilp2.c
ir/be/becopyopt.c
ir/be/bedump.c
ir/be/beifg.c
ir/be/beifg.h

index 57df554..8c94f37 100644 (file)
@@ -622,13 +622,10 @@ static int count_interfering_aff_neighs(co_mst_env_t *env, const affinity_node_t
  */
 static void build_affinity_chunks(co_mst_env_t *env)
 {
-       nodes_iter_t nodes_it;
-       aff_edge_t  *edges    = NEW_ARR_F(aff_edge_t, 0);
-       int         i, len;
-       size_t      pn;
+       aff_edge_t *edges = NEW_ARR_F(aff_edge_t, 0);
 
        /* at first we create the affinity edge objects */
-       be_ifg_foreach_node(env->ifg, &nodes_it, n) {
+       be_ifg_foreach_node(env->ifg, n) {
                int             n_idx = get_irn_idx(n);
                co_mst_irn_t    *n1;
                affinity_node_t *an;
@@ -677,9 +674,9 @@ static void build_affinity_chunks(co_mst_env_t *env)
        }
 
        /* now: sort edges and build the affinity chunks */
-       len = ARR_LEN(edges);
+       size_t const len = ARR_LEN(edges);
        qsort(edges, len, sizeof(edges[0]), cmp_aff_edge);
-       for (i = 0; i < len; ++i) {
+       for (size_t i = 0; i < len; ++i) {
                DBG((dbg, LEVEL_1, "edge (%u,%u) %f\n", edges[i].src->node_idx, edges[i].tgt->node_idx, edges[i].weight));
 
                (void)aff_chunk_absorb(env, edges[i].src, edges[i].tgt);
@@ -696,7 +693,7 @@ static void build_affinity_chunks(co_mst_env_t *env)
                pqueue_put(env->chunks, curr_chunk, curr_chunk->weight);
        }
 
-       for (pn = 0; pn < ARR_LEN(env->map.data); ++pn) {
+       for (size_t pn = 0; pn < ARR_LEN(env->map.data); ++pn) {
                co_mst_irn_t *mirn = (co_mst_irn_t*)env->map.data[pn];
                if (mirn == NULL)
                        continue;
index 48077b4..f4a06ab 100644 (file)
@@ -119,11 +119,10 @@ void sr_remove(size_red_t *sr)
 {
        bool redo = true;
        const be_ifg_t *ifg = sr->co->cenv->ifg;
-       nodes_iter_t iter;
 
        while (redo) {
                redo = false;
-               be_ifg_foreach_node(ifg, &iter, irn) {
+               be_ifg_foreach_node(ifg, irn) {
                        const arch_register_req_t *req = arch_get_irn_register_req(irn);
                        coloring_suffix_t *cs;
 
index ee1c4eb..f3eefa3 100644 (file)
@@ -73,11 +73,10 @@ static void build_coloring_cstr(ilp_env_t *ienv)
        be_ifg_t       *ifg    = ienv->co->cenv->ifg;
        unsigned        n_regs = arch_register_class_n_regs(ienv->co->cls);
        const unsigned *allocatable_colors = lenv->allocatable_colors;
-       nodes_iter_t    iter;
        char            buf[32];
 
        unsigned *const colors = rbitset_alloca(n_regs);
-       be_ifg_foreach_node(ifg, &iter, irn) {
+       be_ifg_foreach_node(ifg, irn) {
                const arch_register_req_t *req;
                unsigned                   col;
                int                        cst_idx;
index 2324524..6868878 100644 (file)
@@ -885,7 +885,6 @@ static void co_dump_appel_graph(const copy_opt_t *co, FILE *f)
        ir_graph *irg       = co->irg;
        be_irg_t *birg      = be_birg_from_irg(irg);
 
-       nodes_iter_t it;
        neighbours_iter_t nit;
        int n, n_regs;
        unsigned i;
@@ -906,7 +905,7 @@ static void co_dump_appel_graph(const copy_opt_t *co, FILE *f)
         */
 
        n = n_regs;
-       be_ifg_foreach_node(ifg, &it, irn) {
+       be_ifg_foreach_node(ifg, irn) {
                if (arch_irn_is_ignore(irn))
                        continue;
                node_map[get_irn_idx(irn)] = n++;
@@ -914,7 +913,7 @@ static void co_dump_appel_graph(const copy_opt_t *co, FILE *f)
 
        fprintf(f, "%d %d\n", n, n_regs);
 
-       be_ifg_foreach_node(ifg, &it, irn) {
+       be_ifg_foreach_node(ifg, irn) {
                arch_register_req_t const *const req = arch_get_irn_register_req(irn);
                if (arch_register_req_is(req, ignore))
                        continue;
index 36e34c3..ce7421f 100644 (file)
 
 static void dump_ifg_nodes(FILE *F, const be_ifg_t *ifg)
 {
-       nodes_iter_t ifg_iter;
-       be_ifg_foreach_node(ifg, &ifg_iter, node) {
+       be_ifg_foreach_node(ifg, node) {
                dump_node(F, node);
        }
 }
 
 static void dump_ifg_edges(FILE *F, const be_ifg_t *ifg)
 {
-       nodes_iter_t ifg_iter;
-
-       be_ifg_foreach_node(ifg, &ifg_iter, node) {
+       be_ifg_foreach_node(ifg, node) {
                neighbours_iter_t neigh_iter;
 
                be_ifg_foreach_neighbour(ifg, &neigh_iter, node, neighbour) {
index 66a1695..a321ae7 100644 (file)
@@ -304,10 +304,9 @@ static void int_comp_rec(be_ifg_t *ifg, ir_node *n, bitset_t *seen)
 static int int_component_stat(ir_graph *irg, be_ifg_t *ifg)
 {
        int      n_comp    = 0;
-       nodes_iter_t nodes_it;
        bitset_t *seen     = bitset_malloc(get_irg_last_idx(irg));
 
-       be_ifg_foreach_node(ifg, &nodes_it, n) {
+       be_ifg_foreach_node(ifg, n) {
                if (bitset_is_set(seen, get_irn_idx(n)))
                        continue;
 
@@ -326,12 +325,11 @@ static int int_component_stat(ir_graph *irg, be_ifg_t *ifg)
 
 void be_ifg_stat(ir_graph *irg, be_ifg_t *ifg, be_ifg_stat_t *stat)
 {
-       nodes_iter_t      nodes_it;
        neighbours_iter_t neigh_it;
 
        size_t n_nodes = 0;
        size_t n_edges = 0;
-       be_ifg_foreach_node(ifg, &nodes_it, n) {
+       be_ifg_foreach_node(ifg, n) {
                ++n_nodes;
                be_ifg_foreach_neighbour(ifg, &neigh_it, n, m) {
                        ++n_edges;
index fb88a3d..4b5032d 100644 (file)
@@ -65,8 +65,10 @@ int      be_ifg_degree(const be_ifg_t *ifg, const ir_node *irn);
 #define be_ifg_foreach_neighbour(ifg, iter, irn, pos) \
        for (ir_node *pos = be_ifg_neighbours_begin(ifg, iter, irn); pos; pos = be_ifg_neighbours_next(iter))
 
-#define be_ifg_foreach_node(ifg, iter, pos) \
-       for (ir_node *pos = be_ifg_nodes_begin(ifg, iter); pos; pos = be_ifg_nodes_next(iter))
+#define be_ifg_foreach_node(ifg, pos) \
+       for (bool pos##__once = true; pos##__once;) \
+               for (nodes_iter_t pos##__iter; pos##__once; pos##__once = false) \
+                       for (ir_node *pos = be_ifg_nodes_begin(ifg, &pos##__iter); pos; pos = be_ifg_nodes_next(&pos##__iter))
 
 #define be_ifg_foreach_clique(ifg, iter, buf, count) \
        for(*(count) = be_ifg_cliques_begin(ifg, iter, buf); \