[runtime] Simplify mono-debug.c since we no longer have to serialize a lot of the...
[mono.git] / mono / mini / branch-opts.c
index bd2b2d804581152078c8cf1f68904e6b2711cc26..2be95e736424d43c562b3e52612273e3372788f1 100644 (file)
@@ -971,6 +971,12 @@ mono_merge_basic_blocks (MonoCompile *cfg, MonoBasicBlock *bb, MonoBasicBlock *b
        bb->has_array_access |= bbn->has_array_access;
        bb->extended |= bbn->extended;
 
+       /* Compute prev_bb if possible to avoid the linear search below */
+       prev_bb = NULL;
+       for (i = 0; i < bbn->in_count; ++i)
+               if (bbn->in_bb [0]->next_bb == bbn)
+                       prev_bb = bbn->in_bb [0];
+
        mono_unlink_bblock (cfg, bb, bbn);
        for (i = 0; i < bbn->out_count; ++i)
                mono_link_bblock (cfg, bb, bbn->out_bb [i]);
@@ -1023,8 +1029,10 @@ mono_merge_basic_blocks (MonoCompile *cfg, MonoBasicBlock *bb, MonoBasicBlock *b
                bb->last_ins = bbn->last_ins;
        }
 
-       for (prev_bb = cfg->bb_entry; prev_bb && prev_bb->next_bb != bbn; prev_bb = prev_bb->next_bb)
-               ;
+       if (!prev_bb) {
+               for (prev_bb = cfg->bb_entry; prev_bb && prev_bb->next_bb != bbn; prev_bb = prev_bb->next_bb)
+                       ;
+       }
        if (prev_bb) {
                prev_bb->next_bb = bbn->next_bb;
        } else {
@@ -1291,7 +1299,7 @@ mono_optimize_branches (MonoCompile *cfg)
 
                                        /* branches to the following block can be removed */
                                        if (bb->last_ins && bb->last_ins->opcode == OP_BR && !bbn->out_of_line) {
-                                               bb->last_ins->opcode = OP_NOP;
+                                               NULLIFY_INS (bb->last_ins);
                                                changed = TRUE;
                                                if (cfg->verbose_level > 2)
                                                        g_print ("br removal triggered %d -> %d\n", bb->block_num, bbn->block_num);