BugFix: when a node in schedule got exchanged, it is turned into Bad: do not set...
[libfirm] / ir / be / beifg_std.c
index 8feeefa..226ddd3 100644 (file)
@@ -41,7 +41,9 @@ static void ifg_std_free(void *self)
 
 static int ifg_std_connected(const void *self, const ir_node *a, const ir_node *b)
 {
-       return values_interfere(a, b);
+       const ifg_std_t *ifg = self;
+       be_lv_t *lv = ifg->env->birg->lv;
+       return values_interfere(lv, a, b);
 }
 
 typedef struct _nodes_iter_t {
@@ -77,6 +79,7 @@ static void find_nodes(const void *self, void *iter) {
        it->env   = ifg->env;
 
        irg_block_walk_graph(ifg->env->irg, nodes_walker, NULL, iter);
+       obstack_ptr_grow(&it->obst, NULL);
        it->nodes = obstack_finish(&it->obst);
 }
 
@@ -132,7 +135,7 @@ static void find_neighbour_walker(ir_node *block, void *data)
        border_t *b;
        int has_started = 0;
 
-       if(!is_live_in(block, it->irn) && block != get_nodes_block(it->irn))
+       if(!be_is_live_in(it->env->birg->lv, block, it->irn) && block != get_nodes_block(it->irn))
                return;
 
        foreach_border_head(head, b) {
@@ -235,7 +238,7 @@ static INLINE int get_next_clique(cliques_iter_t *it) {
                int output_on_shrink = 0;
                struct list_head *head = get_block_border_head(it->cenv, it->blocks[it->blk]);
 
-               /* on entry to a new block set the first border ...
+               /* on entry to a new block set the first border ... */
                if (!it->bor)
                        it->bor = head->prev;
 
@@ -284,7 +287,7 @@ static int ifg_std_cliques_begin(const void *self, void *iter, ir_node **buf)
 {
        const ifg_std_t *ifg = self;
        cliques_iter_t *it = iter;
-       ir_node *start_bl = get_irg_start_block(it->cenv->irg);
+       ir_node *start_bl = get_irg_start_block(ifg->env->irg);
 
        obstack_init(&it->ob);
        dom_tree_walk(start_bl, get_blocks_dom_order, NULL, it);
@@ -342,7 +345,7 @@ static const be_ifg_impl_t ifg_std_impl = {
 
 be_ifg_t *be_ifg_std_new(const be_chordal_env_t *env)
 {
-       ifg_std_t *ifg = malloc(sizeof(*ifg));
+       ifg_std_t *ifg = xmalloc(sizeof(*ifg));
 
        ifg->impl = &ifg_std_impl;
        ifg->env  = env;