X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;ds=sidebyside;f=mono%2Fmini%2Fssa.c;h=023d2778009bebb9a1002239cba36ec82a2427ee;hb=1cdf7fafbded32d4cf2beb14cf2bc4b7829ff926;hp=de70440903ed1268787b5d795ff67177614c59ad;hpb=3e14c8db3d43ff4c466a0cd7e66f02e7bebdea1e;p=mono.git diff --git a/mono/mini/ssa.c b/mono/mini/ssa.c index de70440903e..023d2778009 100644 --- a/mono/mini/ssa.c +++ b/mono/mini/ssa.c @@ -1424,19 +1424,22 @@ mono_ssa_loop_invariant_code_motion (MonoCompile *cfg) else sreg = -1; if (sreg != -1) { + MonoInst *tins; + skip = FALSE; - MONO_BB_FOR_EACH_INS (bb, tins) { + for (tins = ins->prev; tins; tins = tins->prev) { const char *spec = INS_INFO (tins->opcode); if (tins->opcode == OP_MOVE && tins->dreg == sreg) { sreg = tins->sreg1; - } else if (spec [MONO_INST_DEST] != ' ' && tins->dreg == ins->sreg1) { + } if (spec [MONO_INST_DEST] != ' ' && tins->dreg == sreg) { skip = TRUE; break; } } if (skip) continue; + ins->sreg1 = sreg; } if (cfg->verbose_level > 1) {