Bug 141174 - Heap variables shouldn't end up in the stack frame
Summary: Heap variables shouldn't end up in the stack frame
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: 528+ (Nightly build)
Hardware: All All
: P2 Normal
Assignee: Filip Pizlo
URL:
Keywords:
: 130115 137357 139524 139827 140097 141850 (view as bug list)
Depends on: 136869 141171 141211 141332 141624 141851 141881 141915 141930 141951 142036 142056 142064 142071 142153 142182 142187 142197 142206 142229 142304 142647 142686 142769 142920 142948 143087 143089 143098 143261
Blocks: 142207 143071 143072 143074 143075 143076 143077 38409 141885 142944
  Show dependency treegraph
 
Reported: 2015-02-02 14:36 PST by Filip Pizlo
Modified: 2015-04-20 14:36 PDT (History)
17 users (show)

See Also:


Attachments
it begins! (21.99 KB, patch)
2015-02-03 14:16 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
WRONG PATCH (68.33 KB, patch)
2015-02-18 20:44 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
moar (44.74 KB, patch)
2015-02-18 20:45 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
more (69.05 KB, patch)
2015-02-19 11:00 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
a bit more (69.06 KB, patch)
2015-02-20 10:25 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
more (90.51 KB, patch)
2015-02-23 15:53 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
more (102.66 KB, patch)
2015-02-23 20:37 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
more (113.82 KB, patch)
2015-02-24 10:22 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
more jit stuff (133.36 KB, patch)
2015-02-24 12:39 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
dragging arguments code through the JITs (151.11 KB, patch)
2015-02-26 13:26 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
starting to tool around in bytecodegenerator (163.41 KB, application/octet-stream)
2015-02-26 16:57 PST, Filip Pizlo
no flags Details
a little more (168.52 KB, patch)
2015-02-26 20:19 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
doing real damage to bytecode generator (181.57 KB, patch)
2015-02-27 08:25 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
a bit more (179.19 KB, patch)
2015-02-27 13:15 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
getting closer to figuring out the whole arguments thing (196.88 KB, patch)
2015-02-28 20:10 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
just a little bit more (206.96 KB, patch)
2015-03-01 12:46 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
bytecode generation initialization is done (220.95 KB, patch)
2015-03-01 16:44 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
let the carnage begin! (257.37 KB, patch)
2015-03-01 18:38 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
NodesCodegen is done? (287.76 KB, patch)
2015-03-01 20:35 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
change all the files! (320.20 KB, patch)
2015-03-01 20:48 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
moar! (354.79 KB, patch)
2015-03-02 12:41 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
starting to get the DFG backend up to speed (380.26 KB, patch)
2015-03-02 17:05 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
a bit more (385.06 KB, patch)
2015-03-02 19:45 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
DFG arguments lowering is done (410.13 KB, patch)
2015-03-03 11:51 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
rebased (413.30 KB, patch)
2015-03-03 22:57 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
FTL is coming along (433.01 KB, patch)
2015-03-04 22:20 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
the bulk of functionality is done, just cleaning up now (481.83 KB, patch)
2015-03-05 12:40 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
carnage! (509.20 KB, patch)
2015-03-05 13:50 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
so close! (540.58 KB, patch)
2015-03-05 14:31 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
starting to compile (553.93 KB, patch)
2015-03-06 18:02 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
fewer compiler errors (590.33 KB, patch)
2015-03-06 20:07 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
wrote some more stuff (637.87 KB, patch)
2015-03-07 08:43 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
more fixes to get it to compile (672.75 KB, patch)
2015-03-07 11:52 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
more fixes for compiling (685.53 KB, patch)
2015-03-07 17:20 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
OMG it compiles! (691.63 KB, patch)
2015-03-07 19:55 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
it runs simple programs (694.29 KB, patch)
2015-03-08 23:17 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
starting to pass tests (700.94 KB, patch)
2015-03-09 12:27 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
passing lots of tests (703.05 KB, patch)
2015-03-09 16:55 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
passing so many tests (715.87 KB, patch)
2015-03-10 11:46 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
so pass, much test, wow (725.79 KB, patch)
2015-03-10 17:19 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
latest (725.79 KB, patch)
2015-03-10 19:06 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
so close to correct (727.69 KB, patch)
2015-03-10 20:38 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
more correct than ever (738.46 KB, patch)
2015-03-11 15:59 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
it might pass all tests (744.66 KB, patch)
2015-03-11 20:08 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
working on the new arguments elimination phase (812.32 KB, patch)
2015-03-12 20:40 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
more (820.53 KB, patch)
2015-03-12 22:05 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
arguments elimination is sort of written (830.05 KB, patch)
2015-03-13 12:10 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
more arguments elimination (843.73 KB, patch)
2015-03-13 15:20 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
closer to eliminating arguments (857.35 KB, patch)
2015-03-13 17:11 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
dealing with the OSR exit of arguments elimination (871.88 KB, patch)
2015-03-13 19:19 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
rebased (882.37 KB, patch)
2015-03-13 19:49 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
latest (881.07 KB, patch)
2015-03-16 20:09 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
more things (883.75 KB, patch)
2015-03-17 10:53 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
closer to compiling (889.03 KB, patch)
2015-03-17 12:14 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
it compiles! (890.07 KB, patch)
2015-03-17 13:58 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
it eliminated some arguments! (893.86 KB, patch)
2015-03-17 17:20 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
it does all of the important things (901.45 KB, patch)
2015-03-17 21:15 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
added more tests (907.34 KB, patch)
2015-03-18 11:52 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
OSR exit looks solid (921.82 KB, patch)
2015-03-18 15:09 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
strict mode arguments elimination and materialization works (930.42 KB, patch)
2015-03-18 15:52 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
passing all tests (930.80 KB, patch)
2015-03-19 07:48 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
rebased, still passing tests (926.93 KB, patch)
2015-03-20 18:19 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
starting to work on the varargs forwarding phase (947.04 KB, patch)
2015-03-20 19:58 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
OSR exit part of varargs forwarding is almost done (966.54 KB, patch)
2015-03-21 08:44 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
it compiles again! (974.70 KB, patch)
2015-03-21 10:33 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
DFG and FTL can now forward varargs (977.52 KB, patch)
2015-03-21 11:09 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
couple of bugfixes (987.72 KB, patch)
2015-03-21 18:27 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
some more fixing to get to net speed-up (989.04 KB, patch)
2015-03-21 20:33 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
64-bit is complete (991.52 KB, patch)
2015-03-22 13:11 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
started work on 32-bit (1005.04 KB, patch)
2015-03-22 18:00 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
almost done with 32-bit (1.01 MB, patch)
2015-03-22 19:27 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
so close to done (1.03 MB, patch)
2015-03-22 21:32 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
the patch (1.10 MB, patch)
2015-03-23 11:14 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
compiling on more platforms than ever! (1.10 MB, patch)
2015-03-23 11:38 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
even more build fixes (1.10 MB, patch)
2015-03-23 11:43 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
very latest (1.10 MB, patch)
2015-03-23 12:16 PDT, Filip Pizlo
buildbot: commit-queue-
Details | Formatted Diff | Diff
Archive of layout-test-results from ews104 for mac-mavericks-wk2 (682.68 KB, application/zip)
2015-03-23 13:35 PDT, Build Bot
no flags Details
Archive of layout-test-results from ews100 for mac-mavericks (521.14 KB, application/zip)
2015-03-23 13:41 PDT, Build Bot
no flags Details
more fixes (1.10 MB, patch)
2015-03-23 14:09 PDT, Filip Pizlo
buildbot: commit-queue-
Details | Formatted Diff | Diff
Archive of layout-test-results from ews100 for mac-mavericks (522.55 KB, application/zip)
2015-03-23 15:23 PDT, Build Bot
no flags Details
Archive of layout-test-results from ews106 for mac-mavericks-wk2 (667.87 KB, application/zip)
2015-03-23 15:31 PDT, Build Bot
no flags Details
more fixes (1.10 MB, patch)
2015-03-23 22:51 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
the patch (1.11 MB, patch)
2015-03-24 13:17 PDT, Filip Pizlo
ggaren: review+
Details | Formatted Diff | Diff
including ggaren's feedback (1.11 MB, patch)
2015-03-25 20:04 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
rebased, added more tests (1.11 MB, patch)
2015-03-25 20:51 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Filip Pizlo 2015-02-02 14:36:54 PST
I'm going to introduce a new term: "heap variable".  This is a variable that is anywhere but on the stack (i.e. local).  It may be global or it may be captured.  Hence the hierarchy of variables is:

Variable:
    Local Variable: it's on the stack according to bytecode
    Heap Variable: it's not a Local Variable
        Captured Variable: it's in some function's activation, may be my own activation
        Global Variable: it's in some global object

We currently use VirtualRegister to effectively track heap variables because of some history.  The use of the VirtualRegister class for this purpose makes it difficult to then remove the hole we have in the stack that corresponds to local variables that got captured.  Once we ensure that VirtualRegister is no longer used for heap variables, we'll be able to remove the hole.
Comment 1 Filip Pizlo 2015-02-03 14:16:45 PST
Created attachment 245967 [details]
it begins!
Comment 2 Saam Barati 2015-02-06 12:16:58 PST
Comment on attachment 245967 [details]
it begins!

View in context: https://bugs.webkit.org/attachment.cgi?id=245967&action=review

I really like this patch. It makes some stuff that confused me when I first got started hacking on JSC more intuitive.

> Source/JavaScriptCore/runtime/SymbolTable.cpp:140
> +SymbolTable* SymbolTable::cloneIgnoringStack(VM& vm)

I kind of like the function name: "cloneHeapNames" or "cloneHeapVariables", cloneIgnoringStack confused me at first. But that's just my style.
Comment 3 Filip Pizlo 2015-02-18 20:44:57 PST
Created attachment 246875 [details]
WRONG PATCH
Comment 4 Filip Pizlo 2015-02-18 20:45:48 PST
Created attachment 246876 [details]
moar
Comment 5 Filip Pizlo 2015-02-19 11:00:47 PST
Created attachment 246898 [details]
more
Comment 6 Filip Pizlo 2015-02-20 10:25:09 PST
Created attachment 246976 [details]
a bit more

I believe that the next step is to remove the JSLexicalEnvironment::m_registers field.
Comment 7 Filip Pizlo 2015-02-20 16:12:07 PST
*** Bug 141850 has been marked as a duplicate of this bug. ***
Comment 8 Filip Pizlo 2015-02-20 16:17:02 PST
(In reply to comment #6)
> Created attachment 246976 [details]
> a bit more
> 
> I believe that the next step is to remove the
> JSLexicalEnvironment::m_registers field.

It is, but it has to happen as part of this patch.  m_registers currently serves the perverse purpose of allowing VirtualRegister to be used as a scope offset.
Comment 9 Filip Pizlo 2015-02-23 15:53:59 PST
Created attachment 247155 [details]
more
Comment 10 Filip Pizlo 2015-02-23 20:37:13 PST
Created attachment 247195 [details]
more

Taking a pause while I explore what defineOwnProperty is really supposed to do for arguments.  I'm pretty sure that what we're doing now is technically right but unnecessarily roundabout.
Comment 11 Filip Pizlo 2015-02-24 10:22:46 PST
Created attachment 247241 [details]
more

Arguments objects C++ code is done.
Comment 12 Filip Pizlo 2015-02-24 12:39:20 PST
Created attachment 247253 [details]
more jit stuff

Slowly pushing the new Arguments types through the JITs.
Comment 13 Filip Pizlo 2015-02-26 13:26:50 PST
Created attachment 247442 [details]
dragging arguments code through the JITs
Comment 14 Filip Pizlo 2015-02-26 16:57:02 PST
Created attachment 247468 [details]
starting to tool around in bytecodegenerator
Comment 15 Filip Pizlo 2015-02-26 20:19:32 PST
Created attachment 247488 [details]
a little more
Comment 16 Filip Pizlo 2015-02-27 08:25:18 PST
Created attachment 247515 [details]
doing real damage to bytecode generator
Comment 17 Filip Pizlo 2015-02-27 13:14:59 PST
I just realized that my ScopedArguments object needs room for overflow arguments - those arguments that were not in the formal parameter list.  Shouldn't be a hard change, just more code.

But other than that, the BytecodeGenerator stuff is materializing nicely.
Comment 18 Filip Pizlo 2015-02-27 13:15:42 PST
Created attachment 247539 [details]
a bit more

The bytecode generator changes are coming along nicely, but I'll have to shift focus a bit and give ScopedArguments the guts it needs for dealing with overflow arguments.
Comment 19 Filip Pizlo 2015-02-28 20:10:00 PST
Created attachment 247623 [details]
getting closer to figuring out the whole arguments thing
Comment 20 Filip Pizlo 2015-03-01 12:46:59 PST
Created attachment 247636 [details]
just a little bit more

I think I've figured out how to initialize variables in the bytecode generator.
Comment 21 Filip Pizlo 2015-03-01 16:44:37 PST
Created attachment 247643 [details]
bytecode generation initialization is done

Now I just have to:

- change NodesCodegen to use BytecodeGenerator::variable() instead of BytecodeGenerator::local()

- finish changing all of the execution engines to handle the new arguments- and activation-related operations.

- redo ArgumentsSimplificationPhase
Comment 22 Filip Pizlo 2015-03-01 18:38:58 PST
Created attachment 247650 [details]
let the carnage begin!

In preparation for adding all of the new stuff, I'm starting to remove the captured variable cruft.  There is no longer such a thing!  After bytecode is generated, all "captured" variables are just heap accesses, as they should be.
Comment 23 Filip Pizlo 2015-03-01 20:35:50 PST
Created attachment 247651 [details]
NodesCodegen is done?

I think that the entire bytecompiler is done now.
Comment 24 Filip Pizlo 2015-03-01 20:41:20 PST
*** Bug 130115 has been marked as a duplicate of this bug. ***
Comment 25 Filip Pizlo 2015-03-01 20:48:35 PST
Created attachment 247652 [details]
change all the files!

More captured removal
Comment 26 Filip Pizlo 2015-03-02 12:41:26 PST
Created attachment 247693 [details]
moar!
Comment 27 Filip Pizlo 2015-03-02 17:05:45 PST
Created attachment 247723 [details]
starting to get the DFG backend up to speed
Comment 28 Filip Pizlo 2015-03-02 19:45:00 PST
Created attachment 247740 [details]
a bit more

Starting to work on the inlined CreateDirectArguments
Comment 29 Filip Pizlo 2015-03-03 11:51:21 PST
Created attachment 247775 [details]
DFG arguments lowering is done

64-bit only for now
Comment 30 Filip Pizlo 2015-03-03 22:57:11 PST
Created attachment 247842 [details]
rebased
Comment 31 Filip Pizlo 2015-03-04 22:20:57 PST
Created attachment 247931 [details]
FTL is coming along
Comment 32 Filip Pizlo 2015-03-05 12:40:52 PST
Created attachment 247981 [details]
the bulk of functionality is done, just cleaning up now

Of course this doesn't include 32-bit or the the new arguments simplification.  The things left are to get this to the point where it compiles and where varargs calls aren't totally messed up.
Comment 33 Filip Pizlo 2015-03-05 13:50:52 PST
Created attachment 247996 [details]
carnage!

Destroying old code that won't be needed and won't compile.
Comment 34 Filip Pizlo 2015-03-05 14:31:19 PST
Created attachment 248002 [details]
so close!
Comment 35 Filip Pizlo 2015-03-06 18:02:25 PST
Created attachment 248126 [details]
starting to compile
Comment 36 Filip Pizlo 2015-03-06 20:07:01 PST
Created attachment 248135 [details]
fewer compiler errors
Comment 37 Filip Pizlo 2015-03-07 08:43:48 PST
Created attachment 248153 [details]
wrote some more stuff

Turns out I forgot to write some stuff before.

This patch is going to be epic.
Comment 38 Filip Pizlo 2015-03-07 11:52:27 PST
Created attachment 248165 [details]
more fixes to get it to compile
Comment 39 Filip Pizlo 2015-03-07 17:20:16 PST
Created attachment 248169 [details]
more fixes for compiling
Comment 40 Filip Pizlo 2015-03-07 19:55:34 PST
Created attachment 248174 [details]
OMG it compiles!
Comment 41 Filip Pizlo 2015-03-08 23:17:07 PDT
Created attachment 248231 [details]
it runs simple programs

I'll start running the real tests soon.
Comment 42 Filip Pizlo 2015-03-08 23:19:12 PDT
Ossy: this doesn't look like it will involve platform-specifics, at least not yet.  But there is still another 100k worth of code to write...
Comment 43 Csaba Osztrogonác 2015-03-09 04:27:07 PDT
(In reply to comment #42)
> Ossy: this doesn't look like it will involve platform-specifics, at least
> not yet.  But there is still another 100k worth of code to write...

Thanks for the heads-up.
Comment 44 Filip Pizlo 2015-03-09 12:27:23 PDT
Created attachment 248269 [details]
starting to pass tests
Comment 45 Filip Pizlo 2015-03-09 16:55:37 PDT
Created attachment 248291 [details]
passing lots of tests

Looks like there are still corner cases that are broken, but lots works!

I also still need to write tests specifically for the bizarre things that arise with OutOfBandArguments and DirectArguments.
Comment 46 Filip Pizlo 2015-03-10 11:46:41 PDT
Created attachment 248341 [details]
passing so many tests

I think that I'm now down to some codegen goofs in FTL.
Comment 47 Filip Pizlo 2015-03-10 17:19:32 PDT
Created attachment 248371 [details]
so pass, much test, wow
Comment 48 Filip Pizlo 2015-03-10 19:06:04 PDT
Created attachment 248383 [details]
latest
Comment 49 Filip Pizlo 2015-03-10 20:38:16 PDT
Created attachment 248390 [details]
so close to correct
Comment 50 Filip Pizlo 2015-03-11 15:59:04 PDT
Created attachment 248461 [details]
more correct than ever
Comment 51 Filip Pizlo 2015-03-11 20:08:40 PDT
Created attachment 248480 [details]
it might pass all tests

Next step: get it to perform.

After that: port to 32-bit.

I want to make sure that this performs before I write the 32-bit codegen, since my performance findings may change my mind about how I generate code.
Comment 52 Filip Pizlo 2015-03-12 20:40:22 PDT
Created attachment 248564 [details]
working on the new arguments elimination phase
Comment 53 Filip Pizlo 2015-03-12 22:05:00 PDT
Created attachment 248568 [details]
more

Arguments elimination phase now has all of the required analyses.  I need to think for a bit about whether I like how they're written.
Comment 54 Filip Pizlo 2015-03-13 12:10:34 PDT
Created attachment 248597 [details]
arguments elimination is sort of written
Comment 55 Filip Pizlo 2015-03-13 15:20:42 PDT
Created attachment 248610 [details]
more arguments elimination
Comment 56 Filip Pizlo 2015-03-13 17:11:21 PDT
Created attachment 248623 [details]
closer to eliminating arguments
Comment 57 Filip Pizlo 2015-03-13 19:19:57 PDT
Created attachment 248634 [details]
dealing with the OSR exit of arguments elimination
Comment 58 Filip Pizlo 2015-03-13 19:49:34 PDT
Created attachment 248637 [details]
rebased

Arguments elimination phase is written.  Haven't tried compiling it yet.
Comment 59 Filip Pizlo 2015-03-16 20:09:22 PDT
Created attachment 248791 [details]
latest

Trying to get the new stuff to compile.  Turns out I need to make some more changes to promoted heap locations...
Comment 60 Filip Pizlo 2015-03-17 10:53:22 PDT
Created attachment 248853 [details]
more things

Rebased and added the FTL implementation of ForwardVarargs.  Trying to get this thing to compile now.
Comment 61 Filip Pizlo 2015-03-17 12:14:40 PDT
Created attachment 248858 [details]
closer to compiling
Comment 62 Filip Pizlo 2015-03-17 13:58:16 PDT
Created attachment 248868 [details]
it compiles!
Comment 63 Filip Pizlo 2015-03-17 17:20:45 PDT
Created attachment 248887 [details]
it eliminated some arguments!
Comment 64 Filip Pizlo 2015-03-17 21:15:14 PDT
Created attachment 248906 [details]
it does all of the important things
Comment 65 Filip Pizlo 2015-03-18 11:52:09 PDT
Created attachment 248948 [details]
added more tests
Comment 66 Filip Pizlo 2015-03-18 15:09:32 PDT
Created attachment 248971 [details]
OSR exit looks solid

Wrote a bunch of tests for materializing arguments objects.
Comment 67 Filip Pizlo 2015-03-18 15:52:21 PDT
Created attachment 248978 [details]
strict mode arguments elimination and materialization works
Comment 68 Filip Pizlo 2015-03-19 07:48:08 PDT
Created attachment 249036 [details]
passing all tests

on 64-bit only, of course.  haven't run perf tests yet.
Comment 69 Filip Pizlo 2015-03-19 08:05:14 PDT
(In reply to comment #68)
> Created attachment 249036 [details]
> passing all tests
> 
> on 64-bit only, of course.  haven't run perf tests yet.

It still crashes raytrace - but only running in the benchmark harness.  Gotta investigate what's up with that.
Comment 70 Filip Pizlo 2015-03-19 08:51:04 PDT
(In reply to comment #69)
> (In reply to comment #68)
> > Created attachment 249036 [details]
> > passing all tests
> > 
> > on 64-bit only, of course.  haven't run perf tests yet.
> 
> It still crashes raytrace - but only running in the benchmark harness. 
> Gotta investigate what's up with that.

Looks like a GC bug, like a reference that isn't being marked or barriered. But when it does run, it's as fast as trunk!

OTOH, box2d is still regressed, albeit less. I believe that benchmark will need some form of varargs forwarding (i.e. limited arguments elimination just for varargs) in the third-tier DFG.
Comment 71 Filip Pizlo 2015-03-20 18:19:45 PDT
Created attachment 249154 [details]
rebased, still passing tests

I believe that http://trac.webkit.org/changeset/181817 fixed the raytrace bug I was seeing.
Comment 72 Filip Pizlo 2015-03-20 18:58:06 PDT
We're at performance parity except for JSRegress.
Comment 73 Filip Pizlo 2015-03-20 19:31:08 PDT
Here are the numbers right now.  Note that I intend to fix the box2d regression before putting this up for review.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on dethklok (MacBookPro9,1).

VMs tested:
"TipOfTree" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r181817)
"VarOffset" at /Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc (r181817)

Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample measurements.
Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level
timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                        TipOfTree                 VarOffset                                     
SunSpider:
   3d-cube                                            4.8810+-0.1003     ?      4.9412+-0.2189        ? might be 1.0123x slower
   3d-morph                                           5.9792+-0.6905            5.8613+-0.5301          might be 1.0201x faster
   3d-raytrace                                        6.4168+-0.1789            6.2884+-0.0709          might be 1.0204x faster
   access-binary-trees                                2.1102+-0.0864     ?      2.1418+-0.0905        ? might be 1.0150x slower
   access-fannkuch                                    6.2496+-0.2250            5.9958+-0.0395          might be 1.0423x faster
   access-nbody                                       2.8756+-0.0770     ?      2.9577+-0.0481        ? might be 1.0286x slower
   access-nsieve                                      3.4230+-0.0339     ^      3.1909+-0.1717        ^ definitely 1.0727x faster
   bitops-3bit-bits-in-byte                           1.5723+-0.0332     ?      1.6587+-0.1485        ? might be 1.0549x slower
   bitops-bits-in-byte                                3.5115+-0.0201     ^      3.3578+-0.0437        ^ definitely 1.0458x faster
   bitops-bitwise-and                                 2.2646+-0.1186     ?      2.2751+-0.4194        ?
   bitops-nsieve-bits                                 3.7195+-0.0653     ?      3.7829+-0.0269        ? might be 1.0170x slower
   controlflow-recursive                              2.1769+-0.0381            2.1263+-0.0295          might be 1.0238x faster
   crypto-aes                                         4.1481+-0.0565            4.1137+-0.1415        
   crypto-md5                                         2.4892+-0.0862            2.4578+-0.0611          might be 1.0128x faster
   crypto-sha1                                        2.6329+-0.1717     ?      2.6584+-0.1258        ?
   date-format-tofte                                  9.3994+-0.1059     ?      9.4074+-0.2280        ?
   date-format-xparb                                  5.4476+-0.1924     ?      5.6578+-0.5313        ? might be 1.0386x slower
   math-cordic                                        3.2232+-0.0863            3.1312+-0.0485          might be 1.0294x faster
   math-partial-sums                                  5.5891+-0.8351            5.2155+-0.0681          might be 1.0716x faster
   math-spectral-norm                                 1.9156+-0.0404     ?      1.9431+-0.0378        ? might be 1.0143x slower
   regexp-dna                                         8.5278+-1.6188            8.0537+-1.5675          might be 1.0589x faster
   string-base64                                      4.4894+-0.1216     ?      5.1257+-0.9666        ? might be 1.1417x slower
   string-fasta                                       6.4723+-0.0745     ?      6.7759+-0.6326        ? might be 1.0469x slower
   string-tagcloud                                    9.8012+-0.3706            9.7405+-0.2561        
   string-unpack-code                                19.9095+-1.0705     ?     20.1883+-1.1555        ? might be 1.0140x slower
   string-validate-input                              4.9509+-0.0970            4.9301+-0.1964        

   <arithmetic>                                       5.1606+-0.0346            5.1530+-0.0899          might be 1.0015x faster

                                                        TipOfTree                 VarOffset                                     
LongSpider:
   3d-cube                                         1096.3541+-8.9227     ?   1098.6296+-6.7645        ?
   3d-morph                                        1537.5260+-13.7502        1530.0449+-1.4554        
   3d-raytrace                                      740.4688+-13.8050         724.3087+-2.6800          might be 1.0223x faster
   access-binary-trees                              997.0497+-8.0571          984.6986+-6.3847          might be 1.0125x faster
   access-fannkuch                                  334.3393+-8.7815     ?    349.1175+-16.2045       ? might be 1.0442x slower
   access-nbody                                     613.7874+-4.0750     ?    615.0160+-4.0148        ?
   access-nsieve                                    876.3375+-8.6939          862.0601+-6.3177          might be 1.0166x faster
   bitops-3bit-bits-in-byte                          44.8642+-0.9665     ?     45.0625+-1.1606        ?
   bitops-bits-in-byte                              104.9997+-1.7882     ?    106.0337+-2.1904        ?
   bitops-nsieve-bits                               692.0291+-2.8074     ?    699.8492+-7.1299        ? might be 1.0113x slower
   controlflow-recursive                            498.1042+-2.4118          486.9194+-12.3577         might be 1.0230x faster
   crypto-aes                                       712.2198+-6.2998          707.3480+-9.8132        
   crypto-md5                                       555.1205+-9.9706          555.0508+-8.4426        
   crypto-sha1                                      602.9036+-5.4328          600.0266+-5.8228        
   date-format-tofte                                778.7516+-16.1397         756.9041+-10.9492         might be 1.0289x faster
   date-format-xparb                                755.8632+-23.7222         750.9738+-38.0241       
   math-cordic                                      592.1950+-2.2455          591.0228+-1.6436        
   math-partial-sums                                505.3678+-2.3743     ?    508.5627+-3.8367        ?
   math-spectral-norm                               567.3386+-2.1154     ?    568.4075+-3.7864        ?
   string-base64                                    369.2450+-6.3626          368.5506+-4.0007        
   string-fasta                                     422.3073+-7.2231          422.2526+-5.4314        
   string-tagcloud                                  214.7409+-1.1778     ?    216.4726+-0.9684        ?

   <geometric>                                      504.4244+-1.2149          503.4790+-2.3653          might be 1.0019x faster

                                                        TipOfTree                 VarOffset                                     
V8Spider:
   crypto                                            54.3034+-0.9718     ?     54.7987+-2.9712        ?
   deltablue                                         90.4797+-2.7793     ?     91.8638+-6.2109        ? might be 1.0153x slower
   earley-boyer                                      41.9058+-0.4456           41.6246+-1.0615        
   raytrace                                          37.7885+-2.5572     !     52.0101+-1.2691        ! definitely 1.3763x slower
   regexp                                            66.7170+-0.8178           66.5712+-1.7689        
   richards                                          80.1940+-4.3062           78.7520+-2.4506          might be 1.0183x faster
   splay                                             38.5278+-2.0155           37.5394+-1.8254          might be 1.0263x faster

   <geometric>                                       55.3812+-0.9574     !     57.7238+-0.6952        ! definitely 1.0423x slower

                                                        TipOfTree                 VarOffset                                     
Octane:
   encrypt                                           0.20400+-0.00349          0.20315+-0.00237       
   decrypt                                           3.59311+-0.03233    ?     3.65392+-0.05745       ? might be 1.0169x slower
   deltablue                                x2       0.21011+-0.00667          0.20560+-0.00128         might be 1.0220x faster
   earley                                            0.68576+-0.00833    ^     0.55247+-0.00715       ^ definitely 1.2413x faster
   boyer                                             5.72970+-0.02119          5.71701+-0.01403       
   navier-stokes                            x2       5.22755+-0.03801          5.20467+-0.01836       
   raytrace                                 x2       1.28091+-0.02078    !     1.38581+-0.03557       ! definitely 1.0819x slower
   richards                                 x2       0.12362+-0.00290          0.12232+-0.00097         might be 1.0107x faster
   splay                                    x2       0.38370+-0.00106    ^     0.38016+-0.00111       ^ definitely 1.0093x faster
   regexp                                   x2      33.34993+-0.35057    ?    33.49987+-0.18192       ?
   pdfjs                                    x2      45.03057+-0.40443         44.72524+-0.26780       
   mandreel                                 x2      50.16406+-0.08274    ?    50.21281+-0.11843       ?
   gbemu                                    x2      41.26040+-2.51154         40.45775+-2.20971         might be 1.0198x faster
   closure                                           0.57991+-0.00328    ^     0.57066+-0.00304       ^ definitely 1.0162x faster
   jquery                                            7.17960+-0.08376          7.09311+-0.04506         might be 1.0122x faster
   box2d                                    x2      12.65383+-0.10769    !    14.15050+-0.18570       ! definitely 1.1183x slower
   zlib                                     x2     395.38695+-3.58583    ^   387.02517+-1.85088       ^ definitely 1.0216x faster
   typescript                               x2     816.79867+-12.75235   !   835.92574+-6.31218       ! definitely 1.0234x slower

   <geometric>                                       6.77822+-0.04154    ?     6.78223+-0.01592       ? might be 1.0006x slower

                                                        TipOfTree                 VarOffset                                     
Kraken:
   ai-astar                                          267.548+-3.688      ^     260.889+-2.104         ^ definitely 1.0255x faster
   audio-beat-detection                              109.934+-0.623            109.520+-0.823         
   audio-dft                                         149.642+-1.690      ?     151.238+-1.388         ? might be 1.0107x slower
   audio-fft                                          84.468+-3.638      ?      86.517+-2.202         ? might be 1.0243x slower
   audio-oscillator                                  209.616+-1.591            207.890+-1.322         
   imaging-darkroom                                  105.074+-1.890            104.859+-1.541         
   imaging-desaturate                                 64.816+-2.619             63.147+-1.404           might be 1.0264x faster
   imaging-gaussian-blur                             114.085+-2.233      ?     115.209+-2.449         ?
   json-parse-financial                               45.959+-1.785             45.921+-1.586         
   json-stringify-tinderbox                           56.822+-1.917      ?      57.984+-2.564         ? might be 1.0205x slower
   stanford-crypto-aes                                59.941+-1.531      ?      60.118+-0.760         ?
   stanford-crypto-ccm                                51.511+-4.054             50.321+-0.879           might be 1.0237x faster
   stanford-crypto-pbkdf2                            167.802+-2.311      ?     169.250+-1.904         ?
   stanford-crypto-sha256-iterative                   55.323+-3.033             54.442+-1.267           might be 1.0162x faster

   <arithmetic>                                      110.181+-0.616            109.808+-0.484           might be 1.0034x faster

                                                        TipOfTree                 VarOffset                                     
JSRegress:
   abs-boolean                                        2.5946+-0.0308     ?      2.6352+-0.0358        ? might be 1.0156x slower
   adapt-to-double-divide                            16.9614+-0.8485           16.6886+-0.1406          might be 1.0163x faster
   aliased-arguments-getbyval                         0.8153+-0.0376     !      1.2177+-0.1017        ! definitely 1.4935x slower
   allocate-big-object                                2.6530+-0.1139            2.5887+-0.0573          might be 1.0248x faster
   arguments-named-and-reflective                     9.2794+-0.0808     !     13.0651+-1.1642        ! definitely 1.4080x slower
   arguments-out-of-bounds                           17.4600+-1.1310     ^     14.7124+-0.1312        ^ definitely 1.1868x faster
   arguments-strict-mode                              7.7709+-0.1667     !     12.1736+-1.0436        ! definitely 1.5666x slower
   arguments                                          8.1423+-0.5024     !     10.6184+-0.9747        ! definitely 1.3041x slower
   arity-mismatch-inlining                            0.8191+-0.0248            0.8155+-0.0239        
   array-access-polymorphic-structure                 6.6447+-0.1732     ?      6.9501+-0.8846        ? might be 1.0460x slower
   array-nonarray-polymorhpic-access                 34.6062+-2.6651     ?     35.8829+-1.9388        ? might be 1.0369x slower
   array-prototype-every                             88.4747+-2.5943     ?     88.8912+-1.9960        ?
   array-prototype-forEach                           84.6232+-1.4198     ?     85.6668+-1.8852        ? might be 1.0123x slower
   array-prototype-map                               95.9230+-2.6699     ?     96.5505+-2.0098        ?
   array-prototype-some                              87.4120+-1.9506     ?     89.5926+-1.1322        ? might be 1.0249x slower
   array-splice-contiguous                           41.7987+-1.6003     ?     43.4183+-3.6103        ? might be 1.0387x slower
   array-with-double-add                              4.1451+-0.0562            4.0964+-0.0955          might be 1.0119x faster
   array-with-double-increment                        3.1887+-0.0522     ?      3.2164+-0.0612        ?
   array-with-double-mul-add                          4.9417+-0.0600     ?      4.9610+-0.0189        ?
   array-with-double-sum                              3.2442+-0.0259     ?      3.2501+-0.0441        ?
   array-with-int32-add-sub                           6.7751+-0.0447     ?      6.8922+-0.2916        ? might be 1.0173x slower
   array-with-int32-or-double-sum                     3.3006+-0.0328     ?      3.3193+-0.0345        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     33.9954+-1.2239     ?     35.1350+-2.3671        ? might be 1.0335x slower
   ArrayBuffer-DataView-alloc-long-lived             14.8569+-1.8472           13.6867+-0.2885          might be 1.0855x faster
   ArrayBuffer-Int32Array-byteOffset                  3.5193+-0.0696            3.4479+-0.0664          might be 1.0207x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     32.6768+-0.7688     ?     33.9708+-1.5550        ? might be 1.0396x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     22.6321+-0.9003     ?     23.4028+-1.4690        ? might be 1.0341x slower
   ArrayBuffer-Int8Array-alloc-long-lived            15.3832+-1.3250           14.5935+-2.0732          might be 1.0541x faster
   ArrayBuffer-Int8Array-alloc                       12.1153+-1.5548           10.9799+-0.4923          might be 1.1034x faster
   asmjs_bool_bug                                     7.5955+-0.0226     ?      7.6364+-0.2101        ?
   assign-custom-setter-polymorphic                   2.9980+-0.0900            2.8985+-0.0385          might be 1.0344x faster
   assign-custom-setter                               4.0205+-0.0887     ?      4.0403+-0.0427        ?
   basic-set                                          8.2887+-0.3530     ?      8.4614+-0.2203        ? might be 1.0208x slower
   big-int-mul                                        3.9770+-0.0459     ?      3.9962+-0.1351        ?
   boolean-test                                       3.0010+-0.0297     ?      3.0165+-0.0431        ?
   branch-fold                                        3.6611+-0.0258     ?      3.6710+-0.0415        ?
   by-val-generic                                     8.2780+-0.4690            8.1835+-0.3438          might be 1.0115x faster
   call-spread-apply                                 16.4052+-0.3168     !     30.4704+-1.5447        ! definitely 1.8574x slower
   call-spread-call                                   5.8409+-0.1160     !     24.7337+-1.3571        ! definitely 4.2346x slower
   captured-assignments                               0.4606+-0.0140     ?      0.4657+-0.0237        ? might be 1.0110x slower
   cast-int-to-double                                 5.2689+-0.0253     ?      5.3096+-0.0616        ?
   cell-argument                                      8.8658+-0.5694     ?      9.0880+-0.5696        ? might be 1.0251x slower
   cfg-simplify                                       2.8663+-0.0649            2.7812+-0.0335          might be 1.0306x faster
   chain-getter-access                               10.1074+-0.2063           10.0616+-0.1372        
   cmpeq-obj-to-obj-other                            11.7164+-1.0843           10.8038+-0.2472          might be 1.0845x faster
   constant-test                                      4.9111+-0.0426     ?      4.9352+-0.0477        ?
   DataView-custom-properties                        39.0084+-1.8847           38.9785+-1.2017        
   delay-tear-off-arguments-strictmode               21.7605+-1.8349     ^     14.2284+-1.4698        ^ definitely 1.5294x faster
   deltablue-varargs                                180.0431+-4.2814     !    199.5517+-2.1404        ! definitely 1.1084x slower
   destructuring-arguments                            5.2795+-0.1067     !     16.4444+-0.2312        ! definitely 3.1148x slower
   destructuring-swap                                 5.0404+-0.0513            5.0086+-0.0595        
   direct-arguments-getbyval                          0.9004+-0.1032     !      1.2008+-0.0448        ! definitely 1.3336x slower
   div-boolean-double                                 5.2073+-0.0337            5.2033+-0.0429        
   div-boolean                                        7.7643+-0.0341     ?      7.8008+-0.0716        ?
   double-get-by-val-out-of-bounds                    4.4727+-0.1085            4.4333+-0.1690        
   double-pollution-getbyval                          8.8335+-0.0812     ?      8.8634+-0.1152        ?
   double-pollution-putbyoffset                       4.1790+-0.0465     ?      4.1997+-0.0352        ?
   double-to-int32-typed-array-no-inline              2.2277+-0.0681            2.2076+-0.0631        
   double-to-int32-typed-array                        1.9083+-0.0303            1.8796+-0.0308          might be 1.0153x faster
   double-to-uint32-typed-array-no-inline             2.2590+-0.0583     ?      2.2752+-0.0699        ?
   double-to-uint32-typed-array                       2.0082+-0.1009            1.9320+-0.0326          might be 1.0394x faster
   elidable-new-object-dag                           44.6466+-1.0815           43.8640+-1.9043          might be 1.0178x faster
   elidable-new-object-roflcopter                    47.2217+-1.9599           46.7753+-1.0197        
   elidable-new-object-then-call                     39.7061+-2.0975     ?     39.7316+-2.5279        ?
   elidable-new-object-tree                          45.7764+-1.6480     ?     46.1208+-2.0060        ?
   empty-string-plus-int                              5.4008+-0.1094            5.3809+-0.0485        
   emscripten-cube2hash                              38.6277+-1.5215     ?     39.6622+-2.2924        ? might be 1.0268x slower
   exit-length-on-plain-object                       14.3577+-0.4051     ?     14.5464+-0.9210        ? might be 1.0131x slower
   external-arguments-getbyval                        1.3982+-0.0631     ^      1.2274+-0.0739        ^ definitely 1.1391x faster
   external-arguments-putbyval                        2.0469+-0.0783     !      2.2172+-0.0473        ! definitely 1.0832x slower
   fixed-typed-array-storage-var-index                1.2173+-0.0244     ?      1.2247+-0.0148        ?
   fixed-typed-array-storage                          0.9189+-0.0735            0.8867+-0.0386          might be 1.0363x faster
   Float32Array-matrix-mult                           4.3590+-0.0354            4.2901+-0.1468          might be 1.0161x faster
   Float32Array-to-Float64Array-set                  61.2310+-1.4659     ^     54.5194+-2.0250        ^ definitely 1.1231x faster
   Float64Array-alloc-long-lived                     71.7369+-1.1532     ?     72.2988+-2.8447        ?
   Float64Array-to-Int16Array-set                    69.6282+-1.8408     ?     73.8503+-3.3309        ? might be 1.0606x slower
   fold-double-to-int                                15.5375+-0.8714     ?     15.8880+-1.0021        ? might be 1.0226x slower
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.8487+-1.1018            9.7376+-0.6983          might be 1.1141x faster
   fold-get-by-id-to-multi-get-by-offset              9.7587+-1.4312     ?     10.0604+-1.1085        ? might be 1.0309x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.0291+-1.5285     ?      8.8405+-0.9215        ? might be 1.1011x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      9.0087+-0.7933     ?      9.0991+-1.6932        ? might be 1.0100x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      8.8807+-1.5549            8.3975+-0.9783          might be 1.0576x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      5.1576+-0.7888            4.7762+-0.3640          might be 1.0798x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      9.2135+-0.4250     ?      9.2383+-0.4380        ?
   fold-put-by-id-to-multi-put-by-offset              9.2397+-1.1536     ?      9.6261+-0.8922        ? might be 1.0418x slower
   fold-put-structure                                 4.1922+-0.5598     ?      5.6868+-1.8688        ? might be 1.3565x slower
   for-of-iterate-array-entries                       4.4980+-0.1089            4.4907+-0.0592        
   for-of-iterate-array-keys                          3.7445+-0.1454     ?      3.7973+-0.0837        ? might be 1.0141x slower
   for-of-iterate-array-values                        3.6584+-0.0808            3.6324+-0.0744        
   fround                                            20.2461+-0.6496           19.8663+-0.8167          might be 1.0191x faster
   ftl-library-inlining-dataview                     79.9187+-2.3690     ?     84.2666+-9.6070        ? might be 1.0544x slower
   ftl-library-inlining                              90.7473+-25.2981          87.1804+-20.2631         might be 1.0409x faster
   function-dot-apply                                 1.5159+-0.0968     !      6.9803+-0.1203        ! definitely 4.6048x slower
   function-test                                      3.3571+-0.0505            3.3199+-0.0607          might be 1.0112x faster
   function-with-eval                               127.0381+-5.3430     ^     94.6132+-1.7596        ^ definitely 1.3427x faster
   gcse-poly-get-less-obvious                        19.7228+-0.9754           18.8351+-0.8369          might be 1.0471x faster
   gcse-poly-get                                     23.8511+-2.7606           22.5477+-3.5664          might be 1.0578x faster
   gcse                                               4.3086+-0.0641            4.2969+-0.0375        
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7298+-0.0522     ?      2.7493+-0.0249        ?
   get-by-id-bimorphic-check-structure-elimination   
                                                      5.9954+-0.0598     ?      6.0799+-0.1448        ? might be 1.0141x slower
   get-by-id-chain-from-try-block                     9.4046+-1.3389            7.2843+-1.2390          might be 1.2911x faster
   get-by-id-check-structure-elimination              5.1102+-0.1058            5.0589+-0.0371          might be 1.0101x faster
   get-by-id-proto-or-self                           17.3796+-0.8890           17.2519+-0.6640        
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8982+-0.0446     ?      2.9381+-0.0312        ? might be 1.0138x slower
   get-by-id-self-or-proto                           17.6394+-0.7683     ?     17.8638+-0.4400        ? might be 1.0127x slower
   get-by-val-out-of-bounds                           4.2981+-0.0810     ?      4.4692+-0.3577        ? might be 1.0398x slower
   get_callee_monomorphic                             3.5990+-0.0914     ?      3.7183+-0.1490        ? might be 1.0331x slower
   get_callee_polymorphic                             3.6145+-0.0634     !      6.0481+-0.2810        ! definitely 1.6733x slower
   getter-no-activation                               4.5031+-0.4174            4.2759+-0.0616          might be 1.0531x faster
   getter-richards                                  126.4748+-7.9221     ?    130.2811+-10.4765       ? might be 1.0301x slower
   getter                                             5.0794+-0.0248     ?      5.6488+-0.5997        ? might be 1.1121x slower
   global-var-const-infer-fire-from-opt               0.8390+-0.0417     ?      0.8876+-0.1025        ? might be 1.0580x slower
   global-var-const-infer                             0.8540+-0.1113            0.8282+-0.0965          might be 1.0311x faster
   HashMap-put-get-iterate-keys                      26.5817+-0.3888     ?     26.7537+-0.6443        ?
   HashMap-put-get-iterate                           26.0569+-0.4290           25.7572+-0.3652          might be 1.0116x faster
   HashMap-string-put-get-iterate                    28.3969+-1.3014     ?     28.5847+-1.2033        ?
   hoist-make-rope                                   11.9520+-0.8078     ?     12.1332+-0.4507        ? might be 1.0152x slower
   hoist-poly-check-structure-effectful-loop   
                                                      5.6807+-1.7346            5.1488+-0.2995          might be 1.1033x faster
   hoist-poly-check-structure                         3.6949+-0.0260     ?      3.7001+-0.0546        ?
   imul-double-only                                   8.5931+-0.7517     ?      9.1959+-0.8692        ? might be 1.0701x slower
   imul-int-only                                      9.8747+-0.2900     ?      9.9238+-0.1824        ?
   imul-mixed                                         8.2963+-0.1162            8.2702+-0.2809        
   in-four-cases                                     18.7720+-0.1949     ?     18.9537+-0.4311        ?
   in-one-case-false                                 10.2464+-0.4804           10.0719+-0.3790          might be 1.0173x faster
   in-one-case-true                                  10.3309+-0.4298            9.8443+-0.2252          might be 1.0494x faster
   in-two-cases                                      10.4166+-0.4481           10.3039+-0.3456          might be 1.0109x faster
   indexed-properties-in-objects                      2.8927+-0.0351     ?      2.9218+-0.0290        ? might be 1.0100x slower
   infer-closure-const-then-mov-no-inline             3.6800+-0.0751     ^      3.5350+-0.0257        ^ definitely 1.0410x faster
   infer-closure-const-then-mov                      19.2969+-1.5919           17.3887+-0.4167          might be 1.1097x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     11.8832+-0.2306     ?     12.0228+-0.8698        ? might be 1.0118x slower
   infer-closure-const-then-put-to-scope             21.8037+-0.2797     ?     23.4359+-2.3851        ? might be 1.0749x slower
   infer-closure-const-then-reenter-no-inline   
                                                     49.8403+-1.7341           48.3830+-0.2874          might be 1.0301x faster
   infer-closure-const-then-reenter                  22.6548+-1.4774     !    124.3955+-1.4561        ! definitely 5.4909x slower
   infer-constant-global-property                    31.0710+-1.7498     ?     31.7423+-2.3690        ? might be 1.0216x slower
   infer-constant-property                            2.7660+-0.0763            2.7579+-0.1134        
   infer-one-time-closure-ten-vars                   12.5774+-0.7879           12.3526+-0.2497          might be 1.0182x faster
   infer-one-time-closure-two-vars                   11.9910+-0.2488     ?     12.1115+-0.7321        ? might be 1.0101x slower
   infer-one-time-closure                            11.7322+-0.3056     ?     12.4477+-1.1983        ? might be 1.0610x slower
   infer-one-time-deep-closure                       21.3535+-1.1152     ?     21.4430+-1.2074        ?
   inline-arguments-access                            1.3955+-0.0329     !      4.2281+-0.0750        ! definitely 3.0298x slower
   inline-arguments-aliased-access                    1.7501+-0.1605     !      4.3364+-0.1212        ! definitely 2.4778x slower
   inline-arguments-local-escape                     12.6784+-0.4123     ^      4.5016+-0.1883        ^ definitely 2.8164x faster
   inline-get-scoped-var                              4.6298+-0.1040            4.4285+-0.3475          might be 1.0454x faster
   inlined-put-by-id-transition                      10.1538+-0.2056     ?     10.3675+-0.3597        ? might be 1.0210x slower
   int-or-other-abs-then-get-by-val                   4.9827+-0.0424            4.9768+-0.0367        
   int-or-other-abs-zero-then-get-by-val             17.1215+-0.9293     ?     17.4886+-1.4086        ? might be 1.0214x slower
   int-or-other-add-then-get-by-val                   4.3026+-0.0773            4.2896+-0.0239        
   int-or-other-add                                   5.3201+-0.0323            5.2887+-0.0311        
   int-or-other-div-then-get-by-val                   4.2177+-0.0133     ?      4.4236+-0.4977        ? might be 1.0488x slower
   int-or-other-max-then-get-by-val                   4.3446+-0.0590     ?      4.4173+-0.1067        ? might be 1.0167x slower
   int-or-other-min-then-get-by-val                   4.3717+-0.0571     ?      4.4536+-0.0250        ? might be 1.0187x slower
   int-or-other-mod-then-get-by-val                   3.8587+-0.0463     ?      3.9207+-0.0550        ? might be 1.0161x slower
   int-or-other-mul-then-get-by-val                   3.9760+-0.0499     ?      4.0398+-0.0559        ? might be 1.0160x slower
   int-or-other-neg-then-get-by-val                   4.6075+-0.0105     ?      4.7658+-0.3176        ? might be 1.0343x slower
   int-or-other-neg-zero-then-get-by-val             17.0751+-0.8281     ?     17.3219+-1.3883        ? might be 1.0145x slower
   int-or-other-sub-then-get-by-val                   4.3413+-0.0964     ?      4.4165+-0.1894        ? might be 1.0173x slower
   int-or-other-sub                                   3.5396+-0.1246            3.5053+-0.0555        
   int-overflow-local                                 4.2557+-0.0588     ?      4.3250+-0.0283        ? might be 1.0163x slower
   Int16Array-alloc-long-lived                       50.2916+-2.3694           50.0083+-1.8636        
   Int16Array-bubble-sort-with-byteLength            21.6849+-1.3561     ?     22.1416+-1.7688        ? might be 1.0211x slower
   Int16Array-bubble-sort                            25.6385+-2.5840     ^     21.2340+-0.0994        ^ definitely 1.2074x faster
   Int16Array-load-int-mul                            1.4724+-0.0097     ?      1.5184+-0.0736        ? might be 1.0312x slower
   Int16Array-to-Int32Array-set                      58.7047+-1.5287     ^     51.9980+-1.7351        ^ definitely 1.1290x faster
   Int32Array-alloc-large                            24.3234+-0.5871     ?     24.5723+-1.6618        ? might be 1.0102x slower
   Int32Array-alloc-long-lived                       56.5165+-0.9798     ?     57.0769+-1.0481        ?
   Int32Array-alloc                                   3.5877+-0.6249            3.3811+-0.1499          might be 1.0611x faster
   Int32Array-Int8Array-view-alloc                    7.8647+-1.8118     ?      7.9735+-0.9842        ? might be 1.0138x slower
   int52-spill                                        6.5568+-0.1255     ?      6.6782+-0.2856        ? might be 1.0185x slower
   Int8Array-alloc-long-lived                        46.8322+-1.6964           46.5830+-1.3836        
   Int8Array-load-with-byteLength                     3.3739+-0.1504            3.3111+-0.0311          might be 1.0190x faster
   Int8Array-load                                     3.3276+-0.0903     ?      3.3473+-0.0438        ?
   integer-divide                                    11.2773+-0.1837     ?     11.8682+-0.4097        ? might be 1.0524x slower
   integer-modulo                                     2.0358+-0.0698     ?      2.1246+-0.0992        ? might be 1.0436x slower
   large-int-captured                                 6.7703+-0.1129     ^      5.5452+-0.0461        ^ definitely 1.2209x faster
   large-int-neg                                     16.4830+-0.2362     ?     18.1816+-1.5757        ? might be 1.1031x slower
   large-int                                         16.3620+-1.6881     ?     16.4237+-1.5908        ?
   logical-not                                        4.4885+-0.0188     ?      4.5450+-0.0535        ? might be 1.0126x slower
   lots-of-fields                                    13.5452+-1.3405           13.1271+-0.2983          might be 1.0319x faster
   make-indexed-storage                               3.0584+-0.0826            3.0141+-0.0507          might be 1.0147x faster
   make-rope-cse                                      4.7023+-0.5056            4.6767+-0.6666        
   marsaglia-larger-ints                             36.5052+-1.7796           35.7106+-1.0529          might be 1.0223x faster
   marsaglia-osr-entry                               23.0603+-0.3326     ?     23.5247+-1.4735        ? might be 1.0201x slower
   max-boolean                                        2.4726+-0.0352     ?      2.5052+-0.0258        ? might be 1.0132x slower
   method-on-number                                  17.2160+-0.2334     ?     17.4234+-0.2140        ? might be 1.0120x slower
   min-boolean                                        2.4620+-0.0195     ?      2.5022+-0.0300        ? might be 1.0163x slower
   minus-boolean-double                               3.1642+-0.0414     ?      3.1679+-0.0482        ?
   minus-boolean                                      2.3340+-0.0447     ?      2.3527+-0.0559        ?
   misc-strict-eq                                    37.4502+-0.2300     ?     38.2345+-2.7134        ? might be 1.0209x slower
   mod-boolean-double                                10.8724+-0.1058     ?     11.0429+-0.2530        ? might be 1.0157x slower
   mod-boolean                                        7.9217+-0.2358            7.9097+-0.2778        
   mul-boolean-double                                 3.6959+-0.0386            3.6860+-0.0862        
   mul-boolean                                        2.8781+-0.0459            2.8774+-0.0544        
   neg-boolean                                        3.1665+-0.0309            3.1640+-0.0502        
   negative-zero-divide                               0.3485+-0.0129     ?      0.3528+-0.0105        ? might be 1.0123x slower
   negative-zero-modulo                               0.3394+-0.0146     ?      0.3467+-0.0128        ? might be 1.0217x slower
   negative-zero-negate                               0.3244+-0.0180            0.3207+-0.0060          might be 1.0114x faster
   nested-function-parsing                           21.4532+-0.5785     !     43.9855+-2.2210        ! definitely 2.0503x slower
   new-array-buffer-dead                              2.7646+-0.0656     ?      2.8088+-0.1389        ? might be 1.0160x slower
   new-array-buffer-push                              7.0847+-0.7708     ?      7.4689+-0.9300        ? might be 1.0542x slower
   new-array-dead                                    12.2570+-0.1689     ?     12.5199+-0.1628        ? might be 1.0214x slower
   new-array-push                                     3.9345+-0.3003     ?      3.9680+-0.2564        ?
   number-test                                        2.9847+-0.0226            2.9670+-0.0328        
   object-closure-call                                5.6496+-0.1442            5.6140+-0.0950        
   object-test                                        3.1206+-0.0523     ?      3.1329+-0.0525        ?
   obvious-sink-pathology-taken                     145.4633+-2.4440     ?    146.4790+-2.7531        ?
   obvious-sink-pathology                           140.9506+-1.9977          140.0090+-0.9226        
   obviously-elidable-new-object                     36.4417+-2.4627           36.0307+-1.8095          might be 1.0114x faster
   plus-boolean-arith                                 2.5161+-0.0429            2.4975+-0.0417        
   plus-boolean-double                                3.2134+-0.0807            3.1608+-0.0732          might be 1.0166x faster
   plus-boolean                                       2.3875+-0.0754            2.3669+-0.0320        
   poly-chain-access-different-prototypes-simple   
                                                      3.3177+-0.0464            3.3105+-0.0453        
   poly-chain-access-different-prototypes             2.9827+-0.7310            2.6036+-0.0232          might be 1.1456x faster
   poly-chain-access-simpler                          3.2949+-0.0392     ?      3.3538+-0.0787        ? might be 1.0179x slower
   poly-chain-access                                  2.9583+-0.3575            2.6023+-0.0856          might be 1.1368x faster
   poly-stricteq                                     57.8018+-1.8017     ?     59.9613+-2.7435        ? might be 1.0374x slower
   polymorphic-array-call                             1.3512+-0.1752     ?      1.4014+-0.1874        ? might be 1.0371x slower
   polymorphic-get-by-id                              3.1123+-0.0293     ?      3.1438+-0.1230        ? might be 1.0101x slower
   polymorphic-put-by-id                             29.3969+-1.8048           28.5241+-1.6287          might be 1.0306x faster
   polymorphic-structure                             15.2421+-0.7442     ?     15.5665+-1.3697        ? might be 1.0213x slower
   polyvariant-monomorphic-get-by-id                  8.6059+-0.3007            8.5938+-0.1834        
   proto-getter-access                               10.0130+-0.1296     ?     10.0970+-0.2201        ?
   put-by-id-replace-and-transition                   8.8644+-0.2310            8.5975+-0.0838          might be 1.0310x faster
   put-by-id-slightly-polymorphic                     2.8749+-0.0650            2.8423+-0.0205          might be 1.0115x faster
   put-by-id                                         13.3868+-0.4032           13.3621+-0.2823        
   put-by-val-direct                                  0.5626+-0.0262     ?      0.5751+-0.0199        ? might be 1.0222x slower
   put-by-val-large-index-blank-indexing-type   
                                                      5.8165+-0.2447     ?      5.9867+-0.3952        ? might be 1.0293x slower
   put-by-val-machine-int                             2.5441+-0.0533     ?      2.6388+-0.0917        ? might be 1.0372x slower
   rare-osr-exit-on-local                            15.0249+-0.2465     ?     15.1480+-0.5870        ?
   register-pressure-from-osr                        21.8321+-0.8673           21.7838+-0.8833        
   setter                                             5.2048+-0.0791     ?      5.7800+-0.6213        ? might be 1.1105x slower
   simple-activation-demo                            25.1026+-0.4058     ?     25.2276+-0.6920        ?
   simple-getter-access                              12.5372+-0.1897     ?     12.6647+-0.3392        ? might be 1.0102x slower
   simple-poly-call-nested                            8.2292+-0.2781            8.0302+-0.2238          might be 1.0248x faster
   simple-poly-call                                   1.3129+-0.0722     ?      1.3481+-0.1312        ? might be 1.0268x slower
   sin-boolean                                       23.7668+-1.3876           23.5791+-1.3739        
   sinkable-new-object-dag                           69.6718+-1.5538     ?     71.5166+-1.3809        ? might be 1.0265x slower
   sinkable-new-object-taken                         53.3445+-2.2129     ?     53.6960+-3.2474        ?
   sinkable-new-object                               39.7256+-0.9644           39.6622+-1.2151        
   slow-array-profile-convergence                     2.9140+-0.2749            2.7585+-0.0671          might be 1.0564x faster
   slow-convergence                                   3.2701+-0.1736            3.2499+-0.0741        
   sparse-conditional                                 1.0963+-0.0287     ?      1.1333+-0.0967        ? might be 1.0337x slower
   splice-to-remove                                  16.4429+-0.2392     ?     16.8519+-1.2147        ? might be 1.0249x slower
   string-char-code-at                               15.9352+-0.1477     ?     16.0804+-0.1399        ?
   string-concat-object                               2.4601+-0.1902            2.4412+-0.2380        
   string-concat-pair-object                          2.3042+-0.0731     ?      2.3067+-0.0467        ?
   string-concat-pair-simple                         11.1728+-0.2965     ?     11.3615+-0.4010        ? might be 1.0169x slower
   string-concat-simple                              11.9297+-1.1322           11.7049+-0.8871          might be 1.0192x faster
   string-cons-repeat                                 8.0776+-0.6548     ?      8.1977+-0.9899        ? might be 1.0149x slower
   string-cons-tower                                  8.3514+-0.7305     ?      8.5870+-1.1581        ? might be 1.0282x slower
   string-equality                                   17.5241+-0.3739     ?     17.9406+-1.6356        ? might be 1.0238x slower
   string-get-by-val-big-char                         7.0094+-0.0623     ?      7.1229+-0.1642        ? might be 1.0162x slower
   string-get-by-val-out-of-bounds-insane             3.8482+-0.0817     ?      3.8486+-0.1226        ?
   string-get-by-val-out-of-bounds                    5.1816+-0.0690     ?      5.2865+-0.1972        ? might be 1.0203x slower
   string-get-by-val                                  3.3008+-0.0376     ?      3.3855+-0.0512        ? might be 1.0257x slower
   string-hash                                        2.0244+-0.0470     ?      2.0406+-0.0731        ?
   string-long-ident-equality                        14.2334+-0.1526     ?     15.2955+-1.3620        ? might be 1.0746x slower
   string-out-of-bounds                              14.9467+-0.2740           14.8979+-0.2746        
   string-repeat-arith                               36.0838+-1.8210     ^     31.8703+-1.7766        ^ definitely 1.1322x faster
   string-sub                                        65.1422+-2.6170     ?     65.4779+-4.6902        ?
   string-test                                        2.9696+-0.0746     ?      2.9814+-0.0900        ?
   string-var-equality                               30.6908+-1.7210           30.5079+-1.3530        
   structure-hoist-over-transitions                   2.4899+-0.0501     ?      2.5460+-0.0572        ? might be 1.0225x slower
   substring-concat-weird                            38.8601+-0.8495           38.7106+-1.0256        
   substring-concat                                  39.7387+-0.5464     ?     40.7720+-1.6544        ? might be 1.0260x slower
   substring                                         46.4003+-2.0718     ?     46.9388+-2.3465        ? might be 1.0116x slower
   switch-char-constant                               2.7030+-0.0269            2.6866+-0.0396        
   switch-char                                        6.7489+-0.9652     ?      7.0335+-0.8245        ? might be 1.0422x slower
   switch-constant                                    8.2266+-0.3710            8.0303+-0.1079          might be 1.0244x faster
   switch-string-basic-big-var                       16.0790+-1.7376           15.0439+-0.4941          might be 1.0688x faster
   switch-string-basic-big                           14.2551+-0.9973     ?     14.9273+-1.7970        ? might be 1.0472x slower
   switch-string-basic-var                           15.1372+-1.3279           14.8380+-1.1923          might be 1.0202x faster
   switch-string-basic                               13.9145+-1.6241     ?     14.3321+-1.7179        ? might be 1.0300x slower
   switch-string-big-length-tower-var                21.9250+-1.7618           20.7657+-1.7587          might be 1.0558x faster
   switch-string-length-tower-var                    14.6041+-0.1959     ?     15.1724+-1.4175        ? might be 1.0389x slower
   switch-string-length-tower                        13.5666+-1.2648     ?     14.4839+-2.1993        ? might be 1.0676x slower
   switch-string-short                               13.2701+-1.4505     ?     14.1888+-1.9055        ? might be 1.0692x slower
   switch                                            12.0872+-0.3136     ?     12.1033+-0.2543        ?
   tear-off-arguments-simple                          1.9614+-0.0782     !      3.2781+-0.0514        ! definitely 1.6713x slower
   tear-off-arguments                                 2.7454+-0.0279     !      4.5109+-0.1216        ! definitely 1.6431x slower
   temporal-structure                                12.9519+-0.8369     ?     13.2093+-1.3818        ? might be 1.0199x slower
   to-int32-boolean                                  14.1154+-0.9607           13.5620+-0.1546          might be 1.0408x faster
   undefined-property-access                        385.6309+-3.8221     ?    386.4823+-6.3285        ?
   undefined-test                                     3.1202+-0.2218            3.0246+-0.0342          might be 1.0316x faster
   unprofiled-licm                                   23.9965+-1.9658           23.2896+-0.7174          might be 1.0304x faster
   varargs-call                                      15.9173+-0.9872     !     17.9589+-0.8468        ! definitely 1.1283x slower
   varargs-construct                                 55.2190+-3.2016     ^     40.3783+-1.3147        ^ definitely 1.3675x faster
   varargs-inline                                     8.4436+-0.3893     !     12.8549+-1.1425        ! definitely 1.5224x slower
   varargs-strict-mode                               15.4855+-1.1579     ?     16.8789+-0.2836        ? might be 1.0900x slower
   varargs                                           15.7035+-1.6085           14.9855+-0.2314          might be 1.0479x faster
   weird-inlining-const-prop                          2.2171+-0.0910     ?      2.4135+-0.1939        ? might be 1.0886x slower

   <geometric>                                        8.3324+-0.0312     !      8.6526+-0.0500        ! definitely 1.0384x slower

                                                        TipOfTree                 VarOffset                                     
AsmBench:
   bigfib.cpp                                       493.9181+-2.8532          492.9224+-2.1096        
   cray.c                                           435.2725+-10.3530         430.1591+-2.5643          might be 1.0119x faster
   dry.c                                            489.8103+-1.8266     ?    490.4915+-10.3195       ?
   FloatMM.c                                        729.6682+-3.6618          726.7941+-2.6514        
   gcc-loops.cpp                                   4252.3182+-16.3408    ?   4260.9071+-23.2380       ?
   n-body.c                                         988.8191+-5.2327          986.9184+-3.9455        
   Quicksort.c                                      444.5309+-5.9634          442.4574+-1.4171        
   stepanov_container.cpp                          3581.2647+-7.9971         3572.2782+-14.8630       
   Towers.c                                         268.3764+-2.2816          268.3147+-2.3779        

   <geometric>                                      802.4690+-2.2887          800.3650+-1.7432          might be 1.0026x faster

                                                        TipOfTree                 VarOffset                                     
CompressionBench:
   huffman                                          386.2019+-1.2097     ?    386.7360+-2.6542        ?
   arithmetic-simple                                406.9363+-5.0585          402.6431+-4.3853          might be 1.0107x faster
   arithmetic-precise                               304.9522+-1.7341          304.7725+-4.5106        
   arithmetic-complex-precise                       301.6358+-5.2021     ?    303.1571+-4.6472        ?
   arithmetic-precise-order-0                       436.7237+-6.2695          435.1612+-9.1277        
   arithmetic-precise-order-1                       342.7232+-2.9055     ^    327.8700+-2.9491        ^ definitely 1.0453x faster
   arithmetic-precise-order-2                       392.6497+-18.3265         369.9658+-6.2658          might be 1.0613x faster
   arithmetic-simple-order-1                        435.4581+-4.3075     ^    424.5752+-3.5638        ^ definitely 1.0256x faster
   arithmetic-simple-order-2                        483.7448+-3.7295     ^    472.3563+-4.0068        ^ definitely 1.0241x faster
   lz-string                                        325.3980+-5.9588          324.6047+-1.7246        

   <geometric>                                      377.1107+-2.0545     ^    371.0082+-1.4414        ^ definitely 1.0164x faster

                                                        TipOfTree                 VarOffset                                     

                                                        TipOfTree                 VarOffset                                     
Geomean of preferred means:
   <scaled-result>                                   63.7105+-0.2019     !     64.1418+-0.1349        ! definitely 1.0068x slower
Comment 74 Filip Pizlo 2015-03-20 19:58:23 PDT
Created attachment 249157 [details]
starting to work on the varargs forwarding phase
Comment 75 Filip Pizlo 2015-03-21 08:44:20 PDT
Created attachment 249172 [details]
OSR exit part of varargs forwarding is almost done
Comment 76 Filip Pizlo 2015-03-21 10:33:44 PDT
Created attachment 249174 [details]
it compiles again!

DFG varargs forwarding phase is done.  now to test it...
Comment 77 Filip Pizlo 2015-03-21 11:09:23 PDT
Created attachment 249175 [details]
DFG and FTL can now forward varargs

It's passing the main varargs tests.  Running all tests now.
Comment 78 Filip Pizlo 2015-03-21 11:53:25 PDT
The new code with the third-tier varargs forwarding still has some issues:

** The following JSC stress test failures have been introduced:
	internal-js-tests.yaml/V8v7/raytrace.js.default-ftl
	internal-js-tests.yaml/V8v7/raytrace.js.ftl-no-cjit-no-simple-opt
	internal-js-tests.yaml/V8v7/raytrace.js.ftl-no-cjit-osr-validation
	internal-js-tests.yaml/V8v7/raytrace.js.ftl-no-cjit-validate
	jsc-layout-tests.yaml/js/script-tests/function-apply-many-args.js.layout-dfg-eager-no-cjit
	v8-v6/v8-raytrace.js.default-ftl
	v8-v6/v8-raytrace.js.dfg-eager-no-cjit-validate
	v8-v6/v8-raytrace.js.ftl-eager-no-cjit
	v8-v6/v8-raytrace.js.ftl-no-cjit-validate

Results for JSC stress tests:
    9 failures found.
Comment 79 Filip Pizlo 2015-03-21 12:05:48 PDT
Unfortunately, this doesn't appear to address the box2d slow-down just yet:

box2d          x2      12.74762+-0.13700    !    14.14226+-0.40700       ! definitely 1.1094x slower
Comment 80 Filip Pizlo 2015-03-21 12:14:41 PDT
OK, I fixed that.  It turned out to be a dumb bug in argumentsInvolveStackSlot(): we thought that a store to 'this' interferes with the stack slots used by the arguments object.
Comment 81 Filip Pizlo 2015-03-21 12:19:18 PDT
(In reply to comment #80)
> OK, I fixed that.  It turned out to be a dumb bug in
> argumentsInvolveStackSlot(): we thought that a store to 'this' interferes
> with the stack slots used by the arguments object.

And by "fixed", I mean that box2d now has a speed-up with this patch:

box2d          x2      12.74121+-0.02937    ^    12.21960+-0.13325       ^ definitely 1.0427x faster
Comment 82 Filip Pizlo 2015-03-21 18:27:49 PDT
Created attachment 249182 [details]
couple of bugfixes

And some new tests!
Comment 83 Filip Pizlo 2015-03-21 19:57:39 PDT
(In reply to comment #82)
> Created attachment 249182 [details]
> couple of bugfixes
> 
> And some new tests!

This passes a lot of tests, but hilariously, the VarargsForwardingPhase causes the FTL to do less optimizations.  I need to investigate.
Comment 84 Filip Pizlo 2015-03-21 20:32:19 PDT
Victory.  Now I just have one crash bug to fix (in dead-access-to-captured-variable-preceded-by-a-live-store) and I need to port to 32-bit.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on dethklok (MacBookPro9,1).

VMs tested:
"TipOfTree" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r181817)
"VarOffset" at /Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc (r181817)

Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample measurements.
Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level
timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                        TipOfTree                 VarOffset                                     
SunSpider:
   3d-cube                                            4.9017+-0.1281            4.8992+-0.0291        
   3d-morph                                           6.0416+-0.7505            5.5698+-0.0824          might be 1.0847x faster
   3d-raytrace                                        7.1640+-1.9683            6.3432+-0.1266          might be 1.1294x faster
   access-binary-trees                                2.1097+-0.1085            2.0797+-0.0627          might be 1.0144x faster
   access-fannkuch                                    6.0033+-0.2915     ?      6.2669+-0.4815        ? might be 1.0439x slower
   access-nbody                                       2.8446+-0.0524     ?      2.9247+-0.1032        ? might be 1.0282x slower
   access-nsieve                                      3.2158+-0.1422     !      3.4085+-0.0389        ! definitely 1.0599x slower
   bitops-3bit-bits-in-byte                           1.5995+-0.1207            1.5392+-0.0188          might be 1.0392x faster
   bitops-bits-in-byte                                3.5599+-0.0357     ^      3.3985+-0.0229        ^ definitely 1.0475x faster
   bitops-bitwise-and                                 2.1314+-0.0480     ?      2.1954+-0.1212        ? might be 1.0300x slower
   bitops-nsieve-bits                                 3.9392+-0.6223            3.7704+-0.0346          might be 1.0448x faster
   controlflow-recursive                              2.1592+-0.0374            2.1560+-0.0996        
   crypto-aes                                         4.4269+-0.5888            4.2992+-0.4744          might be 1.0297x faster
   crypto-md5                                         2.4290+-0.0336            2.4179+-0.0271        
   crypto-sha1                                        2.7904+-0.0545     ?      2.9407+-0.5976        ? might be 1.0539x slower
   date-format-tofte                                  9.2875+-0.1429     ?      9.3208+-0.2291        ?
   date-format-xparb                                  5.3167+-0.1542     ?      5.6932+-0.3558        ? might be 1.0708x slower
   math-cordic                                        3.2699+-0.1204            3.2036+-0.1562          might be 1.0207x faster
   math-partial-sums                                  5.1961+-0.1131            5.1629+-0.0982        
   math-spectral-norm                                 1.9756+-0.0741            1.9349+-0.0565          might be 1.0211x faster
   regexp-dna                                         7.7810+-1.2019            7.6440+-1.2113          might be 1.0179x faster
   string-base64                                      4.7606+-0.6879     ?      4.8085+-0.9157        ? might be 1.0101x slower
   string-fasta                                       6.4792+-0.1243     ?      6.7039+-0.6378        ? might be 1.0347x slower
   string-tagcloud                                    9.8202+-0.2892            9.6373+-0.2542          might be 1.0190x faster
   string-unpack-code                                20.3537+-1.0780           19.7221+-0.2824          might be 1.0320x faster
   string-validate-input                              4.8014+-0.0457     ?      4.9093+-0.0879        ? might be 1.0225x slower

   <arithmetic>                                       5.1676+-0.0850            5.1135+-0.0498          might be 1.0106x faster

                                                        TipOfTree                 VarOffset                                     
LongSpider:
   3d-cube                                         1096.3337+-8.4898         1093.7603+-9.5475        
   3d-morph                                        1532.0884+-4.6503     ?   1542.2600+-17.2167       ?
   3d-raytrace                                      733.3191+-5.9032          727.7755+-11.5984       
   access-binary-trees                              996.8634+-10.0249         983.8950+-5.8529          might be 1.0132x faster
   access-fannkuch                                  339.4403+-9.7328     ?    353.4993+-5.6720        ? might be 1.0414x slower
   access-nbody                                     613.0658+-2.4074     ?    647.6632+-81.1990       ? might be 1.0564x slower
   access-nsieve                                    870.4932+-8.3117          864.8263+-11.1455       
   bitops-3bit-bits-in-byte                          45.0267+-0.9861     ?     46.3044+-2.7221        ? might be 1.0284x slower
   bitops-bits-in-byte                              103.9690+-1.0523     ?    105.1049+-4.4509        ? might be 1.0109x slower
   bitops-nsieve-bits                               712.0330+-39.0448         704.5660+-4.9940          might be 1.0106x faster
   controlflow-recursive                            503.8050+-12.8532    ^    482.9097+-3.6907        ^ definitely 1.0433x faster
   crypto-aes                                       709.7507+-5.3468     ?    710.8568+-8.4165        ?
   crypto-md5                                       552.1249+-5.5952          550.6012+-6.1270        
   crypto-sha1                                      601.5227+-7.1291          599.2570+-6.7295        
   date-format-tofte                                771.8925+-9.2285          758.7334+-15.8302         might be 1.0173x faster
   date-format-xparb                                762.2727+-21.1727         745.9775+-18.5221         might be 1.0218x faster
   math-cordic                                      597.2029+-7.9316          597.0286+-11.4778       
   math-partial-sums                                509.1969+-6.4644          506.6546+-1.8273        
   math-spectral-norm                               564.6925+-0.9477     ?    613.0783+-119.0429      ? might be 1.0857x slower
   string-base64                                    364.2877+-7.8788          362.8219+-4.9663        
   string-fasta                                     422.7378+-3.7619     ?    424.4975+-5.7933        ?
   string-tagcloud                                  215.9610+-2.4832     ?    216.5074+-2.7605        ?

   <geometric>                                      504.8709+-2.5775     ?    506.6397+-4.4576        ? might be 1.0035x slower

                                                        TipOfTree                 VarOffset                                     
V8Spider:
   crypto                                            55.8340+-1.6098           55.1450+-3.3781          might be 1.0125x faster
   deltablue                                         92.3854+-4.9547           92.3543+-6.5274        
   earley-boyer                                      42.3256+-0.8410           41.1394+-0.5167          might be 1.0288x faster
   raytrace                                          38.5377+-3.7738     ?     38.7447+-1.8166        ?
   regexp                                            67.1395+-1.2739           66.4766+-1.4860        
   richards                                          81.1405+-2.5279           78.9990+-2.4080          might be 1.0271x faster
   splay                                             39.0199+-1.0256           37.8300+-2.0243          might be 1.0315x faster

   <geometric>                                       56.2434+-1.3248           55.4115+-0.5837          might be 1.0150x faster

                                                        TipOfTree                 VarOffset                                     
Octane:
   encrypt                                           0.20259+-0.00108    ?     0.20283+-0.00117       ?
   decrypt                                           3.59592+-0.03947    ?     3.61984+-0.04092       ?
   deltablue                                x2       0.20534+-0.00130    ?     0.20611+-0.00184       ?
   earley                                            0.69050+-0.00390    ^     0.55301+-0.00388       ^ definitely 1.2486x faster
   boyer                                             5.72497+-0.04539          5.69658+-0.02511       
   navier-stokes                            x2       5.21616+-0.05402          5.18832+-0.00788       
   raytrace                                 x2       1.29042+-0.04445          1.26241+-0.04465         might be 1.0222x faster
   richards                                 x2       0.12323+-0.00225          0.12251+-0.00094       
   splay                                    x2       0.38506+-0.00475          0.38238+-0.00241       
   regexp                                   x2      33.33609+-0.33576         33.15827+-0.26477       
   pdfjs                                    x2      44.82803+-0.28930    ?    45.08427+-0.77731       ?
   mandreel                                 x2      50.36068+-0.70841    ?    57.18621+-17.73578      ? might be 1.1355x slower
   gbemu                                    x2      40.15027+-0.43667    ?    40.17046+-1.95167       ?
   closure                                           0.58239+-0.00377          0.57650+-0.01621         might be 1.0102x faster
   jquery                                            7.18168+-0.07183          7.14945+-0.13291       
   box2d                                    x2      12.80408+-0.21425    ^    12.22952+-0.09737       ^ definitely 1.0470x faster
   zlib                                     x2     394.84661+-1.64225        377.00917+-17.57298        might be 1.0473x faster
   typescript                               x2     821.01302+-12.52872   ?   830.25403+-17.89477      ? might be 1.0113x slower

   <geometric>                                       6.76613+-0.02426          6.70560+-0.11897         might be 1.0090x faster

                                                        TipOfTree                 VarOffset                                     
Kraken:
   ai-astar                                          265.915+-1.931            262.635+-4.194           might be 1.0125x faster
   audio-beat-detection                              110.384+-1.035            110.372+-1.343         
   audio-dft                                         149.307+-3.935            148.168+-1.667         
   audio-fft                                          86.236+-2.842             83.137+-5.905           might be 1.0373x faster
   audio-oscillator                                  215.602+-5.141            211.427+-2.152           might be 1.0197x faster
   imaging-darkroom                                  105.290+-1.956      ?     105.543+-1.780         ?
   imaging-desaturate                                 63.412+-1.882      ?      63.789+-1.963         ?
   imaging-gaussian-blur                             113.937+-1.949            112.583+-2.000           might be 1.0120x faster
   json-parse-financial                               46.617+-2.036      ?      48.113+-1.697         ? might be 1.0321x slower
   json-stringify-tinderbox                           56.910+-1.341             55.800+-1.737           might be 1.0199x faster
   stanford-crypto-aes                                60.405+-1.719             60.072+-1.019         
   stanford-crypto-ccm                                51.840+-4.761             50.555+-1.383           might be 1.0254x faster
   stanford-crypto-pbkdf2                            168.868+-1.889            168.840+-2.545         
   stanford-crypto-sha256-iterative                   55.130+-2.123      ?      55.299+-1.666         ?

   <arithmetic>                                      110.704+-0.957            109.738+-0.469           might be 1.0088x faster

                                                        TipOfTree                 VarOffset                                     
JSRegress:
   abs-boolean                                        2.6390+-0.0497     ?      2.6733+-0.1426        ? might be 1.0130x slower
   adapt-to-double-divide                            16.7057+-0.2939           16.5352+-0.2077          might be 1.0103x faster
   aliased-arguments-getbyval                         0.8750+-0.1003     !      1.1810+-0.0572        ! definitely 1.3497x slower
   allocate-big-object                                2.7465+-0.2200     ?      2.7649+-0.1810        ?
   arguments-named-and-reflective                     9.2676+-0.1568     !     12.4880+-0.1670        ! definitely 1.3475x slower
   arguments-out-of-bounds                           17.5296+-1.4577     ^     14.8223+-0.1275        ^ definitely 1.1827x faster
   arguments-strict-mode                              7.8397+-0.1147     !     11.9400+-0.7952        ! definitely 1.5230x slower
   arguments                                          8.1028+-0.4231     !     10.7074+-1.1347        ! definitely 1.3215x slower
   arity-mismatch-inlining                            0.8495+-0.0812            0.8014+-0.0272          might be 1.0600x faster
   array-access-polymorphic-structure                 6.6608+-0.1380     ?      7.1372+-0.9479        ? might be 1.0715x slower
   array-nonarray-polymorhpic-access                 35.2690+-2.1497           35.2384+-1.5625        
   array-prototype-every                             87.0461+-2.6521           86.3693+-2.4882        
   array-prototype-forEach                           83.1996+-2.1928     ?     85.3514+-1.7538        ? might be 1.0259x slower
   array-prototype-map                               94.2257+-4.2539     ?     95.8304+-2.5183        ? might be 1.0170x slower
   array-prototype-some                              86.7282+-0.5704     ?     87.7251+-2.7378        ? might be 1.0115x slower
   array-splice-contiguous                           41.4119+-1.3195     ?     41.7235+-1.2377        ?
   array-with-double-add                              4.1983+-0.0968            4.1463+-0.0708          might be 1.0125x faster
   array-with-double-increment                        3.1737+-0.0452     ?      3.2521+-0.1287        ? might be 1.0247x slower
   array-with-double-mul-add                          4.9507+-0.0674     ?      5.2213+-0.3005        ? might be 1.0547x slower
   array-with-double-sum                              3.2365+-0.0320     ?      3.2881+-0.0932        ? might be 1.0159x slower
   array-with-int32-add-sub                           6.7863+-0.0695            6.7522+-0.0127        
   array-with-int32-or-double-sum                     3.3001+-0.0394     ?      3.4034+-0.2287        ? might be 1.0313x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     34.4114+-2.4115           34.2580+-1.7629        
   ArrayBuffer-DataView-alloc-long-lived             15.5472+-1.4064           14.8891+-2.0846          might be 1.0442x faster
   ArrayBuffer-Int32Array-byteOffset                  3.5158+-0.1379            3.4370+-0.0469          might be 1.0229x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     33.6919+-1.9438     ?     34.2576+-2.3308        ? might be 1.0168x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     23.9516+-2.0772           23.7262+-2.0815        
   ArrayBuffer-Int8Array-alloc-long-lived            14.1093+-1.7181     ?     15.4349+-1.8490        ? might be 1.0939x slower
   ArrayBuffer-Int8Array-alloc                       11.5817+-1.0811           11.1208+-0.9256          might be 1.0415x faster
   asmjs_bool_bug                                     7.7481+-0.2484     ?      7.7651+-0.2098        ?
   assign-custom-setter-polymorphic                   3.0131+-0.2336     ?      3.2188+-0.1491        ? might be 1.0683x slower
   assign-custom-setter                               4.0621+-0.1279     ?      4.4348+-0.3296        ? might be 1.0917x slower
   basic-set                                          8.6607+-0.7063            8.3453+-0.4424          might be 1.0378x faster
   big-int-mul                                        3.9293+-0.0796     ?      3.9717+-0.0638        ? might be 1.0108x slower
   boolean-test                                       3.0121+-0.0698     ?      3.0485+-0.0473        ? might be 1.0121x slower
   branch-fold                                        3.6445+-0.0161     ?      3.7840+-0.1745        ? might be 1.0383x slower
   by-val-generic                                     7.9561+-0.0948     ?      8.1960+-0.4687        ? might be 1.0301x slower
   call-spread-apply                                 17.3580+-1.1964     !     31.5833+-1.6596        ! definitely 1.8195x slower
   call-spread-call                                   6.0394+-0.1774     !     24.9599+-0.6710        ! definitely 4.1328x slower
   captured-assignments                               0.4768+-0.0179     ?      0.4884+-0.0697        ? might be 1.0243x slower
   cast-int-to-double                                 5.2884+-0.0258     ?      5.3094+-0.0543        ?
   cell-argument                                      8.5227+-0.1246     ?      8.8488+-0.6758        ? might be 1.0383x slower
   cfg-simplify                                       2.9098+-0.1369            2.8330+-0.1209          might be 1.0271x faster
   chain-getter-access                               10.0680+-0.1349           10.0254+-0.1750        
   cmpeq-obj-to-obj-other                            11.5928+-1.3747     ?     11.9969+-0.7984        ? might be 1.0349x slower
   constant-test                                      4.9227+-0.0299            4.9205+-0.0623        
   DataView-custom-properties                        39.6618+-1.2995           39.1096+-1.2928          might be 1.0141x faster
   delay-tear-off-arguments-strictmode               21.3940+-1.5909     ^     14.2245+-1.4681        ^ definitely 1.5040x faster
   deltablue-varargs                                181.3296+-1.9218     !    202.8445+-1.5379        ! definitely 1.1187x slower
   destructuring-arguments                            5.2181+-0.1088     !     17.2683+-1.1020        ! definitely 3.3093x slower
   destructuring-swap                                 5.0476+-0.0418            5.0198+-0.0327        
   direct-arguments-getbyval                          0.9563+-0.0470     !      1.2015+-0.0519        ! definitely 1.2564x slower
   div-boolean-double                                 5.1892+-0.0365     ?      5.1921+-0.0063        ?
   div-boolean                                        7.8449+-0.2864     ?      7.9229+-0.2491        ?
   double-get-by-val-out-of-bounds                    4.4637+-0.0989            4.4186+-0.0474          might be 1.0102x faster
   double-pollution-getbyval                          8.8902+-0.0753            8.8330+-0.0383        
   double-pollution-putbyoffset                       4.1302+-0.0696     ?      4.1768+-0.0511        ? might be 1.0113x slower
   double-to-int32-typed-array-no-inline              2.2805+-0.0984            2.2174+-0.0864          might be 1.0284x faster
   double-to-int32-typed-array                        1.9027+-0.0420     ?      1.9681+-0.1436        ? might be 1.0343x slower
   double-to-uint32-typed-array-no-inline             2.2585+-0.0869     ?      2.3159+-0.0719        ? might be 1.0254x slower
   double-to-uint32-typed-array                       2.0577+-0.1435            2.0318+-0.1428          might be 1.0127x faster
   elidable-new-object-dag                           44.6996+-1.7341     ?     45.1471+-1.4622        ? might be 1.0100x slower
   elidable-new-object-roflcopter                    47.9990+-2.1137     ?     48.1162+-1.4348        ?
   elidable-new-object-then-call                     39.1941+-2.7395     ?     39.6864+-1.4742        ? might be 1.0126x slower
   elidable-new-object-tree                          45.5476+-2.2245     ?     46.4419+-1.9910        ? might be 1.0196x slower
   empty-string-plus-int                              5.3222+-0.0782     ?      5.5485+-0.4114        ? might be 1.0425x slower
   emscripten-cube2hash                              39.2718+-1.6096     ?     40.1305+-1.4285        ? might be 1.0219x slower
   exit-length-on-plain-object                       14.1991+-0.5177           13.9755+-0.8267          might be 1.0160x faster
   external-arguments-getbyval                        1.3825+-0.0361     ^      1.1838+-0.0397        ^ definitely 1.1679x faster
   external-arguments-putbyval                        2.0158+-0.0306     !      2.3329+-0.1640        ! definitely 1.1573x slower
   fixed-typed-array-storage-var-index                1.2332+-0.0257            1.2162+-0.0100          might be 1.0140x faster
   fixed-typed-array-storage                          0.8810+-0.0322     ?      0.9222+-0.0851        ? might be 1.0468x slower
   Float32Array-matrix-mult                           4.4539+-0.2833            4.3785+-0.1749          might be 1.0172x faster
   Float32Array-to-Float64Array-set                  58.6958+-3.3470           57.6047+-1.5853          might be 1.0189x faster
   Float64Array-alloc-long-lived                     73.2237+-1.6983           72.5228+-1.2552        
   Float64Array-to-Int16Array-set                    70.9159+-1.0545           70.6936+-1.6639        
   fold-double-to-int                                15.1743+-0.2741     ?     15.8724+-0.9338        ? might be 1.0460x slower
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.1990+-1.0486     ?     10.4776+-0.9626        ? might be 1.0273x slower
   fold-get-by-id-to-multi-get-by-offset              9.9266+-1.4890     ?     10.0684+-1.5731        ? might be 1.0143x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.2025+-0.8273            8.1991+-2.0772        
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      9.1453+-1.3455            8.8655+-0.8686          might be 1.0316x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      8.5237+-0.5916     ?      9.0015+-0.8627        ? might be 1.0561x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                      6.5721+-1.7099     ^      4.5703+-0.0696        ^ definitely 1.4380x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      9.3901+-0.3974            9.1227+-0.4649          might be 1.0293x faster
   fold-put-by-id-to-multi-put-by-offset              9.9117+-1.1066            9.8844+-1.0134        
   fold-put-structure                                 6.2134+-1.3981            4.7370+-1.0329          might be 1.3117x faster
   for-of-iterate-array-entries                       4.5640+-0.1435            4.4607+-0.1183          might be 1.0232x faster
   for-of-iterate-array-keys                          3.8091+-0.1270            3.7777+-0.1251        
   for-of-iterate-array-values                        3.6397+-0.1482     ?      3.7272+-0.1953        ? might be 1.0240x slower
   fround                                            20.2495+-0.8432     ?     20.4237+-0.8198        ?
   ftl-library-inlining-dataview                     80.5157+-1.8920           77.0192+-1.6499          might be 1.0454x faster
   ftl-library-inlining                              76.9821+-14.7738          75.6729+-17.1504         might be 1.0173x faster
   function-dot-apply                                 1.5002+-0.0270     !      1.8845+-0.1164        ! definitely 1.2562x slower
   function-test                                      3.2892+-0.0493     ?      3.4031+-0.1722        ? might be 1.0346x slower
   function-with-eval                               128.4430+-4.5534     ^     94.5411+-3.5651        ^ definitely 1.3586x faster
   gcse-poly-get-less-obvious                        19.2656+-1.3417           18.5206+-0.6295          might be 1.0402x faster
   gcse-poly-get                                     21.7214+-1.3384     ?     22.5645+-2.2093        ? might be 1.0388x slower
   gcse                                               4.2562+-0.0280     ?      4.3004+-0.0503        ? might be 1.0104x slower
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7181+-0.0194     ?      2.7362+-0.0551        ?
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.0959+-0.0588            6.0878+-0.2456        
   get-by-id-chain-from-try-block                     8.1543+-0.1445            7.0035+-1.1210          might be 1.1643x faster
   get-by-id-check-structure-elimination              5.1170+-0.1482     ?      5.1704+-0.1173        ? might be 1.0104x slower
   get-by-id-proto-or-self                           18.7258+-0.6064     ^     17.5041+-0.5120        ^ definitely 1.0698x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8955+-0.0384     ?      2.9419+-0.0988        ? might be 1.0160x slower
   get-by-id-self-or-proto                           18.3523+-1.1115           17.0832+-0.4751          might be 1.0743x faster
   get-by-val-out-of-bounds                           4.3057+-0.1117            4.2981+-0.0612        
   get_callee_monomorphic                             3.6626+-0.1076     ?      3.7227+-0.2364        ? might be 1.0164x slower
   get_callee_polymorphic                             3.9410+-0.6369            3.5183+-0.4027          might be 1.1201x faster
   getter-no-activation                               5.3969+-0.4493     ^      4.2830+-0.0792        ^ definitely 1.2601x faster
   getter-richards                                  121.8851+-3.3198     ?    126.0511+-10.2824       ? might be 1.0342x slower
   getter                                             5.0717+-0.0410     !      6.3139+-0.6114        ! definitely 1.2449x slower
   global-var-const-infer-fire-from-opt               0.8617+-0.0176     ?      0.8796+-0.0854        ? might be 1.0208x slower
   global-var-const-infer                             0.9307+-0.1311            0.8925+-0.1305          might be 1.0428x faster
   HashMap-put-get-iterate-keys                      26.3513+-0.1736     ?     26.7427+-0.7182        ? might be 1.0149x slower
   HashMap-put-get-iterate                           26.2697+-0.4626     ?     26.4187+-0.5611        ?
   HashMap-string-put-get-iterate                    27.2253+-0.7928           27.1683+-1.1587        
   hoist-make-rope                                   11.8115+-1.0004     ?     12.1286+-0.4142        ? might be 1.0268x slower
   hoist-poly-check-structure-effectful-loop   
                                                      5.0406+-0.0556     ?      5.0575+-0.1150        ?
   hoist-poly-check-structure                         3.6597+-0.0521     ?      3.7184+-0.0529        ? might be 1.0160x slower
   imul-double-only                                   8.5562+-0.7061     ?      8.6226+-0.1911        ?
   imul-int-only                                      9.8023+-0.1701     ?     10.3704+-0.9784        ? might be 1.0579x slower
   imul-mixed                                         8.3955+-0.4162     ?      8.8667+-0.4955        ? might be 1.0561x slower
   in-four-cases                                     18.9094+-0.3386           18.7487+-0.1410        
   in-one-case-false                                 10.0959+-0.4155     ?     10.4620+-0.4008        ? might be 1.0363x slower
   in-one-case-true                                  10.2759+-0.3670     ?     10.7109+-0.6159        ? might be 1.0423x slower
   in-two-cases                                      10.4377+-0.3131           10.2596+-0.4116          might be 1.0174x faster
   indexed-properties-in-objects                      2.9023+-0.0764     ?      2.9194+-0.0231        ?
   infer-closure-const-then-mov-no-inline             3.7555+-0.0690            3.6036+-0.1065          might be 1.0422x faster
   infer-closure-const-then-mov                      19.3493+-1.1433     ^     17.2740+-0.5206        ^ definitely 1.1201x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     12.0240+-0.7870           11.7476+-0.1343          might be 1.0235x faster
   infer-closure-const-then-put-to-scope             22.7669+-1.3984     ?     23.3833+-1.7187        ? might be 1.0271x slower
   infer-closure-const-then-reenter-no-inline   
                                                     49.2767+-1.3583           48.8374+-1.3068        
   infer-closure-const-then-reenter                  23.1223+-1.3124     !    123.6871+-2.7920        ! definitely 5.3493x slower
   infer-constant-global-property                    31.3879+-1.7937           31.1616+-2.7796        
   infer-constant-property                            2.6959+-0.0345     ?      2.7125+-0.0196        ?
   infer-one-time-closure-ten-vars                   12.8476+-1.0622           12.3145+-0.5094          might be 1.0433x faster
   infer-one-time-closure-two-vars                   12.0057+-0.2441     ?     12.1625+-1.0409        ? might be 1.0131x slower
   infer-one-time-closure                            12.0015+-0.8442     ?     12.1133+-0.8221        ?
   infer-one-time-deep-closure                       21.0460+-1.0653     ?     21.5560+-1.5585        ? might be 1.0242x slower
   inline-arguments-access                            1.4402+-0.0702     !      4.2520+-0.1272        ! definitely 2.9524x slower
   inline-arguments-aliased-access                    1.7471+-0.0563     !      4.3171+-0.2038        ! definitely 2.4710x slower
   inline-arguments-local-escape                     13.7960+-1.6183     ^      4.4342+-0.2971        ^ definitely 3.1113x faster
   inline-get-scoped-var                              4.6211+-0.1860     ^      4.1538+-0.0290        ^ definitely 1.1125x faster
   inlined-put-by-id-transition                      10.5100+-0.2167           10.4991+-0.2377        
   int-or-other-abs-then-get-by-val                   4.9626+-0.0603     ?      5.0149+-0.1310        ? might be 1.0105x slower
   int-or-other-abs-zero-then-get-by-val             17.6873+-1.5964           16.7367+-0.5435          might be 1.0568x faster
   int-or-other-add-then-get-by-val                   4.4602+-0.2903            4.2980+-0.0273          might be 1.0377x faster
   int-or-other-add                                   5.3402+-0.0675            5.3112+-0.0275        
   int-or-other-div-then-get-by-val                   4.2559+-0.0569            4.1961+-0.0570          might be 1.0142x faster
   int-or-other-max-then-get-by-val                   4.3458+-0.0116     ?      4.3707+-0.1127        ?
   int-or-other-min-then-get-by-val                   4.4704+-0.0593            4.3972+-0.0377          might be 1.0166x faster
   int-or-other-mod-then-get-by-val                   3.9224+-0.0384            3.8685+-0.0759          might be 1.0139x faster
   int-or-other-mul-then-get-by-val                   4.0094+-0.0248     ?      4.0282+-0.1109        ?
   int-or-other-neg-then-get-by-val                   4.7043+-0.0949            4.6481+-0.0526          might be 1.0121x faster
   int-or-other-neg-zero-then-get-by-val             17.4395+-1.3705     ?     17.4657+-1.4012        ?
   int-or-other-sub-then-get-by-val                   4.3718+-0.0419            4.3665+-0.0356        
   int-or-other-sub                                   3.5269+-0.0288            3.5150+-0.0425        
   int-overflow-local                                 4.3295+-0.0408            4.2726+-0.1334          might be 1.0133x faster
   Int16Array-alloc-long-lived                       50.8427+-2.3988           50.7721+-1.2607        
   Int16Array-bubble-sort-with-byteLength            21.4179+-0.4376     ?     24.3806+-5.3940        ? might be 1.1383x slower
   Int16Array-bubble-sort                            21.6378+-0.6571     ?     22.0357+-1.4224        ? might be 1.0184x slower
   Int16Array-load-int-mul                            1.4740+-0.0089            1.4679+-0.0114        
   Int16Array-to-Int32Array-set                      59.0459+-1.7402     ?     59.6632+-3.1327        ? might be 1.0105x slower
   Int32Array-alloc-large                            23.9794+-0.7220     ?     24.5577+-0.8429        ? might be 1.0241x slower
   Int32Array-alloc-long-lived                       57.7323+-1.6962           55.8142+-1.4536          might be 1.0344x faster
   Int32Array-alloc                                   3.5662+-0.3933            3.3320+-0.1213          might be 1.0703x faster
   Int32Array-Int8Array-view-alloc                    7.7539+-1.1361     ?      7.9190+-1.2548        ? might be 1.0213x slower
   int52-spill                                        6.4653+-0.0545     ^      6.3186+-0.0481        ^ definitely 1.0232x faster
   Int8Array-alloc-long-lived                        46.3286+-1.7351     ?     47.5632+-1.3034        ? might be 1.0267x slower
   Int8Array-load-with-byteLength                     3.3155+-0.0665     ?      3.3427+-0.0339        ?
   Int8Array-load                                     3.3503+-0.1065            3.2932+-0.0294          might be 1.0173x faster
   integer-divide                                    11.2214+-0.1528     !     11.6576+-0.1335        ! definitely 1.0389x slower
   integer-modulo                                     2.0173+-0.0734     ?      2.0398+-0.1137        ? might be 1.0112x slower
   large-int-captured                                 7.8016+-1.3366     ^      5.5686+-0.0773        ^ definitely 1.4010x faster
   large-int-neg                                     17.0398+-1.1413     ?     17.0661+-0.8626        ?
   large-int                                         15.8834+-1.5409     ?     16.3064+-1.8071        ? might be 1.0266x slower
   logical-not                                        4.5280+-0.0529     ?      4.5280+-0.0228        ?
   lots-of-fields                                    13.4087+-0.3484     ?     13.4416+-1.2504        ?
   make-indexed-storage                               2.9440+-0.2073     ?      3.0500+-0.0539        ? might be 1.0360x slower
   make-rope-cse                                      4.6322+-0.3653            4.5820+-0.4345          might be 1.0109x faster
   marsaglia-larger-ints                             35.8851+-0.8029           35.8750+-1.1125        
   marsaglia-osr-entry                               23.9246+-1.7671           22.9251+-0.6325          might be 1.0436x faster
   max-boolean                                        2.4577+-0.0424            2.4371+-0.0328        
   method-on-number                                  17.5167+-0.3456           17.4048+-0.3676        
   min-boolean                                        2.4742+-0.0326            2.4296+-0.0297          might be 1.0183x faster
   minus-boolean-double                               3.1858+-0.1419            3.1725+-0.0625        
   minus-boolean                                      2.3938+-0.0902            2.2947+-0.0211          might be 1.0432x faster
   misc-strict-eq                                    37.6575+-1.1902           37.6318+-1.1635        
   mod-boolean-double                                11.2262+-0.5222           11.0247+-0.2976          might be 1.0183x faster
   mod-boolean                                        7.9851+-0.2871     ?      8.0659+-0.4693        ? might be 1.0101x slower
   mul-boolean-double                                 3.6695+-0.0564     ?      3.6796+-0.0574        ?
   mul-boolean                                        2.8704+-0.0647            2.8656+-0.0212        
   neg-boolean                                        3.1907+-0.0461            3.1732+-0.0552        
   negative-zero-divide                               0.3549+-0.0146            0.3494+-0.0138          might be 1.0157x faster
   negative-zero-modulo                               0.3706+-0.0169            0.3554+-0.0227          might be 1.0429x faster
   negative-zero-negate                               0.3221+-0.0083     ?      0.3260+-0.0182        ? might be 1.0123x slower
   nested-function-parsing                           21.6555+-0.7431     !     44.5251+-1.8346        ! definitely 2.0561x slower
   new-array-buffer-dead                              2.7895+-0.0395            2.7755+-0.0907        
   new-array-buffer-push                              7.3080+-0.8165            6.5614+-0.2065          might be 1.1138x faster
   new-array-dead                                    12.6055+-0.2789     ?     12.6152+-0.3897        ?
   new-array-push                                     4.0273+-0.3797            3.8538+-0.1142          might be 1.0450x faster
   number-test                                        2.9594+-0.0174     !      2.9899+-0.0124        ! definitely 1.0103x slower
   object-closure-call                                5.5707+-0.0496     ?      5.6145+-0.1639        ?
   object-test                                        3.0770+-0.0255     ?      3.0964+-0.0360        ?
   obvious-sink-pathology-taken                     147.4931+-2.4009          145.9941+-2.1380          might be 1.0103x faster
   obvious-sink-pathology                           141.1209+-1.5270          139.8644+-1.4646        
   obviously-elidable-new-object                     35.5533+-1.3028           35.3221+-1.1873        
   plus-boolean-arith                                 2.5422+-0.0733            2.5179+-0.0398        
   plus-boolean-double                                3.1736+-0.0667     ?      3.2214+-0.1387        ? might be 1.0151x slower
   plus-boolean                                       2.4092+-0.0830            2.3930+-0.0750        
   poly-chain-access-different-prototypes-simple   
                                                      3.3042+-0.0609     ?      3.3204+-0.0595        ?
   poly-chain-access-different-prototypes             2.7035+-0.2689            2.5977+-0.0366          might be 1.0408x faster
   poly-chain-access-simpler                          3.2927+-0.0669     ?      3.3143+-0.0544        ?
   poly-chain-access                                  2.8394+-0.0858     ^      2.6106+-0.1137        ^ definitely 1.0876x faster
   poly-stricteq                                     58.6075+-1.5167           57.9830+-1.7438          might be 1.0108x faster
   polymorphic-array-call                             1.3532+-0.1702            1.3053+-0.1876          might be 1.0367x faster
   polymorphic-get-by-id                              3.0854+-0.0707     ?      3.1829+-0.0920        ? might be 1.0316x slower
   polymorphic-put-by-id                             29.7537+-3.0295     ?     30.7596+-1.6062        ? might be 1.0338x slower
   polymorphic-structure                             15.0833+-0.2304     ?     15.5603+-1.0034        ? might be 1.0316x slower
   polyvariant-monomorphic-get-by-id                  8.8531+-0.8326            8.4688+-0.1626          might be 1.0454x faster
   proto-getter-access                               10.0885+-0.1768           10.0450+-0.2142        
   put-by-id-replace-and-transition                   8.8181+-0.3488     ?      8.8289+-0.2731        ?
   put-by-id-slightly-polymorphic                     2.8625+-0.0176            2.8037+-0.0662          might be 1.0210x faster
   put-by-id                                         13.5565+-0.3939           13.5031+-0.8062        
   put-by-val-direct                                  0.5921+-0.0314            0.5714+-0.0133          might be 1.0362x faster
   put-by-val-large-index-blank-indexing-type   
                                                      6.1239+-0.7834     ?      7.1712+-1.2868        ? might be 1.1710x slower
   put-by-val-machine-int                             2.6144+-0.0849     ?      2.6367+-0.1562        ?
   rare-osr-exit-on-local                            15.0093+-0.1780     ?     15.7513+-0.9161        ? might be 1.0494x slower
   register-pressure-from-osr                        22.1305+-0.9900           21.7078+-0.2673          might be 1.0195x faster
   setter                                             5.1576+-0.0495     ?      5.7961+-0.7765        ? might be 1.1238x slower
   simple-activation-demo                            25.6074+-0.7605     ?     26.0972+-1.6388        ? might be 1.0191x slower
   simple-getter-access                              13.1194+-0.9512           12.8645+-0.2830          might be 1.0198x faster
   simple-poly-call-nested                            8.1116+-0.2371     ?      8.2921+-0.1099        ? might be 1.0223x slower
   simple-poly-call                                   1.3296+-0.1254            1.3285+-0.0959        
   sin-boolean                                       24.0593+-1.8701           23.4427+-1.5779          might be 1.0263x faster
   sinkable-new-object-dag                           70.2107+-1.9180           69.9739+-1.7544        
   sinkable-new-object-taken                         52.1914+-2.9084     ?     54.6195+-3.9451        ? might be 1.0465x slower
   sinkable-new-object                               40.1091+-1.6442           39.7052+-1.3105          might be 1.0102x faster
   slow-array-profile-convergence                     2.7955+-0.1770            2.7048+-0.0918          might be 1.0335x faster
   slow-convergence                                   3.2128+-0.1472     ?      3.2174+-0.0485        ?
   sparse-conditional                                 1.1125+-0.0203            1.1029+-0.0278        
   splice-to-remove                                  16.8130+-0.8996     ?     16.8183+-1.5070        ?
   string-char-code-at                               16.1733+-0.4678     ?     16.2556+-0.6729        ?
   string-concat-object                               2.3987+-0.1789            2.3842+-0.1709        
   string-concat-pair-object                          2.2861+-0.0512     ?      2.3960+-0.1871        ? might be 1.0481x slower
   string-concat-pair-simple                         11.5107+-0.6851     ?     11.5180+-1.0604        ?
   string-concat-simple                              12.1667+-1.1216           11.6713+-0.5500          might be 1.0424x faster
   string-cons-repeat                                 8.2025+-0.9493            7.7374+-0.4247          might be 1.0601x faster
   string-cons-tower                                  8.7757+-1.0525            8.2312+-0.8040          might be 1.0661x faster
   string-equality                                   17.4707+-0.4443           17.4655+-0.4353        
   string-get-by-val-big-char                         7.1091+-0.0829            7.0916+-0.0563        
   string-get-by-val-out-of-bounds-insane             3.7678+-0.0806            3.7659+-0.0323        
   string-get-by-val-out-of-bounds                    5.2863+-0.0378            5.1980+-0.0714          might be 1.0170x faster
   string-get-by-val                                  3.2426+-0.0421     !      3.3960+-0.0700        ! definitely 1.0473x slower
   string-hash                                        2.0335+-0.0350            2.0141+-0.0335        
   string-long-ident-equality                        14.2249+-0.0780     ?     14.6000+-0.9823        ? might be 1.0264x slower
   string-out-of-bounds                              15.1638+-0.7786           15.0729+-0.5973        
   string-repeat-arith                               35.8065+-0.6544           34.5970+-1.6211          might be 1.0350x faster
   string-sub                                        64.2106+-3.0903     ?     68.0066+-4.7424        ? might be 1.0591x slower
   string-test                                        2.9296+-0.1078     ?      2.9728+-0.0301        ? might be 1.0147x slower
   string-var-equality                               31.5003+-1.6464           30.9654+-2.2979          might be 1.0173x faster
   structure-hoist-over-transitions                   2.5172+-0.1064     ?      2.5671+-0.1308        ? might be 1.0198x slower
   substring-concat-weird                            40.2897+-2.3720           39.0346+-1.2074          might be 1.0322x faster
   substring-concat                                  40.6621+-1.1766     ?     40.9687+-1.1856        ?
   substring                                         47.2465+-2.6712     ?     47.5990+-3.3464        ?
   switch-char-constant                               2.7070+-0.0708     ?      2.7304+-0.0460        ?
   switch-char                                        6.3708+-0.5926     ?      7.4512+-1.0025        ? might be 1.1696x slower
   switch-constant                                    8.0514+-0.1773     ?      8.1058+-0.3141        ?
   switch-string-basic-big-var                       15.3012+-0.2235           15.0091+-0.2259          might be 1.0195x faster
   switch-string-basic-big                           13.9205+-0.1883     ?     14.5605+-1.4762        ? might be 1.0460x slower
   switch-string-basic-var                           14.5863+-0.1473     ?     15.3944+-1.1663        ? might be 1.0554x slower
   switch-string-basic                               14.8356+-2.0343           13.8768+-1.3520          might be 1.0691x faster
   switch-string-big-length-tower-var                20.2087+-1.2477     ?     21.8391+-1.8508        ? might be 1.0807x slower
   switch-string-length-tower-var                    15.6849+-1.8050     ?     16.3818+-1.8776        ? might be 1.0444x slower
   switch-string-length-tower                        12.7873+-0.3483     ?     13.8520+-1.8304        ? might be 1.0833x slower
   switch-string-short                               13.6672+-1.6745     ?     14.0314+-1.8732        ? might be 1.0266x slower
   switch                                            12.1479+-0.4476     ?     12.2706+-0.3697        ? might be 1.0101x slower
   tear-off-arguments-simple                          1.9020+-0.0494     !      3.2655+-0.1397        ! definitely 1.7168x slower
   tear-off-arguments                                 2.8190+-0.0892     !      4.4437+-0.1124        ! definitely 1.5763x slower
   temporal-structure                                13.3230+-1.1906           12.5909+-0.6099          might be 1.0581x faster
   to-int32-boolean                                  14.0263+-0.9309           13.5819+-0.1317          might be 1.0327x faster
   undefined-property-access                        384.9192+-2.7036     ?    387.3313+-9.4170        ?
   undefined-test                                     3.0173+-0.0381     ?      3.0363+-0.0199        ?
   unprofiled-licm                                   23.0422+-0.7026     ?     23.5144+-1.1849        ? might be 1.0205x slower
   varargs-call                                      15.4869+-0.9142           15.0684+-0.9673          might be 1.0278x faster
   varargs-construct-inline                          26.7935+-0.5220     ^     21.9454+-1.1826        ^ definitely 1.2209x faster
   varargs-construct                                 53.0739+-1.2479     ^     31.1738+-0.4344        ^ definitely 1.7025x faster
   varargs-inline                                     8.4015+-0.1392     !      8.9392+-0.1207        ! definitely 1.0640x slower
   varargs-strict-mode                               15.5480+-1.1111     ^      9.6472+-0.2742        ^ definitely 1.6117x faster
   varargs                                           15.3287+-1.4077     ^      9.6080+-0.2812        ^ definitely 1.5954x faster
   weird-inlining-const-prop                          2.4106+-0.1055            2.3115+-0.1673          might be 1.0429x faster

   <geometric>                                        8.4082+-0.0184     !      8.5859+-0.0409        ! definitely 1.0211x slower

                                                        TipOfTree                 VarOffset                                     
AsmBench:
   bigfib.cpp                                       496.4717+-3.9151          492.5236+-2.5813        
   cray.c                                           432.0098+-2.9190          431.3133+-2.2351        
   dry.c                                            490.1071+-2.8983     ?    491.6430+-3.3350        ?
   FloatMM.c                                        725.7777+-1.6946     ?    727.5629+-2.1993        ?
   gcc-loops.cpp                                   4260.0028+-16.2461    ?   4262.3150+-14.4032       ?
   n-body.c                                         987.6784+-5.2987          987.2420+-4.4006        
   Quicksort.c                                      444.7657+-2.8900     ?    446.0485+-9.6435        ?
   stepanov_container.cpp                          3585.8910+-26.4753        3571.6336+-24.7367       
   Towers.c                                         268.1252+-1.3207     ?    270.2616+-7.8826        ?

   <geometric>                                      801.9935+-2.5337     ?    802.2153+-2.8206        ? might be 1.0003x slower

                                                        TipOfTree                 VarOffset                                     
CompressionBench:
   huffman                                          388.0924+-4.1394     ^    356.9426+-5.2978        ^ definitely 1.0873x faster
   arithmetic-simple                                405.9687+-3.5749          401.5917+-2.6309          might be 1.0109x faster
   arithmetic-precise                               302.5660+-5.4995     ?    305.2662+-3.9765        ?
   arithmetic-complex-precise                       305.9331+-4.1077          300.8577+-4.2975          might be 1.0169x faster
   arithmetic-precise-order-0                       440.6399+-5.8884          431.3855+-5.4651          might be 1.0215x faster
   arithmetic-precise-order-1                       342.5976+-4.7162     ^    327.4685+-3.9371        ^ definitely 1.0462x faster
   arithmetic-precise-order-2                       381.4177+-5.6730     ^    367.3711+-6.8823        ^ definitely 1.0382x faster
   arithmetic-simple-order-1                        432.7577+-5.0733     ^    421.5168+-5.1200        ^ definitely 1.0267x faster
   arithmetic-simple-order-2                        487.1242+-7.2715     ^    472.7613+-6.3532        ^ definitely 1.0304x faster
   lz-string                                        330.5444+-8.2041          326.0296+-5.7456          might be 1.0138x faster

   <geometric>                                      377.3027+-1.0633     ^    367.0321+-2.5581        ^ definitely 1.0280x faster

                                                        TipOfTree                 VarOffset                                     

                                                        TipOfTree                 VarOffset                                     
Geomean of preferred means:
   <scaled-result>                                   63.9458+-0.3582           63.5785+-0.1472          might be 1.0058x faster
Comment 85 Filip Pizlo 2015-03-21 20:33:41 PDT
Created attachment 249189 [details]
some more fixing to get to net speed-up
Comment 86 Filip Pizlo 2015-03-22 09:38:11 PDT
I fixed the dead-access-to-captured-variable-preceded-by-a-live-store regression. It's the good old DCE on GetClosureVar issue.
Comment 87 Filip Pizlo 2015-03-22 13:11:28 PDT
Created attachment 249204 [details]
64-bit is complete

Now I just need to port to 32-bit.


Latest perf results:

Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on dethklok (MacBookPro9,1).

VMs tested:
"TipOfTree" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r181829)
"VarOffset" at /Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc (r181829)

Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample measurements.
Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level
timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                        TipOfTree                 VarOffset                                     
SunSpider:
   3d-cube                                            4.9322+-0.0829            4.8220+-0.0660          might be 1.0229x faster
   3d-morph                                           5.6054+-0.1023            5.5866+-0.0511        
   3d-raytrace                                        6.3923+-0.1216            6.2673+-0.0913          might be 1.0199x faster
   access-binary-trees                                2.0755+-0.0593     ?      2.0907+-0.1154        ?
   access-fannkuch                                    6.0940+-0.1460     ?      6.1069+-0.1212        ?
   access-nbody                                       2.9783+-0.2156            2.9429+-0.0406          might be 1.0120x faster
   access-nsieve                                      3.3505+-0.1278            3.2049+-0.1732          might be 1.0454x faster
   bitops-3bit-bits-in-byte                           1.5922+-0.1359     ?      1.6077+-0.1602        ?
   bitops-bits-in-byte                                3.5235+-0.0331     ^      3.3596+-0.0257        ^ definitely 1.0488x faster
   bitops-bitwise-and                                 2.1643+-0.0466            2.1202+-0.0258          might be 1.0208x faster
   bitops-nsieve-bits                                 3.9432+-0.2749            3.8155+-0.0710          might be 1.0335x faster
   controlflow-recursive                              2.2068+-0.1200     ?      2.3831+-0.5845        ? might be 1.0799x slower
   crypto-aes                                         4.2832+-0.3481     ?      4.3275+-0.5604        ? might be 1.0103x slower
   crypto-md5                                         2.4620+-0.0501            2.4489+-0.0615        
   crypto-sha1                                        2.7450+-0.2418            2.6227+-0.1691          might be 1.0466x faster
   date-format-tofte                                  9.3693+-0.1013     ?      9.3881+-0.2130        ?
   date-format-xparb                                  5.6176+-0.2971            5.5451+-0.2958          might be 1.0131x faster
   math-cordic                                        3.2082+-0.0209            3.1333+-0.0586          might be 1.0239x faster
   math-partial-sums                                  5.1289+-0.1111     ?      5.3451+-0.8355        ? might be 1.0422x slower
   math-spectral-norm                                 1.9527+-0.0661            1.9515+-0.0742        
   regexp-dna                                         8.0590+-1.5616            7.2937+-0.2863          might be 1.1049x faster
   string-base64                                      4.5945+-0.2107     ?      4.7689+-0.4900        ? might be 1.0380x slower
   string-fasta                                       6.8561+-0.6618            6.6880+-0.4356          might be 1.0251x faster
   string-tagcloud                                    9.6437+-0.1189     ?      9.7797+-0.4374        ? might be 1.0141x slower
   string-unpack-code                                19.6305+-0.3922     ?     20.2646+-0.9095        ? might be 1.0323x slower
   string-validate-input                              4.9310+-0.0838     ?      4.9378+-0.2779        ?

   <arithmetic>                                       5.1285+-0.0567            5.1078+-0.0777          might be 1.0040x faster

                                                        TipOfTree                 VarOffset                                     
LongSpider:
   3d-cube                                         1099.5932+-18.8077    ?   1107.8401+-8.0775        ?
   3d-morph                                        1533.2281+-5.2830         1529.9788+-3.2187        
   3d-raytrace                                      730.4418+-5.7994     ?    735.4867+-5.0575        ?
   access-binary-trees                              992.5365+-4.9261     ?    996.8359+-5.8294        ?
   access-fannkuch                                  341.5399+-13.9172    ?    343.8509+-9.0972        ?
   access-nbody                                     612.6711+-2.0265     ?    618.3440+-5.2635        ?
   access-nsieve                                    873.1607+-3.8562          862.0680+-8.3486          might be 1.0129x faster
   bitops-3bit-bits-in-byte                          47.1628+-2.6914           44.9156+-0.9330          might be 1.0500x faster
   bitops-bits-in-byte                              103.7617+-3.6879     ?    104.6177+-3.4075        ?
   bitops-nsieve-bits                               692.2736+-2.6719     ?    697.0440+-5.9813        ?
   controlflow-recursive                            499.5885+-6.6634          489.8137+-15.1744         might be 1.0200x faster
   crypto-aes                                       711.3757+-10.4680    ?    713.3570+-11.2124       ?
   crypto-md5                                       550.1893+-8.2335          548.1588+-6.9722        
   crypto-sha1                                      593.0117+-5.2151     ?    600.8757+-9.6863        ? might be 1.0133x slower
   date-format-tofte                                768.2397+-10.6766         765.1396+-12.3215       
   date-format-xparb                                774.8064+-21.2522         733.7255+-22.6895         might be 1.0560x faster
   math-cordic                                      592.9007+-1.9488     ?    593.3338+-2.1848        ?
   math-partial-sums                                510.7029+-3.8226          509.4083+-5.2377        
   math-spectral-norm                               565.1184+-1.2991     ?    567.0823+-4.3847        ?
   string-base64                                    363.4379+-2.5350          363.2817+-5.6761        
   string-fasta                                     423.6615+-4.4023     ?    427.4296+-7.1136        ?
   string-tagcloud                                  217.9506+-6.0811          216.2365+-3.1168        

   <geometric>                                      505.1614+-2.1126          503.4029+-2.0859          might be 1.0035x faster

                                                        TipOfTree                 VarOffset                                     
V8Spider:
   crypto                                            54.9220+-0.9519           54.4576+-1.9372        
   deltablue                                         93.4203+-6.9801           89.4571+-7.3775          might be 1.0443x faster
   earley-boyer                                      42.2155+-0.4651           41.9905+-0.8088        
   raytrace                                          42.0376+-6.2034           38.6932+-1.4829          might be 1.0864x faster
   regexp                                            68.8643+-1.5642           68.3782+-1.3744        
   richards                                          79.9442+-3.2038           79.5358+-1.8252        
   splay                                             38.7885+-2.3418           38.3063+-1.6813          might be 1.0126x faster

   <geometric>                                       56.8765+-1.6118           55.6006+-1.0697          might be 1.0229x faster

                                                        TipOfTree                 VarOffset                                     
Octane:
   encrypt                                           0.20201+-0.00071    ?     0.20326+-0.00097       ?
   decrypt                                           3.59199+-0.04997    ?     3.60693+-0.04090       ?
   deltablue                                x2       0.20657+-0.00238          0.20544+-0.00134       
   earley                                            0.69826+-0.00641    ^     0.56099+-0.00400       ^ definitely 1.2447x faster
   boyer                                             5.75250+-0.02877          5.69160+-0.03383         might be 1.0107x faster
   navier-stokes                            x2       5.19088+-0.00586    ?     5.21957+-0.04326       ?
   raytrace                                 x2       1.24228+-0.04558    ?     1.26245+-0.04569       ? might be 1.0162x slower
   richards                                 x2       0.12375+-0.00133          0.12239+-0.00088         might be 1.0111x faster
   splay                                    x2       0.38303+-0.00266    ?     0.38364+-0.00109       ?
   regexp                                   x2      33.19037+-0.17983         33.04567+-0.13597       
   pdfjs                                    x2      45.57166+-0.92850         45.04559+-0.54423         might be 1.0117x faster
   mandreel                                 x2      50.25440+-0.21808         50.01300+-0.43212       
   gbemu                                    x2      41.49870+-2.33416         39.55027+-0.66128         might be 1.0493x faster
   closure                                           0.56376+-0.00300          0.56128+-0.00288       
   jquery                                            7.15211+-0.06428          7.12430+-0.13150       
   box2d                                    x2      12.74157+-0.18356    ^    12.24525+-0.11695       ^ definitely 1.0405x faster
   zlib                                     x2     388.76792+-14.06640       382.76324+-15.36088        might be 1.0157x faster
   typescript                               x2     820.06462+-14.03307   ?   820.55098+-17.47605      ?

   <geometric>                                       6.75245+-0.04271    ^     6.64982+-0.02445       ^ definitely 1.0154x faster

                                                        TipOfTree                 VarOffset                                     
Kraken:
   ai-astar                                          266.617+-2.845            262.981+-1.481           might be 1.0138x faster
   audio-beat-detection                              110.622+-0.786      ?     113.091+-6.672         ? might be 1.0223x slower
   audio-dft                                         148.771+-3.253      ?     149.312+-3.971         ?
   audio-fft                                          88.416+-2.642             86.316+-2.728           might be 1.0243x faster
   audio-oscillator                                  208.598+-2.652      ?     210.125+-3.856         ?
   imaging-darkroom                                  106.197+-1.851            105.496+-2.055         
   imaging-desaturate                                 63.311+-1.481      ?      63.552+-1.931         ?
   imaging-gaussian-blur                             114.238+-2.245            112.267+-0.976           might be 1.0176x faster
   json-parse-financial                               48.009+-1.351      ^      44.773+-1.002         ^ definitely 1.0723x faster
   json-stringify-tinderbox                           55.308+-0.758      ?      57.647+-1.966         ? might be 1.0423x slower
   stanford-crypto-aes                                60.794+-2.772             59.802+-0.854           might be 1.0166x faster
   stanford-crypto-ccm                                54.928+-7.694             52.555+-4.379           might be 1.0451x faster
   stanford-crypto-pbkdf2                            167.915+-1.908            167.325+-4.431         
   stanford-crypto-sha256-iterative                   55.339+-1.751      ?      55.454+-2.057         ?

   <arithmetic>                                      110.647+-0.864            110.050+-1.061           might be 1.0054x faster

                                                        TipOfTree                 VarOffset                                     
JSRegress:
   abs-boolean                                        2.6134+-0.0238     ?      2.6195+-0.0693        ?
   adapt-to-double-divide                            16.8341+-0.3381           16.6994+-0.3995        
   aliased-arguments-getbyval                         0.8483+-0.0394     !      1.1965+-0.0689        ! definitely 1.4106x slower
   allocate-big-object                                2.5850+-0.0626     ?      2.6624+-0.0998        ? might be 1.0299x slower
   arguments-named-and-reflective                     9.2603+-0.1054     !     12.5426+-0.4376        ! definitely 1.3544x slower
   arguments-out-of-bounds                           19.4351+-2.0528     ^     14.8372+-0.3443        ^ definitely 1.3099x faster
   arguments-strict-mode                              9.4945+-1.7099     ?     11.4707+-0.3131        ? might be 1.2081x slower
   arguments                                          7.8692+-0.2404     !     10.1773+-0.2612        ! definitely 1.2933x slower
   arity-mismatch-inlining                            0.7992+-0.0245     ?      0.8063+-0.0130        ?
   array-access-polymorphic-structure                 6.6423+-0.1320     ?      7.2634+-1.0628        ? might be 1.0935x slower
   array-nonarray-polymorhpic-access                 34.8418+-0.3918     ?     35.3311+-0.7382        ? might be 1.0140x slower
   array-prototype-every                             89.4722+-1.9853           86.4930+-1.5157          might be 1.0344x faster
   array-prototype-forEach                           97.8055+-31.9496          84.4849+-1.4313          might be 1.1577x faster
   array-prototype-map                               96.8150+-3.3996           95.2338+-1.6603          might be 1.0166x faster
   array-prototype-some                              89.2660+-1.3272           88.2330+-3.5067          might be 1.0117x faster
   array-splice-contiguous                           42.2039+-2.0148           41.8460+-0.5215        
   array-with-double-add                              4.1806+-0.0880            4.0797+-0.0472          might be 1.0247x faster
   array-with-double-increment                        3.2430+-0.2234     ?      3.2487+-0.1011        ?
   array-with-double-mul-add                          4.9968+-0.1152     ?      5.0650+-0.0517        ? might be 1.0136x slower
   array-with-double-sum                              3.2604+-0.1060            3.2446+-0.0367        
   array-with-int32-add-sub                           6.7792+-0.0889            6.7577+-0.0217        
   array-with-int32-or-double-sum                     3.3442+-0.0690     ?      3.4225+-0.1615        ? might be 1.0234x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     34.1026+-2.1419           33.9862+-1.5561        
   ArrayBuffer-DataView-alloc-long-lived             16.2467+-1.9408           15.2227+-1.5025          might be 1.0673x faster
   ArrayBuffer-Int32Array-byteOffset                  3.5273+-0.0579     ?      3.5407+-0.3014        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     32.6386+-1.0033     ?     33.1767+-1.2276        ? might be 1.0165x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     22.1071+-0.2440     !     25.0457+-2.4593        ! definitely 1.1329x slower
   ArrayBuffer-Int8Array-alloc-long-lived            15.3454+-1.2927           15.0369+-2.0725          might be 1.0205x faster
   ArrayBuffer-Int8Array-alloc                       11.3002+-1.0332     ?     12.0415+-2.0751        ? might be 1.0656x slower
   asmjs_bool_bug                                     7.6884+-0.1452     ?      7.8267+-0.3150        ? might be 1.0180x slower
   assign-custom-setter-polymorphic                   3.1584+-0.0738     ^      2.9384+-0.0447        ^ definitely 1.0749x faster
   assign-custom-setter                               4.3654+-0.0576            4.1737+-0.2912          might be 1.0459x faster
   basic-set                                          8.3012+-0.2292     ?      8.3519+-0.4361        ?
   big-int-mul                                        3.9632+-0.0993            3.9377+-0.0565        
   boolean-test                                       3.0556+-0.0307            3.0287+-0.0484        
   branch-fold                                        3.6721+-0.0550     ?      3.6820+-0.0339        ?
   by-val-generic                                     8.0747+-0.4244     ?      8.1587+-0.4367        ? might be 1.0104x slower
   call-spread-apply                                 16.3509+-0.5089     !     31.5406+-1.6610        ! definitely 1.9290x slower
   call-spread-call                                   6.1589+-0.1679     !     25.1263+-1.5951        ! definitely 4.0797x slower
   captured-assignments                               0.4595+-0.0154            0.4546+-0.0103          might be 1.0107x faster
   cast-int-to-double                                 5.2808+-0.0299            5.2665+-0.0352        
   cell-argument                                      9.1844+-1.6701            8.6917+-0.2191          might be 1.0567x faster
   cfg-simplify                                       2.9244+-0.0413            2.8748+-0.1096          might be 1.0172x faster
   chain-getter-access                               10.1655+-0.1452           10.1057+-0.2654        
   cmpeq-obj-to-obj-other                            11.0281+-1.2083     ?     11.3328+-1.2613        ? might be 1.0276x slower
   constant-test                                      4.9730+-0.1024            4.9186+-0.0229          might be 1.0111x faster
   DataView-custom-properties                        40.2690+-1.2623           39.0569+-1.5486          might be 1.0310x faster
   delay-tear-off-arguments-strictmode               23.0118+-2.6301     ^     13.4137+-0.3394        ^ definitely 1.7155x faster
   deltablue-varargs                                181.6470+-2.2595     !    199.4470+-2.0269        ! definitely 1.0980x slower
   destructuring-arguments                            5.1739+-0.0185     !     16.8056+-0.7282        ! definitely 3.2482x slower
   destructuring-swap                                 5.1157+-0.0886     ^      4.9877+-0.0150        ^ definitely 1.0257x faster
   direct-arguments-getbyval                          0.9358+-0.0600     !      1.2183+-0.0840        ! definitely 1.3019x slower
   div-boolean-double                                 5.1771+-0.0100     ?      5.2090+-0.0476        ?
   div-boolean                                        7.8059+-0.1361     ?      7.8854+-0.2034        ? might be 1.0102x slower
   double-get-by-val-out-of-bounds                    4.7887+-0.7709            4.4100+-0.0672          might be 1.0859x faster
   double-pollution-getbyval                          8.8682+-0.1201            8.8135+-0.0419        
   double-pollution-putbyoffset                       4.1056+-0.0909     ?      4.1220+-0.0360        ?
   double-to-int32-typed-array-no-inline              2.2209+-0.0567     ?      2.2920+-0.1305        ? might be 1.0320x slower
   double-to-int32-typed-array                        1.9408+-0.0743     ?      1.9746+-0.1372        ? might be 1.0174x slower
   double-to-uint32-typed-array-no-inline             2.3682+-0.1220            2.3056+-0.0636          might be 1.0271x faster
   double-to-uint32-typed-array                       1.9592+-0.0249     ?      1.9690+-0.0426        ?
   elidable-new-object-dag                           42.6536+-1.6876     ?     44.0400+-1.8564        ? might be 1.0325x slower
   elidable-new-object-roflcopter                    48.2579+-4.7490           46.5518+-1.3365          might be 1.0366x faster
   elidable-new-object-then-call                     40.0157+-1.3151           39.2323+-1.0546          might be 1.0200x faster
   elidable-new-object-tree                          45.2661+-1.2491     ?     46.7212+-1.2318        ? might be 1.0321x slower
   empty-string-plus-int                              5.6666+-0.7371            5.4163+-0.1743          might be 1.0462x faster
   emscripten-cube2hash                              40.7569+-2.6433           39.5957+-1.1918          might be 1.0293x faster
   exit-length-on-plain-object                       14.1452+-0.7660           14.0780+-0.5585        
   external-arguments-getbyval                        1.3350+-0.0590     ^      1.1825+-0.0473        ^ definitely 1.1290x faster
   external-arguments-putbyval                        2.0893+-0.1546     ?      2.2450+-0.0438        ? might be 1.0745x slower
   fixed-typed-array-storage-var-index                1.2138+-0.0311            1.2108+-0.0310        
   fixed-typed-array-storage                          0.8584+-0.0339     !      0.9486+-0.0546        ! definitely 1.1050x slower
   Float32Array-matrix-mult                           4.3046+-0.1262     ?      4.5880+-0.4238        ? might be 1.0658x slower
   Float32Array-to-Float64Array-set                  56.9635+-1.6628     ^     53.4380+-0.6063        ^ definitely 1.0660x faster
   Float64Array-alloc-long-lived                     72.9387+-2.0272           72.4755+-1.6346        
   Float64Array-to-Int16Array-set                    68.7090+-1.0389     ?     69.6130+-2.2856        ? might be 1.0132x slower
   fold-double-to-int                                15.2243+-0.3107     ?     16.0367+-1.3148        ? might be 1.0534x slower
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                      9.5730+-0.4440     ?     10.2976+-0.8383        ? might be 1.0757x slower
   fold-get-by-id-to-multi-get-by-offset             10.1925+-1.0248            9.4966+-0.8874          might be 1.0733x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      9.1421+-1.1607            8.9860+-0.9770          might be 1.0174x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      9.3510+-0.8878            8.7582+-0.7896          might be 1.0677x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      8.7606+-0.7929            8.1433+-0.6423          might be 1.0758x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      5.0073+-1.1878            4.2605+-0.5537          might be 1.1753x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      9.2568+-0.4382     ?      9.5265+-0.1526        ? might be 1.0291x slower
   fold-put-by-id-to-multi-put-by-offset              9.2849+-0.8846     ?      9.4014+-0.7359        ? might be 1.0126x slower
   fold-put-structure                                 4.6308+-0.9609     !      6.9747+-0.2159        ! definitely 1.5062x slower
   for-of-iterate-array-entries                       4.4991+-0.0584     ?      4.7219+-0.5667        ? might be 1.0495x slower
   for-of-iterate-array-keys                          3.7204+-0.0764     ?      4.2790+-1.3859        ? might be 1.1501x slower
   for-of-iterate-array-values                        3.7830+-0.2991            3.7100+-0.1467          might be 1.0197x faster
   fround                                            20.3368+-0.5122           20.0145+-0.3672          might be 1.0161x faster
   ftl-library-inlining-dataview                     80.7778+-1.1799     !     86.0890+-2.7822        ! definitely 1.0658x slower
   ftl-library-inlining                              76.9004+-16.5954          67.4126+-1.3813          might be 1.1407x faster
   function-dot-apply                                 1.4868+-0.0318     !      1.8031+-0.0241        ! definitely 1.2127x slower
   function-test                                      3.3556+-0.0290     ^      3.2678+-0.0519        ^ definitely 1.0269x faster
   function-with-eval                               130.8863+-4.9127     ^     94.2814+-4.1896        ^ definitely 1.3883x faster
   gcse-poly-get-less-obvious                        18.9486+-1.0414     ?     19.0500+-1.3710        ?
   gcse-poly-get                                     21.0500+-1.6462     ?     22.1683+-2.2014        ? might be 1.0531x slower
   gcse                                               4.2902+-0.0379     ?      4.3122+-0.0756        ?
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7406+-0.0241     !      2.7941+-0.0076        ! definitely 1.0195x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.1735+-0.2907            6.0441+-0.0524          might be 1.0214x faster
   get-by-id-chain-from-try-block                     8.4884+-0.4804            6.9095+-1.1776          might be 1.2285x faster
   get-by-id-check-structure-elimination              5.1051+-0.0639            5.0326+-0.0257          might be 1.0144x faster
   get-by-id-proto-or-self                           18.5420+-1.0327           17.8942+-0.8348          might be 1.0362x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8949+-0.0192     ?      3.3192+-0.9898        ? might be 1.1466x slower
   get-by-id-self-or-proto                           18.8424+-0.9316     ^     17.2989+-0.2618        ^ definitely 1.0892x faster
   get-by-val-out-of-bounds                           4.3048+-0.0764            4.2753+-0.0287        
   get_callee_monomorphic                             3.6982+-0.2145            3.5462+-0.0450          might be 1.0429x faster
   get_callee_polymorphic                             3.6163+-0.0675            3.5960+-0.4092        
   getter-no-activation                               4.8656+-0.5498            4.6007+-0.4500          might be 1.0576x faster
   getter-richards                                  126.3455+-6.6105     ?    127.2507+-5.4982        ?
   getter                                             5.0960+-0.0893     !      5.8821+-0.6791        ! definitely 1.1542x slower
   global-var-const-infer-fire-from-opt               0.8999+-0.1624     ?      0.9091+-0.1215        ? might be 1.0103x slower
   global-var-const-infer                             0.8570+-0.0981     ?      0.9151+-0.0823        ? might be 1.0678x slower
   HashMap-put-get-iterate-keys                      26.3931+-0.2500     ?     26.5310+-0.2715        ?
   HashMap-put-get-iterate                           26.5174+-0.4078           26.3641+-0.5456        
   HashMap-string-put-get-iterate                    27.6614+-1.6414     ?     28.1718+-1.5010        ? might be 1.0185x slower
   hoist-make-rope                                   11.7453+-0.8244     ?     12.4696+-0.5823        ? might be 1.0617x slower
   hoist-poly-check-structure-effectful-loop   
                                                      4.9924+-0.0738            4.9828+-0.0639        
   hoist-poly-check-structure                         3.7218+-0.0905     ?      3.7247+-0.0758        ?
   imul-double-only                                   8.6851+-0.2823     ?      9.3796+-2.2927        ? might be 1.0800x slower
   imul-int-only                                     10.0437+-0.6656     ?     10.1278+-0.7189        ?
   imul-mixed                                         8.6794+-0.2262            8.3492+-0.5378          might be 1.0395x faster
   in-four-cases                                     18.8326+-0.2947     ?     18.8819+-0.2064        ?
   in-one-case-false                                 10.1109+-0.4493            9.9975+-0.4747          might be 1.0113x faster
   in-one-case-true                                   9.9863+-0.3878     ?     10.2507+-0.6581        ? might be 1.0265x slower
   in-two-cases                                      11.2146+-0.9356           10.2672+-0.2806          might be 1.0923x faster
   indexed-properties-in-objects                      2.9641+-0.1250            2.9552+-0.0927        
   infer-closure-const-then-mov-no-inline             3.7647+-0.1142     ^      3.5157+-0.0226        ^ definitely 1.0708x faster
   infer-closure-const-then-mov                      19.2256+-1.1681     ^     17.5574+-0.3873        ^ definitely 1.0950x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     11.7342+-0.3066           11.5922+-0.0797          might be 1.0122x faster
   infer-closure-const-then-put-to-scope             22.9222+-1.3242     ?     23.0011+-0.9666        ?
   infer-closure-const-then-reenter-no-inline   
                                                     49.6650+-1.7602           48.7602+-0.9652          might be 1.0186x faster
   infer-closure-const-then-reenter                  23.1630+-1.9191     !    124.7979+-2.0891        ! definitely 5.3878x slower
   infer-constant-global-property                    32.1585+-2.2670           31.5799+-1.6037          might be 1.0183x faster
   infer-constant-property                            2.7290+-0.0548            2.7266+-0.0185        
   infer-one-time-closure-ten-vars                   12.1161+-0.2151     ?     12.6298+-1.0080        ? might be 1.0424x slower
   infer-one-time-closure-two-vars                   11.9877+-0.2690           11.9412+-0.1669        
   infer-one-time-closure                            11.6693+-0.2053     ?     11.8276+-0.3301        ? might be 1.0136x slower
   infer-one-time-deep-closure                       21.5544+-1.5390     ?     22.0714+-1.2043        ? might be 1.0240x slower
   inline-arguments-access                            1.4097+-0.0432     !      4.2397+-0.0864        ! definitely 3.0076x slower
   inline-arguments-aliased-access                    1.8209+-0.2001     !      4.2587+-0.0750        ! definitely 2.3388x slower
   inline-arguments-local-escape                     12.7026+-0.2234     ^      4.4391+-0.1869        ^ definitely 2.8615x faster
   inline-get-scoped-var                              4.5551+-0.0941     ^      4.1508+-0.0218        ^ definitely 1.0974x faster
   inlined-put-by-id-transition                      10.3675+-0.3588           10.3073+-0.2461        
   int-or-other-abs-then-get-by-val                   4.9668+-0.0507     ?      6.2390+-3.2740        ? might be 1.2561x slower
   int-or-other-abs-zero-then-get-by-val             17.4902+-0.9697           16.9183+-0.5334          might be 1.0338x faster
   int-or-other-add-then-get-by-val                   4.2985+-0.0321     ?      4.3237+-0.1038        ?
   int-or-other-add                                   5.3547+-0.1037            5.3397+-0.0584        
   int-or-other-div-then-get-by-val                   4.1884+-0.0670     ?      4.2417+-0.0260        ? might be 1.0127x slower
   int-or-other-max-then-get-by-val                   4.3757+-0.0501     ?      4.3853+-0.0215        ?
   int-or-other-min-then-get-by-val                   5.1460+-1.6010            4.5995+-0.4096          might be 1.1188x faster
   int-or-other-mod-then-get-by-val                   3.9473+-0.1702            3.8833+-0.0650          might be 1.0165x faster
   int-or-other-mul-then-get-by-val                   3.9844+-0.0575     ?      4.0071+-0.0312        ?
   int-or-other-neg-then-get-by-val                   4.6301+-0.0308     ?      4.7502+-0.2201        ? might be 1.0259x slower
   int-or-other-neg-zero-then-get-by-val             17.9000+-0.9966     ^     16.6512+-0.1864        ^ definitely 1.0750x faster
   int-or-other-sub-then-get-by-val                   4.5255+-0.2517            4.3795+-0.0919          might be 1.0333x faster
   int-or-other-sub                                   3.4812+-0.0196     ?      3.5120+-0.0687        ?
   int-overflow-local                                 4.2854+-0.0426     ?      4.2913+-0.0189        ?
   Int16Array-alloc-long-lived                       50.2827+-1.9775           48.8760+-0.8779          might be 1.0288x faster
   Int16Array-bubble-sort-with-byteLength            22.7097+-1.9971           20.7474+-0.6605          might be 1.0946x faster
   Int16Array-bubble-sort                            24.7115+-2.6363           21.9732+-0.6674          might be 1.1246x faster
   Int16Array-load-int-mul                            1.4602+-0.0139     ?      1.4648+-0.0182        ?
   Int16Array-to-Int32Array-set                      56.7767+-1.4325     ^     53.0566+-1.5584        ^ definitely 1.0701x faster
   Int32Array-alloc-large                            24.4917+-0.9664           24.4274+-0.8844        
   Int32Array-alloc-long-lived                       56.1503+-1.6227     ?     57.5162+-1.5649        ? might be 1.0243x slower
   Int32Array-alloc                                   3.8315+-0.8220            3.7863+-0.6750          might be 1.0120x faster
   Int32Array-Int8Array-view-alloc                    7.2299+-0.7711            6.9867+-0.2527          might be 1.0348x faster
   int52-spill                                        6.6330+-0.2100            6.4417+-0.0747          might be 1.0297x faster
   Int8Array-alloc-long-lived                        47.6756+-1.7751           46.9175+-1.7998          might be 1.0162x faster
   Int8Array-load-with-byteLength                     3.3774+-0.1238     ?      3.3810+-0.0553        ?
   Int8Array-load                                     3.3066+-0.0587     ?      3.3416+-0.0492        ? might be 1.0106x slower
   integer-divide                                    11.3978+-0.2216     !     11.7187+-0.0352        ! definitely 1.0281x slower
   integer-modulo                                     2.0420+-0.0674     ?      2.0611+-0.1029        ?
   large-int-captured                                 8.5994+-1.3890     ^      5.5730+-0.1213        ^ definitely 1.5430x faster
   large-int-neg                                     16.5614+-0.8017     ?     16.6049+-0.6922        ?
   large-int                                         15.6742+-1.5687           15.3462+-0.7727          might be 1.0214x faster
   logical-not                                        4.5735+-0.0982            4.5268+-0.0395          might be 1.0103x faster
   lots-of-fields                                    13.6404+-1.2769           13.4590+-0.5453          might be 1.0135x faster
   make-indexed-storage                               3.0646+-0.0957            2.9508+-0.1725          might be 1.0385x faster
   make-rope-cse                                      4.9275+-0.5908            4.4522+-0.0762          might be 1.1067x faster
   marsaglia-larger-ints                             35.8543+-0.7562     ?     36.0967+-0.8798        ?
   marsaglia-osr-entry                               23.4738+-0.5318     ?     23.8000+-1.3627        ? might be 1.0139x slower
   max-boolean                                        2.4821+-0.0370     ?      2.5269+-0.1122        ? might be 1.0181x slower
   method-on-number                                  17.1829+-0.4269           16.8915+-0.1512          might be 1.0173x faster
   min-boolean                                        2.4972+-0.0212     ?      2.5048+-0.0758        ?
   minus-boolean-double                               3.1705+-0.0860     ?      3.2501+-0.3001        ? might be 1.0251x slower
   minus-boolean                                      2.3386+-0.0546     ?      2.3494+-0.1351        ?
   misc-strict-eq                                    38.9413+-2.4304     ?     38.9895+-2.4499        ?
   mod-boolean-double                                11.0275+-0.1635           10.9366+-0.1813        
   mod-boolean                                        7.7996+-0.0422            7.7971+-0.0443        
   mul-boolean-double                                 3.6990+-0.0359     ?      3.7956+-0.1064        ? might be 1.0261x slower
   mul-boolean                                        2.9364+-0.1520            2.8542+-0.0350          might be 1.0288x faster
   neg-boolean                                        3.1689+-0.0551            3.1625+-0.0525        
   negative-zero-divide                               0.4055+-0.1207            0.3531+-0.0329          might be 1.1482x faster
   negative-zero-modulo                               0.3599+-0.0149            0.3544+-0.0194          might be 1.0155x faster
   negative-zero-negate                               0.3284+-0.0124     ?      0.3399+-0.0274        ? might be 1.0349x slower
   nested-function-parsing                           22.2062+-0.8507     !     36.9431+-1.3168        ! definitely 1.6636x slower
   new-array-buffer-dead                              2.7512+-0.0415            2.7432+-0.0275        
   new-array-buffer-push                              7.2080+-0.6826     ?      7.3595+-0.9622        ? might be 1.0210x slower
   new-array-dead                                    12.5413+-0.1278     ?     12.7923+-0.3363        ? might be 1.0200x slower
   new-array-push                                     4.0565+-0.4159            3.8265+-0.1089          might be 1.0601x faster
   number-test                                        3.0179+-0.0353            2.9963+-0.0453        
   object-closure-call                                5.7078+-0.1180            5.5578+-0.0478          might be 1.0270x faster
   object-test                                        3.1122+-0.0334            3.0842+-0.0548        
   obvious-sink-pathology-taken                     146.0320+-1.8495     ?    146.3914+-3.8174        ?
   obvious-sink-pathology                           140.3960+-2.8491     ?    141.1462+-2.6685        ?
   obviously-elidable-new-object                     36.3606+-2.1978           35.4606+-1.8065          might be 1.0254x faster
   plus-boolean-arith                                 2.5093+-0.0611     ?      2.6129+-0.1631        ? might be 1.0413x slower
   plus-boolean-double                                3.2774+-0.1586            3.1650+-0.0453          might be 1.0355x faster
   plus-boolean                                       2.3748+-0.0584     ?      2.3961+-0.0458        ?
   poly-chain-access-different-prototypes-simple   
                                                      3.3625+-0.0624            3.2787+-0.0394          might be 1.0256x faster
   poly-chain-access-different-prototypes             2.8865+-0.0305     ^      2.6314+-0.0793        ^ definitely 1.0969x faster
   poly-chain-access-simpler                          3.3075+-0.0442     ^      3.2541+-0.0086        ^ definitely 1.0164x faster
   poly-chain-access                                  2.7977+-0.0873     ^      2.5788+-0.0462        ^ definitely 1.0849x faster
   poly-stricteq                                     57.6060+-1.9568     ?     59.4076+-2.2812        ? might be 1.0313x slower
   polymorphic-array-call                             1.2631+-0.1295     ?      1.3162+-0.1771        ? might be 1.0420x slower
   polymorphic-get-by-id                              3.4470+-0.8080            3.1343+-0.0329          might be 1.0998x faster
   polymorphic-put-by-id                             29.0297+-2.4427           28.6517+-2.0893          might be 1.0132x faster
   polymorphic-structure                             14.7771+-0.2421     ?     16.1304+-1.6455        ? might be 1.0916x slower
   polyvariant-monomorphic-get-by-id                  9.2043+-1.3697            8.5014+-0.3233          might be 1.0827x faster
   proto-getter-access                               10.1055+-0.2506            9.9733+-0.0874          might be 1.0133x faster
   put-by-id-replace-and-transition                   8.6346+-0.4310            8.4671+-0.1200          might be 1.0198x faster
   put-by-id-slightly-polymorphic                     2.8078+-0.0235     ?      2.8565+-0.0335        ? might be 1.0174x slower
   put-by-id                                         13.5484+-0.4511           13.3976+-0.5546          might be 1.0113x faster
   put-by-val-direct                                  0.5607+-0.0135     ?      0.5751+-0.0244        ? might be 1.0257x slower
   put-by-val-large-index-blank-indexing-type   
                                                      6.3488+-1.0038     ?      6.3765+-1.0027        ?
   put-by-val-machine-int                             2.6763+-0.2907            2.5453+-0.0506          might be 1.0515x faster
   rare-osr-exit-on-local                            14.9933+-0.2606     ?     15.1348+-0.7003        ?
   register-pressure-from-osr                        21.6321+-0.2933           21.6286+-0.3161        
   setter                                             5.1772+-0.0533     ?      5.9417+-0.8346        ? might be 1.1477x slower
   simple-activation-demo                            25.8335+-1.4460     ?     26.1601+-1.4448        ? might be 1.0126x slower
   simple-getter-access                              12.9294+-0.2766           12.6761+-0.1743          might be 1.0200x faster
   simple-poly-call-nested                            7.9867+-0.2172     ?      8.0399+-0.2049        ?
   simple-poly-call                                   1.3571+-0.1280            1.3274+-0.0821          might be 1.0224x faster
   sin-boolean                                       24.5295+-1.5857           22.9034+-1.6771          might be 1.0710x faster
   sinkable-new-object-dag                           71.0970+-2.5572     ?     75.0895+-11.2712       ? might be 1.0562x slower
   sinkable-new-object-taken                         54.9471+-2.0170           52.6344+-3.3101          might be 1.0439x faster
   sinkable-new-object                               38.5524+-0.4996     ?     39.7959+-1.3177        ? might be 1.0323x slower
   slow-array-profile-convergence                     2.8319+-0.1449            2.7590+-0.2002          might be 1.0265x faster
   slow-convergence                                   3.2898+-0.2575            3.2085+-0.0662          might be 1.0253x faster
   sparse-conditional                                 1.1044+-0.0272     ?      1.1242+-0.0638        ? might be 1.0179x slower
   splice-to-remove                                  17.6886+-1.7977     ?     18.0361+-1.5652        ? might be 1.0196x slower
   string-char-code-at                               15.9563+-0.1496     ?     16.1126+-0.3471        ?
   string-concat-object                               2.5448+-0.2547            2.3940+-0.0789          might be 1.0630x faster
   string-concat-pair-object                          2.3102+-0.0462     ?      2.4920+-0.3354        ? might be 1.0787x slower
   string-concat-pair-simple                         11.2515+-0.4730     ?     11.3640+-0.3183        ?
   string-concat-simple                              11.3278+-0.2604     ?     11.6975+-0.3836        ? might be 1.0326x slower
   string-cons-repeat                                 8.8104+-0.8822            8.3778+-1.2087          might be 1.0516x faster
   string-cons-tower                                  7.8871+-0.5937     ?      8.8715+-1.1701        ? might be 1.1248x slower
   string-equality                                   17.3897+-0.3051     ?     17.5713+-0.7308        ? might be 1.0104x slower
   string-get-by-val-big-char                         7.3069+-0.5896            7.1968+-0.1837          might be 1.0153x faster
   string-get-by-val-out-of-bounds-insane             3.8836+-0.1897            3.7209+-0.0718          might be 1.0437x faster
   string-get-by-val-out-of-bounds                    5.2902+-0.1587            5.2415+-0.1578        
   string-get-by-val                                  3.3165+-0.0381     ?      3.3197+-0.0375        ?
   string-hash                                        2.0101+-0.0237     ?      2.0215+-0.0759        ?
   string-long-ident-equality                        14.6682+-0.7678           14.6016+-0.9477        
   string-out-of-bounds                              15.0221+-0.4184     ?     15.0715+-0.2482        ?
   string-repeat-arith                               32.4701+-2.8863     ?     32.7882+-3.3844        ?
   string-sub                                        66.7207+-3.4135           64.1823+-4.1428          might be 1.0395x faster
   string-test                                        3.0544+-0.1758            2.9148+-0.0557          might be 1.0479x faster
   string-var-equality                               30.3318+-0.7438     ?     30.9028+-1.7960        ? might be 1.0188x slower
   structure-hoist-over-transitions                   2.4830+-0.0744     ?      2.5499+-0.0550        ? might be 1.0270x slower
   substring-concat-weird                            38.3948+-1.4746           38.3127+-0.9350        
   substring-concat                                  40.9347+-1.0875     ?     41.4057+-1.7997        ? might be 1.0115x slower
   substring                                         46.1167+-1.8244           46.0829+-1.0231        
   switch-char-constant                               2.7697+-0.1437            2.7017+-0.0406          might be 1.0252x faster
   switch-char                                        7.0078+-0.9817     ?      7.0490+-0.9419        ?
   switch-constant                                    8.0015+-0.1495     ?      8.2244+-0.3612        ? might be 1.0279x slower
   switch-string-basic-big-var                       15.5976+-1.3407     ?     15.7041+-1.3879        ?
   switch-string-basic-big                           15.2166+-1.7843     ?     15.5303+-1.7179        ? might be 1.0206x slower
   switch-string-basic-var                           15.5915+-1.6979           15.4572+-1.6058        
   switch-string-basic                               14.4169+-1.7513           14.2412+-1.3330          might be 1.0123x faster
   switch-string-big-length-tower-var                20.4764+-1.3866     ?     20.7707+-1.7496        ? might be 1.0144x slower
   switch-string-length-tower-var                    15.3137+-1.4212           15.0702+-1.4293          might be 1.0162x faster
   switch-string-length-tower                        14.1902+-1.5969           13.9610+-1.7949          might be 1.0164x faster
   switch-string-short                               13.1134+-1.5352     ?     13.2250+-1.4575        ?
   switch                                            11.9987+-0.4909           11.9448+-0.1919        
   tear-off-arguments-simple                          1.9683+-0.1093     !      3.2880+-0.0646        ! definitely 1.6705x slower
   tear-off-arguments                                 2.7358+-0.0353     !      4.4778+-0.0407        ! definitely 1.6368x slower
   temporal-structure                                13.3691+-0.7634           12.3902+-0.4092          might be 1.0790x faster
   to-int32-boolean                                  13.7756+-0.3323           13.6317+-0.1372          might be 1.0106x faster
   undefined-property-access                        385.6533+-4.8905     ?    386.9056+-5.9248        ?
   undefined-test                                     3.0427+-0.0402            3.0312+-0.0808        
   unprofiled-licm                                   23.2606+-0.9986     ?     23.4653+-1.4669        ?
   varargs-call                                      15.4898+-1.3615           15.3334+-1.0986          might be 1.0102x faster
   varargs-construct-inline                          27.8765+-1.2195     ^     22.2918+-1.3329        ^ definitely 1.2505x faster
   varargs-construct                                 51.5201+-1.4490     ^     31.3664+-0.6072        ^ definitely 1.6425x faster
   varargs-inline                                     8.4744+-0.3846     !      9.2543+-0.2335        ! definitely 1.0920x slower
   varargs-strict-mode                               14.9556+-0.1343     ^      9.6023+-0.1573        ^ definitely 1.5575x faster
   varargs                                           15.7198+-1.4440     ^      9.7655+-0.3076        ^ definitely 1.6097x faster
   weird-inlining-const-prop                          2.3235+-0.2193     ?      2.3667+-0.1607        ? might be 1.0186x slower

   <geometric>                                        8.4303+-0.0396     !      8.5720+-0.0204        ! definitely 1.0168x slower

                                                        TipOfTree                 VarOffset                                     
AsmBench:
   bigfib.cpp                                       499.3285+-2.8319          493.5529+-3.0913          might be 1.0117x faster
   cray.c                                           436.9455+-4.2079          431.3705+-3.0127          might be 1.0129x faster
   dry.c                                            497.9394+-23.2759         482.9404+-8.5413          might be 1.0311x faster
   FloatMM.c                                        725.3165+-0.7614     ?    725.8792+-1.9852        ?
   gcc-loops.cpp                                   4258.0122+-9.5249         4257.1238+-12.0468       
   n-body.c                                         986.7055+-2.9771          984.8636+-2.6517        
   Quicksort.c                                      441.3482+-3.6962     ?    443.2793+-8.3154        ?
   stepanov_container.cpp                          3609.7836+-67.0806        3600.6063+-69.8671       
   Towers.c                                         270.1456+-8.1850          268.4962+-4.2877        

   <geometric>                                      805.2250+-5.2589          799.8830+-4.2311          might be 1.0067x faster

                                                        TipOfTree                 VarOffset                                     
CompressionBench:
   huffman                                          388.7556+-2.1066     ^    354.4066+-1.0055        ^ definitely 1.0969x faster
   arithmetic-simple                                404.0950+-4.0124          403.0195+-5.4503        
   arithmetic-precise                               306.4482+-3.6261          302.3495+-4.6740          might be 1.0136x faster
   arithmetic-complex-precise                       300.6848+-5.1185     ?    302.2732+-2.8260        ?
   arithmetic-precise-order-0                       438.1735+-8.2073          432.4716+-7.5129          might be 1.0132x faster
   arithmetic-precise-order-1                       338.0214+-3.4332          333.1646+-9.0123          might be 1.0146x faster
   arithmetic-precise-order-2                       385.5922+-4.7846     ^    373.7564+-6.3989        ^ definitely 1.0317x faster
   arithmetic-simple-order-1                        434.3572+-4.2106          429.5890+-8.4369          might be 1.0111x faster
   arithmetic-simple-order-2                        487.7524+-4.2977          479.7894+-10.7648         might be 1.0166x faster
   lz-string                                        332.5707+-18.8302         325.8505+-5.1327          might be 1.0206x faster

   <geometric>                                      377.1053+-2.4834     ^    369.2898+-2.8252        ^ definitely 1.0212x faster

                                                        TipOfTree                 VarOffset                                     

                                                        TipOfTree                 VarOffset                                     
Geomean of preferred means:
   <scaled-result>                                   64.0066+-0.1690     ^     63.5146+-0.2574        ^ definitely 1.0077x faster
Comment 88 Filip Pizlo 2015-03-22 18:00:46 PDT
Created attachment 249210 [details]
started work on 32-bit
Comment 89 Filip Pizlo 2015-03-22 19:27:01 PDT
Created attachment 249217 [details]
almost done with 32-bit

Just a few more DFG 32-bit opcodes and this patch is complete.
Comment 90 Filip Pizlo 2015-03-22 21:32:02 PDT
Created attachment 249219 [details]
so close to done

I just need to write the code for the super-annoying CreateScopedArguments/CreateOutOfBadArguments slow call argument marshaling for platforms with fewer arguments registers.
Comment 91 Filip Pizlo 2015-03-23 11:14:02 PDT
Created attachment 249240 [details]
the patch

BOOM.  It's ready for review.
Comment 92 WebKit Commit Bot 2015-03-23 11:18:02 PDT
Attachment 249240 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:712:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/ValueRecovery.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/ScopedArguments.h:111:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/ScopedArguments.h:111:  The parameter name "i" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:43:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:107:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:206:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:237:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:298:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:318:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:46:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:47:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:48:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:49:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:697:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.h:72:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.h:72:  The parameter name "i" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.h:76:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.h:76:  The parameter name "globalObject" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsUtilities.h:36:  The parameter name "reg" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsUtilities.h:37:  The parameter name "reg" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsUtilities.h:40:  The parameter name "origin" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:863:  Use 'WTF::move()' instead of 'std::move()'.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:881:  Use 'WTF::move()' instead of 'std::move()'.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/runtime/JSGlobalObject.cpp:118:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:173:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:253:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/OutOfBandArguments.h:53:  The parameter name "structure" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/GenericArgumentsInlines.h:130:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:275:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:282:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:261:  The parameter name "]" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:621:  The parameter name "pattern" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGOperations.cpp:52:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2535:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.cpp:82:  Use 'WTF::move()' instead of 'std::move()'.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeKills.h:63:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4384:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4482:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4570:  Use 'WTF::move()' instead of 'std::move()'.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4669:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4672:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4673:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4674:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4676:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4681:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4698:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4699:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4700:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4702:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4708:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:155:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:171:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:196:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:207:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/SymbolTable.h:630:  The parameter name "locker" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/SymbolTable.h:630:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/SymbolTable.h:631:  The parameter name "locker" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/SymbolTable.h:631:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 61 in 249 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 93 Filip Pizlo 2015-03-23 11:38:25 PDT
Created attachment 249243 [details]
compiling on more platforms than ever!
Comment 94 Csaba Osztrogonác 2015-03-23 11:39:25 PDT
EFL build can be fixed easily on x86_64: (all JSC stress tests pass)
- Source/JavaScriptCore/runtime/GenericOffset.h needs a limits.h include
- Source/JavaScriptCore/CMakeLists.txt needs runtime/ScopeOffset.cpp too

I'll check the ARM Linux build and test soon.
Comment 95 Filip Pizlo 2015-03-23 11:43:42 PDT
Created attachment 249245 [details]
even more build fixes
Comment 96 WebKit Commit Bot 2015-03-23 11:48:07 PDT
Attachment 249245 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:712:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/ValueRecovery.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/ScopedArguments.h:111:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/ScopedArguments.h:111:  The parameter name "i" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:43:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:107:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:206:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:237:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:298:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:318:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:46:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:47:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:48:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:49:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:697:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.h:72:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.h:72:  The parameter name "i" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.h:76:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.h:76:  The parameter name "globalObject" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsUtilities.h:36:  The parameter name "reg" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsUtilities.h:37:  The parameter name "reg" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsUtilities.h:40:  The parameter name "origin" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:863:  Use 'WTF::move()' instead of 'std::move()'.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:881:  Use 'WTF::move()' instead of 'std::move()'.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/runtime/JSGlobalObject.cpp:118:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:173:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:253:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/OutOfBandArguments.h:53:  The parameter name "structure" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/GenericArgumentsInlines.h:130:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:275:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:282:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:261:  The parameter name "]" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:621:  The parameter name "pattern" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGOperations.cpp:52:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2535:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.cpp:82:  Use 'WTF::move()' instead of 'std::move()'.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeKills.h:63:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4384:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4482:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4570:  Use 'WTF::move()' instead of 'std::move()'.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4669:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4672:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4673:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4674:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4676:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4681:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4698:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4699:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4700:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4702:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4708:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:155:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:171:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:196:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:207:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/SymbolTable.h:630:  The parameter name "locker" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/SymbolTable.h:630:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/SymbolTable.h:631:  The parameter name "locker" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/SymbolTable.h:631:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 61 in 249 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 97 Filip Pizlo 2015-03-23 12:14:55 PDT
Current set of x86-32 failures:

** The following JSC stress test failures have been introduced:
	internal-js-tests.yaml/Octane/box2d.js.default-ftl
	internal-js-tests.yaml/Octane/box2d.js.ftl-no-cjit-no-access-inlining
	internal-js-tests.yaml/Octane/box2d.js.ftl-no-cjit-no-simple-opt
	internal-js-tests.yaml/Octane/box2d.js.ftl-no-cjit-osr-validation
	internal-js-tests.yaml/Octane/box2d.js.ftl-no-cjit-validate
	internal-js-tests.yaml/Octane/box2d.js.no-cjit-no-access-inlining
	internal-js-tests.yaml/V8v7/raytrace.js.default-ftl
	internal-js-tests.yaml/V8v7/raytrace.js.ftl-no-cjit-no-access-inlining
	internal-js-tests.yaml/V8v7/raytrace.js.ftl-no-cjit-no-simple-opt
	internal-js-tests.yaml/V8v7/raytrace.js.ftl-no-cjit-osr-validation
	internal-js-tests.yaml/V8v7/raytrace.js.ftl-no-cjit-validate
	internal-js-tests.yaml/V8v7/raytrace.js.no-cjit-no-access-inlining
	regress/script-tests/varargs-construct-inline.js.dfg-eager
	regress/script-tests/varargs-construct-inline.js.dfg-eager-no-cjit-validate
	regress/script-tests/varargs-construct-inline.js.ftl-eager
	regress/script-tests/varargs-construct-inline.js.ftl-eager-no-cjit
	regress/script-tests/varargs-construct-inline.js.ftl-no-cjit-no-inline-validate
	v8-v6/v8-raytrace.js.always-trigger-copy-phase
	v8-v6/v8-raytrace.js.default
	v8-v6/v8-raytrace.js.default-ftl
	v8-v6/v8-raytrace.js.dfg-eager
	v8-v6/v8-raytrace.js.dfg-eager-no-cjit-validate
	v8-v6/v8-raytrace.js.ftl-eager
	v8-v6/v8-raytrace.js.ftl-eager-no-cjit
	v8-v6/v8-raytrace.js.ftl-no-cjit-no-inline-validate
	v8-v6/v8-raytrace.js.ftl-no-cjit-validate
	v8-v6/v8-raytrace.js.no-cjit-validate-phases
	v8-v6/v8-raytrace.js.no-llint
Comment 98 Filip Pizlo 2015-03-23 12:16:05 PDT
Created attachment 249249 [details]
very latest

Totally works on x86-64, mostly works on x86-32, probably won't build yet on the ARMs.
Comment 99 WebKit Commit Bot 2015-03-23 12:19:10 PDT
Attachment 249249 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:712:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:107:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:206:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:237:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:298:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:318:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:46:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:47:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:48:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:49:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:697:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:173:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:253:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:275:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:282:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:261:  The parameter name "]" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/BytecodeKills.h:63:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4384:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4669:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4672:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4673:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4674:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4676:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4681:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4698:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4699:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4700:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4702:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4708:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:155:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:171:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:196:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:207:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 35 in 251 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 100 Csaba Osztrogonác 2015-03-23 12:29:12 PDT
(In reply to comment #98)
> Created attachment 249249 [details]
> very latest
> 
> Totally works on x86-64, mostly works on x86-32, probably won't build yet on
> the ARMs.

Only a small patch was needed for this version to make ARM Thumb2 Linux happy:

@@ -497,6 +513,13 @@
         return registerForIndex[index];
     }

+    static GPRReg toArgumentRegister(unsigned index)
+    {
+        ASSERT(index < numberOfArgumentRegisters);
+        static const GPRReg registerForIndex[numberOfArgumentRegisters] = { argumentGPR0, argumentGPR1, argumentGPR2, argumentGPR3 };
+        return registerForIndex[index];
+    }
+
     static unsigned toIndex(GPRReg reg)
     {
         ASSERT(reg != InvalidGPRReg);
Comment 101 Csaba Osztrogonác 2015-03-23 13:03:02 PDT
(In reply to comment #100)

With this buildfix there are only 8 failures on ARM Thumb2 Linux:

** The following JSC stress test failures have been introduced:
        regress/script-tests/varargs-construct-inline.js.dfg-eager
        regress/script-tests/varargs-construct-inline.js.dfg-eager-no-cjit-validate
        v8-v6/v8-raytrace.js.always-trigger-copy-phase
        v8-v6/v8-raytrace.js.default
        v8-v6/v8-raytrace.js.dfg-eager
        v8-v6/v8-raytrace.js.dfg-eager-no-cjit-validate
        v8-v6/v8-raytrace.js.no-cjit-validate-phases
        v8-v6/v8-raytrace.js.no-llint

Results for JSC stress tests:
    8 failures found.
Comment 102 Geoffrey Garen 2015-03-23 13:25:18 PDT
Are these worth investigating?

   call-spread-apply                                 16.3509+-0.5089     !     31.5406+-1.6610        ! definitely 1.9290x slower
   call-spread-call                                   6.1589+-0.1679     !     25.1263+-1.5951        ! definitely 4.0797x slower
   destructuring-arguments                            5.1739+-0.0185     !     16.8056+-0.7282        ! definitely 3.2482x slower
   direct-arguments-getbyval                          0.9358+-0.0600     !      1.2183+-0.0840        ! definitely 1.3019x slower
   infer-closure-const-then-reenter                  23.1630+-1.9191     !    124.7979+-2.0891        ! definitely 5.3878x slower
   inline-arguments-access                            1.4097+-0.0432     !      4.2397+-0.0864        ! definitely 3.0076x slower
   inline-arguments-aliased-access                    1.8209+-0.2001     !      4.2587+-0.0750        ! definitely 2.3388x slower
   tear-off-arguments-simple                          1.9683+-0.1093     !      3.2880+-0.0646        ! definitely 1.6705x slower
   tear-off-arguments                                 2.7358+-0.0353     !      4.4778+-0.0407        ! definitely 1.6368x slower
Comment 103 Oliver Hunt 2015-03-23 13:28:05 PDT
Comment on attachment 249245 [details]
even more build fixes

View in context: https://bugs.webkit.org/attachment.cgi?id=249245&action=review

Stopped half way through as i have to do other things :-(

> Source/JavaScriptCore/bytecode/BytecodeKills.h:129
> +        uintptr_t m_word;

could you make this a union instead of just having casts? It will save the bitwise_cast ugliness and make the code generally clearer
Comment 104 Build Bot 2015-03-23 13:34:53 PDT
Comment on attachment 249249 [details]
very latest

Attachment 249249 [details] did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/5895858029592576

New failing tests:
js/dom/const.html
Comment 105 Build Bot 2015-03-23 13:35:00 PDT
Created attachment 249257 [details]
Archive of layout-test-results from ews104 for mac-mavericks-wk2

The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews.
Bot: ews104  Port: mac-mavericks-wk2  Platform: Mac OS X 10.9.5
Comment 106 Build Bot 2015-03-23 13:41:26 PDT
Comment on attachment 249249 [details]
very latest

Attachment 249249 [details] did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/6510621394731008

New failing tests:
js/dom/const.html
Comment 107 Build Bot 2015-03-23 13:41:33 PDT
Created attachment 249258 [details]
Archive of layout-test-results from ews100 for mac-mavericks

The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: ews100  Port: mac-mavericks  Platform: Mac OS X 10.9.5
Comment 108 Csaba Osztrogonác 2015-03-23 13:49:39 PDT
(In reply to comment #101)
> (In reply to comment #100)
> 
> With this buildfix there are only 8 failures on ARM Thumb2 Linux:
> 
> ** The following JSC stress test failures have been introduced:
>         regress/script-tests/varargs-construct-inline.js.dfg-eager
>        
> regress/script-tests/varargs-construct-inline.js.dfg-eager-no-cjit-validate
>         v8-v6/v8-raytrace.js.always-trigger-copy-phase
>         v8-v6/v8-raytrace.js.default
>         v8-v6/v8-raytrace.js.dfg-eager
>         v8-v6/v8-raytrace.js.dfg-eager-no-cjit-validate
>         v8-v6/v8-raytrace.js.no-cjit-validate-phases
>         v8-v6/v8-raytrace.js.no-llint
> 
> Results for JSC stress tests:
>     8 failures found.

Same failures on ARM traditional, and it seems 
bug141193 will gone away with this patch.
Comment 109 Filip Pizlo 2015-03-23 13:55:50 PDT
(In reply to comment #102)
> Are these worth investigating?
> 
>    call-spread-apply                                 16.3509+-0.5089     !  
> 31.5406+-1.6610        ! definitely 1.9290x slower
>    call-spread-call                                   6.1589+-0.1679     !  
> 25.1263+-1.5951        ! definitely 4.0797x slower
>    destructuring-arguments                            5.1739+-0.0185     !  
> 16.8056+-0.7282        ! definitely 3.2482x slower
>    direct-arguments-getbyval                          0.9358+-0.0600     !  
> 1.2183+-0.0840        ! definitely 1.3019x slower
>    infer-closure-const-then-reenter                  23.1630+-1.9191     !  
> 124.7979+-2.0891        ! definitely 5.3878x slower
>    inline-arguments-access                            1.4097+-0.0432     !  
> 4.2397+-0.0864        ! definitely 3.0076x slower
>    inline-arguments-aliased-access                    1.8209+-0.2001     !  
> 4.2587+-0.0750        ! definitely 2.3388x slower
>    tear-off-arguments-simple                          1.9683+-0.1093     !  
> 3.2880+-0.0646        ! definitely 1.6705x slower
>    tear-off-arguments                                 2.7358+-0.0353     !  
> 4.4778+-0.0407        ! definitely 1.6368x slower

From what I remember, these tests don't make it to FTL (don't run long enough, coverage, etc) and test arguments elimination.  We expect those tests to slow down, since the new arguments elimination in DFG is intended just for handling foo.apply(bar, arguments).

But, I will look at those some more to make sure it's nothing horrible.
Comment 110 Filip Pizlo 2015-03-23 14:09:15 PDT
Created attachment 249267 [details]
more fixes

32-bit should now be completely fixed (the bug was a simple typo in emitCall()).
Comment 111 WebKit Commit Bot 2015-03-23 14:12:32 PDT
Attachment 249267 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:712:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:107:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:206:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:237:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:298:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:318:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:46:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:47:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:48:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:49:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:697:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:173:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:253:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:275:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:282:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:261:  The parameter name "]" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/BytecodeKills.h:63:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4384:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4669:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4672:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4673:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4674:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4676:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4681:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4698:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4699:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4700:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4702:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4708:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:155:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:171:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:196:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:207:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 35 in 251 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 112 Filip Pizlo 2015-03-23 14:22:03 PDT
(In reply to comment #106)
> Comment on attachment 249249 [details]
> very latest
> 
> Attachment 249249 [details] did not pass mac-ews (mac):
> Output: http://webkit-queues.appspot.com/results/6510621394731008
> 
> New failing tests:
> js/dom/const.html

Should be an easy fix. I remember there were a couple of const-related places where it felt like I was making an arbitrary decision. Probably I decided wrong, somewhere.

What's weird is that this test is part of js/dom.  It shouldn't be.  I'll fix that.
Comment 113 Build Bot 2015-03-23 15:23:41 PDT
Comment on attachment 249267 [details]
more fixes

Attachment 249267 [details] did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/5119339753635840

New failing tests:
js/dom/const.html
Comment 114 Build Bot 2015-03-23 15:23:50 PDT
Created attachment 249286 [details]
Archive of layout-test-results from ews100 for mac-mavericks

The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: ews100  Port: mac-mavericks  Platform: Mac OS X 10.9.5
Comment 115 Build Bot 2015-03-23 15:31:06 PDT
Comment on attachment 249267 [details]
more fixes

Attachment 249267 [details] did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/6130520010260480

New failing tests:
js/dom/const.html
Comment 116 Build Bot 2015-03-23 15:31:15 PDT
Created attachment 249287 [details]
Archive of layout-test-results from ews106 for mac-mavericks-wk2

The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews.
Bot: ews106  Port: mac-mavericks-wk2  Platform: Mac OS X 10.9.5
Comment 117 Filip Pizlo 2015-03-23 22:51:13 PDT
Created attachment 249313 [details]
more fixes

ARM64, ARMv7, x86-32, and x86-64 should all work.

js/const is still regressed.  I still haven't looked at it in detail, but at least it's not a DOM test anymore.
Comment 118 Filip Pizlo 2015-03-24 13:17:47 PDT
Created attachment 249342 [details]
the patch

Passes all tests on all platforms.
Comment 119 WebKit Commit Bot 2015-03-24 13:21:53 PDT
Attachment 249342 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:712:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:107:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:206:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:237:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:298:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:318:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:46:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:47:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:48:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:49:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:697:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:173:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:253:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:275:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:282:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:261:  The parameter name "]" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/BytecodeKills.h:63:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4384:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4669:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4672:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4673:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4674:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4676:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4681:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4698:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4699:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4700:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4702:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4708:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:155:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:171:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:196:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:207:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 35 in 251 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 120 Geoffrey Garen 2015-03-25 15:16:43 PDT
Comment on attachment 249342 [details]
the patch

View in context: https://bugs.webkit.org/attachment.cgi?id=249342&action=review

r=me with issues. I need a nap now.

Does object allocation sinking work for function objects? If not, I think we want a follow-up bug for that, since bytecode used to sink those allocations through conditional logic on the stack. I won't defend the old way of doing this, but I will say it's worth some speed on Octane.

> Source/JavaScriptCore/bytecode/BytecodeKills.h:92
> +                Vector<unsigned>* vector = new Vector<unsigned>();

This is a leak. KillSet needs a destructor to delete m_word if & 1.

Also might be nice to isolate the encode/decode of m_word into helper functions: isEmpty(), isSingleItem(), singleItem(), setSingleItem(), setVector(), vector().

> Source/JavaScriptCore/bytecode/CodeBlock.cpp:-2824
> -bool CodeBlock::isCaptured(VirtualRegister operand, InlineCallFrame* inlineCallFrame) const

I will not miss this function.

> Source/JavaScriptCore/bytecode/CodeBlock.cpp:-2850
> -int CodeBlock::framePointerOffsetToGetActivationRegisters(int machineCaptureStart)

Nor this one.

> Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:-1919
> -    if (m_codeBlock->usesArguments() && m_codeBlock->numParameters() != 1 && !isStrictMode()) {

I will not miss this code.

> Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:331
> +    void transform()

Would be nice to transform GetById(node, "callee") as well, to support anonymous functions that recurse by way of arguments.callee. Perhaps this is rare, though.

> Source/JavaScriptCore/dfg/DFGOSRExitCompiler32_64.cpp:-111
> -#if CPU(ARM64)
> -                m_jit.pushToSave(scratch1);
> -                m_jit.pushToSave(scratch2);
> -#else
>                  m_jit.push(scratch1);
>                  m_jit.push(scratch2);
> -#endif

A comment and a CRASH macro in MacroAssemblerARM64.h indicate that we need this special pushToSave behavior on ARM64. Why is it OK to remove this?

> Source/JavaScriptCore/dfg/DFGOSRExitCompiler32_64.cpp:-146
> -#if CPU(ARM64)
> -                m_jit.pushToSave(scratch);
> -#else

Ditto.

> Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4641
> +void SpeculativeJIT::compilePutToArguments(Node* node)

Do we need some write barrier action here?

> Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp:850
> +void JIT::emit_op_put_to_arguments(Instruction* currentInstruction)

Do we need some write barrier action here?

> Source/JavaScriptCore/jit/JITPropertyAccess.cpp:821
> +void JIT::emit_op_put_to_arguments(Instruction* currentInstruction)

Do we need some write barrier action here?

> Source/JavaScriptCore/runtime/ArgumentsMode.h:31
> +enum ArgumentsMode {

Let's use enum class here.

> Source/JavaScriptCore/runtime/CapturedArgumentsOffset.h:35
> +// function. It only comes into play it the arguments aren't also lifted into the activation.

"play it" => "play if"

> Source/JavaScriptCore/runtime/CapturedArgumentsOffset.h:38
> +// If they were then accesses to the arguments would resolve to a ScopeOffset and not a
> +// CapturedArgumentsOffset.
> +class CapturedArgumentsOffset : public GenericOffset<CapturedArgumentsOffset> {

I'm confused by this name. Usually, "captured" means "it's in the activation". But here it means "it's not in the activation".

I guess by "captured" you meant "captured by the arguments object".

I think this offset is always an offset into a DirectArguments object. Right? If so, I suggest calling this "DirectArgumentsOffset". I think that would help disambiguate the capturing.

> Source/JavaScriptCore/runtime/OutOfBandArguments.h:41
> +class OutOfBandArguments : public JSNonFinalObject {

How about calling this CopiedArguments or ClonedArguments or SnapshottedArguments or StrictArguments?

"Out of band" didn't really speak to me because I don't normally think of any kind of arguments as being in-band, and in strict mode, these arguments are not really out of band.

> Source/JavaScriptCore/runtime/ScopedArguments.h:40
> +class ScopedArguments : public GenericArguments<ScopedArguments> {

How about calling this CapturedArguments on IndirectArguments or AliasedArguments?

We use "scope" in get_from_scope and put_to_scope to mean "a subclass of JSScope". But "scoped arguments" is a bit of an awkward phrase, partly because all arguments exist in some lexical scope and so there are no non-scoped arguments. I like "captured" because it's more specific about what triggered this behavior (a function that captured an argument), or I like "indirect" because it's the opposite of "direct" and it conveys that we forward requests somewhere else (even though we don't specify where), or I like "aliased" because it conveys sharing between the named reference and the indexed reference.

> Source/JavaScriptCore/runtime/VarOffset.h:36
> +enum VarKind : uint8_t {

enum class

> Source/JavaScriptCore/runtime/VarOffset.h:40
> +    CapturedArgumentKind

Same comment about the term "captured" here. Can we call this DirectArgumentKind?
Comment 121 Filip Pizlo 2015-03-25 15:33:20 PDT
(In reply to comment #120)
> Comment on attachment 249342 [details]
> the patch
> 
> View in context:
> https://bugs.webkit.org/attachment.cgi?id=249342&action=review
> 
> r=me with issues. I need a nap now.
> 
> Does object allocation sinking work for function objects? If not, I think we
> want a follow-up bug for that, since bytecode used to sink those allocations
> through conditional logic on the stack. I won't defend the old way of doing
> this, but I will say it's worth some speed on Octane.
> 
> > Source/JavaScriptCore/bytecode/BytecodeKills.h:92
> > +                Vector<unsigned>* vector = new Vector<unsigned>();
> 
> This is a leak. KillSet needs a destructor to delete m_word if & 1.

Good catch!

> 
> Also might be nice to isolate the encode/decode of m_word into helper
> functions: isEmpty(), isSingleItem(), singleItem(), setSingleItem(),
> setVector(), vector().

I'll try that.

> 
> > Source/JavaScriptCore/bytecode/CodeBlock.cpp:-2824
> > -bool CodeBlock::isCaptured(VirtualRegister operand, InlineCallFrame* inlineCallFrame) const
> 
> I will not miss this function.
> 
> > Source/JavaScriptCore/bytecode/CodeBlock.cpp:-2850
> > -int CodeBlock::framePointerOffsetToGetActivationRegisters(int machineCaptureStart)
> 
> Nor this one.
> 
> > Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:-1919
> > -    if (m_codeBlock->usesArguments() && m_codeBlock->numParameters() != 1 && !isStrictMode()) {
> 
> I will not miss this code.
> 
> > Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:331
> > +    void transform()
> 
> Would be nice to transform GetById(node, "callee") as well, to support
> anonymous functions that recurse by way of arguments.callee. Perhaps this is
> rare, though.

I will add a FIXME and file a bug.  I agree that this is worthwhile.

(I plan to make all new FIXMEs reference a bug.)

> 
> > Source/JavaScriptCore/dfg/DFGOSRExitCompiler32_64.cpp:-111
> > -#if CPU(ARM64)
> > -                m_jit.pushToSave(scratch1);
> > -                m_jit.pushToSave(scratch2);
> > -#else
> >                  m_jit.push(scratch1);
> >                  m_jit.push(scratch2);
> > -#endif
> 
> A comment and a CRASH macro in MacroAssemblerARM64.h indicate that we need
> this special pushToSave behavior on ARM64. Why is it OK to remove this?

Because this is 32_64 code, and so it'll never ARM64.

> 
> > Source/JavaScriptCore/dfg/DFGOSRExitCompiler32_64.cpp:-146
> > -#if CPU(ARM64)
> > -                m_jit.pushToSave(scratch);
> > -#else
> 
> Ditto.

Ditto.

> 
> > Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4641
> > +void SpeculativeJIT::compilePutToArguments(Node* node)
> 
> Do we need some write barrier action here?

FixupPhase says:

        case PutClosureVar:
        case PutToArguments: {
            fixEdge<KnownCellUse>(node->child1());
            insertStoreBarrier(m_indexInBlock, node->child1(), node->child2());
            break;
        }

So, this is fine.

> 
> > Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp:850
> > +void JIT::emit_op_put_to_arguments(Instruction* currentInstruction)
> 
> Do we need some write barrier action here?

It's a bug!  I'll fix.

> 
> > Source/JavaScriptCore/jit/JITPropertyAccess.cpp:821
> > +void JIT::emit_op_put_to_arguments(Instruction* currentInstruction)
> 
> Do we need some write barrier action here?

Ditto.

> 
> > Source/JavaScriptCore/runtime/ArgumentsMode.h:31
> > +enum ArgumentsMode {
> 
> Let's use enum class here.

OK.

> 
> > Source/JavaScriptCore/runtime/CapturedArgumentsOffset.h:35
> > +// function. It only comes into play it the arguments aren't also lifted into the activation.
> 
> "play it" => "play if"

OK.

> 
> > Source/JavaScriptCore/runtime/CapturedArgumentsOffset.h:38
> > +// If they were then accesses to the arguments would resolve to a ScopeOffset and not a
> > +// CapturedArgumentsOffset.
> > +class CapturedArgumentsOffset : public GenericOffset<CapturedArgumentsOffset> {
> 
> I'm confused by this name. Usually, "captured" means "it's in the
> activation". But here it means "it's not in the activation".
> 
> I guess by "captured" you meant "captured by the arguments object".

Right.

> 
> I think this offset is always an offset into a DirectArguments object.
> Right?

Correct.

> If so, I suggest calling this "DirectArgumentsOffset". I think that
> would help disambiguate the capturing.

OK.

> 
> > Source/JavaScriptCore/runtime/OutOfBandArguments.h:41
> > +class OutOfBandArguments : public JSNonFinalObject {
> 
> How about calling this CopiedArguments or ClonedArguments or
> SnapshottedArguments or StrictArguments?
> 
> "Out of band" didn't really speak to me because I don't normally think of
> any kind of arguments as being in-band, and in strict mode, these arguments
> are not really out of band.

Maybe SnapshottedArguments is the best.

> 
> > Source/JavaScriptCore/runtime/ScopedArguments.h:40
> > +class ScopedArguments : public GenericArguments<ScopedArguments> {
> 
> How about calling this CapturedArguments on IndirectArguments or
> AliasedArguments?

If we get rid of the term CapturedArgumentsOffset, the notion of "capture" doesn't really come into play anymore.  IndirectArguments doesn't say why it's indirect.  AliasedArguments is not quite right, since DirectArguments are also aliased - just they are aliased to the stack not to the scope.

I actually think that ScopedArguments is the best name - more on that below.

> 
> We use "scope" in get_from_scope and put_to_scope to mean "a subclass of
> JSScope". 

I actually think we use it to mean "in the scope".  It's "get_from_scope" because the value is in the scope.

For this reason, ScopedArguments makes sense to me.  I would agree with your argument if I had called it "ArgumentsScope" - clearly that's wrong, since this object isn't a scope.  But "Scoped" here is used to describe the way the arguments are actually stored when we use this object, and in that regard, it's an accurate description - the arguments *are* in a subclass of JSScope.

> But "scoped arguments" is a bit of an awkward phrase, partly
> because all arguments exist in some lexical scope and so there are no
> non-scoped arguments. I like "captured" because it's more specific about
> what triggered this behavior (a function that captured an argument), or I
> like "indirect" because it's the opposite of "direct" and it conveys that we
> forward requests somewhere else (even though we don't specify where), or I
> like "aliased" because it conveys sharing between the named reference and
> the indexed reference.

Hmmm.

I think that of your proposed names, I like CapturedArguments the best, but I don't like it as much as ScopedArguments.  I think I understand why you don't like ScopedArguments - the word "scope" means lexical scope and so using the term to describe arguments is a tautology. But, after bytecode generation the word "scope" is only used to mean that the value is in the heap.

In this patch we use the word "scope" this way in a bunch of places including:

- ScopeOffset, as opposed to VirtualRegister (aka StackOffset after I do the renaming), means that it's in the heap in a scope.

- VarOffset::isScope() means that it's in the heap in a scope.

Prior to this patch we already used the word "scope" this way:

- get_from_scope doesn't broadly mean that the variable is in a lexical scope; it means specifically that the variable is in the heap, in a scope object.

For that reason, ScopedArguments feels consistent with the way we usually use the word "scope": a variable is "scoped" or "in a scope" when it is in a scope object that is allocated in the heap.

Do you buy this argument for the name ScopedArguments?

> 
> > Source/JavaScriptCore/runtime/VarOffset.h:36
> > +enum VarKind : uint8_t {
> 
> enum class

OK.

> 
> > Source/JavaScriptCore/runtime/VarOffset.h:40
> > +    CapturedArgumentKind
> 
> Same comment about the term "captured" here. Can we call this
> DirectArgumentKind?

Yup, that makes sense.
Comment 122 Geoffrey Garen 2015-03-25 16:12:15 PDT
> For that reason, ScopedArguments feels consistent with the way we usually
> use the word "scope": a variable is "scoped" or "in a scope" when it is in a
> scope object that is allocated in the heap.
> 
> Do you buy this argument for the name ScopedArguments?

Yeah, I'm OK with this.
Comment 123 Filip Pizlo 2015-03-25 18:35:27 PDT
OK, so the renamings will be like so:

What the patch previously called CapturedArgumentsOffset/CapturedArgumentKind will now be called DirectArgumentsOffset/DirectArgumentKind.

What the patch previously called OutOfBandArguments will now be called ArgumentsSnapshot.  This is because I like the name SnapshottedArguments, but I don't like using the word "snapshot" as a verb and then making it past tense.  It's awkward to say.
Comment 124 Filip Pizlo 2015-03-25 18:37:02 PDT
(In reply to comment #123)
> OK, so the renamings will be like so:
> 
> What the patch previously called
> CapturedArgumentsOffset/CapturedArgumentKind will now be called
> DirectArgumentsOffset/DirectArgumentKind.
> 
> What the patch previously called OutOfBandArguments will now be called
> ArgumentsSnapshot.  This is because I like the name SnapshottedArguments,
> but I don't like using the word "snapshot" as a verb and then making it past
> tense.  It's awkward to say.

No, this feels even weirder.  I'm going with ClonedArguments.
Comment 125 Filip Pizlo 2015-03-25 20:04:29 PDT
Created attachment 249464 [details]
including ggaren's feedback
Comment 126 Filip Pizlo 2015-03-25 20:51:57 PDT
Created attachment 249470 [details]
rebased, added more tests

This is probably the one that will land.
Comment 127 WebKit Commit Bot 2015-03-25 20:56:13 PDT
Attachment 249470 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:712:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:107:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:208:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:239:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:300:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:320:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:46:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:47:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:48:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:49:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:697:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:173:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:253:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:275:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:282:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:261:  The parameter name "]" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/BytecodeKills.h:63:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4384:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4669:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4672:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4673:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4674:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4676:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4681:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4698:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4699:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4700:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4702:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4708:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:155:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:171:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:196:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:207:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 35 in 262 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 128 Filip Pizlo 2015-03-25 21:30:37 PDT
Landed in http://trac.webkit.org/changeset/181993
Comment 131 Filip Pizlo 2015-03-25 22:33:35 PDT
Anotehr fix http://trac.webkit.org/changeset/182001
Comment 132 Filip Pizlo 2015-03-25 22:54:46 PDT
This patch is still appearing to fail some tests.  Those failures don't reproduce locally.  The issue is that we need to rm -rf WebKitBuild on all of the bots.
Comment 133 Filip Pizlo 2015-03-25 23:55:05 PDT
I'm seeing test failures in trunk.  I didn't see them before landing.  Investigating...
Comment 134 Filip Pizlo 2015-03-26 00:18:11 PDT
Anotehr fix http://trac.webkit.org/changeset/182004
Comment 135 Filip Pizlo 2015-03-26 08:16:55 PDT
Looks like this broke some perf tests.  I'm looking into it.


Running Dromaeo/jslib-modify-prototype.html (65 of 144)
error: Dromaeo/jslib-modify-prototype.html
Both operands to ICmp instruction are not of the same type!
  %128 = icmp eq i64 %127, i8 0
LLVM fatal error: Broken function found, compilation aborted!
1   0x11c57323c llvmCrash(char const*)
2   0x11cba947c llvm::report_fatal_error(llvm::Twine const&, bool)
3   0x11cba93cc llvm::report_fatal_error(char const*, bool)
4   0x11cb83139 (anonymous namespace)::VerifierLegacyPass::runOnFunction(llvm::Function&)
5   0x11cb68d4c llvm::FPPassManager::runOnFunction(llvm::Function&)
6   0x11cb68f3b llvm::FPPassManager::runOnModule(llvm::Module&)
7   0x11cb693d6 llvm::legacy::PassManagerImpl::run(llvm::Module&)
8   0x11cb699ed llvm::legacy::PassManager::run(llvm::Module&)
9   0x11ca60d2b llvm::MCJIT::emitObject(llvm::Module*)
10  0x11ca60f14 llvm::MCJIT::generateCodeForModule(llvm::Module*)
11  0x11ca610c8 llvm::MCJIT::finalizeObject()
12  0x11ca8f3b3 LLVMGetPointerToGlobal
13  0x113913472 JSC::FTL::compile(JSC::FTL::State&, JSC::DFG::Safepoint::Result&)
14  0x1138741a3 JSC::DFG::Plan::compileInThreadImpl(JSC::DFG::LongLivedState&)
15  0x113873731 JSC::DFG::Plan::compileInThread(JSC::DFG::LongLivedState&, JSC::DFG::ThreadData*)
16  0x1138faa43 JSC::DFG::Worklist::runThread(JSC::DFG::ThreadData*)
17  0x113c7a8f3 WTF::threadEntryPoint(void*)
18  0x113c7adaf WTF::wtfThreadEntryPoint(void*)
19  0x7fff85ad7899 _pthread_body
20  0x7fff85ad772a _pthread_struct_init
21  0x7fff85adbfc9 thread_start
Comment 136 Filip Pizlo 2015-03-26 08:25:39 PDT
(In reply to comment #135)
> Looks like this broke some perf tests.  I'm looking into it.
> 
> 
> Running Dromaeo/jslib-modify-prototype.html (65 of 144)
> error: Dromaeo/jslib-modify-prototype.html
> Both operands to ICmp instruction are not of the same type!
>   %128 = icmp eq i64 %127, i8 0
> LLVM fatal error: Broken function found, compilation aborted!
> 1   0x11c57323c llvmCrash(char const*)
> 2   0x11cba947c llvm::report_fatal_error(llvm::Twine const&, bool)
> 3   0x11cba93cc llvm::report_fatal_error(char const*, bool)
> 4   0x11cb83139 (anonymous
> namespace)::VerifierLegacyPass::runOnFunction(llvm::Function&)
> 5   0x11cb68d4c llvm::FPPassManager::runOnFunction(llvm::Function&)
> 6   0x11cb68f3b llvm::FPPassManager::runOnModule(llvm::Module&)
> 7   0x11cb693d6 llvm::legacy::PassManagerImpl::run(llvm::Module&)
> 8   0x11cb699ed llvm::legacy::PassManager::run(llvm::Module&)
> 9   0x11ca60d2b llvm::MCJIT::emitObject(llvm::Module*)
> 10  0x11ca60f14 llvm::MCJIT::generateCodeForModule(llvm::Module*)
> 11  0x11ca610c8 llvm::MCJIT::finalizeObject()
> 12  0x11ca8f3b3 LLVMGetPointerToGlobal
> 13  0x113913472 JSC::FTL::compile(JSC::FTL::State&,
> JSC::DFG::Safepoint::Result&)
> 14  0x1138741a3
> JSC::DFG::Plan::compileInThreadImpl(JSC::DFG::LongLivedState&)
> 15  0x113873731 JSC::DFG::Plan::compileInThread(JSC::DFG::LongLivedState&,
> JSC::DFG::ThreadData*)
> 16  0x1138faa43 JSC::DFG::Worklist::runThread(JSC::DFG::ThreadData*)
> 17  0x113c7a8f3 WTF::threadEntryPoint(void*)
> 18  0x113c7adaf WTF::wtfThreadEntryPoint(void*)
> 19  0x7fff85ad7899 _pthread_body
> 20  0x7fff85ad772a _pthread_struct_init
> 21  0x7fff85adbfc9 thread_start

Pretty sure it's this: https://bugs.webkit.org/show_bug.cgi?id=143098
Comment 137 Mark Lam 2015-03-26 10:24:36 PDT
Looks like this broke inspector-protocol/debugger/setBreakpoint-dfg-and-modify-local.html on Windows: https://build.webkit.org/results/Apple%20Win%207%20Release%20(Tests)/r181993%20(50642)/results.html
Comment 138 Mark Lam 2015-03-26 12:02:35 PDT
(In reply to comment #137)
> Looks like this broke
> inspector-protocol/debugger/setBreakpoint-dfg-and-modify-local.html on
> Windows:
> https://build.webkit.org/results/Apple%20Win%207%20Release%20(Tests)/
> r181993%20(50642)/results.html

I'm tracking the investigation of this Windows crash here: https://bugs.webkit.org/show_bug.cgi?id=143109
Comment 139 Filip Pizlo 2015-03-26 13:50:20 PDT
Landed in http://trac.webkit.org/changeset/182023
Comment 140 Filip Pizlo 2015-03-26 13:50:56 PDT
(In reply to comment #139)
> Landed in http://trac.webkit.org/changeset/182023

I mean, I landed a fix for an expedia crash in that revision.
Comment 141 Filip Pizlo 2015-03-26 20:38:22 PDT
*** Bug 137357 has been marked as a duplicate of this bug. ***
Comment 142 Carlos Alberto Lopez Perez 2015-03-31 05:36:20 PDT
Looks like this also caused the performance test Speedometer/Full.html to crash sometimes on the GTK port. Reported on bug 143261.
Comment 143 peavo 2015-04-10 04:19:30 PDT
This patch passes all stress tests on Win32, but seems to cause an empty message view, when trying to view messages on www.hotmail.com. Is this the case on Mac 32/64 bit as well?
Comment 144 Mark Lam 2015-04-10 16:06:01 PDT
(In reply to comment #143)
> This patch passes all stress tests on Win32, but seems to cause an empty
> message view, when trying to view messages on www.hotmail.com. Is this the
> case on Mac 32/64 bit as well?

FYI, there's a bug that was introduced in r181993 that may cause similar symptoms.  That bug is being tracked in https://bugs.webkit.org/show_bug.cgi?id=143407.
Comment 145 Mark Lam 2015-04-13 13:02:42 PDT
*** Bug 139827 has been marked as a duplicate of this bug. ***
Comment 146 Mark Lam 2015-04-13 13:10:07 PDT
*** Bug 139524 has been marked as a duplicate of this bug. ***
Comment 147 Mark Lam 2015-04-20 14:36:02 PDT
*** Bug 140097 has been marked as a duplicate of this bug. ***