values may die at every use
[libfirm] / ir / be / besched.c
index d9bcb8c..de56784 100644 (file)
@@ -276,24 +276,22 @@ static void mark_dead_nodes_walker(ir_node *node, void *data)
 static void remove_dead_nodes_walker(ir_node *block, void *data)
 {
        remove_dead_nodes_env_t *env = (remove_dead_nodes_env_t*) data;
-       ir_node *node;
+       ir_node *node, *next;
 
-       for(node = sched_first(block); !sched_is_end(node); ) {
-               // get next node now, as after calling sched_remove it will be invalid
-               ir_node* next = sched_next(node);
+       for(node = sched_first(block); !sched_is_end(node); node = next) {
                int i, arity;
 
-               if(bitset_is_set(env->reachable, get_irn_idx(node))) {
-                       node = next;
+               // get next node now, as after calling sched_remove it will be invalid
+               next = sched_next(node);
+
+               if(bitset_is_set(env->reachable, get_irn_idx(node)))
                        continue;
-               }
 
-               sched_remove(node);
                arity = get_irn_arity(node);
                for(i = 0; i < arity; ++i)
                        set_irn_n(node, i, new_r_Bad(env->irg));
 
-               node = next;
+               sched_remove(node);
        }
 }