Do not mark the transformed as visited. It makes no sense at all.
[libfirm] / ir / be / beverify.c
index c203442..2e1b0f5 100644 (file)
@@ -762,7 +762,7 @@ static void check_register_constraints(ir_node *node)
                        ir_node               *pred     = get_Phi_pred(node, i);
                        const arch_register_t *pred_reg = arch_get_irn_register(arch_env, pred);
 
-                       if (reg != pred_reg) {
+                       if (reg != pred_reg && !arch_register_type_is(pred_reg, joker)) {
                                ir_fprintf(stderr, "Verify warning: Input %d of %+F in block %+F(%s) uses register %s instead of %s\n",
                                           i, node, get_nodes_block(node), get_irg_dump_name(irg), pred_reg->name, reg->name);
                                problem_found = 1;
@@ -822,20 +822,18 @@ static void verify_block_register_allocation(ir_node *block, void *data) {
        nregclasses = arch_env_get_n_reg_class(arch_env);
        for (i = 0; i < nregclasses; ++i) {
                ir_node               *node;
-               int                    i2;
+               int                   idx, i2, n_regs;
 
                regclass = arch_env_get_reg_class(arch_env, i);
 
-               int i;
-
                assert(lv->nodes && "live sets must be computed");
 
-               int n_regs = arch_register_class_n_regs(regclass);
-               registers  = alloca(n_regs * sizeof(registers[0]));
+               n_regs    = arch_register_class_n_regs(regclass);
+               registers = alloca(n_regs * sizeof(registers[0]));
                memset(registers, 0, n_regs * sizeof(registers[0]));
 
-               be_lv_foreach(lv, block, be_lv_state_end, i) {
-                       ir_node *node = be_lv_get_irn(lv, block, i);
+               be_lv_foreach(lv, block, be_lv_state_end, idx) {
+                       ir_node *node = be_lv_get_irn(lv, block, idx);
                        value_used(node);
                }
 
@@ -863,8 +861,8 @@ static void verify_block_register_allocation(ir_node *block, void *data) {
                        }
                }
 
-               be_lv_foreach(lv, block, be_lv_state_in, i) {
-                       ir_node *node = be_lv_get_irn(lv, block, i);
+               be_lv_foreach(lv, block, be_lv_state_in, idx) {
+                       ir_node *node = be_lv_get_irn(lv, block, idx);
                        value_def(node);
                }
 
@@ -910,9 +908,8 @@ static void check_out_edges(ir_node *node, verify_out_dead_nodes_env *env) {
        ir_graph *irg = env->irg;
        const ir_edge_t* edge;
 
-       if(irn_visited(node))
+       if (irn_visited_else_mark(node))
                return;
-       mark_irn_visited(node);
 
        /* we find too many (uncritical) dead nodes in block out edges */
        if(is_Block(node))