From 18299f080fff76504549f9996ba9002e872bbbbe Mon Sep 17 00:00:00 2001 From: Zoltan Varga Date: Tue, 19 Nov 2013 13:16:10 +0100 Subject: [PATCH] [llvm] Fix the handling of moves in the LICM optimization. --- mono/mini/ssa.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/mono/mini/ssa.c b/mono/mini/ssa.c index de70440903e..98805ba533e 100644 --- a/mono/mini/ssa.c +++ b/mono/mini/ssa.c @@ -1425,18 +1425,21 @@ mono_ssa_loop_invariant_code_motion (MonoCompile *cfg) sreg = -1; if (sreg != -1) { skip = FALSE; - MONO_BB_FOR_EACH_INS (bb, tins) { + MonoInst *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) { -- 2.25.1