fix cltd
[libfirm] / ir / be / beifg.c
index 1827de1..c047a14 100644 (file)
@@ -24,9 +24,7 @@
  * @date        18.11.2005
  * @version     $Id$
  */
-#ifdef HAVE_CONFIG_H
 #include "config.h"
-#endif
 
 #include <stdlib.h>
 
@@ -48,7 +46,7 @@
 
 #include "becopystat.h"
 #include "becopyopt.h"
-#include "beirg_t.h"
+#include "beirg.h"
 #include "bemodule.h"
 
 /** Defines values for the ifg performance test */
@@ -59,7 +57,6 @@ typedef struct _coloring_t coloring_t;
 
 struct _coloring_t {
        ir_phase         ph;
-       const arch_env_t *arch_env;
        ir_graph         *irg;
 };
 
@@ -80,16 +77,15 @@ size_t (be_ifg_cliques_iter_size)(const be_ifg_t *ifg)
 
 static void *regs_irn_data_init(ir_phase *ph, const ir_node *irn, void *data)
 {
-       coloring_t *coloring = (coloring_t *) ph;
-       (void) data;
+       (void)ph;
+       (void)data;
 
-       return (void *) arch_get_irn_register(coloring->arch_env, irn);
+       return (void*)arch_get_irn_register(irn);
 }
 
-coloring_t *coloring_init(coloring_t *c, ir_graph *irg, const arch_env_t *aenv)
+static coloring_t *coloring_init(coloring_t *c, ir_graph *irg)
 {
        phase_init(&c->ph, "regs_map", irg, PHASE_DEFAULT_GROWTH, regs_irn_data_init, NULL);
-       c->arch_env = aenv;
        c->irg = irg;
        return c;
 }
@@ -105,15 +101,15 @@ static void restore_irn_color(ir_node *irn, void *c)
        coloring_t *coloring = c;
        const arch_register_t *reg = phase_get_irn_data(&coloring->ph, irn);
        if(reg)
-               arch_set_irn_register(coloring->arch_env, irn, reg);
+               arch_set_irn_register(irn, reg);
 }
 
-void coloring_save(coloring_t *c)
+static void coloring_save(coloring_t *c)
 {
        irg_walk_graph(c->irg, NULL, get_irn_color, c);
 }
 
-void coloring_restore(coloring_t *c)
+static void coloring_restore(coloring_t *c)
 {
        irg_walk_graph(c->irg, NULL, restore_irn_color, c);
 }
@@ -400,7 +396,7 @@ void be_ifg_check_performance(be_chordal_env_t *chordal_env)
 
        if (get_irg_estimated_node_cnt(chordal_env->irg) >= BE_CH_PERFORMANCETEST_MIN_NODES)
        {
-               coloring_init(&coloring, chordal_env->irg, chordal_env->birg->main_env->arch_env);
+               coloring_init(&coloring, chordal_env->irg);
                coloring_save(&coloring);
 
                ir_timer_reset(timer);
@@ -640,16 +636,20 @@ void be_ifg_dump_dot(be_ifg_t *ifg, ir_graph *irg, FILE *file, const be_ifg_dump
        bitset_free(nodes);
 }
 
-static void int_comp_rec(be_irg_t *birg, be_ifg_t *ifg, ir_node *n, bitset_t *seen)
+static void int_comp_rec(be_ifg_t *ifg, ir_node *n, bitset_t *seen)
 {
        void    *neigh_it = be_ifg_neighbours_iter_alloca(ifg);
        ir_node *m;
 
        be_ifg_foreach_neighbour(ifg, neigh_it, n, m) {
-               if(!bitset_contains_irn(seen, m) && !arch_irn_is(birg->main_env->arch_env, m, ignore)) {
-                       bitset_add_irn(seen, m);
-                       int_comp_rec(birg, ifg, m, seen);
-               }
+               if (bitset_contains_irn(seen, m))
+                       continue;
+
+               if (arch_get_register_req_out(m)->type & arch_register_req_type_ignore)
+                       continue;
+
+               bitset_add_irn(seen, m);
+               int_comp_rec(ifg, m, seen);
        }
 
 }
@@ -663,11 +663,15 @@ static int int_component_stat(be_irg_t *birg, be_ifg_t *ifg)
        ir_node *n;
 
        be_ifg_foreach_node(ifg, nodes_it, n) {
-               if (! bitset_contains_irn(seen, n) && ! arch_irn_is(birg->main_env->arch_env, n, ignore)) {
-                       ++n_comp;
-                       bitset_add_irn(seen, n);
-                       int_comp_rec(birg, ifg, n, seen);
-               }
+               if (bitset_contains_irn(seen, n))
+                       continue;
+
+               if (arch_get_register_req_out(n)->type & arch_register_req_type_ignore)
+                       continue;
+
+               ++n_comp;
+               bitset_add_irn(seen, n);
+               int_comp_rec(ifg, n, seen);
        }
 
        free(seen);