Bug 148610 - JSC should infer property types
Summary: JSC should infer property types
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: Other
Hardware: All All
: P2 Normal
Assignee: Filip Pizlo
URL:
Keywords: InRadar
Depends on: 148611 148649 148717 149047 149106 149283
Blocks:
  Show dependency treegraph
 
Reported: 2015-08-29 13:03 PDT by Filip Pizlo
Modified: 2015-09-21 19:25 PDT (History)
14 users (show)

See Also:


Attachments
it's a start (26.39 KB, patch)
2015-08-31 10:41 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
some more stuff (48.88 KB, patch)
2015-08-31 12:21 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
wow, this is fun and easy! (69.27 KB, patch)
2015-08-31 13:28 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
more things (88.42 KB, patch)
2015-08-31 15:24 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
more stuff (103.53 KB, patch)
2015-09-01 11:49 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
a little more (104.06 KB, patch)
2015-09-10 10:13 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
rebased and using a slightly more space-optimal InferredTypeTable (111.68 KB, patch)
2015-09-10 14:11 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
a bit more (125.58 KB, patch)
2015-09-10 14:53 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
more (131.73 KB, patch)
2015-09-11 23:57 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
just a bit more (139.56 KB, patch)
2015-09-12 22:07 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
rebased (139.47 KB, patch)
2015-09-14 15:13 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
some more (147.06 KB, patch)
2015-09-14 18:47 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
LLInt put_by_id type checking is written (154.00 KB, patch)
2015-09-15 11:04 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
starting to compile (159.33 KB, patch)
2015-09-15 12:12 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
it compiles! (159.33 KB, patch)
2015-09-15 14:44 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
it compiles! (168.35 KB, patch)
2015-09-15 15:04 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
it inferred a type! (171.64 KB, patch)
2015-09-15 16:21 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
OMG it passed some tests (171.10 KB, patch)
2015-09-15 18:04 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
it passes many tests (179.08 KB, patch)
2015-09-15 19:30 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
more fixing (179.95 KB, patch)
2015-09-15 20:44 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
even more fixing (186.65 KB, patch)
2015-09-15 21:25 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
work in progress (191.19 KB, patch)
2015-09-16 16:04 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
the patch (220.45 KB, patch)
2015-09-17 13:53 PDT, Filip Pizlo
ggaren: review+
Details | Formatted Diff | Diff
the patch (220.91 KB, patch)
2015-09-17 14:39 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
the patch (220.95 KB, patch)
2015-09-17 21:34 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
the patch (220.95 KB, patch)
2015-09-17 22:12 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
patch for landing (230.96 KB, patch)
2015-09-21 12:09 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-08-29 13:03:10 PDT
Here's the basic design:

- PropertyMapEntry tells you if a property is subject to type inference.  If it is, then before storing into it, you need to look up the property's offset in the Structure's type inference table.  If the value being stored is a member of the type according to that table, you can store.  Otherwise, you need to do something to broaden the type.

- The Structure's type inference table maps offsets to InferredType objects.  InferredType objects are GC cells.

- When a Structure transition occurs, the new structure's type inference table will share the same InferredType objects as the old structure for all of the properties that the two structures have in common.  This ensures that if a store occurs on the old structure that causes a change in the inferred type, then users of the new structure immediately find out that they may now see that new type.  Note that this is slightly conservative: it also means that if the type changes on the new structure, the old structure will find out, even though it doesn't need to.

- All stores from a reflective context (i.e. not PutById) immediately disable type inference on the property by causing the InferredType to become TOP.

- Dictionary transitions disable type inference by simply not copying the type inference table.  This means that it doesn't affect the type inference of prior structures. It does mean that both the dictionary structure and all of its successors (including when it's flattened) will not enjoy type inference.  The upside is that dictionary puts - which are expensive to begin with - don't have to validate types.  We're assuming that once a dictionary transition happens then it's because many accesses will be reflective.  Another common use of dictionaries is for prototypes, which will often be dictionaries until they are flattened.  But prototype accesses usually benefit from immutable property inference already, so it's OK if type inference sometimes fails.

- Property type will not, at least initially, have any effect on property representation.  It just guarantees that you don't have to do some type check after load.

- Property type will include Structure, for those Structures that have a valid transition watchpoint.  InferredType will register a watchpoint on the transition, and will generalize to "Object" if the watchpoint fires.  That way, we don't have to worry about some object having the structure at the time we store a reference into a property, but then the object's structure changes.  We'll only do the inference if the transition had never fired, and when it does, the property finds out.

- All put_by_id inline caches will have to do type checks, except of course when we already have a proof about what the type is.  Such a proof will probably only happen in the DFG/FTL.
Comment 1 Radar WebKit Bug Importer 2015-08-29 13:04:39 PDT
<rdar://problem/22490188>
Comment 2 Radar WebKit Bug Importer 2015-08-29 13:04:40 PDT
<rdar://problem/22490184>
Comment 3 Filip Pizlo 2015-08-31 10:41:03 PDT
Created attachment 260294 [details]
it's a start
Comment 4 Filip Pizlo 2015-08-31 12:21:29 PDT
Created attachment 260305 [details]
some more stuff
Comment 5 Filip Pizlo 2015-08-31 13:28:34 PDT
Created attachment 260312 [details]
wow, this is fun and easy!

Still more code to write, but it's coming together nicely so far.
Comment 6 Filip Pizlo 2015-08-31 15:24:33 PDT
Created attachment 260323 [details]
more things
Comment 7 Filip Pizlo 2015-09-01 11:49:29 PDT
Created attachment 260376 [details]
more stuff

Beefed up type check machinery in the DFG/FTL to deal with the ObjectWithStructureOrOther case.  That was the only kind of type that the DFG/FTL couldn't previously check.
Comment 8 Filip Pizlo 2015-09-10 10:13:21 PDT
Created attachment 260936 [details]
a little more
Comment 9 Filip Pizlo 2015-09-10 14:11:17 PDT
Created attachment 260955 [details]
rebased and using a slightly more space-optimal InferredTypeTable
Comment 10 Filip Pizlo 2015-09-10 14:53:16 PDT
Created attachment 260958 [details]
a bit more
Comment 11 Filip Pizlo 2015-09-11 23:57:25 PDT
Created attachment 261049 [details]
more
Comment 12 Filip Pizlo 2015-09-12 22:07:35 PDT
Created attachment 261074 [details]
just a bit more

I've wired the put_by_id store checks into most things.  I still need to wire it into the LLInt.
Comment 13 Filip Pizlo 2015-09-14 15:13:36 PDT
Created attachment 261136 [details]
rebased
Comment 14 Filip Pizlo 2015-09-14 18:47:47 PDT
Created attachment 261159 [details]
some more

Slowly integrating into LLInt put_by_id inline caching.
Comment 15 Filip Pizlo 2015-09-15 11:04:18 PDT
Created attachment 261216 [details]
LLInt put_by_id type checking is written

OMG I'm so close now.
Comment 16 Filip Pizlo 2015-09-15 12:12:44 PDT
Created attachment 261223 [details]
starting to compile
Comment 17 Filip Pizlo 2015-09-15 14:44:44 PDT
Created attachment 261240 [details]
it compiles!
Comment 18 Oliver Hunt 2015-09-15 14:57:03 PDT
(In reply to comment #17)
> Created attachment 261240 [details]
> it compiles!

r=me :D
Comment 19 Filip Pizlo 2015-09-15 15:04:55 PDT
Created attachment 261243 [details]
it compiles!

The last file I uploaded was an older patch.
Comment 20 Filip Pizlo 2015-09-15 16:21:27 PDT
Created attachment 261256 [details]
it inferred a type!

It just inferred that "f" is an Int32 below:


function foo(o) {
    return o.f + 1;
}

noInline(foo);

for (var i = 0; i < 10000; ++i)
    foo({f:i});
Comment 21 Filip Pizlo 2015-09-15 18:04:45 PDT
Created attachment 261275 [details]
OMG it passed some tests
Comment 22 Filip Pizlo 2015-09-15 19:30:22 PDT
Created attachment 261284 [details]
it passes many tests
Comment 23 Filip Pizlo 2015-09-15 20:44:19 PDT
Created attachment 261290 [details]
more fixing

Right now it looks like I might have introduced a performance pathology to inline caches because the no-access-inlining tests are timing out.  Other than that, this is starting to look good.
Comment 24 Filip Pizlo 2015-09-15 21:25:12 PDT
Created attachment 261295 [details]
even more fixing

Fixed tag register usage in the put_by_id type check.  That's what was causing bad performance.
Comment 25 Filip Pizlo 2015-09-16 11:59:48 PDT
This looks pretty good.  Now I just need to fix the raytrace regression, and this will turn into a really nice speed-up.


Benchmark report for Octane on shakezilla (MacBookPro11,3).

VMs tested:
"TipOfTree" at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r189810)
"PropTypeInference" at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r189810)

Collected 8 samples per benchmark/VM, with 8 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             PropTypeInference                                 

encrypt                 0.16891+-0.00252          0.16502+-0.00272         might be 1.0236x faster
decrypt                 3.02377+-0.00694    ^     2.92723+-0.05261       ^ definitely 1.0330x faster
deltablue      x2       0.16084+-0.00654    ^     0.13684+-0.00191       ^ definitely 1.1754x faster
earley                  0.30135+-0.00227    ?     0.30291+-0.00087       ?
boyer                   4.28630+-0.02453    ?     4.39991+-0.09832       ? might be 1.0265x slower
navier-stokes  x2       4.80670+-0.01273          4.80088+-0.00803       
raytrace       x2       0.90676+-0.02904    !     1.26826+-0.22724       ! definitely 1.3987x slower
richards       x2       0.10723+-0.00159    ^     0.08840+-0.00084       ^ definitely 1.2130x faster
splay          x2       0.32863+-0.00254    ?     0.33190+-0.00335       ?
regexp         x2      24.67865+-0.18165         24.35562+-0.48648         might be 1.0133x faster
pdfjs          x2      36.64304+-0.60033    ?    36.82721+-0.31432       ?
mandreel       x2      42.42468+-0.31628         42.30698+-0.27770       
gbemu          x2      34.76927+-0.64065         34.30328+-1.82136         might be 1.0136x faster
closure                 0.57134+-0.00237    ?     0.57294+-0.00228       ?
jquery                  7.09233+-0.03046    !     7.22342+-0.03013       ! definitely 1.0185x slower
box2d          x2      10.08765+-0.05900    ^     9.09621+-0.07398       ^ definitely 1.1090x faster
zlib           x2     386.80319+-6.80693        381.44449+-10.04212        might be 1.0140x faster
typescript     x2     633.37460+-7.97292    ?   651.13870+-10.22388      ? might be 1.0280x slower

<geometric>             5.51512+-0.02974          5.46103+-0.07040         might be 1.0099x faster
Comment 26 Oliver Hunt 2015-09-16 12:55:13 PDT
(In reply to comment #25)

> typescript     x2     633.37460+-7.97292    ?   651.13870+-10.22388      ?
> might be 1.0280x slower

I'm curious, given what i sort of code type script is ostensibly for, i would have expected improvement here. Are we already just doing something good without this analysis?
Comment 27 Filip Pizlo 2015-09-16 13:12:45 PDT
(In reply to comment #26)
> (In reply to comment #25)
> 
> > typescript     x2     633.37460+-7.97292    ?   651.13870+-10.22388      ?
> > might be 1.0280x slower
> 
> I'm curious, given what i sort of code type script is ostensibly for, i
> would have expected improvement here. Are we already just doing something
> good without this analysis?

I don't know what you mean.  "Typescript" is a typescript compiler, not necessarily a representative Typescript program.

Also, the goal of property type inference is not to reinfer the original types used by every possible CrappyLanguage->JS compiler.  For example, property type inference only infers that a property has some specific object type if that type doesn't have subtyping.

And yes, we are already doing a pretty good job of running this benchmark.
Comment 28 Filip Pizlo 2015-09-16 13:13:34 PDT
Looks like the Raytrace regression is mostly a warm-up time regression.  The benchmark runs a bit faster when you let it run long enough.

I'll keep investigating.
Comment 29 Oliver Hunt 2015-09-16 13:19:38 PDT
(In reply to comment #27)
> (In reply to comment #26)
> > (In reply to comment #25)
> > 
> > > typescript     x2     633.37460+-7.97292    ?   651.13870+-10.22388      ?
> > > might be 1.0280x slower
> > 
> > I'm curious, given what i sort of code type script is ostensibly for, i
> > would have expected improvement here. Are we already just doing something
> > good without this analysis?
> 
> I don't know what you mean.  "Typescript" is a typescript compiler, not
> necessarily a representative Typescript program.
> 
Ah, ok, that makes substantially more sense.

> Also, the goal of property type inference is not to reinfer the original
> types used by every possible CrappyLanguage->JS compiler.  For example,
> property type inference only infers that a property has some specific object
> type if that type doesn't have sub typing.

Does that apply even for sane ES6? e.g.

class Foo { };
class Bar extends Foo { };

or the equivalent for manual JS inheritance?

> 
> And yes, we are already doing a pretty good job of running this benchmark.
That was what i figured :D
Comment 30 Filip Pizlo 2015-09-16 13:37:20 PDT
(In reply to comment #29)
> (In reply to comment #27)
> > (In reply to comment #26)
> > > (In reply to comment #25)
> > > 
> > > > typescript     x2     633.37460+-7.97292    ?   651.13870+-10.22388      ?
> > > > might be 1.0280x slower
> > > 
> > > I'm curious, given what i sort of code type script is ostensibly for, i
> > > would have expected improvement here. Are we already just doing something
> > > good without this analysis?
> > 
> > I don't know what you mean.  "Typescript" is a typescript compiler, not
> > necessarily a representative Typescript program.
> > 
> Ah, ok, that makes substantially more sense.
> 
> > Also, the goal of property type inference is not to reinfer the original
> > types used by every possible CrappyLanguage->JS compiler.  For example,
> > property type inference only infers that a property has some specific object
> > type if that type doesn't have sub typing.
> 
> Does that apply even for sane ES6? e.g.
> 
> class Foo { };
> class Bar extends Foo { };
> 
> or the equivalent for manual JS inheritance?

If you have a property that points to either Foo or Bar then we will merge the two to "Object".  I.e. it's not super useful for most programs.
Comment 31 Filip Pizlo 2015-09-16 16:03:21 PDT
Well, this is pretty good.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on shakezilla (MacBookPro11,3).

VMs tested:
"TipOfTree" at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r189810)
"PropTypeInference" at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r189810)

Collected 8 samples per benchmark/VM, with 8 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             PropTypeInference                                 
SunSpider:
   3d-cube                                            4.6250+-0.1959     ?      4.8483+-0.1788        ? might be 1.0483x slower
   3d-morph                                           5.3803+-0.2129            5.2288+-0.0549          might be 1.0290x faster
   3d-raytrace                                        5.2417+-0.1950            5.2153+-0.0721        
   access-binary-trees                                2.1002+-0.0765     ?      2.2199+-0.1277        ? might be 1.0570x slower
   access-fannkuch                                    5.7328+-0.4433            5.4622+-0.0536          might be 1.0495x faster
   access-nbody                                       2.5158+-0.1876     ?      2.6108+-0.2258        ? might be 1.0377x slower
   access-nsieve                                      3.0552+-0.1184            2.9935+-0.0353          might be 1.0206x faster
   bitops-3bit-bits-in-byte                           1.1770+-0.0625            1.1231+-0.0179          might be 1.0480x faster
   bitops-bits-in-byte                                3.1704+-0.0397     ?      3.2297+-0.0698        ? might be 1.0187x slower
   bitops-bitwise-and                                 2.0616+-0.0557            1.9935+-0.0344          might be 1.0341x faster
   bitops-nsieve-bits                                 2.9762+-0.0934     ?      3.0097+-0.0858        ? might be 1.0113x slower
   controlflow-recursive                              2.3121+-0.1200     ?      2.3300+-0.0930        ?
   crypto-aes                                         3.9079+-0.1019     ?      4.4235+-0.6217        ? might be 1.1319x slower
   crypto-md5                                         2.4789+-0.1039     ?      2.5037+-0.0760        ?
   crypto-sha1                                        2.4169+-0.1869            2.2813+-0.1240          might be 1.0594x faster
   date-format-tofte                                  6.7809+-0.2225     ?      6.7858+-0.1401        ?
   date-format-xparb                                  4.9249+-0.5210            4.6237+-0.1594          might be 1.0651x faster
   math-cordic                                        2.8792+-0.1427     ?      2.9638+-0.2478        ? might be 1.0294x slower
   math-partial-sums                                  4.7814+-0.0319            4.7479+-0.0652        
   math-spectral-norm                                 1.9031+-0.0461     ?      1.9554+-0.0894        ? might be 1.0275x slower
   regexp-dna                                         6.4941+-0.2347            6.4583+-0.4996        
   string-base64                                      4.8989+-0.6884            4.3126+-0.0724          might be 1.1360x faster
   string-fasta                                       5.7323+-0.0558            5.7038+-0.1034        
   string-tagcloud                                    8.1845+-0.3592            7.9359+-0.0612          might be 1.0313x faster
   string-unpack-code                                18.7733+-0.9083           18.2597+-0.6957          might be 1.0281x faster
   string-validate-input                              4.5981+-0.0971            4.5358+-0.1315          might be 1.0137x faster

   <arithmetic>                                       4.5809+-0.0416            4.5291+-0.0388          might be 1.0114x faster

                                                        TipOfTree             PropTypeInference                                 
LongSpider:
   3d-cube                                          802.8184+-1.1690     ^    792.2674+-2.8621        ^ definitely 1.0133x faster
   3d-morph                                        1483.1839+-2.6321     ?   1498.9178+-34.1944       ? might be 1.0106x slower
   3d-raytrace                                      591.0079+-5.0994          588.9049+-4.5188        
   access-binary-trees                              802.6959+-4.9928          796.0794+-3.3422        
   access-fannkuch                                  273.5180+-4.8238          272.5452+-2.2775        
   access-nbody                                     503.6322+-0.3070     ?    505.7096+-3.1017        ?
   access-nsieve                                    368.1664+-12.4399    ?    374.9346+-11.5301       ? might be 1.0184x slower
   bitops-3bit-bits-in-byte                          33.9543+-0.7093     ?     34.0146+-0.9645        ?
   bitops-bits-in-byte                               75.6387+-2.9604           75.0401+-1.1219        
   bitops-nsieve-bits                               398.8509+-2.2453     ?    400.7792+-3.4765        ?
   controlflow-recursive                            426.2560+-4.0713          423.8850+-1.4406        
   crypto-aes                                       566.8598+-7.3313          559.2004+-12.1552         might be 1.0137x faster
   crypto-md5                                       431.2558+-1.7126          430.4504+-2.3067        
   crypto-sha1                                      636.5125+-1.5853          628.6773+-9.3324          might be 1.0125x faster
   date-format-tofte                                501.2081+-5.4174     ?    502.5661+-4.6859        ?
   date-format-xparb                                655.4932+-2.2265     ?    663.7870+-29.3137       ? might be 1.0127x slower
   hash-map                                         166.4718+-4.5448          164.2834+-4.0662          might be 1.0133x faster
   math-cordic                                      474.8139+-1.5644          474.4279+-1.3808        
   math-partial-sums                                462.2896+-2.8386     ^    455.5179+-1.6345        ^ definitely 1.0149x faster
   math-spectral-norm                               546.9286+-2.5782     ?    547.5915+-3.4611        ?
   string-base64                                    352.7332+-5.7302     ?    355.2516+-18.7733       ?
   string-fasta                                     365.2469+-3.2275          362.0158+-1.8947        
   string-tagcloud                                  174.6937+-1.3866     ?    176.0477+-2.2160        ?

   <geometric>                                      384.6890+-1.3348          384.0363+-1.8207          might be 1.0017x faster

                                                        TipOfTree             PropTypeInference                                 
V8Spider:
   crypto                                            50.1670+-1.5238           47.8391+-1.2478          might be 1.0487x faster
   deltablue                                         87.0811+-1.7276     ^     77.9060+-3.1056        ^ definitely 1.1178x faster
   earley-boyer                                      41.1463+-1.0819     ?     42.8026+-1.3212        ? might be 1.0403x slower
   raytrace                                          33.1436+-1.8860           31.0324+-1.1950          might be 1.0680x faster
   regexp                                            61.8413+-1.2828     ?     62.4763+-1.5282        ? might be 1.0103x slower
   richards                                          63.0591+-1.7792     ^     52.6292+-1.3454        ^ definitely 1.1982x faster
   splay                                             34.1602+-1.0702     ?     35.6920+-1.5597        ? might be 1.0448x slower

   <geometric>                                       50.0840+-0.5988     ^     47.9038+-0.8425        ^ definitely 1.0455x faster

                                                        TipOfTree             PropTypeInference                                 
Octane:
   encrypt                                           0.16871+-0.00284    ^     0.16195+-0.00101       ^ definitely 1.0417x faster
   decrypt                                           3.02910+-0.01487    ^     2.90365+-0.01669       ^ definitely 1.0432x faster
   deltablue                                x2       0.15958+-0.00651    ^     0.13905+-0.00222       ^ definitely 1.1476x faster
   earley                                            0.30207+-0.00283    ?     0.30534+-0.00478       ? might be 1.0108x slower
   boyer                                             4.28637+-0.01892    ?     4.32666+-0.02796       ?
   navier-stokes                            x2       4.82749+-0.03323    ?     4.86614+-0.12574       ?
   raytrace                                 x2       0.89613+-0.00652    ^     0.85767+-0.00248       ^ definitely 1.0448x faster
   richards                                 x2       0.10654+-0.00161    ^     0.08825+-0.00060       ^ definitely 1.2072x faster
   splay                                    x2       0.32553+-0.00271    ?     0.33166+-0.00417       ? might be 1.0188x slower
   regexp                                   x2      24.63893+-0.18265         24.30294+-0.16241         might be 1.0138x faster
   pdfjs                                    x2      36.54433+-0.30398    ?    36.81652+-0.35804       ?
   mandreel                                 x2      42.34141+-0.29707         42.28839+-0.19672       
   gbemu                                    x2      34.27753+-0.40394         34.09559+-2.67689       
   closure                                           0.57291+-0.00247    ?     0.57307+-0.00290       ?
   jquery                                            7.13432+-0.05176    !     7.21157+-0.01591       ! definitely 1.0108x slower
   box2d                                    x2      10.09660+-0.04806    ^     9.02640+-0.06321       ^ definitely 1.1186x faster
   zlib                                     x2     379.70389+-16.65197   ?   387.33121+-3.19627       ? might be 1.0201x slower
   typescript                               x2     641.95547+-21.02952   ?   654.81155+-3.22706       ? might be 1.0200x slower

   <geometric>                                       5.49639+-0.03297    ^     5.33200+-0.02881       ^ definitely 1.0308x faster

                                                        TipOfTree             PropTypeInference                                 
Kraken:
   ai-astar                                          221.069+-5.365      ^     125.807+-0.793         ^ definitely 1.7572x faster
   audio-beat-detection                               50.538+-0.249             50.134+-0.348         
   audio-dft                                          96.834+-2.341             96.104+-1.916         
   audio-fft                                          35.923+-2.081             35.296+-0.479           might be 1.0178x faster
   audio-oscillator                                   60.405+-2.863      ^      56.408+-1.001         ^ definitely 1.0709x faster
   imaging-darkroom                                   61.894+-1.930             60.241+-1.223           might be 1.0274x faster
   imaging-desaturate                                 48.245+-0.230      ?      48.597+-1.863         ?
   imaging-gaussian-blur                              85.408+-0.861             85.069+-0.993         
   json-parse-financial                               40.614+-1.598             39.319+-0.568           might be 1.0330x faster
   json-stringify-tinderbox                           22.480+-0.385             22.220+-0.664           might be 1.0117x faster
   stanford-crypto-aes                                41.040+-1.601             40.891+-0.830         
   stanford-crypto-ccm                                36.045+-1.871             34.894+-0.692           might be 1.0330x faster
   stanford-crypto-pbkdf2                             92.066+-0.329      ?      97.040+-5.212         ? might be 1.0540x slower
   stanford-crypto-sha256-iterative                   36.476+-1.664             36.076+-0.551           might be 1.0111x faster

   <arithmetic>                                       66.360+-0.562      ^      59.150+-0.532         ^ definitely 1.1219x faster

                                                        TipOfTree             PropTypeInference                                 
JSRegress:
   abc-forward-loop-equal                            29.5717+-0.7997     ?     29.6232+-0.6661        ?
   abc-postfix-backward-loop                         29.3344+-0.4990     ?     29.6458+-0.7477        ? might be 1.0106x slower
   abc-simple-backward-loop                          28.9061+-0.4349     ?     29.2442+-0.4026        ? might be 1.0117x slower
   abc-simple-forward-loop                           29.3086+-0.8344           29.2127+-0.4515        
   abc-skippy-loop                                   20.8447+-0.3063     ?     21.1579+-0.3780        ? might be 1.0150x slower
   abs-boolean                                        2.4233+-0.0424     ?      2.4713+-0.1055        ? might be 1.0198x slower
   adapt-to-double-divide                            16.3937+-0.4955           16.0262+-0.3545          might be 1.0229x faster
   aliased-arguments-getbyval                         1.2181+-0.0886     ?      1.2209+-0.0591        ?
   allocate-big-object                                2.5926+-0.4533            2.5301+-0.1283          might be 1.0247x faster
   arguments-named-and-reflective                    10.6788+-0.3871           10.6289+-0.3912        
   arguments-out-of-bounds                            9.6739+-0.4936            9.6472+-0.4291        
   arguments-strict-mode                             10.1104+-0.7169            9.6148+-0.4352          might be 1.0515x faster
   arguments                                          8.6199+-0.2681     ?      9.1803+-1.7263        ? might be 1.0650x slower
   arity-mismatch-inlining                            0.8607+-0.0314     ?      0.9181+-0.1511        ? might be 1.0667x slower
   array-access-polymorphic-structure                 5.9170+-0.0712     !      7.3939+-0.3762        ! definitely 1.2496x slower
   array-nonarray-polymorhpic-access                 23.5085+-0.7201     ?     23.7864+-0.7931        ? might be 1.0118x slower
   array-prototype-every                             76.9250+-3.3893     ?     77.1250+-3.1070        ?
   array-prototype-forEach                           75.4867+-0.7674     ?     76.1922+-1.4677        ?
   array-prototype-map                               81.3942+-1.5720     ?     82.5326+-3.7403        ? might be 1.0140x slower
   array-prototype-reduce                            71.1826+-1.1518           71.0775+-1.0542        
   array-prototype-reduceRight                       72.5941+-3.5006     ?     73.2465+-3.9408        ?
   array-prototype-some                              75.4871+-0.8979     ?     76.4512+-1.0151        ? might be 1.0128x slower
   array-splice-contiguous                           20.6437+-0.9323           20.1867+-0.5569          might be 1.0226x faster
   array-with-double-add                              3.3815+-0.0418     ?      3.4146+-0.1078        ?
   array-with-double-increment                        3.1118+-0.1776     ?      3.1120+-0.1433        ?
   array-with-double-mul-add                          4.1994+-0.0758            4.1393+-0.0397          might be 1.0145x faster
   array-with-double-sum                              3.1522+-0.0571     ?      3.1703+-0.0443        ?
   array-with-int32-add-sub                           5.7793+-0.2497            5.7340+-0.2260        
   array-with-int32-or-double-sum                     3.2869+-0.0688            3.2415+-0.0408          might be 1.0140x faster
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     25.5993+-0.5443           25.3614+-0.2696        
   ArrayBuffer-DataView-alloc-long-lived             12.0539+-0.6530           11.6406+-0.2431          might be 1.0355x faster
   ArrayBuffer-Int32Array-byteOffset                  3.6175+-0.2479            3.4754+-0.0260          might be 1.0409x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     30.3481+-1.0535     ?     30.4585+-0.9591        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     20.4596+-1.4145     ?     21.2423+-2.2532        ? might be 1.0383x slower
   ArrayBuffer-Int8Array-alloc-long-lived            12.3514+-0.3393           12.0435+-0.3403          might be 1.0256x faster
   ArrayBuffer-Int8Array-alloc                        9.7338+-0.7646            9.3685+-0.2558          might be 1.0390x faster
   arrowfunction-call                                10.8471+-0.4929           10.5509+-0.1284          might be 1.0281x faster
   asmjs_bool_bug                                     7.4742+-0.1806     ?      7.5392+-0.3326        ?
   assign-custom-setter-polymorphic                   2.4456+-0.0496     ?      2.5216+-0.0642        ? might be 1.0311x slower
   assign-custom-setter                               3.4162+-0.0414     ?      3.4782+-0.0870        ? might be 1.0182x slower
   basic-set                                          8.5318+-0.2485            8.3574+-0.3100          might be 1.0209x faster
   big-int-mul                                        3.4236+-0.0315     ?      3.5718+-0.2324        ? might be 1.0433x slower
   boolean-test                                       3.3359+-0.3124            3.1011+-0.0610          might be 1.0757x faster
   branch-fold                                        3.6116+-0.0339     ?      3.6716+-0.1598        ? might be 1.0166x slower
   branch-on-string-as-boolean                       16.9776+-0.4538           16.8361+-0.3111        
   by-val-generic                                     2.5794+-0.3077            2.4775+-0.0747          might be 1.0412x faster
   call-spread-apply                                 26.9822+-1.3769           26.9507+-1.3812        
   call-spread-call                                  21.0297+-0.6743     ?     22.0792+-0.9198        ? might be 1.0499x slower
   captured-assignments                               0.4579+-0.0733            0.4440+-0.0284          might be 1.0314x faster
   cast-int-to-double                                 5.0800+-0.0949     ?      5.0805+-0.0959        ?
   cell-argument                                      6.4022+-0.3258            6.2119+-0.4405          might be 1.0306x faster
   cfg-simplify                                       2.8950+-0.0493     ?      2.9511+-0.1494        ? might be 1.0194x slower
   chain-getter-access                                8.3528+-0.1082     ?      8.6506+-0.3623        ? might be 1.0357x slower
   cmpeq-obj-to-obj-other                            12.1717+-0.7570     ?     12.2025+-0.8686        ?
   constant-test                                      4.9201+-0.1929            4.8553+-0.0522          might be 1.0134x faster
   create-lots-of-functions                           9.3572+-0.3303     ?      9.7289+-0.5300        ? might be 1.0397x slower
   cse-new-array-buffer                               2.3886+-0.1963            2.3618+-0.1541          might be 1.0113x faster
   cse-new-array                                      2.6270+-0.3218            2.5959+-0.2751          might be 1.0120x faster
   DataView-custom-properties                        31.4965+-0.9413           30.8705+-0.7066          might be 1.0203x faster
   delay-tear-off-arguments-strictmode               12.0873+-0.3038     ?     12.5700+-0.5805        ? might be 1.0399x slower
   deltablue-varargs                                175.1500+-5.4030          173.0341+-5.7436          might be 1.0122x faster
   destructuring-arguments                          166.0807+-1.8202     ?    169.4739+-11.7492       ? might be 1.0204x slower
   destructuring-parameters-overridden-by-function   
                                                      0.4597+-0.0271     ?      0.6080+-0.1931        ? might be 1.3226x slower
   destructuring-swap                                 4.8339+-0.1126     ?      4.8463+-0.1984        ?
   direct-arguments-getbyval                          1.2357+-0.1176            1.2206+-0.0696          might be 1.0124x faster
   div-boolean-double                                 5.3571+-0.0973            5.3013+-0.1179          might be 1.0105x faster
   div-boolean                                        8.1472+-0.1437     ?      8.2857+-0.3241        ? might be 1.0170x slower
   double-get-by-val-out-of-bounds                    4.7416+-0.6329            4.7011+-0.6800        
   double-pollution-getbyval                          8.6831+-0.1004     ?      8.6996+-0.1218        ?
   double-pollution-putbyoffset                       3.6554+-0.1064            3.5929+-0.0919          might be 1.0174x faster
   double-real-use                                   23.9808+-0.5169           23.8664+-0.6328        
   double-to-int32-typed-array-no-inline              2.2318+-0.1811            2.1806+-0.0829          might be 1.0235x faster
   double-to-int32-typed-array                        2.0368+-0.0474     ?      2.0776+-0.1425        ? might be 1.0200x slower
   double-to-uint32-typed-array-no-inline             2.2336+-0.0794     ?      2.2965+-0.0875        ? might be 1.0281x slower
   double-to-uint32-typed-array                       2.0689+-0.0358     ?      2.1271+-0.1150        ? might be 1.0281x slower
   elidable-new-object-dag                           35.0308+-1.1095           34.5814+-1.2698          might be 1.0130x faster
   elidable-new-object-roflcopter                    34.0688+-0.6941           32.5712+-1.1193          might be 1.0460x faster
   elidable-new-object-then-call                     31.8958+-0.9847     ?     32.2336+-0.8130        ? might be 1.0106x slower
   elidable-new-object-tree                          37.2376+-0.5414     ?     37.6832+-1.1244        ? might be 1.0120x slower
   empty-string-plus-int                              4.6707+-0.0832     !      4.8784+-0.0332        ! definitely 1.0445x slower
   emscripten-cube2hash                              25.9473+-1.2074     ?     27.8556+-1.4515        ? might be 1.0735x slower
   exit-length-on-plain-object                       12.3092+-0.3740     !     15.2178+-0.4169        ! definitely 1.2363x slower
   external-arguments-getbyval                        1.2769+-0.0598            1.2050+-0.0979          might be 1.0597x faster
   external-arguments-putbyval                        2.1420+-0.0710     ?      2.2119+-0.1281        ? might be 1.0326x slower
   fixed-typed-array-storage-var-index                1.2164+-0.0501            1.1682+-0.0123          might be 1.0412x faster
   fixed-typed-array-storage                          0.8961+-0.0327     ?      0.9125+-0.0668        ? might be 1.0184x slower
   Float32Array-matrix-mult                           3.8965+-0.0497     !      4.3716+-0.4038        ! definitely 1.1219x slower
   Float32Array-to-Float64Array-set                  46.5005+-0.5037     ?     47.1925+-0.8722        ? might be 1.0149x slower
   Float64Array-alloc-long-lived                     71.4377+-1.2180     ?     72.8191+-6.0410        ? might be 1.0193x slower
   Float64Array-to-Int16Array-set                    57.4603+-1.8593           57.1108+-1.9288        
   fold-double-to-int                                12.4950+-0.5810           12.1107+-0.3008          might be 1.0317x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.9265+-1.0117     ?     11.4056+-1.5478        ? might be 1.0438x slower
   fold-get-by-id-to-multi-get-by-offset             10.8847+-1.4517           10.1502+-0.5742          might be 1.0724x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.7002+-1.2102     ?      9.0302+-0.7432        ? might be 1.0379x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     10.0186+-2.6535            8.6365+-0.6155          might be 1.1600x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     10.9536+-1.5074           10.4555+-1.2798          might be 1.0476x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      6.7541+-1.1494     !     10.4541+-0.4607        ! definitely 1.5478x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      9.4175+-0.4695     ?      9.6074+-0.6219        ? might be 1.0202x slower
   fold-put-by-id-to-multi-put-by-offset             11.0346+-0.9828     ?     11.3848+-1.0905        ? might be 1.0317x slower
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     11.1555+-1.1047     ?     11.3719+-0.6603        ? might be 1.0194x slower
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     10.4830+-1.0065     ?     10.7354+-0.5549        ? might be 1.0241x slower
   fold-put-structure                                 6.4121+-0.7574     ?      7.6949+-0.7344        ? might be 1.2001x slower
   for-of-iterate-array-entries                      10.9035+-0.1343     ?     11.2227+-0.5828        ? might be 1.0293x slower
   for-of-iterate-array-keys                          3.5661+-0.3586            3.4253+-0.1196          might be 1.0411x faster
   for-of-iterate-array-values                        3.5945+-0.2273            3.5343+-0.2919          might be 1.0170x faster
   fround                                            17.7127+-0.5042     ?     17.8475+-0.4742        ?
   ftl-library-inlining-dataview                     56.7204+-1.5642     ?     56.8355+-1.0749        ?
   ftl-library-inlining                              95.7446+-1.0132           95.6008+-0.6416        
   function-call                                     10.7158+-0.2095     ?     10.9701+-0.4081        ? might be 1.0237x slower
   function-dot-apply                                 2.0196+-0.0444     ?      2.2635+-0.4926        ? might be 1.1207x slower
   function-test                                      2.7177+-0.0843     ?      2.7506+-0.0400        ? might be 1.0121x slower
   function-with-eval                                93.3626+-0.4010           93.1958+-1.1569        
   gcse-poly-get-less-obvious                        20.1965+-0.2359     ?     20.3802+-0.3880        ?
   gcse-poly-get                                     24.8224+-2.0524     ^     20.9301+-0.2630        ^ definitely 1.1860x faster
   gcse                                               3.8448+-0.1134            3.5800+-0.4065          might be 1.0740x faster
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7037+-0.1058            2.6115+-0.0665          might be 1.0353x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      5.7253+-0.2055     ^      4.7585+-0.1274        ^ definitely 1.2032x faster
   get-by-id-chain-from-try-block                     5.5022+-0.1929            5.3586+-0.0455          might be 1.0268x faster
   get-by-id-check-structure-elimination              4.4259+-0.1577     ^      3.9153+-0.0829        ^ definitely 1.1304x faster
   get-by-id-proto-or-self                           15.8441+-0.9135           15.5797+-0.8584          might be 1.0170x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8765+-0.0188     ?      2.9175+-0.0559        ? might be 1.0142x slower
   get-by-id-self-or-proto                           15.6098+-1.0422           15.4301+-0.9243          might be 1.0116x faster
   get-by-val-out-of-bounds                           4.3539+-0.1028     ?      4.4181+-0.3469        ? might be 1.0148x slower
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      2.7909+-0.0403            2.7631+-0.0947          might be 1.0101x faster
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                      6.1374+-0.2374            5.9023+-0.1430          might be 1.0398x faster
   get-by-val-with-string-chain-from-try-block   
                                                      5.5459+-0.1212     ?      5.6515+-0.2643        ? might be 1.0190x slower
   get-by-val-with-string-check-structure-elimination   
                                                      5.6353+-1.1329            5.1361+-0.1171          might be 1.0972x faster
   get-by-val-with-string-proto-or-self              16.4633+-1.0073           15.6938+-0.8350          might be 1.0490x faster
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      3.3479+-0.0601     ^      3.0869+-0.0839        ^ definitely 1.0846x faster
   get-by-val-with-string-self-or-proto              15.7904+-0.6484           15.6165+-0.5953          might be 1.0111x faster
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      3.0858+-0.0214     ?      3.1515+-0.0762        ? might be 1.0213x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     12.3023+-0.1258     ?     12.4216+-0.1806        ?
   get-by-val-with-symbol-chain-from-try-block   
                                                      5.5128+-0.0816     ?      5.6950+-0.2452        ? might be 1.0331x slower
   get-by-val-with-symbol-check-structure-elimination   
                                                     11.2745+-0.1025     ?     11.4391+-0.1639        ? might be 1.0146x slower
   get-by-val-with-symbol-proto-or-self              15.6640+-0.6903           15.6021+-0.3291        
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      4.0652+-0.8184            3.9002+-0.3238          might be 1.0423x faster
   get-by-val-with-symbol-self-or-proto              15.3779+-0.3621     ?     15.8925+-0.4612        ? might be 1.0335x slower
   get_callee_monomorphic                             2.5283+-0.2841            2.3928+-0.0820          might be 1.0566x faster
   get_callee_polymorphic                             3.6313+-0.3648     ?      3.6917+-0.4619        ? might be 1.0166x slower
   getter-no-activation                               4.8243+-0.1602     ?      4.8625+-0.2385        ?
   getter-prototype                                   8.8296+-0.1172     ^      8.0971+-0.4452        ^ definitely 1.0905x faster
   getter-richards                                  121.6720+-6.0224          116.7231+-4.3454          might be 1.0424x faster
   getter                                             5.4981+-0.4648            5.2302+-0.3808          might be 1.0512x faster
   global-object-access-with-mutating-structure   
                                                      5.5336+-0.1020     ?      5.7931+-0.2739        ? might be 1.0469x slower
   global-var-const-infer-fire-from-opt               0.8446+-0.0385     ?      0.9189+-0.2117        ? might be 1.0879x slower
   global-var-const-infer                             0.6885+-0.0740            0.6471+-0.0203          might be 1.0639x faster
   hard-overflow-check-equal                         33.0935+-0.9574     ^     27.0496+-1.6507        ^ definitely 1.2234x faster
   hard-overflow-check                               32.7499+-0.9313     ^     26.3548+-0.5100        ^ definitely 1.2427x faster
   HashMap-put-get-iterate-keys                      27.3331+-0.9749           25.9342+-1.0295          might be 1.0539x faster
   HashMap-put-get-iterate                           29.3111+-0.6953           28.9029+-0.9642          might be 1.0141x faster
   HashMap-string-put-get-iterate                    25.4756+-1.4210           24.7638+-1.5794          might be 1.0287x faster
   hoist-make-rope                                    8.3820+-0.6547     ?      8.7106+-0.4068        ? might be 1.0392x slower
   hoist-poly-check-structure-effectful-loop   
                                                      4.1714+-0.0716     ^      3.7039+-0.0921        ^ definitely 1.1262x faster
   hoist-poly-check-structure                         3.3055+-0.0838     ?      3.3567+-0.4233        ? might be 1.0155x slower
   imul-double-only                                   7.3764+-0.5683            7.2557+-0.1262          might be 1.0166x faster
   imul-int-only                                      8.7517+-0.9824            8.7089+-0.8251        
   imul-mixed                                         7.1204+-0.2967            7.0125+-0.4385          might be 1.0154x faster
   in-four-cases                                     17.5611+-0.7770           16.9061+-0.2895          might be 1.0387x faster
   in-one-case-false                                  9.1648+-0.0268     !      9.9040+-0.6752        ! definitely 1.0807x slower
   in-one-case-true                                   9.4945+-0.5018     ?      9.6930+-0.5692        ? might be 1.0209x slower
   in-two-cases                                       9.9522+-0.3876     ?      9.9612+-0.4333        ?
   indexed-properties-in-objects                      2.7026+-0.0258     !      2.8047+-0.0715        ! definitely 1.0377x slower
   infer-closure-const-then-mov-no-inline             3.6418+-0.1629            3.5840+-0.0604          might be 1.0161x faster
   infer-closure-const-then-mov                      18.6453+-0.5731           18.5856+-0.5846        
   infer-closure-const-then-put-to-scope-no-inline   
                                                     10.7996+-0.1181     ?     10.8659+-0.2430        ?
   infer-closure-const-then-put-to-scope             22.9692+-0.5785           22.3600+-0.3925          might be 1.0272x faster
   infer-closure-const-then-reenter-no-inline   
                                                     44.8476+-0.6212           44.7841+-0.4210        
   infer-closure-const-then-reenter                  22.7558+-0.4858     ?     23.2394+-0.7274        ? might be 1.0212x slower
   infer-constant-global-property                     3.3704+-0.0432     ?      3.3928+-0.0609        ?
   infer-constant-property                            2.6177+-0.0235     ?      2.7779+-0.2446        ? might be 1.0612x slower
   infer-one-time-closure-ten-vars                    7.8377+-0.3884     ?      7.9692+-0.5299        ? might be 1.0168x slower
   infer-one-time-closure-two-vars                    7.3498+-0.0752     ?      7.4298+-0.3353        ? might be 1.0109x slower
   infer-one-time-closure                             7.5201+-0.4085            7.0848+-0.1613          might be 1.0614x faster
   infer-one-time-deep-closure                       10.9701+-0.2998           10.7126+-0.2289          might be 1.0240x faster
   inline-arguments-access                            3.5844+-0.1538     ?      3.6664+-0.1790        ? might be 1.0229x slower
   inline-arguments-aliased-access                    3.6736+-0.2317            3.6265+-0.0557          might be 1.0130x faster
   inline-arguments-local-escape                      3.9170+-0.3672            3.7670+-0.2051          might be 1.0398x faster
   inline-get-scoped-var                              4.5165+-0.1154     ?      4.5360+-0.1271        ?
   inlined-put-by-id-transition                       9.2961+-0.8185     ?      9.4428+-0.5341        ? might be 1.0158x slower
   inlined-put-by-val-with-string-transition   
                                                     42.0168+-1.1972     ?     43.7844+-3.5313        ? might be 1.0421x slower
   inlined-put-by-val-with-symbol-transition   
                                                     42.3346+-1.3820           42.2761+-0.9862        
   int-or-other-abs-then-get-by-val                   4.7492+-0.3413            4.4778+-0.1117          might be 1.0606x faster
   int-or-other-abs-zero-then-get-by-val             15.8073+-0.5929           15.7552+-0.5238        
   int-or-other-add-then-get-by-val                   4.1774+-0.0633     ^      4.0304+-0.0389        ^ definitely 1.0365x faster
   int-or-other-add                                   4.9076+-0.0689     ?      4.9833+-0.2463        ? might be 1.0154x slower
   int-or-other-div-then-get-by-val                   3.7598+-0.0785            3.7453+-0.0733        
   int-or-other-max-then-get-by-val                   3.8940+-0.0651     ?      3.9060+-0.0802        ?
   int-or-other-min-then-get-by-val                   3.8104+-0.0898     ?      3.8372+-0.1706        ?
   int-or-other-mod-then-get-by-val                   3.8776+-0.9246            3.6039+-0.2247          might be 1.0760x faster
   int-or-other-mul-then-get-by-val                   3.6250+-0.0859            3.6041+-0.0287        
   int-or-other-neg-then-get-by-val                   4.0274+-0.0680            4.0029+-0.0750        
   int-or-other-neg-zero-then-get-by-val             15.2208+-0.2043     ?     15.3367+-0.2612        ?
   int-or-other-sub-then-get-by-val                   4.7621+-1.3515            4.0442+-0.0642          might be 1.1775x faster
   int-or-other-sub                                   3.4206+-0.0175     ?      3.4476+-0.0586        ?
   int-overflow-local                                 4.0792+-0.0654            4.0475+-0.0822        
   Int16Array-alloc-long-lived                       47.2630+-1.6321           46.9967+-1.4819        
   Int16Array-bubble-sort-with-byteLength            17.3005+-0.8974           17.1313+-0.4104        
   Int16Array-bubble-sort                            16.9147+-0.4615           16.5849+-0.3364          might be 1.0199x faster
   Int16Array-load-int-mul                            1.4391+-0.0702            1.4312+-0.0443        
   Int16Array-to-Int32Array-set                      56.8430+-20.1768          44.3498+-0.8899          might be 1.2817x faster
   Int32Array-alloc-large                            12.1926+-0.8485     ?     12.3728+-0.3810        ? might be 1.0148x slower
   Int32Array-alloc-long-lived                       55.6529+-1.1868           55.0514+-1.1829          might be 1.0109x faster
   Int32Array-alloc                                   3.2221+-0.7695            2.8369+-0.1858          might be 1.1358x faster
   Int32Array-Int8Array-view-alloc                    5.9669+-0.1284     ?      6.1463+-0.3031        ? might be 1.0301x slower
   int52-spill                                        4.5905+-0.1678            4.5609+-0.1835        
   Int8Array-alloc-long-lived                        41.4351+-1.1068     ?     41.4825+-1.4119        ?
   Int8Array-load-with-byteLength                     3.4350+-0.2105            3.3689+-0.0553          might be 1.0196x faster
   Int8Array-load                                     3.3622+-0.0729     ?      3.4219+-0.1065        ? might be 1.0178x slower
   integer-divide                                    10.3889+-0.1671     ?     10.4047+-0.1493        ?
   integer-modulo                                     1.6092+-0.0525     ?      1.7135+-0.1371        ? might be 1.0648x slower
   is-boolean-fold-tricky                             3.7952+-0.1001            3.7493+-0.0417          might be 1.0123x faster
   is-boolean-fold                                    2.7310+-0.1774            2.6745+-0.0739          might be 1.0211x faster
   is-function-fold-tricky-internal-function   
                                                      9.6697+-0.1846     ^      9.3421+-0.1039        ^ definitely 1.0351x faster
   is-function-fold-tricky                            4.1133+-0.1596     ?      4.1262+-0.1597        ?
   is-function-fold                                   2.6356+-0.0242     ?      2.6606+-0.0399        ?
   is-number-fold-tricky                              3.9150+-0.0597     ?      4.0237+-0.1168        ? might be 1.0278x slower
   is-number-fold                                     2.8237+-0.2890            2.6457+-0.0643          might be 1.0673x faster
   is-object-or-null-fold-functions                   2.6680+-0.0198            2.6405+-0.0337          might be 1.0104x faster
   is-object-or-null-fold-less-tricky                 4.1605+-0.2565     ?      4.3308+-0.3946        ? might be 1.0409x slower
   is-object-or-null-fold-tricky                      4.8619+-0.2009            4.7811+-0.0863          might be 1.0169x faster
   is-object-or-null-fold                             2.8720+-0.5044            2.6563+-0.0468          might be 1.0812x faster
   is-object-or-null-trickier-function                4.1263+-0.2185     ?      4.2554+-0.4450        ? might be 1.0313x slower
   is-object-or-null-trickier-internal-function   
                                                      9.7037+-0.1097     ?      9.9784+-0.4098        ? might be 1.0283x slower
   is-object-or-null-tricky-function                  4.0859+-0.1057            3.9906+-0.0592          might be 1.0239x faster
   is-object-or-null-tricky-internal-function   
                                                      7.6077+-0.5790            7.2156+-0.0550          might be 1.0543x faster
   is-string-fold-tricky                              4.1620+-0.4107            3.9545+-0.0854          might be 1.0525x faster
   is-string-fold                                     2.6166+-0.0221     ?      2.6217+-0.0314        ?
   is-undefined-fold-tricky                           3.3550+-0.0349            3.3256+-0.0856        
   is-undefined-fold                                  2.7866+-0.2652            2.6118+-0.0334          might be 1.0670x faster
   JSONP-negative-0                                   0.2552+-0.0288            0.2481+-0.0087          might be 1.0287x faster
   large-int-captured                                 4.2205+-0.3414            4.0890+-0.1852          might be 1.0322x faster
   large-int-neg                                     14.1271+-0.5233     ?     14.2442+-0.4001        ?
   large-int                                         13.3140+-0.3874           13.1909+-0.5799        
   load-varargs-elimination                          20.3296+-0.3462     ?     20.4649+-0.2723        ?
   logical-not-weird-types                            2.9827+-0.0371     ?      3.0428+-0.0780        ? might be 1.0201x slower
   logical-not                                        4.3944+-0.0445     ?      4.4736+-0.2007        ? might be 1.0180x slower
   lots-of-fields                                     8.8457+-0.2121     !      9.7119+-0.4546        ! definitely 1.0979x slower
   make-indexed-storage                               2.8498+-0.1140     ?      2.8546+-0.2331        ?
   make-rope-cse                                      3.6681+-0.0996            3.6257+-0.0853          might be 1.0117x faster
   marsaglia-larger-ints                             32.3426+-0.9767           31.7346+-0.5387          might be 1.0192x faster
   marsaglia-osr-entry                               21.1767+-0.5042     ?     21.7398+-0.8062        ? might be 1.0266x slower
   math-with-out-of-bounds-array-values              21.2525+-0.3417     ?     21.5648+-0.3727        ? might be 1.0147x slower
   max-boolean                                        2.5870+-0.0218            2.5854+-0.0320        
   method-on-number                                  15.4821+-0.1861     ?     15.7819+-0.4661        ? might be 1.0194x slower
   min-boolean                                        2.6347+-0.0644            2.5722+-0.0240          might be 1.0243x faster
   minus-boolean-double                               3.0699+-0.0281            3.0576+-0.0280        
   minus-boolean                                      2.3146+-0.0541     ?      2.3328+-0.0375        ?
   misc-strict-eq                                    28.5292+-0.7565     ?     28.8959+-1.0290        ? might be 1.0129x slower
   mod-boolean-double                                11.0106+-0.1432     ?     11.2087+-0.4314        ? might be 1.0180x slower
   mod-boolean                                        8.2936+-0.1792            8.2680+-0.0887        
   mul-boolean-double                                 3.6155+-0.0328            3.6015+-0.0511        
   mul-boolean                                        2.7650+-0.0355     ?      2.8200+-0.0727        ? might be 1.0199x slower
   neg-boolean                                        3.0625+-0.0486     ?      3.1330+-0.0912        ? might be 1.0230x slower
   negative-zero-divide                               0.3619+-0.0267            0.3601+-0.0578        
   negative-zero-modulo                               0.3296+-0.0213     ?      0.3776+-0.1016        ? might be 1.1456x slower
   negative-zero-negate                               0.3364+-0.0327            0.3330+-0.0187          might be 1.0103x faster
   nested-function-parsing                           44.9096+-0.4937     ?     45.2174+-0.7220        ?
   new-array-buffer-dead                             87.2598+-0.8165     ?     87.9518+-1.1456        ?
   new-array-buffer-push                              6.2701+-0.3388            6.1367+-0.2126          might be 1.0217x faster
   new-array-dead                                    15.7499+-0.4377           15.2573+-0.6562          might be 1.0323x faster
   new-array-push                                     3.4451+-0.0845     ?      3.5808+-0.1713        ? might be 1.0394x slower
   no-inline-constructor                             31.4798+-0.7483           31.2064+-0.7996        
   number-test                                        3.0825+-0.1460     ?      3.1673+-0.3014        ? might be 1.0275x slower
   object-closure-call                                5.2546+-0.2382            5.1404+-0.2353          might be 1.0222x faster
   object-get-own-property-symbols-on-large-array   
                                                      4.2432+-0.4389            4.2310+-0.1665        
   object-test                                        2.7614+-0.0383     ?      2.8503+-0.2657        ? might be 1.0322x slower
   obvious-sink-pathology-taken                      98.2146+-0.4998     ?     98.9673+-0.9870        ?
   obvious-sink-pathology                            94.6472+-2.9624           94.3766+-1.0083        
   obviously-elidable-new-object                     28.8225+-1.1079           28.6124+-0.7996        
   plus-boolean-arith                                 2.4198+-0.0909            2.3831+-0.0764          might be 1.0154x faster
   plus-boolean-double                                3.2399+-0.2349            3.0991+-0.0665          might be 1.0454x faster
   plus-boolean                                       2.5147+-0.0202     ?      2.5215+-0.0824        ?
   poly-chain-access-different-prototypes-simple   
                                                      3.2129+-0.0339     ?      3.2605+-0.1140        ? might be 1.0148x slower
   poly-chain-access-different-prototypes             3.4951+-0.4574            3.2688+-0.0383          might be 1.0692x faster
   poly-chain-access-simpler                          3.2435+-0.1635     ?      3.2728+-0.0668        ?
   poly-chain-access                                  3.4103+-0.3115            3.2807+-0.0745          might be 1.0395x faster
   poly-stricteq                                     50.2519+-0.7779     ?     54.5121+-10.9504       ? might be 1.0848x slower
   polymorphic-array-call                             1.2140+-0.0656     ?      1.2923+-0.0578        ? might be 1.0645x slower
   polymorphic-get-by-id                              2.8390+-0.0945            2.8358+-0.0633        
   polymorphic-put-by-id                             28.4326+-0.8798     ?     28.8254+-1.6172        ? might be 1.0138x slower
   polymorphic-put-by-val-with-string                28.4671+-1.2600           28.1255+-0.8196          might be 1.0121x faster
   polymorphic-put-by-val-with-symbol                28.3532+-0.7375           28.0122+-0.7486          might be 1.0122x faster
   polymorphic-structure                             13.3037+-0.7050           12.6111+-0.4073          might be 1.0549x faster
   polyvariant-monomorphic-get-by-id                  7.0004+-0.7264     ?      7.0975+-0.9503        ? might be 1.0139x slower
   proto-getter-access                                8.3029+-0.2266     ?      8.3607+-0.1487        ?
   prototype-access-with-mutating-prototype           5.3680+-0.0955     ?      5.4576+-0.1688        ? might be 1.0167x slower
   put-by-id-replace-and-transition                   8.2173+-0.5292            7.7328+-0.6229          might be 1.0627x faster
   put-by-id-slightly-polymorphic                     2.6937+-0.1981     ?      2.8078+-0.3419        ? might be 1.0424x slower
   put-by-id                                          9.6949+-0.3689     ?     10.5410+-1.5546        ? might be 1.0873x slower
   put-by-val-direct                                  0.3545+-0.0434     ?      0.4512+-0.1937        ? might be 1.2729x slower
   put-by-val-large-index-blank-indexing-type   
                                                      5.6454+-0.4484            5.4767+-0.0938          might be 1.0308x faster
   put-by-val-machine-int                             2.6420+-0.1464            2.5577+-0.1053          might be 1.0329x faster
   put-by-val-with-string-replace-and-transition   
                                                     10.3070+-0.5493     ?     10.5470+-0.5860        ? might be 1.0233x slower
   put-by-val-with-string-slightly-polymorphic   
                                                      3.0268+-0.3346            2.8661+-0.0590          might be 1.0561x faster
   put-by-val-with-string                            10.4149+-0.3574     ?     11.4967+-1.8582        ? might be 1.1039x slower
   put-by-val-with-symbol-replace-and-transition   
                                                     12.0017+-0.4439           11.9598+-0.7083        
   put-by-val-with-symbol-slightly-polymorphic   
                                                      3.1986+-0.0968            3.1432+-0.0301          might be 1.0176x faster
   put-by-val-with-symbol                            10.4873+-0.4274           10.3170+-0.3656          might be 1.0165x faster
   rare-osr-exit-on-local                            13.6107+-0.1393           13.4398+-0.2670          might be 1.0127x faster
   register-pressure-from-osr                        17.6605+-0.5441     ^     16.7320+-0.3334        ^ definitely 1.0555x faster
   repeat-multi-get-by-offset                        21.9933+-0.4557           20.9397+-0.7693          might be 1.0503x faster
   setter-prototype                                   7.5709+-0.0595     ?      7.7887+-0.2615        ? might be 1.0288x slower
   setter                                             5.7907+-0.7243            5.5689+-0.5711          might be 1.0398x faster
   simple-activation-demo                            24.6304+-0.5532           24.4910+-1.1713        
   simple-getter-access                              11.2278+-1.1876           10.7763+-0.2052          might be 1.0419x faster
   simple-poly-call-nested                            8.6622+-0.5060     ?      8.8309+-0.4756        ? might be 1.0195x slower
   simple-poly-call                                   1.3475+-0.2147            1.3026+-0.0981          might be 1.0345x faster
   sin-boolean                                       21.1088+-1.5999           20.7724+-1.3556          might be 1.0162x faster
   singleton-scope                                   55.6290+-0.6432     ?     56.3892+-0.6442        ? might be 1.0137x slower
   sink-function                                     10.1957+-0.8361     ?     11.5894+-2.5810        ? might be 1.1367x slower
   sink-huge-activation                              17.2687+-0.5716           16.9765+-0.8272          might be 1.0172x faster
   sinkable-new-object-dag                           54.1818+-2.3263     ?     55.2975+-2.7790        ? might be 1.0206x slower
   sinkable-new-object-taken                         44.2835+-1.1100     ?     44.6409+-0.9252        ?
   sinkable-new-object                               29.9977+-0.5132           29.8000+-0.7123        
   slow-array-profile-convergence                     2.4892+-0.1482            2.4558+-0.0531          might be 1.0136x faster
   slow-convergence                                   2.3258+-0.0129     ?      2.4157+-0.1944        ? might be 1.0387x slower
   slow-ternaries                                    18.6867+-2.7090           17.7903+-1.1302          might be 1.0504x faster
   sorting-benchmark                                 16.9830+-0.6257           16.7650+-0.4607          might be 1.0130x faster
   sparse-conditional                                 1.1466+-0.0255     ?      1.1566+-0.0595        ?
   splice-to-remove                                  12.1070+-0.2887     ?     12.1998+-0.2102        ?
   string-char-code-at                               13.0139+-0.2578           12.8115+-0.2038          might be 1.0158x faster
   string-concat-object                               2.2356+-0.1212            2.2006+-0.1506          might be 1.0159x faster
   string-concat-pair-object                          2.2146+-0.1225     ?      2.4526+-0.3699        ? might be 1.1075x slower
   string-concat-pair-simple                          9.2794+-0.3734     ?      9.9085+-0.6272        ? might be 1.0678x slower
   string-concat-simple                               9.9892+-0.4472            9.6035+-0.4529          might be 1.0402x faster
   string-cons-repeat                                 7.0335+-0.7329            6.6205+-0.6618          might be 1.0624x faster
   string-cons-tower                                  6.7029+-0.3549     ?      6.7058+-0.3042        ?
   string-equality                                   14.8603+-0.2069           14.8358+-0.1479        
   string-get-by-val-big-char                         6.5475+-0.1068            6.5198+-0.1239        
   string-get-by-val-out-of-bounds-insane             3.1256+-0.0655     ?      3.1882+-0.2827        ? might be 1.0200x slower
   string-get-by-val-out-of-bounds                    3.8898+-0.0840            3.8773+-0.0511        
   string-get-by-val                                  2.8253+-0.1511            2.7980+-0.0312        
   string-hash                                        1.8631+-0.0636            1.8445+-0.0761          might be 1.0101x faster
   string-long-ident-equality                        12.9726+-0.1506     ?     12.9995+-0.2028        ?
   string-out-of-bounds                              10.0300+-0.3182     ?     10.1510+-0.2220        ? might be 1.0121x slower
   string-repeat-arith                               25.8796+-0.4607     !     27.0114+-0.4602        ! definitely 1.0437x slower
   string-sub                                        54.2256+-1.4278     ?     56.4030+-2.2070        ? might be 1.0402x slower
   string-test                                        2.9397+-0.1204            2.8784+-0.1429          might be 1.0213x faster
   string-var-equality                               26.8928+-1.0550           26.1954+-0.2288          might be 1.0266x faster
   structure-hoist-over-transitions                   2.4105+-0.2529            2.3530+-0.1179          might be 1.0244x faster
   substring-concat-weird                            36.1540+-0.9641           35.8641+-1.0046        
   substring-concat                                  40.0718+-1.9293     ?     40.7859+-1.7083        ? might be 1.0178x slower
   substring                                         45.4316+-1.1906     ?     46.0712+-1.0491        ? might be 1.0141x slower
   switch-char-constant                               2.7558+-0.2119            2.6687+-0.0717          might be 1.0326x faster
   switch-char                                        6.1469+-0.7855            5.4218+-0.2547          might be 1.1337x faster
   switch-constant                                    9.3231+-0.3900            8.7255+-0.7661          might be 1.0685x faster
   switch-string-basic-big-var                       14.2144+-0.2104     ?     14.7147+-0.6433        ? might be 1.0352x slower
   switch-string-basic-big                           15.0564+-0.4078           14.9639+-0.4952        
   switch-string-basic-var                           13.7571+-0.3284           13.6036+-0.4160          might be 1.0113x faster
   switch-string-basic                               12.6897+-0.3405           12.4093+-0.1664          might be 1.0226x faster
   switch-string-big-length-tower-var                17.9904+-0.2933     ?     18.0975+-0.4954        ?
   switch-string-length-tower-var                    13.0660+-0.3670           13.0508+-0.3167        
   switch-string-length-tower                        11.4669+-0.2992     ?     11.6501+-0.2268        ? might be 1.0160x slower
   switch-string-short                               11.2619+-0.1470     ?     11.4160+-0.2373        ? might be 1.0137x slower
   switch                                            10.9872+-0.5257     ?     11.2272+-0.6557        ? might be 1.0218x slower
   tear-off-arguments-simple                          3.1823+-0.1551            3.0855+-0.1438          might be 1.0314x faster
   tear-off-arguments                                 4.0500+-0.0942            4.0186+-0.1247        
   temporal-structure                                12.0714+-0.5155           11.6929+-0.2702          might be 1.0324x faster
   to-int32-boolean                                  12.6377+-0.3849     ?     12.7692+-0.3727        ? might be 1.0104x slower
   try-catch-get-by-val-cloned-arguments             13.7059+-0.2732     ?     14.2403+-0.4656        ? might be 1.0390x slower
   try-catch-get-by-val-direct-arguments              6.3293+-0.1316     ?      6.4584+-0.2735        ? might be 1.0204x slower
   try-catch-get-by-val-scoped-arguments              7.8473+-0.0659            7.5740+-0.2238          might be 1.0361x faster
   typed-array-get-set-by-val-profiling              28.2184+-1.5252           27.4100+-1.0152          might be 1.0295x faster
   undefined-property-access                        224.4266+-1.9747     ^    215.9747+-0.7775        ^ definitely 1.0391x faster
   undefined-test                                     3.0668+-0.1341            3.0042+-0.0866          might be 1.0208x faster
   unprofiled-licm                                   13.6879+-0.2591     ^      9.6975+-0.8975        ^ definitely 1.4115x faster
   varargs-call                                      13.1685+-0.3131     ?     13.3662+-0.5337        ? might be 1.0150x slower
   varargs-construct-inline                          21.8319+-0.5745           21.6925+-0.4184        
   varargs-construct                                 19.7384+-0.2127     ?     19.8718+-0.3292        ?
   varargs-inline                                     8.6916+-0.1746     ?      8.9851+-0.4015        ? might be 1.0338x slower
   varargs-strict-mode                                9.5021+-0.1170     ?      9.7660+-0.7597        ? might be 1.0278x slower
   varargs                                            9.6411+-0.2983            9.6282+-0.3530        
   weird-inlining-const-prop                          2.1598+-0.1052     ?      2.1880+-0.1765        ? might be 1.0131x slower

   <geometric>                                        7.9406+-0.0271            7.9233+-0.0260          might be 1.0022x faster

                                                        TipOfTree             PropTypeInference                                 
AsmBench:
   bigfib.cpp                                       445.6295+-6.3191     ?    456.6078+-6.8338        ? might be 1.0246x slower
   cray.c                                           414.5247+-50.4765         390.4744+-1.3718          might be 1.0616x faster
   dry.c                                            425.0297+-7.1072          419.2015+-6.9705          might be 1.0139x faster
   FloatMM.c                                        680.5083+-1.5857     ?    682.1187+-3.7260        ?
   gcc-loops.cpp                                   3410.4165+-8.8511         3405.7317+-6.4612        
   n-body.c                                         820.9221+-1.7417     ?    821.1677+-3.5436        ?
   Quicksort.c                                      405.4785+-2.6890          404.4405+-4.5563        
   stepanov_container.cpp                          3469.2711+-13.9779    ?   3490.1951+-22.9585       ?
   Towers.c                                         233.9452+-4.3522          232.3153+-0.8717        

   <geometric>                                      715.0234+-8.1584          711.5162+-2.2886          might be 1.0049x faster

                                                        TipOfTree             PropTypeInference                                 
CompressionBench:
   huffman                                           61.1774+-0.9324           61.1209+-1.1611        
   arithmetic-simple                                282.7768+-29.9651         269.4106+-0.7516          might be 1.0496x faster
   arithmetic-precise                               242.4166+-2.7698          241.3868+-1.4367        
   arithmetic-complex-precise                       243.4485+-4.5442          242.0727+-1.4858        
   arithmetic-precise-order-0                       278.8811+-1.4633          277.8895+-0.3913        
   arithmetic-precise-order-1                       294.3374+-1.2475          294.1070+-0.8609        
   arithmetic-precise-order-2                       344.1716+-3.7321     ?    344.7427+-6.4314        ?
   arithmetic-simple-order-1                        317.0632+-0.7942     ?    317.1623+-2.6656        ?
   arithmetic-simple-order-2                        366.9575+-4.1691          366.2957+-4.0739        
   lz-string                                        315.7057+-3.1909          311.3489+-3.9630          might be 1.0140x faster

   <geometric>                                      252.4959+-2.9546          250.6809+-0.7604          might be 1.0072x faster

                                                        TipOfTree             PropTypeInference                                 
Geomean of preferred means:
   <scaled-result>                                   51.0509+-0.1883     ^     49.6831+-0.1183        ^ definitely 1.0275x faster
Comment 32 Filip Pizlo 2015-09-16 16:04:00 PDT
Created attachment 261334 [details]
work in progress

This is already showing huge speed-ups but I still have bugs to fix.
Comment 33 Filip Pizlo 2015-09-17 13:53:49 PDT
Created attachment 261417 [details]
the patch
Comment 34 WebKit Commit Bot 2015-09-17 13:56:43 PDT
Attachment 261417 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:2043:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:2063:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashTable.h:289:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:41:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:42:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:43:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:1120:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.h:215:  The parameter name "locker" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/InferredType.h:218:  The parameter name "locker" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:500:  Alphabetical sorting problem. "runtime/InferredType.cpp" should be before "runtime/InferredValue.cpp".  [list/order] [5]
Total errors found: 12 in 67 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 35 Geoffrey Garen 2015-09-17 14:33:24 PDT
Comment on attachment 261417 [details]
the patch

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

r=me

Please fix EWS.

> Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:5247
> +        std::unique_ptr<GPRTemporary> structure;

Can we just use WTF::Optional here?

> Source/JavaScriptCore/runtime/InferredTypeTable.h:36
> +// destructor and makes lifetype easier to manage. For example, since it's a cell, we know that this thing

lifetype=>lifetime

> Source/JavaScriptCore/runtime/InferredTypeTable.h:92
> +    // (transition), then absence means bottom. If we're storing to an existing property (replace, then

(replace => (replace)
Comment 36 Filip Pizlo 2015-09-17 14:36:12 PDT
(In reply to comment #35)
> Comment on attachment 261417 [details]
> the patch
> 
> View in context:
> https://bugs.webkit.org/attachment.cgi?id=261417&action=review
> 
> r=me
> 
> Please fix EWS.

Working on it!

> 
> > Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:5247
> > +        std::unique_ptr<GPRTemporary> structure;
> 
> Can we just use WTF::Optional here?

I'll try!

> 
> > Source/JavaScriptCore/runtime/InferredTypeTable.h:36
> > +// destructor and makes lifetype easier to manage. For example, since it's a cell, we know that this thing
> 
> lifetype=>lifetime

Fixed.

> 
> > Source/JavaScriptCore/runtime/InferredTypeTable.h:92
> > +    // (transition), then absence means bottom. If we're storing to an existing property (replace, then
> 
> (replace => (replace)

Fixed.
Comment 37 Filip Pizlo 2015-09-17 14:39:50 PDT
Created attachment 261429 [details]
the patch

Fixes for EWS and to address ggaren's review.
Comment 38 WebKit Commit Bot 2015-09-17 14:42:40 PDT
Attachment 261429 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:2043:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:2063:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashTable.h:289:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:41:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:42:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:43:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:1120:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.h:215:  The parameter name "locker" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/InferredType.h:218:  The parameter name "locker" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:500:  Alphabetical sorting problem. "runtime/InferredType.cpp" should be before "runtime/InferredValue.cpp".  [list/order] [5]
Total errors found: 12 in 67 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 39 Filip Pizlo 2015-09-17 21:34:59 PDT
Created attachment 261483 [details]
the patch

More build fixing.
Comment 40 WebKit Commit Bot 2015-09-17 21:38:31 PDT
Attachment 261483 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:2043:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:2063:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashTable.h:289:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:41:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:42:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:43:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:1120:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.h:215:  The parameter name "locker" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/InferredType.h:218:  The parameter name "locker" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:500:  Alphabetical sorting problem. "runtime/InferredType.cpp" should be before "runtime/InferredValue.cpp".  [list/order] [5]
Total errors found: 12 in 67 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 41 Filip Pizlo 2015-09-17 22:12:28 PDT
Created attachment 261488 [details]
the patch

Fixed 32-bit.
Comment 42 WebKit Commit Bot 2015-09-17 22:14:18 PDT
Attachment 261488 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:2043:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:2063:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashTable.h:289:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:41:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:42:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:43:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:1120:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.h:215:  The parameter name "locker" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/InferredType.h:218:  The parameter name "locker" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:500:  Alphabetical sorting problem. "runtime/InferredType.cpp" should be before "runtime/InferredValue.cpp".  [list/order] [5]
Total errors found: 12 in 67 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 43 Filip Pizlo 2015-09-21 12:09:40 PDT
Created attachment 261675 [details]
patch for landing
Comment 44 Filip Pizlo 2015-09-21 12:10:23 PDT
(In reply to comment #43)
> Created attachment 261675 [details]
> patch for landing

Actually, I probably have a few more style things to fix.
Comment 45 WebKit Commit Bot 2015-09-21 12:12:36 PDT
Attachment 261675 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:2043:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:2063:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashTable.h:289:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:41:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:42:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:43:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:1120:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.h:215:  The parameter name "locker" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/InferredType.h:218:  The parameter name "locker" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:505:  Alphabetical sorting problem. "runtime/InferredType.cpp" should be before "runtime/InferredValue.cpp".  [list/order] [5]
Total errors found: 12 in 78 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 46 Filip Pizlo 2015-09-21 12:13:47 PDT
(In reply to comment #36)
> (In reply to comment #35)
> > Comment on attachment 261417 [details]
> > the patch
> > 
> > View in context:
> > https://bugs.webkit.org/attachment.cgi?id=261417&action=review
> > 
> > r=me
> > 
> > Please fix EWS.
> 
> Working on it!
> 
> > 
> > > Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:5247
> > > +        std::unique_ptr<GPRTemporary> structure;
> > 
> > Can we just use WTF::Optional here?
> 
> I'll try!

Seems like WTF::Optional is a bit less nice than std::unique_ptr here.  The problem is that GPRTemporary and friends don't understand move semantics.

> 
> > 
> > > Source/JavaScriptCore/runtime/InferredTypeTable.h:36
> > > +// destructor and makes lifetype easier to manage. For example, since it's a cell, we know that this thing
> > 
> > lifetype=>lifetime
> 
> Fixed.
> 
> > 
> > > Source/JavaScriptCore/runtime/InferredTypeTable.h:92
> > > +    // (transition), then absence means bottom. If we're storing to an existing property (replace, then
> > 
> > (replace => (replace)
> 
> Fixed.
Comment 47 Filip Pizlo 2015-09-21 13:06:02 PDT
Performance numbers of rebased/fixed patch:


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on shakezilla (MacBookPro11,3).

VMs tested:
"TipOfTree" at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r190059)
"PropTypeInference" at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r190059)

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             PropTypeInference                                 
SunSpider:
   3d-cube                                            4.7428+-0.6027     ?      4.7881+-0.3438        ?
   3d-morph                                           5.3899+-0.4131            5.2757+-0.3096          might be 1.0216x faster
   3d-raytrace                                        5.1612+-0.1125     ?      5.3435+-0.3846        ? might be 1.0353x slower
   access-binary-trees                                2.0806+-0.0929     ?      2.0895+-0.0980        ?
   access-fannkuch                                    5.6501+-0.3192            5.5453+-0.3887          might be 1.0189x faster
   access-nbody                                       2.4732+-0.1931     ?      2.6016+-0.2697        ? might be 1.0519x slower
   access-nsieve                                      2.9972+-0.0649     ?      3.0012+-0.0459        ?
   bitops-3bit-bits-in-byte                           1.1775+-0.0642     ?      1.1804+-0.0881        ?
   bitops-bits-in-byte                                3.4649+-0.6345            3.1764+-0.0295          might be 1.0909x faster
   bitops-bitwise-and                                 2.0213+-0.0670            2.0000+-0.0557          might be 1.0107x faster
   bitops-nsieve-bits                                 2.9753+-0.0879            2.9705+-0.0323        
   controlflow-recursive                              2.2998+-0.1100     ?      2.3708+-0.2268        ? might be 1.0309x slower
   crypto-aes                                         4.0861+-0.2577            3.8636+-0.1042          might be 1.0576x faster
   crypto-md5                                         2.4433+-0.0825     ?      2.4772+-0.0490        ? might be 1.0139x slower
   crypto-sha1                                        2.4228+-0.1835     ?      2.5243+-0.1973        ? might be 1.0419x slower
   date-format-tofte                                  6.8379+-0.5738     ?      7.0383+-0.3589        ? might be 1.0293x slower
   date-format-xparb                                  4.6060+-0.1854     ?      4.6276+-0.1156        ?
   math-cordic                                        2.8149+-0.0647            2.7980+-0.0810        
   math-partial-sums                                  5.1778+-1.0129            4.8067+-0.1006          might be 1.0772x faster
   math-spectral-norm                                 1.8640+-0.0211     ?      1.9270+-0.0778        ? might be 1.0338x slower
   regexp-dna                                         6.4928+-0.3693            6.4168+-0.2384          might be 1.0118x faster
   string-base64                                      4.6406+-0.2646     ?      4.6528+-0.3587        ?
   string-fasta                                       5.8877+-0.2278            5.8011+-0.1346          might be 1.0149x faster
   string-tagcloud                                    7.8036+-0.1621     ?      7.8427+-0.0889        ?
   string-unpack-code                                18.6976+-0.4090     ^     17.8575+-0.2819        ^ definitely 1.0470x faster
   string-validate-input                              4.6159+-0.2063     ?      4.7290+-0.4749        ? might be 1.0245x slower

   <arithmetic>                                       4.5702+-0.0687            4.5271+-0.0522          might be 1.0095x faster

                                                        TipOfTree             PropTypeInference                                 
LongSpider:
   3d-cube                                          808.3922+-7.5296          800.5357+-7.1386        
   3d-morph                                        1496.5264+-29.6262        1484.9765+-5.8968        
   3d-raytrace                                      594.7610+-12.5181         594.3466+-8.0207        
   access-binary-trees                              802.4530+-6.2678     ?    803.2994+-7.4199        ?
   access-fannkuch                                  273.5359+-4.7797     ?    274.4207+-5.5666        ?
   access-nbody                                     508.0145+-11.4747         506.0303+-1.9341        
   access-nsieve                                    359.5817+-1.8110     ?    362.9360+-10.1494       ?
   bitops-3bit-bits-in-byte                          34.1751+-0.5839           33.5027+-0.1939          might be 1.0201x faster
   bitops-bits-in-byte                               76.3990+-1.9102           74.6802+-1.5706          might be 1.0230x faster
   bitops-nsieve-bits                               406.2599+-15.1556         400.8208+-3.5662          might be 1.0136x faster
   controlflow-recursive                            423.9346+-2.5188     ?    425.5837+-6.3849        ?
   crypto-aes                                       565.1296+-2.4617          555.4758+-12.5875         might be 1.0174x faster
   crypto-md5                                       431.8547+-2.3074     ?    444.2644+-29.7342       ? might be 1.0287x slower
   crypto-sha1                                      640.2647+-16.0862         627.4917+-13.6221         might be 1.0204x faster
   date-format-tofte                                500.1413+-6.8873          492.5465+-4.7863          might be 1.0154x faster
   date-format-xparb                                657.0205+-2.5252          653.5280+-3.7157        
   hash-map                                         151.1997+-1.0504          149.0120+-1.4363          might be 1.0147x faster
   math-cordic                                      475.0708+-1.4689     ?    480.3130+-15.2602       ? might be 1.0110x slower
   math-partial-sums                                460.3826+-1.7658          457.7976+-10.3462       
   math-spectral-norm                               546.4360+-2.1050          546.4219+-1.3553        
   string-base64                                    349.1503+-5.0129     ?    351.6608+-11.0910       ?
   string-fasta                                     361.1235+-1.0005     ?    363.8851+-3.8400        ?
   string-tagcloud                                  174.9200+-2.7001     ?    175.9580+-3.8409        ?

   <geometric>                                      383.3689+-1.2943          382.0263+-2.6859          might be 1.0035x faster

                                                        TipOfTree             PropTypeInference                                 
V8Spider:
   crypto                                            48.5835+-2.0303           47.0136+-0.8406          might be 1.0334x faster
   deltablue                                         89.0227+-5.2123     ^     78.6388+-2.1744        ^ definitely 1.1320x faster
   earley-boyer                                      40.8271+-1.4930     ?     42.6728+-1.9986        ? might be 1.0452x slower
   raytrace                                          32.2310+-1.2260     ?     32.3558+-2.6326        ?
   regexp                                            63.6097+-2.7093           62.5983+-1.9897          might be 1.0162x faster
   richards                                          63.0675+-1.7312     ^     53.1778+-1.0904        ^ definitely 1.1860x faster
   splay                                             33.5918+-1.7520     ?     35.6288+-1.3411        ? might be 1.0606x slower

   <geometric>                                       49.8383+-0.8573           48.1899+-1.2272          might be 1.0342x faster

                                                        TipOfTree             PropTypeInference                                 
Octane:
   encrypt                                           0.16956+-0.00120    ^     0.16388+-0.00210       ^ definitely 1.0346x faster
   decrypt                                           3.02277+-0.01049    ^     2.89974+-0.01705       ^ definitely 1.0424x faster
   deltablue                                x2       0.16029+-0.00564          0.14390+-0.01596         might be 1.1139x faster
   earley                                            0.30094+-0.00498    ?     0.30431+-0.00306       ? might be 1.0112x slower
   boyer                                             4.31720+-0.08120    ?     4.62621+-0.72195       ? might be 1.0716x slower
   navier-stokes                            x2       4.81361+-0.03433          4.80543+-0.02804       
   raytrace                                 x2       0.89267+-0.00633    ^     0.85912+-0.00810       ^ definitely 1.0391x faster
   richards                                 x2       0.10694+-0.00129    ^     0.08817+-0.00053       ^ definitely 1.2129x faster
   splay                                    x2       0.32715+-0.00327    ?     0.32947+-0.00407       ?
   regexp                                   x2      25.07377+-0.40042         24.77031+-0.19539         might be 1.0123x faster
   pdfjs                                    x2      37.08916+-0.55000         36.33195+-0.24799         might be 1.0208x faster
   mandreel                                 x2      42.78122+-0.80838         42.12141+-0.35107         might be 1.0157x faster
   gbemu                                    x2      32.38523+-0.11773    ^    31.13536+-0.54316       ^ definitely 1.0401x faster
   closure                                           0.57394+-0.00971    ?     0.57419+-0.00362       ?
   jquery                                            7.09461+-0.03367    !     7.26501+-0.05984       ! definitely 1.0240x slower
   box2d                                    x2      10.07767+-0.11998    ^     9.05855+-0.06708       ^ definitely 1.1125x faster
   zlib                                     x2     380.47413+-13.08656   ?   385.03022+-10.23500      ? might be 1.0120x slower
   typescript                               x2     632.98865+-6.10096    ?   646.79846+-8.86919       ? might be 1.0218x slower

   <geometric>                                       5.48956+-0.02837    ^     5.31410+-0.05270       ^ definitely 1.0330x faster

                                                        TipOfTree             PropTypeInference                                 
Kraken:
   ai-astar                                          219.049+-1.552      ^     126.233+-2.397         ^ definitely 1.7353x faster
   audio-beat-detection                               50.545+-0.246             50.129+-0.531         
   audio-dft                                          96.274+-3.235             95.157+-0.445           might be 1.0117x faster
   audio-fft                                          35.131+-0.434      ?      35.233+-1.092         ?
   audio-oscillator                                   60.786+-0.942      ^      55.981+-1.139         ^ definitely 1.0858x faster
   imaging-darkroom                                   60.560+-0.176      ^      59.760+-0.268         ^ definitely 1.0134x faster
   imaging-desaturate                                 48.457+-0.345      ?      48.818+-2.413         ?
   imaging-gaussian-blur                              85.253+-0.780             85.098+-0.632         
   json-parse-financial                               39.249+-1.673             38.007+-0.904           might be 1.0327x faster
   json-stringify-tinderbox                           22.360+-0.562      ?      22.455+-1.023         ?
   stanford-crypto-aes                                40.038+-1.131      ?      40.597+-1.497         ? might be 1.0140x slower
   stanford-crypto-ccm                                36.181+-2.567             35.970+-1.110         
   stanford-crypto-pbkdf2                             92.340+-0.794      ?      95.338+-3.119         ? might be 1.0325x slower
   stanford-crypto-sha256-iterative                   36.227+-0.734             36.172+-0.763         

   <arithmetic>                                       65.889+-0.576      ^      58.925+-0.242         ^ definitely 1.1182x faster

                                                        TipOfTree             PropTypeInference                                 
JSRegress:
   abc-forward-loop-equal                            29.2559+-0.5414           29.1943+-0.8502        
   abc-postfix-backward-loop                         29.2917+-0.9783           29.2782+-0.7544        
   abc-simple-backward-loop                          29.0842+-0.5607     ?     29.3294+-0.4276        ?
   abc-simple-forward-loop                           28.9221+-1.0819     ?     29.1674+-0.7069        ?
   abc-skippy-loop                                   21.1955+-0.8817           20.9233+-0.4589          might be 1.0130x faster
   abs-boolean                                        2.5147+-0.1280            2.4414+-0.1156          might be 1.0300x faster
   adapt-to-double-divide                            16.2664+-0.3687     ?     16.6285+-0.6643        ? might be 1.0223x slower
   aliased-arguments-getbyval                         1.1921+-0.1033     ?      1.3047+-0.3015        ? might be 1.0944x slower
   allocate-big-object                                2.8940+-0.5850            2.5646+-0.2428          might be 1.1284x faster
   arguments-named-and-reflective                    11.0823+-1.4811           10.6854+-0.2848          might be 1.0371x faster
   arguments-out-of-bounds                            9.1888+-0.5045     ?      9.5485+-0.8752        ? might be 1.0391x slower
   arguments-strict-mode                              9.7758+-0.4480            9.5412+-0.1857          might be 1.0246x faster
   arguments                                          8.4133+-0.2543            8.3153+-0.1561          might be 1.0118x faster
   arity-mismatch-inlining                            0.8627+-0.0393     ?      0.8630+-0.0731        ?
   array-access-polymorphic-structure                 5.8049+-0.2512     !      7.3947+-0.8358        ! definitely 1.2739x slower
   array-nonarray-polymorhpic-access                 23.5650+-0.9905     ?     23.6554+-1.1436        ?
   array-prototype-every                             74.6295+-1.0537     ?     75.6181+-1.0107        ? might be 1.0132x slower
   array-prototype-forEach                           75.6641+-2.0051           74.1990+-1.2999          might be 1.0197x faster
   array-prototype-map                               80.1168+-1.1450     ?     80.8711+-0.9698        ?
   array-prototype-reduce                            70.3433+-0.8294     ?     74.7786+-4.4773        ? might be 1.0631x slower
   array-prototype-reduceRight                       71.1724+-1.9850     ?     74.3874+-4.1505        ? might be 1.0452x slower
   array-prototype-some                              76.2527+-1.5043     ?     77.0946+-2.9468        ? might be 1.0110x slower
   array-splice-contiguous                           20.5249+-1.0988     ?     21.8825+-1.3153        ? might be 1.0661x slower
   array-with-double-add                              3.3869+-0.0803            3.3674+-0.0418        
   array-with-double-increment                        3.0929+-0.0882            3.0852+-0.1588        
   array-with-double-mul-add                          4.1794+-0.1136     ?      4.2128+-0.1387        ?
   array-with-double-sum                              3.2036+-0.0660            3.1860+-0.0764        
   array-with-int32-add-sub                           5.6458+-0.0993     ?      5.6866+-0.1320        ?
   array-with-int32-or-double-sum                     3.2581+-0.0858            3.2498+-0.0829        
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     25.4689+-0.3942     ?     26.2404+-1.0540        ? might be 1.0303x slower
   ArrayBuffer-DataView-alloc-long-lived             11.7254+-0.3666     ?     11.9897+-0.2895        ? might be 1.0225x slower
   ArrayBuffer-Int32Array-byteOffset                  3.5431+-0.1337     ?      3.8325+-0.4277        ? might be 1.0817x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     26.0218+-1.6645     ?     26.8368+-1.4875        ? might be 1.0313x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     19.9666+-1.8102           19.1589+-0.4815          might be 1.0422x faster
   ArrayBuffer-Int8Array-alloc-long-lived            11.9658+-1.8782           11.3262+-0.4678          might be 1.0565x faster
   ArrayBuffer-Int8Array-alloc                        9.4832+-0.4530     ?      9.6635+-0.5912        ? might be 1.0190x slower
   arrowfunction-call                                10.8002+-0.6699           10.5736+-0.2023          might be 1.0214x faster
   asmjs_bool_bug                                     7.3823+-0.0788     ?      7.3825+-0.0671        ?
   assign-custom-setter-polymorphic                   2.5249+-0.3004            2.4854+-0.0909          might be 1.0159x faster
   assign-custom-setter                               3.2089+-0.0251     ?      3.4916+-0.4527        ? might be 1.0881x slower
   basic-set                                          7.6571+-0.4739            7.5033+-0.4606          might be 1.0205x faster
   big-int-mul                                        3.5081+-0.0712     ?      3.5909+-0.3403        ? might be 1.0236x slower
   boolean-test                                       3.0339+-0.0730     ?      3.0942+-0.1166        ? might be 1.0199x slower
   branch-fold                                        3.7389+-0.1589            3.5923+-0.0552          might be 1.0408x faster
   branch-on-string-as-boolean                       16.8508+-0.5096     ?     16.9028+-0.8097        ?
   by-val-generic                                     2.8080+-0.7179            2.4610+-0.1043          might be 1.1410x faster
   call-spread-apply                                 28.0340+-2.9220           27.2805+-2.0488          might be 1.0276x faster
   call-spread-call                                  21.3276+-0.5595           21.2303+-0.8187        
   captured-assignments                               0.4249+-0.0288            0.4111+-0.0228          might be 1.0338x faster
   cast-int-to-double                                 5.1431+-0.2211     ?      5.2274+-0.1357        ? might be 1.0164x slower
   cell-argument                                      6.4918+-0.4377            5.8654+-0.3900          might be 1.1068x faster
   cfg-simplify                                       2.8495+-0.0615     ?      2.9009+-0.1126        ? might be 1.0180x slower
   chain-getter-access                                8.3563+-0.2787     ?      8.4617+-0.2886        ? might be 1.0126x slower
   cmpeq-obj-to-obj-other                            13.0609+-0.9812           11.9322+-1.1826          might be 1.0946x faster
   constant-test                                      4.8277+-0.0772            4.8188+-0.0771        
   create-lots-of-functions                           9.6580+-0.6179            9.5850+-0.5294        
   cse-new-array-buffer                               2.4917+-0.3055            2.2670+-0.1727          might be 1.0991x faster
   cse-new-array                                      2.3025+-0.0822     ?      2.3456+-0.1759        ? might be 1.0187x slower
   DataView-custom-properties                        30.6132+-0.9256     ?     31.2958+-1.5092        ? might be 1.0223x slower
   delay-tear-off-arguments-strictmode               12.5073+-0.3747           12.1667+-0.3970          might be 1.0280x faster
   deltablue-varargs                                177.8333+-6.8327          169.1558+-10.3932         might be 1.0513x faster
   destructuring-arguments                          164.5846+-4.3356     ?    169.4613+-18.8243       ? might be 1.0296x slower
   destructuring-parameters-overridden-by-function   
                                                      0.4498+-0.0121            0.4494+-0.0139        
   destructuring-swap                                 4.7052+-0.1062     ?      4.7530+-0.0581        ? might be 1.0102x slower
   direct-arguments-getbyval                          1.2299+-0.0906     ?      1.2790+-0.2415        ? might be 1.0399x slower
   div-boolean-double                                 5.2735+-0.0943     ?      5.3004+-0.0205        ?
   div-boolean                                        8.0701+-0.1059            8.0368+-0.0772        
   double-get-by-val-out-of-bounds                    4.8618+-0.9347            4.5375+-0.1998          might be 1.0715x faster
   double-pollution-getbyval                          8.7028+-0.1014            8.6739+-0.0970        
   double-pollution-putbyoffset                       3.7285+-0.2148            3.6625+-0.1704          might be 1.0180x faster
   double-real-use                                   23.9666+-0.4957     ?     24.9035+-1.6080        ? might be 1.0391x slower
   double-to-int32-typed-array-no-inline              2.5832+-0.6154            2.2244+-0.1175          might be 1.1613x faster
   double-to-int32-typed-array                        2.0058+-0.0260     ?      2.0152+-0.0458        ?
   double-to-uint32-typed-array-no-inline             2.2391+-0.0671     ?      2.3342+-0.1788        ? might be 1.0425x slower
   double-to-uint32-typed-array                       2.0764+-0.0350     ?      2.1123+-0.0824        ? might be 1.0173x slower
   elidable-new-object-dag                           33.9972+-0.7653           33.8401+-0.5661        
   elidable-new-object-roflcopter                    32.9342+-1.2311     ?     33.0465+-0.5731        ?
   elidable-new-object-then-call                     31.6366+-1.0875     ?     32.0599+-0.9868        ? might be 1.0134x slower
   elidable-new-object-tree                          37.6227+-1.3809           37.4583+-0.4553        
   empty-string-plus-int                              4.8105+-0.0794     ^      4.6560+-0.0400        ^ definitely 1.0332x faster
   emscripten-cube2hash                              27.2149+-2.7825     ?     27.7684+-2.3248        ? might be 1.0203x slower
   exit-length-on-plain-object                       12.7218+-0.9389     !     15.6928+-0.8747        ! definitely 1.2335x slower
   external-arguments-getbyval                        1.3810+-0.1708            1.2740+-0.1061          might be 1.0840x faster
   external-arguments-putbyval                        2.2612+-0.3810            2.1069+-0.0661          might be 1.0733x faster
   fixed-typed-array-storage-var-index                1.2815+-0.2721     ?      1.3269+-0.2734        ? might be 1.0354x slower
   fixed-typed-array-storage                          0.8901+-0.0153     ?      1.2246+-0.5467        ? might be 1.3758x slower
   Float32Array-matrix-mult                           3.9270+-0.2675     ?      4.0329+-0.1370        ? might be 1.0270x slower
   Float32Array-to-Float64Array-set                  46.4519+-0.5630     ?     47.1915+-1.1639        ? might be 1.0159x slower
   Float64Array-alloc-long-lived                     59.5718+-2.2766           59.4033+-1.9387        
   Float64Array-to-Int16Array-set                    57.0536+-1.6087           56.3014+-1.3008          might be 1.0134x faster
   fold-double-to-int                                12.1692+-0.3837           12.1383+-0.1429        
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     11.5530+-1.2079           11.0991+-1.2505          might be 1.0409x faster
   fold-get-by-id-to-multi-get-by-offset             10.5317+-0.9060     ?     10.9688+-1.8369        ? might be 1.0415x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.8232+-1.7974            8.4367+-1.2687          might be 1.0458x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      8.6947+-1.0303            8.5572+-1.5692          might be 1.0161x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      9.6204+-1.9938            9.3383+-0.9781          might be 1.0302x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      6.1820+-1.7293     ?      9.6665+-2.1067        ? might be 1.5637x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      9.0935+-0.1918     ?      9.5677+-0.8311        ? might be 1.0521x slower
   fold-put-by-id-to-multi-put-by-offset             10.7448+-0.7409     ?     11.6541+-1.5525        ? might be 1.0846x slower
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     11.8110+-1.7083           10.6590+-0.4639          might be 1.1081x faster
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     11.0337+-1.3685           10.4695+-1.3045          might be 1.0539x faster
   fold-put-structure                                 4.7858+-1.0782     !      9.7280+-2.5686        ! definitely 2.0327x slower
   for-of-iterate-array-entries                      11.1143+-0.5986           10.7583+-0.0636          might be 1.0331x faster
   for-of-iterate-array-keys                          3.2562+-0.4577     ?      3.4440+-0.1822        ? might be 1.0577x slower
   for-of-iterate-array-values                        3.0048+-0.1990     !      3.3866+-0.1128        ! definitely 1.1270x slower
   fround                                            17.3387+-0.2861     ?     18.0580+-1.0879        ? might be 1.0415x slower
   ftl-library-inlining-dataview                     55.9319+-0.9706     ?     56.1827+-0.8821        ?
   ftl-library-inlining                              98.6658+-1.0069     ^     95.2107+-0.3298        ^ definitely 1.0363x faster
   function-call                                     10.6126+-0.0992     ?     10.6792+-0.1939        ?
   function-dot-apply                                 2.0356+-0.0676     ?      2.1530+-0.1723        ? might be 1.0577x slower
   function-test                                      2.7437+-0.1682            2.7321+-0.1554        
   function-with-eval                                92.5800+-0.8755     ?     93.3281+-1.4975        ?
   gcse-poly-get-less-obvious                        20.4156+-0.3247     ?     20.8866+-0.7728        ? might be 1.0231x slower
   gcse-poly-get                                     26.5012+-2.2962           23.4316+-3.2162          might be 1.1310x faster
   gcse                                               3.8020+-0.0425     ^      3.4362+-0.0913        ^ definitely 1.1065x faster
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.5957+-0.0710            2.5888+-0.0491        
   get-by-id-bimorphic-check-structure-elimination   
                                                      5.7639+-0.2909     ^      4.6324+-0.0777        ^ definitely 1.2443x faster
   get-by-id-chain-from-try-block                     2.4410+-0.0962            2.4122+-0.0709          might be 1.0119x faster
   get-by-id-check-structure-elimination              4.3538+-0.0799     ^      3.9196+-0.1287        ^ definitely 1.1108x faster
   get-by-id-proto-or-self                           15.6344+-0.4784           14.9376+-0.2563          might be 1.0466x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8895+-0.0228     ?      3.2565+-0.6422        ? might be 1.1270x slower
   get-by-id-self-or-proto                           15.4174+-0.5846     ?     15.9132+-1.1442        ? might be 1.0322x slower
   get-by-val-out-of-bounds                           4.3680+-0.2217            4.2543+-0.0847          might be 1.0267x faster
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      2.8315+-0.0511            2.7559+-0.0672          might be 1.0274x faster
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                      6.1059+-0.3255            5.7941+-0.0383          might be 1.0538x faster
   get-by-val-with-string-chain-from-try-block   
                                                      2.4731+-0.1100            2.3979+-0.0247          might be 1.0314x faster
   get-by-val-with-string-check-structure-elimination   
                                                      5.2080+-0.1137            5.1986+-0.2213        
   get-by-val-with-string-proto-or-self              16.3051+-0.9881           16.2748+-0.9150        
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      3.3452+-0.0403     ^      3.0539+-0.0664        ^ definitely 1.0954x faster
   get-by-val-with-string-self-or-proto              15.9242+-0.9263     ?     16.2294+-1.7299        ? might be 1.0192x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      3.0992+-0.0190     ?      3.1392+-0.1002        ? might be 1.0129x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     12.3888+-0.1304           12.2392+-0.1030          might be 1.0122x faster
   get-by-val-with-symbol-chain-from-try-block   
                                                      2.5190+-0.2944            2.3950+-0.0620          might be 1.0517x faster
   get-by-val-with-symbol-check-structure-elimination   
                                                     11.6271+-0.5589           11.3650+-0.1759          might be 1.0231x faster
   get-by-val-with-symbol-proto-or-self              15.2840+-0.6269     ?     15.8708+-1.2282        ? might be 1.0384x slower
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      3.7252+-0.0699     ?      3.7436+-0.0778        ?
   get-by-val-with-symbol-self-or-proto              16.0485+-1.2303           15.5035+-1.1314          might be 1.0352x faster
   get_callee_monomorphic                             2.4707+-0.1720            2.3127+-0.0949          might be 1.0683x faster
   get_callee_polymorphic                             3.3920+-0.1897     ?      3.4490+-0.1121        ? might be 1.0168x slower
   getter-no-activation                               4.8055+-0.2289            4.7218+-0.0900          might be 1.0177x faster
   getter-prototype                                   8.8928+-0.1539     ^      7.8325+-0.0895        ^ definitely 1.1354x faster
   getter-richards                                  122.2996+-4.7402          112.2590+-12.0441         might be 1.0894x faster
   getter                                             5.7893+-0.9336     ?      6.2678+-0.6372        ? might be 1.0826x slower
   global-object-access-with-mutating-structure   
                                                      5.7130+-0.3589            5.6577+-0.1565        
   global-var-const-infer-fire-from-opt               0.7432+-0.0943            0.7409+-0.0620        
   global-var-const-infer                             0.6775+-0.0661     ?      0.7139+-0.1114        ? might be 1.0536x slower
   hard-overflow-check-equal                         32.5212+-0.6809     ^     27.0288+-1.0493        ^ definitely 1.2032x faster
   hard-overflow-check                               33.5828+-1.6557     ^     26.6927+-2.4828        ^ definitely 1.2581x faster
   HashMap-put-get-iterate-keys                      26.2586+-2.2311           25.8042+-1.5101          might be 1.0176x faster
   HashMap-put-get-iterate                           28.2961+-1.7193           27.5394+-2.2205          might be 1.0275x faster
   HashMap-string-put-get-iterate                    25.0199+-1.4472           24.9035+-1.6663        
   hoist-make-rope                                    8.9907+-0.8762     ?      8.9948+-1.7127        ?
   hoist-poly-check-structure-effectful-loop   
                                                      4.2053+-0.0732     ^      3.5889+-0.0510        ^ definitely 1.1718x faster
   hoist-poly-check-structure                         3.3177+-0.0522            3.2021+-0.0790          might be 1.0361x faster
   imul-double-only                                   7.5194+-0.7492            7.3422+-0.4815          might be 1.0241x faster
   imul-int-only                                      8.9041+-1.4102            8.3981+-0.5832          might be 1.0603x faster
   imul-mixed                                         6.8191+-0.3905     ?      6.8403+-0.2804        ?
   in-four-cases                                     16.9794+-0.5416     ?     17.4189+-0.8348        ? might be 1.0259x slower
   in-one-case-false                                 10.0020+-0.6094     ?     10.0507+-0.6904        ?
   in-one-case-true                                  10.0309+-0.9024            9.4259+-0.3791          might be 1.0642x faster
   in-two-cases                                       9.8362+-0.7490            9.5291+-0.1720          might be 1.0322x faster
   indexed-properties-in-objects                      2.7590+-0.0975            2.7463+-0.0526        
   infer-closure-const-then-mov-no-inline             3.5654+-0.0445     ?      3.5659+-0.1047        ?
   infer-closure-const-then-mov                      18.4739+-0.8179           18.2969+-0.6610        
   infer-closure-const-then-put-to-scope-no-inline   
                                                     11.0356+-0.5375           11.0333+-0.5446        
   infer-closure-const-then-put-to-scope             23.5270+-1.0831           22.6763+-0.3089          might be 1.0375x faster
   infer-closure-const-then-reenter-no-inline   
                                                     45.0827+-1.0119           44.8099+-0.9203        
   infer-closure-const-then-reenter                  22.8745+-0.9968           22.7742+-0.5190        
   infer-constant-global-property                     3.4010+-0.0572            3.3731+-0.0418        
   infer-constant-property                            2.6145+-0.0820     ?      2.6703+-0.0841        ? might be 1.0214x slower
   infer-one-time-closure-ten-vars                    7.7696+-0.2172            7.7333+-0.3244        
   infer-one-time-closure-two-vars                    7.3708+-0.1531     ?      7.4640+-0.2837        ? might be 1.0126x slower
   infer-one-time-closure                             7.3285+-0.4484            7.2106+-0.0923          might be 1.0164x faster
   infer-one-time-deep-closure                       11.0614+-1.4578           10.7964+-0.3081          might be 1.0245x faster
   inline-arguments-access                            3.6347+-0.1125     ?      3.8083+-0.2458        ? might be 1.0478x slower
   inline-arguments-aliased-access                    3.8827+-0.3560            3.6642+-0.1387          might be 1.0596x faster
   inline-arguments-local-escape                      3.8428+-0.1171     ?      4.0070+-0.5886        ? might be 1.0427x slower
   inline-get-scoped-var                              4.6508+-0.1804     ?      4.7192+-0.2606        ? might be 1.0147x slower
   inlined-put-by-id-transition                       9.0524+-0.4857     ?      9.6212+-0.8371        ? might be 1.0628x slower
   inlined-put-by-val-with-string-transition   
                                                     41.1200+-0.7952     ?     41.7339+-1.5971        ? might be 1.0149x slower
   inlined-put-by-val-with-symbol-transition   
                                                     41.4701+-1.7365           41.2740+-1.4864        
   int-or-other-abs-then-get-by-val                   4.4325+-0.0518     ?      4.4717+-0.0816        ?
   int-or-other-abs-zero-then-get-by-val             15.8817+-0.5589     ?     16.0114+-1.5829        ?
   int-or-other-add-then-get-by-val                   3.9924+-0.0374     ?      4.0691+-0.1508        ? might be 1.0192x slower
   int-or-other-add                                   5.0435+-0.3923     ?      5.1272+-0.3428        ? might be 1.0166x slower
   int-or-other-div-then-get-by-val                   3.9332+-0.4777            3.6976+-0.0567          might be 1.0637x faster
   int-or-other-max-then-get-by-val                   4.0122+-0.2783            3.9182+-0.2664          might be 1.0240x faster
   int-or-other-min-then-get-by-val                   3.8909+-0.2247            3.7238+-0.0598          might be 1.0449x faster
   int-or-other-mod-then-get-by-val                   3.4381+-0.0452     ?      3.6979+-0.6451        ? might be 1.0756x slower
   int-or-other-mul-then-get-by-val                   3.5179+-0.0879     ?      3.7096+-0.2914        ? might be 1.0545x slower
   int-or-other-neg-then-get-by-val                   4.0693+-0.2634            3.9995+-0.0656          might be 1.0175x faster
   int-or-other-neg-zero-then-get-by-val             15.6581+-0.2916           15.4326+-0.5063          might be 1.0146x faster
   int-or-other-sub-then-get-by-val                   3.9843+-0.0486     ?      4.2035+-0.3213        ? might be 1.0550x slower
   int-or-other-sub                                   3.5651+-0.1801            3.4811+-0.1223          might be 1.0241x faster
   int-overflow-local                                 3.9746+-0.0804     ?      4.1954+-0.3200        ? might be 1.0556x slower
   Int16Array-alloc-long-lived                       42.8050+-1.4025     ?     43.9364+-1.1584        ? might be 1.0264x slower
   Int16Array-bubble-sort-with-byteLength            17.1491+-0.3702     ?     17.6703+-1.2370        ? might be 1.0304x slower
   Int16Array-bubble-sort                            16.9415+-0.6676           16.4939+-0.3557          might be 1.0271x faster
   Int16Array-load-int-mul                            1.4108+-0.0191     ?      1.4323+-0.0687        ? might be 1.0153x slower
   Int16Array-to-Int32Array-set                      42.9880+-1.1997     ?     44.5687+-1.0891        ? might be 1.0368x slower
   Int32Array-alloc-large                            12.4425+-1.1345     ?     12.6727+-0.2117        ? might be 1.0185x slower
   Int32Array-alloc-long-lived                       48.7629+-2.1034           48.2029+-1.6338          might be 1.0116x faster
   Int32Array-alloc                                   3.0721+-0.2887            2.7614+-0.1544          might be 1.1125x faster
   Int32Array-Int8Array-view-alloc                    6.1337+-0.4953     ?      6.8896+-1.9801        ? might be 1.1232x slower
   int52-spill                                        4.5082+-0.0449     ?      5.0986+-0.5860        ? might be 1.1310x slower
   Int8Array-alloc-long-lived                        37.8144+-0.9387     ?     38.5215+-0.8741        ? might be 1.0187x slower
   Int8Array-load-with-byteLength                     3.3598+-0.0770            3.3457+-0.0666        
   Int8Array-load                                     3.3770+-0.0643     ?      3.4445+-0.1824        ? might be 1.0200x slower
   integer-divide                                    10.6740+-0.8913           10.4662+-0.4130          might be 1.0199x faster
   integer-modulo                                     1.6125+-0.0601            1.6066+-0.0550        
   is-boolean-fold-tricky                             3.7686+-0.0554     ?      3.8389+-0.1863        ? might be 1.0186x slower
   is-boolean-fold                                    2.6112+-0.0588            2.6110+-0.0196        
   is-function-fold-tricky-internal-function   
                                                      9.7222+-0.5144            9.4925+-0.1954          might be 1.0242x faster
   is-function-fold-tricky                            4.0018+-0.0664     ?      4.1520+-0.3898        ? might be 1.0375x slower
   is-function-fold                                   2.6331+-0.0461     ?      2.6611+-0.0716        ? might be 1.0106x slower
   is-number-fold-tricky                              3.9784+-0.1245            3.9709+-0.1524        
   is-number-fold                                     2.7143+-0.2321            2.6601+-0.1040          might be 1.0204x faster
   is-object-or-null-fold-functions                   2.6341+-0.0445     ?      2.6759+-0.0884        ? might be 1.0159x slower
   is-object-or-null-fold-less-tricky                 4.0076+-0.0810     ?      4.0934+-0.2020        ? might be 1.0214x slower
   is-object-or-null-fold-tricky                      4.8174+-0.1619     ?      4.8824+-0.2294        ? might be 1.0135x slower
   is-object-or-null-fold                             2.7059+-0.0852            2.6928+-0.0990        
   is-object-or-null-trickier-function                4.0779+-0.1171            4.0349+-0.0420          might be 1.0107x faster
   is-object-or-null-trickier-internal-function   
                                                     10.1472+-0.1714            9.9172+-0.3326          might be 1.0232x faster
   is-object-or-null-tricky-function                  4.1335+-0.1985            4.1117+-0.2087        
   is-object-or-null-tricky-internal-function   
                                                      7.3047+-0.0942     ?      7.7479+-0.4466        ? might be 1.0607x slower
   is-string-fold-tricky                              3.9859+-0.0407            3.9516+-0.1861        
   is-string-fold                                     2.6926+-0.2511            2.6252+-0.0547          might be 1.0257x faster
   is-undefined-fold-tricky                           3.3969+-0.2473            3.2858+-0.0375          might be 1.0338x faster
   is-undefined-fold                                  2.6242+-0.0455     ?      2.6334+-0.0509        ?
   JSONP-negative-0                                   0.2548+-0.0342            0.2472+-0.0071          might be 1.0308x faster
   large-int-captured                                 4.1525+-0.1985            4.1058+-0.1180          might be 1.0114x faster
   large-int-neg                                     13.8376+-0.3785     ?     13.8585+-0.2518        ?
   large-int                                         13.1132+-0.2649           13.0769+-0.3449        
   load-varargs-elimination                          20.3203+-0.5074     ?     20.4447+-0.4997        ?
   logical-not-weird-types                            3.1070+-0.1549     ?      3.2371+-0.3767        ? might be 1.0419x slower
   logical-not                                        4.4531+-0.1698     ?      4.4636+-0.1737        ?
   lots-of-fields                                     8.7481+-0.3075     !      9.9758+-0.8970        ! definitely 1.1403x slower
   make-indexed-storage                               2.7694+-0.1847     ?      3.0671+-0.3833        ? might be 1.1075x slower
   make-rope-cse                                      3.7627+-0.4665     ?      3.8555+-0.2591        ? might be 1.0247x slower
   marsaglia-larger-ints                             32.2712+-1.2378     ?     32.6901+-1.4620        ? might be 1.0130x slower
   marsaglia-osr-entry                               22.1102+-1.7625           21.3010+-0.4922          might be 1.0380x faster
   math-with-out-of-bounds-array-values              21.6844+-1.0511           21.5551+-0.5822        
   max-boolean                                        2.5820+-0.0699     ?      2.6283+-0.0250        ? might be 1.0179x slower
   method-on-number                                  15.4005+-0.2286     ?     15.6253+-0.3632        ? might be 1.0146x slower
   min-boolean                                        2.6105+-0.0401     ?      2.9282+-0.6871        ? might be 1.1217x slower
   minus-boolean-double                               3.0334+-0.0238     ?      3.0553+-0.0603        ?
   minus-boolean                                      2.3148+-0.0159            2.2912+-0.0482          might be 1.0103x faster
   misc-strict-eq                                    28.8842+-1.3300     ?     29.4826+-2.1874        ? might be 1.0207x slower
   mod-boolean-double                                11.0057+-0.0855     ?     11.4257+-0.4965        ? might be 1.0382x slower
   mod-boolean                                        8.3228+-0.2264            8.2702+-0.1365        
   mul-boolean-double                                 3.6002+-0.0407            3.5934+-0.0404        
   mul-boolean                                        2.8011+-0.0598            2.7946+-0.0464        
   neg-boolean                                        3.1781+-0.1603     ?      3.1788+-0.3223        ?
   negative-zero-divide                               0.3497+-0.0217            0.3322+-0.0071          might be 1.0527x faster
   negative-zero-modulo                               0.3309+-0.0302            0.3300+-0.0151        
   negative-zero-negate                               0.3402+-0.0300            0.3374+-0.0284        
   nested-function-parsing                           44.7537+-0.3487     ?     47.6743+-7.9140        ? might be 1.0653x slower
   new-array-buffer-dead                             88.0920+-1.2346           87.0777+-0.2166          might be 1.0116x faster
   new-array-buffer-push                              6.3342+-0.3217     ?      6.3610+-0.3956        ?
   new-array-dead                                    15.2585+-0.9004           15.1410+-1.2405        
   new-array-push                                     3.7107+-0.6123            3.5001+-0.1058          might be 1.0602x faster
   no-inline-constructor                             31.4322+-0.9602           30.3726+-0.3107          might be 1.0349x faster
   number-test                                        3.0252+-0.1037            3.0068+-0.0414        
   object-closure-call                                5.1714+-0.0697     ^      4.9052+-0.0421        ^ definitely 1.0543x faster
   object-get-own-property-symbols-on-large-array   
                                                      4.2858+-0.2562            4.1847+-0.1836          might be 1.0241x faster
   object-test                                        2.6774+-0.0381     ?      2.7833+-0.1163        ? might be 1.0396x slower
   obvious-sink-pathology-taken                      98.5884+-1.7220     ?     98.6610+-0.7807        ?
   obvious-sink-pathology                            93.9097+-0.9381     ?     94.4691+-0.7443        ?
   obviously-elidable-new-object                     28.0309+-0.1980     ?     28.6387+-1.0657        ? might be 1.0217x slower
   plus-boolean-arith                                 2.5700+-0.5385            2.5673+-0.4820        
   plus-boolean-double                                3.1879+-0.1175            3.1248+-0.1022          might be 1.0202x faster
   plus-boolean                                       2.6839+-0.3839            2.5038+-0.0581          might be 1.0719x faster
   poly-chain-access-different-prototypes-simple   
                                                      3.2185+-0.0345     ?      3.2238+-0.0552        ?
   poly-chain-access-different-prototypes             3.4225+-0.2746            3.3510+-0.2151          might be 1.0214x faster
   poly-chain-access-simpler                          3.2130+-0.1118     ?      3.4087+-0.2633        ? might be 1.0609x slower
   poly-chain-access                                  3.2137+-0.0328     ?      3.2773+-0.1058        ? might be 1.0198x slower
   poly-stricteq                                     54.1142+-11.0091          49.2927+-0.4620          might be 1.0978x faster
   polymorphic-array-call                             1.6573+-0.2991            1.4249+-0.3520          might be 1.1631x faster
   polymorphic-get-by-id                              2.9280+-0.1660            2.8101+-0.0568          might be 1.0420x faster
   polymorphic-put-by-id                             27.7259+-1.2687     ?     28.4172+-0.6048        ? might be 1.0249x slower
   polymorphic-put-by-val-with-string                29.0875+-2.2989           28.2561+-1.8394          might be 1.0294x faster
   polymorphic-put-by-val-with-symbol                27.9021+-1.0384     ?     28.5615+-1.6244        ? might be 1.0236x slower
   polymorphic-structure                             13.0709+-0.2294     ^     12.4043+-0.0402        ^ definitely 1.0537x faster
   polyvariant-monomorphic-get-by-id                  6.7465+-1.2231     ?      7.6111+-0.9520        ? might be 1.1281x slower
   proto-getter-access                                8.6458+-0.5719            8.3782+-0.2081          might be 1.0319x faster
   prototype-access-with-mutating-prototype           5.3808+-0.0994     ?      5.4672+-0.3300        ? might be 1.0161x slower
   put-by-id-replace-and-transition                   8.1746+-0.6979            7.8530+-0.7722          might be 1.0409x faster
   put-by-id-slightly-polymorphic                     2.7203+-0.2972            2.7012+-0.0619        
   put-by-id                                         10.0052+-0.7015            9.7212+-0.3880          might be 1.0292x faster
   put-by-val-direct                                  0.3543+-0.0189            0.3495+-0.0382          might be 1.0137x faster
   put-by-val-large-index-blank-indexing-type   
                                                      5.2645+-0.2655            5.1637+-0.1591          might be 1.0195x faster
   put-by-val-machine-int                             2.5867+-0.0587     ?      2.6604+-0.3102        ? might be 1.0285x slower
   put-by-val-with-string-replace-and-transition   
                                                     10.4016+-0.4380           10.2722+-0.3960          might be 1.0126x faster
   put-by-val-with-string-slightly-polymorphic   
                                                      2.9104+-0.0489            2.8376+-0.0284          might be 1.0256x faster
   put-by-val-with-string                            10.4681+-0.6371           10.2043+-0.2468          might be 1.0259x faster
   put-by-val-with-symbol-replace-and-transition   
                                                     12.0392+-1.0014           11.8336+-0.4149          might be 1.0174x faster
   put-by-val-with-symbol-slightly-polymorphic   
                                                      3.2569+-0.2508            3.1962+-0.0846          might be 1.0190x faster
   put-by-val-with-symbol                            10.3306+-0.5818     ?     10.9072+-0.9625        ? might be 1.0558x slower
   rare-osr-exit-on-local                            13.4838+-0.3143     ?     13.6044+-0.1004        ?
   raytrace-with-empty-try-catch                      5.2295+-0.3844     ?      5.2699+-0.4771        ?
   raytrace-with-try-catch                            9.8995+-0.3166     ?     10.0918+-0.5439        ? might be 1.0194x slower
   register-pressure-from-osr                        17.5092+-0.5563           16.8988+-1.3316          might be 1.0361x faster
   repeat-multi-get-by-offset                        21.7959+-0.3320     ^     20.5215+-0.2055        ^ definitely 1.0621x faster
   richards-empty-try-catch                          80.4956+-2.7170     ^     75.0305+-1.2187        ^ definitely 1.0728x faster
   richards-try-catch                               238.1567+-2.3966     ?    281.5015+-102.7455      ? might be 1.1820x slower
   setter-prototype                                   7.6861+-0.0883     ?      7.8169+-0.3861        ? might be 1.0170x slower
   setter                                             6.3018+-1.0505            5.3936+-0.7868          might be 1.1684x faster
   simple-activation-demo                            24.1591+-0.5253     ?     24.5610+-0.4787        ? might be 1.0166x slower
   simple-getter-access                              10.7656+-0.1738           10.6199+-0.2206          might be 1.0137x faster
   simple-poly-call-nested                            8.6737+-0.7339            8.5588+-0.7619          might be 1.0134x faster
   simple-poly-call                                   1.2817+-0.0586     ?      1.3352+-0.1046        ? might be 1.0417x slower
   sin-boolean                                       19.1953+-1.8377     ?     21.6408+-2.3545        ? might be 1.1274x slower
   singleton-scope                                   56.3237+-0.6195           56.1107+-1.0060        
   sink-function                                      9.9395+-0.3538     ?     10.3332+-0.7959        ? might be 1.0396x slower
   sink-huge-activation                              16.3710+-0.5455     ?     17.3427+-0.5678        ? might be 1.0594x slower
   sinkable-new-object-dag                           55.0791+-1.0536     ?     55.3174+-1.9154        ?
   sinkable-new-object-taken                         44.9294+-0.8349           44.8969+-1.3799        
   sinkable-new-object                               29.7616+-0.7979     ?     30.0410+-0.9881        ?
   slow-array-profile-convergence                     2.6222+-0.4217            2.5402+-0.1375          might be 1.0323x faster
   slow-convergence                                   2.3660+-0.1463            2.2963+-0.0200          might be 1.0304x faster
   slow-ternaries                                    18.1591+-2.0277           17.3085+-0.5495          might be 1.0491x faster
   sorting-benchmark                                 16.6117+-0.1717     ?     16.9953+-0.7647        ? might be 1.0231x slower
   sparse-conditional                                 1.1291+-0.0194     ?      1.1597+-0.0628        ? might be 1.0271x slower
   splice-to-remove                                  12.1139+-0.4865           11.8872+-0.2664          might be 1.0191x faster
   string-char-code-at                               13.2475+-0.7080           13.1129+-0.4481          might be 1.0103x faster
   string-concat-object                               2.2237+-0.2179            2.1785+-0.0584          might be 1.0207x faster
   string-concat-pair-object                          2.2999+-0.3856            2.1578+-0.1947          might be 1.0659x faster
   string-concat-pair-simple                          9.6015+-0.5308            9.1500+-0.3475          might be 1.0493x faster
   string-concat-simple                               9.6510+-0.6523            9.6064+-0.6254        
   string-cons-repeat                                 6.4468+-0.2753     ?      6.4529+-0.3588        ?
   string-cons-tower                                  6.7308+-0.3619            6.5052+-0.2129          might be 1.0347x faster
   string-equality                                   15.2827+-0.9493           15.0187+-0.3588          might be 1.0176x faster
   string-get-by-val-big-char                         6.4831+-0.1447            6.4093+-0.0824          might be 1.0115x faster
   string-get-by-val-out-of-bounds-insane             3.1792+-0.1296            3.1156+-0.0982          might be 1.0204x faster
   string-get-by-val-out-of-bounds                    3.9298+-0.1233            3.9070+-0.0604        
   string-get-by-val                                  2.9985+-0.4511            2.7920+-0.0397          might be 1.0739x faster
   string-hash                                        1.8282+-0.0408            1.8235+-0.0411        
   string-long-ident-equality                        13.0981+-0.1966           13.0455+-0.2186        
   string-out-of-bounds                              10.2070+-0.2828            9.8489+-0.2258          might be 1.0364x faster
   string-repeat-arith                               26.5071+-1.7995     ?     26.7694+-1.2087        ?
   string-sub                                        54.0820+-1.7878     ?     54.2485+-1.0491        ?
   string-test                                        2.8761+-0.0830     ?      3.2080+-0.2992        ? might be 1.1154x slower
   string-var-equality                               26.7916+-0.3642     ?     27.0715+-1.0954        ? might be 1.0104x slower
   structure-hoist-over-transitions                   2.3475+-0.0634     ?      2.3582+-0.1085        ?
   substring-concat-weird                            35.7413+-0.5952     ?     40.7201+-10.5762       ? might be 1.1393x slower
   substring-concat                                  39.9545+-1.0555           39.5170+-0.9721          might be 1.0111x faster
   substring                                         45.5553+-1.6892           44.8214+-1.3797          might be 1.0164x faster
   switch-char-constant                               2.7635+-0.2676            2.7005+-0.0959          might be 1.0234x faster
   switch-char                                        6.2032+-0.6412            6.1126+-1.3381          might be 1.0148x faster
   switch-constant                                    8.6914+-0.5991            7.9536+-0.8459          might be 1.0928x faster
   switch-string-basic-big-var                       14.4274+-0.4404     ?     14.4664+-0.3161        ?
   switch-string-basic-big                           15.0580+-0.1261           14.7757+-0.2021          might be 1.0191x faster
   switch-string-basic-var                           13.4624+-0.2941           13.4200+-0.4294        
   switch-string-basic                               12.8307+-0.6787           12.4835+-0.3739          might be 1.0278x faster
   switch-string-big-length-tower-var                17.5719+-0.3273     !     18.2921+-0.3311        ! definitely 1.0410x slower
   switch-string-length-tower-var                    13.3907+-0.4744           13.0042+-0.1791          might be 1.0297x faster
   switch-string-length-tower                        11.4096+-0.2833           11.2950+-0.1259          might be 1.0102x faster
   switch-string-short                               11.3164+-0.1766     ?     11.4895+-0.3603        ? might be 1.0153x slower
   switch                                            11.0555+-0.8324     ?     11.1816+-0.7361        ? might be 1.0114x slower
   tear-off-arguments-simple                          3.0653+-0.1760     ?      3.1147+-0.0880        ? might be 1.0161x slower
   tear-off-arguments                                 4.1008+-0.1576            4.0742+-0.1671        
   temporal-structure                                11.7981+-0.2894           11.5581+-0.1590          might be 1.0208x faster
   to-int32-boolean                                  13.0162+-0.5467           12.3929+-0.1708          might be 1.0503x faster
   try-catch-get-by-val-cloned-arguments             10.0589+-1.0130            9.3782+-0.4393          might be 1.0726x faster
   try-catch-get-by-val-direct-arguments              2.3096+-0.3516            2.1451+-0.0946          might be 1.0767x faster
   try-catch-get-by-val-scoped-arguments              4.8257+-0.5401            4.7975+-0.1665        
   typed-array-get-set-by-val-profiling              26.7119+-0.9874     ?     27.2920+-0.8589        ? might be 1.0217x slower
   undefined-property-access                        223.4028+-0.6433     ^    216.8560+-1.5101        ^ definitely 1.0302x faster
   undefined-test                                     2.9779+-0.0749     ?      3.0611+-0.0497        ? might be 1.0279x slower
   unprofiled-licm                                   13.8807+-0.4931     ^      9.3837+-0.2532        ^ definitely 1.4792x faster
   v8-raytrace-with-empty-try-catch                  48.3561+-1.7011     ?     48.9113+-1.2492        ? might be 1.0115x slower
   v8-raytrace-with-try-catch                        62.2459+-1.7889           61.5130+-0.9639          might be 1.0119x faster
   varargs-call                                      12.9253+-0.4836     ?     13.1195+-0.6122        ? might be 1.0150x slower
   varargs-construct-inline                          22.1121+-1.0437     ?     22.1789+-1.2781        ?
   varargs-construct                                 20.4200+-0.5051     ?     20.5695+-1.1725        ?
   varargs-inline                                     8.6818+-0.1798            8.5725+-0.1014          might be 1.0128x faster
   varargs-strict-mode                                9.5401+-0.1624     ?      9.8438+-0.5807        ? might be 1.0318x slower
   varargs                                            9.7897+-0.4717            9.6482+-0.0969          might be 1.0147x faster
   weird-inlining-const-prop                          2.2670+-0.2643            2.1498+-0.0607          might be 1.0545x faster

   <geometric>                                        8.0046+-0.0151            7.9926+-0.0367          might be 1.0015x faster

                                                        TipOfTree             PropTypeInference                                 
AsmBench:
   bigfib.cpp                                       449.1815+-9.0890     ?    453.3105+-3.8975        ?
   cray.c                                           389.8056+-1.0021     ?    391.8986+-1.8362        ?
   dry.c                                            419.7795+-7.9248          417.3834+-10.8220       
   FloatMM.c                                        680.8737+-2.3023     ?    681.4316+-2.7946        ?
   gcc-loops.cpp                                   3416.9170+-25.5728    ?   3422.0966+-37.2072       ?
   n-body.c                                         822.4246+-5.1849     ?    824.8667+-10.2035       ?
   Quicksort.c                                      401.0483+-5.8818     ?    405.2496+-4.5788        ? might be 1.0105x slower
   stepanov_container.cpp                          3462.0726+-26.9140    ?   3476.7963+-19.5554       ?
   Towers.c                                         233.2786+-1.3340          233.1695+-2.3573        

   <geometric>                                      709.4514+-1.0928     ?    711.6836+-2.7674        ? might be 1.0031x slower

                                                        TipOfTree             PropTypeInference                                 
CompressionBench:
   huffman                                           60.2751+-1.5927     ?     60.3528+-1.4476        ?
   arithmetic-simple                                272.2301+-5.2355          270.3472+-0.9339        
   arithmetic-precise                               242.4681+-1.2903     ?    245.0926+-1.4835        ? might be 1.0108x slower
   arithmetic-complex-precise                       244.4243+-5.9900          242.8595+-1.2462        
   arithmetic-precise-order-0                       281.7957+-4.5846          279.1423+-1.5067        
   arithmetic-precise-order-1                       296.9806+-2.1834     ?    299.2129+-4.8285        ?
   arithmetic-precise-order-2                       341.7417+-2.6325     ?    343.8968+-3.2327        ?
   arithmetic-simple-order-1                        316.1276+-1.8707     ?    321.6702+-8.8431        ? might be 1.0175x slower
   arithmetic-simple-order-2                        367.3960+-6.7300     ?    368.8064+-4.1606        ?
   lz-string                                        311.3584+-5.9814     ?    313.3135+-10.2423       ?

   <geometric>                                      251.3111+-1.7960     ?    252.0734+-0.9986        ? might be 1.0030x slower

                                                        TipOfTree             PropTypeInference                                 
Geomean of preferred means:
   <scaled-result>                                   50.9013+-0.1140     ^     49.7302+-0.1931        ^ definitely 1.0236x faster
Comment 48 Filip Pizlo 2015-09-21 13:50:00 PDT
Landed in http://trac.webkit.org/changeset/190076
Comment 49 Ryosuke Niwa 2015-09-21 19:25:12 PDT
We're seeing ~3% improvement on Octane, ~8% improvement on Kraken, and ~1% improvement on JetStream from this change.