RESOLVED FIXED Bug 116889
fourthTier: The baseline jit and LLint should use common slow paths
https://bugs.webkit.org/show_bug.cgi?id=116889
Summary fourthTier: The baseline jit and LLint should use common slow paths
Michael Saboff
Reported 2013-05-28 14:38:31 PDT
To reduce the number of trampoline methods and generally clean up the code in preparation for utilizing the C stack, we should reduce the number of slow paths. This change is to eliminate nearly identical slow paths.
Attachments
Work in progress (116.67 KB, patch)
2013-05-28 14:55 PDT, Michael Saboff
no flags
Patch (113.39 KB, patch)
2013-05-28 16:41 PDT, Michael Saboff
no flags
Updated patch addressing reviewer comments (117.40 KB, patch)
2013-05-29 16:44 PDT, Michael Saboff
no flags
Patch with redundant hit stubs removed (137.98 KB, patch)
2013-06-03 11:56 PDT, Michael Saboff
fpizlo: review+
Patch for landing with minor merge up changes. (131.52 KB, patch)
2013-06-07 16:45 PDT, Michael Saboff
no flags
Michael Saboff
Comment 1 2013-05-28 14:55:17 PDT
Created attachment 203095 [details] Work in progress This patch compiles and runs correctly on X86 and X86_64. Working through ARMv7 issues.
Michael Saboff
Comment 2 2013-05-28 16:41:41 PDT
Created attachment 203106 [details] Patch Builds and passes JSC tests on X86_64 and X86. Speculative fixes for other platforms.
Mark Lam
Comment 3 2013-05-28 17:32:52 PDT
Comment on attachment 203106 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=203106&action=review Do you have benchmark numbers to confirm that this does not impact perf? > Source/JavaScriptCore/interpreter/Interpreter.cpp:716 > +// ASSERT(callFrame == vm->topCallFrame || callFrame == callFrame->lexicalGlobalObject()->globalExec() || callFrame == callFrame->dynamicGlobalObject()->globalExec()); Why comment out this assert? > Source/JavaScriptCore/jit/JITExceptions.h:43 > + // Why the blank comment?
Michael Saboff
Comment 4 2013-05-29 16:44:06 PDT
Created attachment 203289 [details] Updated patch addressing reviewer comments I had commented out the ASSERT during development. Fixed the reason that it was failing on 32_64 builds by adding in the storePtr(callFrameRegister, &m_vm->topCallFrame); back in at the end of privateCompileCTINativeCall(). Also removed the bogus empty comment.
Filip Pizlo
Comment 5 2013-06-01 10:14:25 PDT
Comment on attachment 203289 [details] Updated patch addressing reviewer comments Shouldn't there be a bunch of stuff removed from JITStubs.cpp?
Michael Saboff
Comment 6 2013-06-03 11:56:30 PDT
Created attachment 203617 [details] Patch with redundant hit stubs removed (In reply to comment #5) > (From update of attachment 203289 [details]) > Shouldn't there be a bunch of stuff removed from JITStubs.cpp? Removed.
Michael Saboff
Comment 7 2013-06-07 16:45:30 PDT
Created attachment 204074 [details] Patch for landing with minor merge up changes.
Michael Saboff
Comment 8 2013-06-07 16:46:37 PDT
Filip Pizlo
Comment 9 2013-06-07 17:00:26 PDT
I'm pretty sure this broke Kraken in debug build.
Filip Pizlo
Comment 10 2013-06-07 19:12:35 PDT
Michael Saboff
Comment 11 2013-06-07 21:12:48 PDT
(In reply to comment #9) > I'm pretty sure this broke Kraken in debug build. Looks like there were a couple of emitSlow_op_*() functions where I didn't load the return register (rax on X86_64) with the result of the operation after the call. I fixed the ones I found and kraken works. I'll spend a little more time testing before relanding.
Geoffrey Garen
Comment 12 2013-06-08 09:53:44 PDT
This is blocking the patch I'm working on, since I built on top of JITSlowPathCall :(.
Geoffrey Garen
Comment 13 2013-06-09 22:17:37 PDT
I took your diagnosis and fixed and re-landed this patch in <http://trac.webkit.org/changeset/151362>.
Geoffrey Garen
Comment 14 2013-06-10 13:35:23 PDT
Darn, looks like this is still crashing at r151362: run-webkit-tests --debug --verbose fast/workers/stress-js-execution.html fast/workers/termination-early.html fast/workers/stress-js-execution.html fast/workers/termination-early.html Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Codes: KERN_INVALID_ADDRESS at 0x00000000bbadbeef Thread 14 Crashed:: WebCore: Worker 0 com.apple.JavaScriptCore 0x000000010954c9d0 JSC::JSActivation::tearOff(JSC::VM&) + 96 (JSActivation.h:154) 1 com.apple.JavaScriptCore 0x0000000109547466 JSC::Interpreter::unwindCallFrame(JSC::ExecState*&, JSC::JSValue, unsigned int&, JSC::CodeBlock*&) + 550 (Interpreter.cpp:499) 2 com.apple.JavaScriptCore 0x0000000109548841 JSC::Interpreter::throwException(JSC::ExecState*&, JSC::JSValue&, unsigned int) + 1137 (Interpreter.cpp:779) 3 com.apple.JavaScriptCore 0x000000010956be06 JSC::genericThrow(JSC::VM*, JSC::ExecState*, JSC::JSValue, unsigned int) + 166 (JITExceptions.cpp:56) 4 com.apple.JavaScriptCore 0x000000010956bf6c JSC::jitThrowNew(JSC::VM*, JSC::ExecState*, JSC::JSValue) + 60 (JITExceptions.cpp:80) 5 com.apple.JavaScriptCore 0x000000010958f37c cti_vm_throw_slowpath + 60 (JITStubs.cpp:2230) 6 com.apple.JavaScriptCore 0x0000000109584db9 ctiVMThrowTrampolineSlowpath + 8
Geoffrey Garen
Comment 15 2013-06-10 14:15:59 PDT
Rolled out in r151401.
Michael Saboff
Comment 16 2013-06-12 11:30:23 PDT
Fixed test failure and rolled back in with change set <https://trac.webkit.org/changeset/151504> Fixed involved NOT processing exceptions through the llint path when we call a common slow path from the JIT.
Note You need to log in before you can comment on or make changes to this bug.