[jit] Avoid licm for volatile variables, ssa ignores them so we can't detect whenever...
authorZoltan Varga <vargaz@gmail.com>
Wed, 4 Jun 2014 23:56:12 +0000 (01:56 +0200)
committerZoltan Varga <vargaz@gmail.com>
Wed, 4 Jun 2014 23:56:28 +0000 (01:56 +0200)
mono/mini/ssa.c

index 023d2778009bebb9a1002239cba36ec82a2427ee..801826b96e8b098caf1a5f102a3cde6b0aabce33 100644 (file)
@@ -1424,7 +1424,7 @@ mono_ssa_loop_invariant_code_motion (MonoCompile *cfg)
                                else
                                        sreg = -1;
                                if (sreg != -1) {
-                                       MonoInst *tins;
+                                       MonoInst *tins, *var;
 
                                        skip = FALSE;
                                        for (tins = ins->prev; tins; tins = tins->prev) {
@@ -1439,6 +1439,9 @@ mono_ssa_loop_invariant_code_motion (MonoCompile *cfg)
                                        }
                                        if (skip)
                                                continue;
+                                       var = get_vreg_to_inst (cfg, sreg);
+                                       if (var && (var->flags & (MONO_INST_VOLATILE|MONO_INST_INDIRECT)))
+                                               continue;
                                        ins->sreg1 = sreg;
                                }