From: Vladimir Kargov Date: Thu, 29 Dec 2016 03:52:30 +0000 (-0800) Subject: [jit] Remove the meaningless lokup loop in mono_merge_basic_blocks(), add assertions. X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=d726f624da0132eacb0e841996fe1ba394977d2f;p=mono.git [jit] Remove the meaningless lokup loop in mono_merge_basic_blocks(), add assertions. --- diff --git a/mono/mini/branch-opts.c b/mono/mini/branch-opts.c index 1602b03d59a..d8f8f569377 100644 --- a/mono/mini/branch-opts.c +++ b/mono/mini/branch-opts.c @@ -973,15 +973,12 @@ mono_merge_basic_blocks (MonoCompile *cfg, MonoBasicBlock *bb, MonoBasicBlock *b MonoBasicBlock *prev_bb; int i; + /* There may be only one control flow edge between two BBs that we merge, and it should connect these BBs together. */ + g_assert (bb->out_count == 1 && bbn->in_count == 1 && bb->out_bb [0] == bbn && bbn->in_bb [0] == bb); + 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]); @@ -1034,10 +1031,14 @@ mono_merge_basic_blocks (MonoCompile *cfg, MonoBasicBlock *bb, MonoBasicBlock *b bb->last_ins = bbn->last_ins; } - if (!prev_bb) { + + /* Check if the control flow predecessor is also the linear IL predecessor. */ + if (bbn->in_bb [0]->next_bb == bbn) + prev_bb = bbn->in_bb [0]; + else + /* If it isn't, look for one among all basic blocks. */ 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 {