Fix code generation around safe points, bug 690376. r=dvander a=curtisk
authorBrian Hackett <bhackett1024@gmail.com>
Tue, 11 Oct 2011 19:58:04 -0700
changeset 79078 c0c7322521b722c74adffb748843370e61f64b41
parent 79077 a4123ca7c79ad4027213b4c2d90a6efab2ac4fcc
child 79079 4e86daeba6c5ff1da6412097575c36c9a2ccb4e4
push id78
push userclegnitto@mozilla.com
push dateFri, 16 Dec 2011 17:32:24 +0000
treeherdermozilla-release@79d24e644fdd [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersdvander, curtisk
bugs690376
milestone9.0a2
Fix code generation around safe points, bug 690376. r=dvander a=curtisk
js/src/methodjit/Compiler.cpp
--- a/js/src/methodjit/Compiler.cpp
+++ b/js/src/methodjit/Compiler.cpp
@@ -1583,16 +1583,18 @@ mjit::Compiler::generateMethod()
                 return Compile_Error;
             updateJoinVarTypes();
             fallthrough = true;
 
             if (!cx->typeInferenceEnabled()) {
                 /* All join points have synced state if we aren't doing cross-branch regalloc. */
                 opinfo->safePoint = true;
             }
+        } else if (opinfo->safePoint && !cx->typeInferenceEnabled()) {
+            frame.syncAndForgetEverything();
         }
         frame.assertValidRegisterState();
         a->jumpMap[uint32(PC - script->code)] = masm.label();
 
         // Now that we have the PC's register allocation, make sure it gets
         // explicitly updated if this is the loop entry and new loop registers
         // are allocated later on.
         if (loop && !a->parent)