RESOLVED FIXED 68318
DFG JIT should inline Math.min, Math.max, and Math.sqrt
https://bugs.webkit.org/show_bug.cgi?id=68318
Summary DFG JIT should inline Math.min, Math.max, and Math.sqrt
Filip Pizlo
Reported 2011-09-17 17:19:14 PDT
The Math.min, Math.max, and Math.sqrt functions are all trivial to inline as they do not require calls to C helpers. DFG JIT should inline them.
Attachments
the patch (12.03 KB, patch)
2011-09-17 17:27 PDT, Filip Pizlo
barraclough: review+
Filip Pizlo
Comment 1 2011-09-17 17:27:24 PDT
Created attachment 107780 [details] the patch
Gavin Barraclough
Comment 2 2011-09-18 09:07:47 PDT
Comment on attachment 107780 [details] the patch This looks really great. It's a shame that the intrinsics are in addition to the "thunk generators". The old thunks are really for intrinsics. It would probably be cleaner to remove the ThunkGenerators from the lookup table, and just have an enum value. When native function objects are constructed the thunk creation could just switch on the intrinsic enum value to select a generator, where one exists (and maybe over time these may be deprecated, as hot cases are inlined in the DFG JIT).
Filip Pizlo
Comment 3 2011-09-18 15:29:04 PDT
Landed in r95399.
Filip Pizlo
Comment 4 2011-09-18 15:41:10 PDT
(In reply to comment #2) > (From update of attachment 107780 [details]) > This looks really great. It's a shame that the intrinsics are in addition to the "thunk generators". The old thunks are really for intrinsics. It would probably be cleaner to remove the ThunkGenerators from the lookup table, and just have an enum value. When native function objects are constructed the thunk creation could just switch on the intrinsic enum value to select a generator, where one exists (and maybe over time these may be deprecated, as hot cases are inlined in the DFG JIT). Agree. Bug created: https://bugs.webkit.org/show_bug.cgi?id=68328
Ryosuke Niwa
Comment 5 2011-10-04 13:41:31 PDT
It appears that this patch introduced some regression in JSC. I can no longer load internal builds of Google docs. It repeatedly encounters the following error in WebKit2 (regardless of whether I use single process or not): ERROR: Failed to send message to real exception port, error 10000003 /Volumes/Data/webkit/Source/WebKit2/Platform/CoreIPC/mac/ConnectionMac.cpp(407) : void CoreIPC::Connection::exceptionSourceEventHandler() I've manually bisected the builds and r95397 worked fine so I'm pretty certain this patch caused it. Unfortunately, I don't know ways to provide access to our internal builds of Google docs at the moment :( so we can only inspect the code change manually.
Filip Pizlo
Comment 6 2011-10-04 14:05:30 PDT
(In reply to comment #5) > It appears that this patch introduced some regression in JSC. I can no longer load internal builds of Google docs. It repeatedly encounters the following error in WebKit2 (regardless of whether I use single process or not): > > ERROR: Failed to send message to real exception port, error 10000003 > /Volumes/Data/webkit/Source/WebKit2/Platform/CoreIPC/mac/ConnectionMac.cpp(407) : void CoreIPC::Connection::exceptionSourceEventHandler() > > I've manually bisected the builds and r95397 worked fine so I'm pretty certain this patch caused it. Unfortunately, I don't know ways to provide access to our internal builds of Google docs at the moment :( so we can only inspect the code change manually. Here's a simple test you could do to see if and how this changeset affects the problem you're seeing: Go to Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp Replace the contents of handleIntrinsic() method with just "return false". Check if you still see the problem. If it makes the problem go away, then it's highly likely the fault of this patch. If the problem persists, then it's highly unlikely that this patch caused it. Thanks for your help. I understand this can be complicated when the only repro is in internal code!
Ryosuke Niwa
Comment 7 2011-10-04 14:26:34 PDT
(In reply to comment #6) > Here's a simple test you could do to see if and how this changeset affects the problem you're seeing: > > Go to Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp > > Replace the contents of handleIntrinsic() method with just "return false". I did, and the problem disappeared. I also double-checked that reverting the change will introduce the bug again. > Thanks for your help. I understand this can be complicated when the only repro is in internal code! Nope. I just want to help Google products don't suck on Safari :) Is there any information I can provide you to help investigating the issue?
Filip Pizlo
Comment 8 2011-10-04 14:28:17 PDT
(In reply to comment #7) > (In reply to comment #6) > > Here's a simple test you could do to see if and how this changeset affects the problem you're seeing: > > > > Go to Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp > > > > Replace the contents of handleIntrinsic() method with just "return false". > > I did, and the problem disappeared. I also double-checked that reverting the change will introduce the bug again. > > > Thanks for your help. I understand this can be complicated when the only repro is in internal code! > > Nope. I just want to help Google products don't suck on Safari :) > > Is there any information I can provide you to help investigating the issue? Thanks for checking this. I'll try to track this down by increasing test coverage on our end. I will let you know if I need more info from you!
Note You need to log in before you can comment on or make changes to this bug.