Title: [189036] branches/jsc-tailcall/Source/_javascript_Core
Revision
189036
Author
msab...@apple.com
Date
2015-08-27 10:54:29 -0700 (Thu, 27 Aug 2015)

Log Message

jsc-tailcall: Test failures with FTL enabled after r188986
https://bugs.webkit.org/show_bug.cgi?id=148494

Reviewed by Basile Clement.

During FTL OSR exit processing, we can't use a callee save register as a temp when
transferring the saved version of that registers from the FTL's stack location to the
baseline's stack location.  If we do, we'll overwrite the tag registers that we
materialized previously.

* ftl/FTLOSRExitCompiler.cpp:
(JSC::FTL::compileStub):

Modified Paths

Diff

Modified: branches/jsc-tailcall/Source/_javascript_Core/ChangeLog (189035 => 189036)


--- branches/jsc-tailcall/Source/_javascript_Core/ChangeLog	2015-08-27 17:51:42 UTC (rev 189035)
+++ branches/jsc-tailcall/Source/_javascript_Core/ChangeLog	2015-08-27 17:54:29 UTC (rev 189036)
@@ -1,3 +1,18 @@
+2015-08-27  Michael Saboff  <msab...@apple.com>
+
+        jsc-tailcall: Test failures with FTL enabled after r188986
+        https://bugs.webkit.org/show_bug.cgi?id=148494
+
+        Reviewed by Basile Clement.
+
+        During FTL OSR exit processing, we can't use a callee save register as a temp when
+        transferring the saved version of that registers from the FTL's stack location to the
+        baseline's stack location.  If we do, we'll overwrite the tag registers that we
+        materialized previously.
+
+        * ftl/FTLOSRExitCompiler.cpp:
+        (JSC::FTL::compileStub):
+
 2015-08-26  Michael Saboff  <msab...@apple.com>
 
         jsc-tailcall: Integrate FTL OSR entry / exit and exceptions handling of callee save registers with other tiers

Modified: branches/jsc-tailcall/Source/_javascript_Core/ftl/FTLOSRExitCompiler.cpp (189035 => 189036)


--- branches/jsc-tailcall/Source/_javascript_Core/ftl/FTLOSRExitCompiler.cpp	2015-08-27 17:51:42 UTC (rev 189035)
+++ branches/jsc-tailcall/Source/_javascript_Core/ftl/FTLOSRExitCompiler.cpp	2015-08-27 17:54:29 UTC (rev 189036)
@@ -440,22 +440,24 @@
         unsigned unwindIndex = codeBlock->calleeSaveRegisters()->indexOf(reg);
         RegisterAtOffset* baselineRegisterOffset = baselineCalleeSaves->find(reg);
 
+        GPRReg regToLoad = baselineRegisterOffset ? GPRInfo::regT0 : reg.gpr();
+
         if (unwindIndex == UINT_MAX) {
             // The FTL compilation didn't preserve this register. This means that it also
             // didn't use the register. So its value at the beginning of OSR exit should be
             // preserved by the thunk. Luckily, we saved all registers into the register
             // scratch buffer, so we can restore them from there.
-            jit.load64(registerScratch + offsetOfReg(reg), reg.gpr());
+            jit.load64(registerScratch + offsetOfReg(reg), regToLoad);
         } else {
             // The FTL compilation preserved the register. Its new value is therefore
             // irrelevant, but we can get the value that was preserved by using the unwind
             // data. We've already copied all unwind-able preserved registers into the unwind
             // scratch buffer, so we can get it from there.
-            jit.load64(unwindScratch + unwindIndex, reg.gpr());
+            jit.load64(unwindScratch + unwindIndex, regToLoad);
         }
 
         if (baselineRegisterOffset)
-            jit.store64(reg.gpr(), MacroAssembler::Address(MacroAssembler::framePointerRegister, baselineRegisterOffset->offset()));
+            jit.store64(regToLoad, MacroAssembler::Address(MacroAssembler::framePointerRegister, baselineRegisterOffset->offset()));
     }
     size_t baselineVirtualRegistersForCalleeSaves = baselineCodeBlock->calleeSaveSpaceAsVirtualRegisters();
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to