Bug 149852 - GC should have a Baker barrier for concurrent copying
Summary: GC should have a Baker barrier for concurrent copying
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: WebKit Nightly Build
Hardware: All All
: P2 Normal
Assignee: Filip Pizlo
URL:
Keywords:
Depends on: 149869 149878 149879 149884 149885 149892
Blocks: 149432
  Show dependency treegraph
 
Reported: 2015-10-06 10:55 PDT by Filip Pizlo
Modified: 2015-10-12 15:42 PDT (History)
11 users (show)

See Also:


Attachments
it's a start (68.42 KB, patch)
2015-10-06 10:57 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
something compiles (96.99 KB, patch)
2015-10-06 12:39 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
starting to make some JIT changes (106.45 KB, patch)
2015-10-06 20:15 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
more (119.61 KB, patch)
2015-10-06 21:15 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
a bit more (127.27 KB, patch)
2015-10-07 12:05 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
it is written (136.58 KB, patch)
2015-10-07 13:38 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
so far (164.82 KB, patch)
2015-10-08 13:17 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
the patch (181.82 KB, patch)
2015-10-08 14:23 PDT, Filip Pizlo
ggaren: review+
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-10-06 10:55:59 PDT
Hopefully I can make this barrier fast enough that we can do concurrent copying.
Comment 1 Filip Pizlo 2015-10-06 10:57:02 PDT
Created attachment 262527 [details]
it's a start
Comment 2 Filip Pizlo 2015-10-06 11:48:38 PDT
Here's what I want from a read barrier on pointers to copied space:

- Once you load a backing store, you can hold onto it across GCs.
- The barrier is just one extra branch.
- The barrier slow path is no worse than Baker - it either copies the object, or waits for the object to be copied by someone else. I.e. it's O(backing store size).

Here's how I'm going to implement this amazing barrier:

A backing store pointer will contain two low bits for copying state. Copying state is mostly concerned with whether the object is in to-space or in from-space. The bits will be:

0 => It's in to-space.
1 => We are planning to copy it. It's in to-space if the copy phase hasn't started yet. It's in from-space if the copy phase has started.
2 => It's being copied right now. Anyone who needs this object to be copied should wait for copying to finish by CASing the state to 3, and parking conditionally.
3 => It's being copied right now and people are parked waiting for copying to finish. When copying is done, the copier will unparkAll.

The barrier will check if the two low bits are zero. If they are, then we have a to-space pointer. This pointer will continue to be valid indefinitely, since if the GC decides to copy it after we did the load, then it will have to do a handshake and stack scan, which will pin the backing store if the pointer is still on the stack.

In C++ code, the barrier will no longer allow loads except if you pass the owning object pointer. This is needed by the slow path to get the VM& and to know which object to ask to copy the backing store.  An example use of the barrier will be something like: m_butterfly.get(this)->stuff.

If the barrier sees that the two low bits are non-zero, it will invoke copying by doing:

1) Get the VM& and Heap& using the owner.

2) Check the state. If the state is 0, then we're done. If the state is 1, then we're done if the copy phase hasn't started. In all other cases, attempt to lock the backing store by CASing 1->2.

3) If that fails because the state is already 2 or 3, then CAS 2->3 and park conditionally. When parking returns, loop around to (1).

4) If CAS 1->2 succeeded, above, then ask the owning object for the CopyToken for the given backing store pointer. JSCell will have a new virtual method, called copyTokenForPointer().

5) Call copyBackingStore().

6) Unlock the backing store by doing CAS 2->0. That may fail if the state is 3, in which case do unparkAll and set the state to 0.
Comment 3 Filip Pizlo 2015-10-06 12:39:39 PDT
Created attachment 262536 [details]
something compiles

I still haven't added barriers to JIT code.
Comment 4 Filip Pizlo 2015-10-06 20:15:41 PDT
Created attachment 262572 [details]
starting to make some JIT changes
Comment 5 Filip Pizlo 2015-10-06 21:15:58 PDT
Created attachment 262575 [details]
more
Comment 6 Filip Pizlo 2015-10-07 12:05:55 PDT
Created attachment 262621 [details]
a bit more
Comment 7 Filip Pizlo 2015-10-07 13:38:14 PDT
Created attachment 262633 [details]
it is written

Now I have to compile it and see how much of a slow-down this is.  If the slow-down is too big, we won't do concurrent copying.
Comment 8 WebKit Commit Bot 2015-10-07 14:08:56 PDT
Attachment 262633 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/JSObject.h:819:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2481:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
Total errors found: 2 in 35 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 9 Filip Pizlo 2015-10-07 15:56:29 PDT
Looks like this is an Octane slow-down.  I will investigate some options for reducing this slow-down.  If I can't do it, then we'll have to scrap concurrent copying.

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

VMs tested:
"TipOfTree" at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r190675)
"CopyBarrier" at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r190682)

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

encrypt                 0.16790+-0.00258          0.16719+-0.00230       
decrypt                 2.86774+-0.01985    !     3.15941+-0.03599       ! definitely 1.1017x slower
deltablue      x2       0.13659+-0.00115    !     0.14497+-0.00352       ! definitely 1.0613x slower
earley                  0.30416+-0.00487    ?     0.30778+-0.00294       ? might be 1.0119x slower
boyer                   4.42021+-0.11711          4.36209+-0.07179         might be 1.0133x faster
navier-stokes  x2       4.85377+-0.03649          4.81558+-0.01112       
raytrace       x2       0.85975+-0.00776    ?     0.87472+-0.01173       ? might be 1.0174x slower
richards       x2       0.08832+-0.00050    !     0.09011+-0.00119       ! definitely 1.0202x slower
splay          x2       0.35115+-0.00418          0.34995+-0.01242       
regexp         x2      24.65362+-0.14126         24.62663+-0.31218       
pdfjs          x2      36.46518+-0.55242    ?    37.31270+-0.47465       ? might be 1.0232x slower
mandreel       x2      42.71301+-0.44397    ?    42.72978+-0.57699       ?
gbemu          x2      31.33819+-0.19275    !    34.86179+-2.00016       ! definitely 1.1124x slower
closure                 0.57518+-0.00524          0.57508+-0.00287       
jquery                  7.25927+-0.03098          7.25026+-0.03321       
box2d          x2       9.09817+-0.11729    !     9.39515+-0.03719       ! definitely 1.0326x slower
zlib           x2     378.31843+-11.71091       373.01766+-7.70996         might be 1.0142x faster
typescript     x2     659.46139+-5.79322    ?   667.88110+-7.43388       ? might be 1.0128x slower

<geometric>             5.32863+-0.02331    !     5.43187+-0.02289       ! definitely 1.0194x slower
Comment 10 Filip Pizlo 2015-10-07 16:04:23 PDT
Looks like most of that slow-down is due to the butterfly barrier in the FTL.  If I remove that, I get:

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

VMs tested:
"TipOfTree" at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r190675)
"CopyBarrier" at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r190682)

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

encrypt                 0.16692+-0.00209          0.16629+-0.00296       
decrypt                 2.87282+-0.04412          2.84572+-0.02408       
deltablue      x2       0.13846+-0.00603          0.13697+-0.00260         might be 1.0109x faster
earley                  0.29956+-0.00342    ?     0.30632+-0.00388       ? might be 1.0225x slower
boyer                   4.32069+-0.02527    ?     4.41047+-0.18573       ? might be 1.0208x slower
navier-stokes  x2       4.83726+-0.03186          4.83127+-0.01830       
raytrace       x2       0.85305+-0.00492    ?     0.86138+-0.00582       ?
richards       x2       0.08915+-0.00064    ?     0.09028+-0.00089       ? might be 1.0126x slower
splay          x2       0.34658+-0.00307    ?     0.34891+-0.00336       ?
regexp         x2      24.58088+-0.35666         24.51731+-0.18466       
pdfjs          x2      36.37347+-0.64157    ?    37.33655+-0.42489       ? might be 1.0265x slower
mandreel       x2      42.32493+-0.27079    ?    42.44305+-0.37117       ?
gbemu          x2      32.69099+-3.14224    ?    32.95333+-0.40209       ?
closure                 0.57916+-0.00414          0.57455+-0.00347       
jquery                  7.27796+-0.05738    ?     7.33825+-0.07197       ?
box2d          x2       9.09603+-0.16579    ?     9.20729+-0.07010       ? might be 1.0122x slower
zlib           x2     379.60745+-14.03118   ?   382.13815+-8.49859       ?
typescript     x2     661.29077+-11.22800   ?   668.84047+-14.93767      ? might be 1.0114x slower

<geometric>             5.33260+-0.05320    ?     5.36849+-0.01035       ? might be 1.0067x slower
Comment 11 Filip Pizlo 2015-10-07 16:13:32 PDT
OK, if the barrier masks the low bits instead of branching on them, the overhead becomes:

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

VMs tested:
"TipOfTree" at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r190675)
"CopyBarrier" at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r190682)

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

encrypt                 0.16557+-0.00047    ?     0.16584+-0.00208       ?
decrypt                 2.85933+-0.03293    !     2.94218+-0.00994       ! definitely 1.0290x slower
deltablue      x2       0.13595+-0.00254    ?     0.14036+-0.00484       ? might be 1.0325x slower
earley                  0.30679+-0.00515    ?     0.30979+-0.00580       ?
boyer                   4.36666+-0.09113          4.34825+-0.05969       
navier-stokes  x2       4.82753+-0.02203    ?     4.86634+-0.03402       ?
raytrace       x2       0.85859+-0.00615    ?     0.86685+-0.00765       ?
richards       x2       0.08878+-0.00069    ?     0.08927+-0.00082       ?
splay          x2       0.34879+-0.00460          0.34585+-0.00302       
regexp         x2      24.75299+-0.46284         24.28325+-0.23334         might be 1.0193x faster
pdfjs          x2      36.51325+-0.50687    !    37.39663+-0.26215       ! definitely 1.0242x slower
mandreel       x2      42.33943+-0.75062    ?    42.49637+-0.25814       ?
gbemu          x2      33.15231+-2.73128    ?    34.63046+-3.35769       ? might be 1.0446x slower
closure                 0.57394+-0.00168    ?     0.57444+-0.00364       ?
jquery                  7.28736+-0.10461    ?     7.37467+-0.12286       ? might be 1.0120x slower
box2d          x2       9.15321+-0.07894    ?     9.26354+-0.07849       ? might be 1.0121x slower
zlib           x2     386.29176+-5.55499        378.18919+-19.91077        might be 1.0214x faster
typescript     x2     670.35142+-8.24484    ?   671.42533+-14.72365      ?

<geometric>             5.35383+-0.04159    ?     5.39428+-0.04954       ? might be 1.0076x slower

I think we can live with this.  I have an idea for an optimization pass that will make most barriers just mask.
Comment 12 Filip Pizlo 2015-10-07 17:07:45 PDT
Here's the plan.  There will be two copied space read barriers:

Read-only read barrier: appropriate for when you will only be reading from copied space.

Normal read barrier: appropriate for reading and writing.

The read-only barrier will just mask off the space bits in the storage pointer.  The normal barrier will actually do copying.  My experiments show that just masking lowers the performance overhead to something that we can allow.

The way that this would work is that the copy phase would handshake before reusing any blocks that were evacuated by the copy phase.  Hence, if you load a pointer to copy space, that pointer remains valid until the next handshake.  It actually also remains valid across handshakes that just arise from allocation slow-paths, since those don't claim to overwrite the butterfly pointer.  It will be worth investigating whether that's a good idea or not.  It could be made to work if the copied space handshakes also do stack scans.  Those stack scans could then pin additional blocks.

This also happens to be correct because we cannot have concurrent writes to copied space.  If there is a write to copied space on this thread, then we'll just have to make sure that we don't use the read-only barrier. Basically, the phase to strength-reduce the barrier to be read-only would have to ensure that this does not happen:

a: GetButterflyReadOnly(@x)
b: GetButterfly(@y)
c: PutByOffset(@b, @x, things)
d: GetByOffset(@a, @y, things)

If we had this, then the GetByOffset would not read the right value in case @y ended up being the same as @x.  It would read the value for a different copy of the butterfly.

The way I want to formulate this optimization is that we use GetButterfly during most of compilation and then at the bitter end, we convert GetButterfly to GetButterflyReadOnly in cases where it's obviously legal.  I believe that it's legal so long as between the use of GetButterfly and the GetButterfly itself there are no operations that could repoint the butterfly.  We could even disable the optimization if there are any operations that could GC or even do any kinds of writes.
Comment 13 Filip Pizlo 2015-10-08 13:11:20 PDT
I managed to reduce the overhead a bit, by doing a combination of compiler optimizations and making the copy barrier slow path be an AnyRegCC patchpoint.  This ensures that the slow path call doesn't disturb register allocation.

I'll investigate why JSRegress had one crash.


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 (r190675)
"CopyBarrier" at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r190682)

Collected 7 samples per benchmark/VM, with 7 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                CopyBarrier                                    
SunSpider:
   3d-cube                                            4.7662+-0.3804            4.6425+-0.1875          might be 1.0266x faster
   3d-morph                                           5.3014+-0.0927     ?      5.5327+-0.4370        ? might be 1.0436x slower
   3d-raytrace                                        5.0922+-0.0475     !      5.2341+-0.0544        ! definitely 1.0279x slower
   access-binary-trees                                2.0643+-0.0744            2.0571+-0.0718        
   access-fannkuch                                    5.4184+-0.0530     ?      5.8516+-0.4520        ? might be 1.0799x slower
   access-nbody                                       2.6244+-0.2624            2.5362+-0.0986          might be 1.0348x faster
   access-nsieve                                      3.3632+-0.0717     ?      3.5043+-0.2237        ? might be 1.0419x slower
   bitops-3bit-bits-in-byte                           1.1710+-0.0277            1.1602+-0.0321        
   bitops-bits-in-byte                                3.1855+-0.0378     ?      3.2047+-0.0869        ?
   bitops-bitwise-and                                 2.0696+-0.1232            1.9996+-0.0656          might be 1.0350x faster
   bitops-nsieve-bits                                 3.0688+-0.3496     ?      3.1589+-0.2174        ? might be 1.0293x slower
   controlflow-recursive                              2.4271+-0.1528            2.3625+-0.0697          might be 1.0273x faster
   crypto-aes                                         3.9245+-0.1522     ?      4.1014+-0.2598        ? might be 1.0451x slower
   crypto-md5                                         2.4805+-0.1096            2.4675+-0.0426        
   crypto-sha1                                        2.5451+-0.2419     ?      2.5510+-0.1450        ?
   date-format-tofte                                  6.5511+-0.2136     ?      6.8525+-0.2094        ? might be 1.0460x slower
   date-format-xparb                                  4.5945+-0.2071     ?      4.7220+-0.3604        ? might be 1.0277x slower
   math-cordic                                        2.8170+-0.1096     ?      3.1216+-0.3657        ? might be 1.1081x slower
   math-partial-sums                                  4.7665+-0.1009     ?      4.7856+-0.2028        ?
   math-spectral-norm                                 1.9088+-0.0544     ?      1.9929+-0.1855        ? might be 1.0441x slower
   regexp-dna                                         6.2725+-0.2896            6.1806+-0.4382          might be 1.0149x faster
   string-base64                                      4.2017+-0.0722     ?      4.4229+-0.1821        ? might be 1.0527x slower
   string-fasta                                       5.8637+-0.1479     ?      6.1821+-0.6061        ? might be 1.0543x slower
   string-tagcloud                                    8.3752+-0.3444            8.3298+-0.8538        
   string-unpack-code                                18.2429+-0.4129     ?     18.3629+-0.7286        ?
   string-validate-input                              4.4104+-0.1731            4.3731+-0.1402        

   <arithmetic>                                       4.5195+-0.0273     ?      4.6035+-0.0595        ? might be 1.0186x slower

                                                        TipOfTree                CopyBarrier                                    
LongSpider:
   3d-cube                                          808.3404+-8.3470          798.3175+-6.3350          might be 1.0126x faster
   3d-morph                                        1516.9481+-7.1683         1512.5900+-11.8904       
   3d-raytrace                                      603.7644+-8.0754     ?    612.5661+-18.1150       ? might be 1.0146x slower
   access-binary-trees                              799.3973+-7.4798          796.1500+-6.6762        
   access-fannkuch                                  277.7800+-5.2077     !    297.7609+-12.0903       ! definitely 1.0719x slower
   access-nbody                                     525.1432+-13.5283         520.0782+-5.1100        
   access-nsieve                                    386.8527+-10.9209         380.0312+-5.7167          might be 1.0179x faster
   bitops-3bit-bits-in-byte                          34.3152+-0.7558     ?     34.7849+-1.3063        ? might be 1.0137x slower
   bitops-bits-in-byte                               75.0086+-1.8267     ?     75.4874+-2.3529        ?
   bitops-nsieve-bits                               408.7583+-4.0125     ?    409.1795+-5.1137        ?
   controlflow-recursive                            445.1824+-11.3172    ?    449.6433+-17.6219       ? might be 1.0100x slower
   crypto-aes                                       557.1924+-11.6190    ?    576.1128+-7.6855        ? might be 1.0340x slower
   crypto-md5                                       480.6033+-37.7685         454.6957+-14.4116         might be 1.0570x faster
   crypto-sha1                                      639.8119+-11.7997    !    664.6239+-5.9341        ! definitely 1.0388x slower
   date-format-tofte                                489.0001+-3.6508     !    512.3349+-8.0459        ! definitely 1.0477x slower
   date-format-xparb                                660.8737+-4.2211          654.9119+-6.0432        
   hash-map                                         153.3190+-3.5448          150.5832+-1.7580          might be 1.0182x faster
   math-cordic                                      484.3883+-3.7712     ?    486.5361+-4.9109        ?
   math-partial-sums                                461.9594+-9.7303     ?    465.6082+-7.5737        ?
   math-spectral-norm                               559.9304+-10.3547    ?    560.2048+-14.6957       ?
   string-base64                                    380.2801+-6.6147     ?    382.0573+-6.1234        ?
   string-fasta                                     368.0956+-4.1089     ?    369.5788+-4.3027        ?
   string-tagcloud                                  176.9904+-2.7296          176.8583+-2.3708        

   <geometric>                                      390.6977+-1.5000     ?    392.8431+-2.3303        ? might be 1.0055x slower

                                                        TipOfTree                CopyBarrier                                    
V8Spider:
   crypto                                            48.6737+-2.2567     ?     50.9360+-1.3245        ? might be 1.0465x slower
   deltablue                                         79.0785+-1.8271     ?     80.6070+-4.0047        ? might be 1.0193x slower
   earley-boyer                                      43.7642+-1.6482           43.2371+-1.1393          might be 1.0122x faster
   raytrace                                          30.5356+-1.3369     ?     31.5893+-1.1895        ? might be 1.0345x slower
   regexp                                            61.9969+-2.3919     ?     63.0524+-1.4130        ? might be 1.0170x slower
   richards                                          54.7079+-1.8301     ?     55.0555+-1.7762        ?
   splay                                             37.4195+-1.6466           36.3323+-1.6335          might be 1.0299x faster

   <geometric>                                       48.7045+-0.8551     ?     49.2693+-0.7708        ? might be 1.0116x slower

                                                        TipOfTree                CopyBarrier                                    
Octane:
   encrypt                                           0.16729+-0.00265          0.16563+-0.00408       
   decrypt                                           2.89979+-0.01268    !     3.08545+-0.07238       ! definitely 1.0640x slower
   deltablue                                x2       0.13879+-0.00177    !     0.14482+-0.00152       ! definitely 1.0434x slower
   earley                                            0.30634+-0.00287    ?     0.31311+-0.01222       ? might be 1.0221x slower
   boyer                                             4.46265+-0.13253          4.44548+-0.09677       
   navier-stokes                            x2       4.94364+-0.06512          4.89325+-0.04401         might be 1.0103x faster
   raytrace                                 x2       0.86805+-0.00914    ?     0.88108+-0.01718       ? might be 1.0150x slower
   richards                                 x2       0.09034+-0.00151    ?     0.09257+-0.00305       ? might be 1.0247x slower
   splay                                    x2       0.35379+-0.00776    ?     0.35436+-0.00824       ?
   regexp                                   x2      24.73347+-0.31910         24.62138+-0.61104       
   pdfjs                                    x2      36.85924+-0.48381    !    37.87825+-0.48652       ! definitely 1.0276x slower
   mandreel                                 x2      43.08522+-0.77892    ?    43.70283+-0.89659       ? might be 1.0143x slower
   gbemu                                    x2      31.57263+-0.94809    !    33.02382+-0.42752       ! definitely 1.0460x slower
   closure                                           0.58578+-0.00828          0.58408+-0.00695       
   jquery                                            7.50441+-0.27548          7.41799+-0.04790         might be 1.0117x faster
   box2d                                    x2       9.17197+-0.07876    !     9.37812+-0.10869       ! definitely 1.0225x slower
   zlib                                     x2     374.45736+-16.43373   ?   386.19931+-2.58896       ? might be 1.0314x slower
   typescript                               x2     659.08562+-7.71867    ?   665.02002+-7.03933       ?

   <geometric>                                       5.37771+-0.03183    !     5.46636+-0.02598       ! definitely 1.0165x slower

                                                        TipOfTree                CopyBarrier                                    
Kraken:
   ai-astar                                          137.638+-24.798           132.320+-1.326           might be 1.0402x faster
   audio-beat-detection                               50.059+-0.414      ?      50.917+-0.653         ? might be 1.0171x slower
   audio-dft                                          98.919+-1.813             97.646+-2.843           might be 1.0130x faster
   audio-fft                                          35.749+-0.572             35.317+-0.693           might be 1.0122x faster
   audio-oscillator                                   58.898+-1.842      ?      59.197+-1.135         ?
   imaging-darkroom                                   63.163+-3.830             61.218+-3.853           might be 1.0318x faster
   imaging-desaturate                                 51.681+-3.726             48.907+-1.590           might be 1.0567x faster
   imaging-gaussian-blur                              87.250+-2.235             87.209+-0.563         
   json-parse-financial                               39.864+-2.423             37.913+-1.305           might be 1.0515x faster
   json-stringify-tinderbox                           22.839+-0.862      ?      23.434+-0.864         ? might be 1.0260x slower
   stanford-crypto-aes                                40.409+-1.346      ?      42.930+-2.481         ? might be 1.0624x slower
   stanford-crypto-ccm                                35.866+-1.143      ?      37.068+-1.114         ? might be 1.0335x slower
   stanford-crypto-pbkdf2                             95.547+-1.506      ?      97.809+-2.936         ? might be 1.0237x slower
   stanford-crypto-sha256-iterative                   36.868+-0.800      ?      39.146+-2.638         ? might be 1.0618x slower

   <arithmetic>                                       61.054+-2.110             60.788+-0.955           might be 1.0044x faster

                                                        TipOfTree                CopyBarrier                                    
JSRegress:
   abc-forward-loop-equal                            30.6590+-1.8215     ?     31.1541+-1.3827        ? might be 1.0161x slower
   abc-postfix-backward-loop                         29.6855+-1.2718     ?     30.6586+-0.9921        ? might be 1.0328x slower
   abc-simple-backward-loop                          29.3266+-0.9622     ?     29.9937+-1.2130        ? might be 1.0227x slower
   abc-simple-forward-loop                           30.7038+-0.8400           29.8054+-0.8279          might be 1.0301x faster
   abc-skippy-loop                                   21.2514+-0.3127     ?     22.4727+-1.3827        ? might be 1.0575x slower
   abs-boolean                                        2.4490+-0.0571     ?      2.5211+-0.2224        ? might be 1.0294x slower
   adapt-to-double-divide                            16.4074+-0.4094     ?     16.6128+-0.2955        ? might be 1.0125x slower
   aliased-arguments-getbyval                         1.3188+-0.1840            1.2580+-0.0953          might be 1.0484x faster
   allocate-big-object                                2.6286+-0.3641                ERROR             
   arguments-named-and-reflective                    10.7695+-0.3839     ?     10.8425+-0.5374        ?
   arguments-out-of-bounds                            9.2255+-0.3140     ?      9.4253+-0.1036        ? might be 1.0217x slower
   arguments-strict-mode                              9.2814+-0.2862     ?      9.7877+-0.6464        ? might be 1.0546x slower
   arguments                                          8.6960+-0.3973            8.6681+-0.2989        
   arity-mismatch-inlining                            0.8626+-0.0891            0.8553+-0.0433        
   array-access-polymorphic-structure                 7.0733+-0.0932     ?      7.1838+-0.3399        ? might be 1.0156x slower
   array-nonarray-polymorhpic-access                 23.8139+-0.6369     ?     24.9086+-0.8931        ? might be 1.0460x slower
   array-prototype-every                             78.0103+-3.0998           77.9435+-2.8470        
   array-prototype-forEach                           86.3915+-24.9340          75.5431+-1.9417          might be 1.1436x faster
   array-prototype-map                               84.2718+-2.5272           81.0442+-1.1908          might be 1.0398x faster
   array-prototype-reduce                            72.5066+-2.0828     ?     72.6929+-1.7754        ?
   array-prototype-reduceRight                       73.3231+-1.9726           72.8541+-1.6228        
   array-prototype-some                              77.4330+-1.9121           76.2155+-1.0174          might be 1.0160x faster
   array-splice-contiguous                           21.4319+-0.9223     !     23.9982+-1.2467        ! definitely 1.1197x slower
   array-with-double-add                              3.5051+-0.1155     ?      3.7520+-0.3955        ? might be 1.0704x slower
   array-with-double-increment                        3.0282+-0.0292     !      3.1891+-0.0931        ! definitely 1.0531x slower
   array-with-double-mul-add                          4.3388+-0.2839     ?      4.3917+-0.0691        ? might be 1.0122x slower
   array-with-double-sum                              3.2249+-0.1514            3.1937+-0.0959        
   array-with-int32-add-sub                           5.7432+-0.1193     ?      5.9404+-0.1346        ? might be 1.0343x slower
   array-with-int32-or-double-sum                     3.2309+-0.0419     ?      3.4370+-0.3736        ? might be 1.0638x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     26.8286+-1.4572           26.6568+-0.9483        
   ArrayBuffer-DataView-alloc-long-lived             12.2605+-0.5788     ?     12.3423+-0.2830        ?
   ArrayBuffer-Int32Array-byteOffset                  3.6029+-0.1094     ?      3.6260+-0.1349        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     27.6990+-1.8468     ?     29.2463+-5.6984        ? might be 1.0559x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     20.3241+-1.0080     ?     20.4301+-1.2533        ?
   ArrayBuffer-Int8Array-alloc-long-lived            11.5661+-1.0370     ?     11.6934+-0.7619        ? might be 1.0110x slower
   ArrayBuffer-Int8Array-alloc                        9.7154+-0.2716     ?     10.2774+-1.2309        ? might be 1.0579x slower
   arrowfunction-call                                10.9705+-0.1618     ?     11.0342+-0.5708        ?
   asmjs_bool_bug                                     7.6852+-0.2311     ?      7.8523+-0.3048        ? might be 1.0218x slower
   assign-custom-setter-polymorphic                   2.4664+-0.1589            2.4250+-0.0416          might be 1.0171x faster
   assign-custom-setter                               3.3037+-0.2110     ?      3.3522+-0.1698        ? might be 1.0147x slower
   basic-set                                          7.5387+-0.6027            7.4205+-0.5196          might be 1.0159x faster
   big-int-mul                                        3.5354+-0.1981            3.4749+-0.0683          might be 1.0174x faster
   boolean-test                                       3.0661+-0.2779            2.9166+-0.0489          might be 1.0513x faster
   branch-fold                                        3.5935+-0.0624     ?      3.6259+-0.0816        ?
   branch-on-string-as-boolean                       16.3489+-0.2960     ?     16.9280+-0.5899        ? might be 1.0354x slower
   by-val-generic                                     2.4171+-0.0855     ?      2.4299+-0.0733        ?
   call-spread-apply                                 27.4577+-1.4944     ?     28.4024+-1.3483        ? might be 1.0344x slower
   call-spread-call                                  20.8317+-0.9600     !     22.9287+-1.0916        ! definitely 1.1007x slower
   captured-assignments                               0.4188+-0.0075     ?      0.4575+-0.0704        ? might be 1.0923x slower
   cast-int-to-double                                 5.0900+-0.0455     ?      5.2130+-0.2157        ? might be 1.0242x slower
   cell-argument                                      5.8991+-0.1209     ?      6.2134+-0.6124        ? might be 1.0533x slower
   cfg-simplify                                       2.8357+-0.0547     ?      2.9210+-0.0878        ? might be 1.0301x slower
   chain-getter-access                                8.3406+-0.0886     ?      8.3418+-0.1720        ?
   cmpeq-obj-to-obj-other                            12.7599+-1.3523           12.7399+-1.3246        
   constant-test                                      5.0051+-0.2606            4.8210+-0.1080          might be 1.0382x faster
   create-lots-of-functions                           9.9673+-0.6443            9.8217+-0.5093          might be 1.0148x faster
   cse-new-array-buffer                               2.4275+-0.1078            2.3741+-0.1696          might be 1.0225x faster
   cse-new-array                                      2.3277+-0.1113     ?      2.3931+-0.0902        ? might be 1.0281x slower
   DataView-custom-properties                        31.9180+-1.0935     ?     32.6223+-1.2261        ? might be 1.0221x slower
   delay-tear-off-arguments-strictmode               11.8948+-0.1806     ?     13.2699+-1.2740        ? might be 1.1156x slower
   deltablue-varargs                                173.6674+-2.9296     ?    174.5814+-8.9779        ?
   destructuring-arguments                          158.9051+-1.9785     !    168.6236+-6.6302        ! definitely 1.0612x slower
   destructuring-parameters-overridden-by-function   
                                                      0.4663+-0.0259            0.4491+-0.0128          might be 1.0384x faster
   destructuring-swap                                 4.8332+-0.1437            4.7660+-0.0568          might be 1.0141x faster
   direct-arguments-getbyval                          1.2699+-0.1097     ?      1.3331+-0.1926        ? might be 1.0497x slower
   div-boolean-double                                 5.3303+-0.0516            5.2781+-0.0696        
   div-boolean                                        8.1428+-0.1021     ?      8.2388+-0.1650        ? might be 1.0118x slower
   double-get-by-val-out-of-bounds                    4.5391+-0.1188            4.3255+-0.1394          might be 1.0494x faster
   double-pollution-getbyval                          8.7385+-0.1204            8.6365+-0.1980          might be 1.0118x faster
   double-pollution-putbyoffset                       3.6040+-0.0959     ?      3.7566+-0.1989        ? might be 1.0423x slower
   double-real-use                                   25.8704+-2.0018           24.2866+-1.0300          might be 1.0652x faster
   double-to-int32-typed-array-no-inline              2.4109+-0.2561            2.2370+-0.1353          might be 1.0778x faster
   double-to-int32-typed-array                        2.0393+-0.0323     ?      2.1896+-0.2445        ? might be 1.0737x slower
   double-to-uint32-typed-array-no-inline             2.3761+-0.1894            2.2871+-0.0599          might be 1.0389x faster
   double-to-uint32-typed-array                       2.1503+-0.0702            2.1140+-0.0431          might be 1.0171x faster
   elidable-new-object-dag                           34.3404+-0.9224           34.2019+-1.1904        
   elidable-new-object-roflcopter                    33.2028+-1.5736           32.9451+-1.0707        
   elidable-new-object-then-call                     32.7499+-1.7140           31.2056+-0.2664          might be 1.0495x faster
   elidable-new-object-tree                          37.9596+-1.0419     ?     38.0883+-1.5517        ?
   empty-string-plus-int                              4.9589+-0.2909            4.8333+-0.1714          might be 1.0260x faster
   emscripten-cube2hash                              26.8223+-1.5437     ?     28.4890+-0.8371        ? might be 1.0621x slower
   exit-length-on-plain-object                       14.7855+-0.4407     ?     15.5168+-0.2944        ? might be 1.0495x slower
   external-arguments-getbyval                        1.2294+-0.0927     ?      1.3449+-0.2542        ? might be 1.0939x slower
   external-arguments-putbyval                        2.5083+-0.6202            2.2907+-0.1813          might be 1.0950x faster
   fixed-typed-array-storage-var-index                1.2506+-0.0517     ?      1.2661+-0.0773        ? might be 1.0124x slower
   fixed-typed-array-storage                          0.9774+-0.0986            0.9364+-0.0795          might be 1.0438x faster
   Float32Array-matrix-mult                           4.0558+-0.1321     ?      4.3664+-0.2486        ? might be 1.0766x slower
   Float32Array-to-Float64Array-set                  51.3637+-2.3033     !     57.7694+-2.1006        ! definitely 1.1247x slower
   Float64Array-alloc-long-lived                     61.3879+-2.9361     ?     62.4184+-2.1785        ? might be 1.0168x slower
   Float64Array-to-Int16Array-set                    60.1937+-2.2801     !     67.5167+-2.2053        ! definitely 1.1217x slower
   fold-double-to-int                                12.2568+-0.2925     ?     12.7076+-0.5708        ? might be 1.0368x slower
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.7931+-0.9654     ?     11.4110+-1.3351        ? might be 1.0573x slower
   fold-get-by-id-to-multi-get-by-offset              9.7948+-0.4183     ?     10.0356+-1.4843        ? might be 1.0246x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.4846+-1.4414     ?      9.1590+-0.9151        ? might be 1.0795x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      8.1879+-1.1790            8.0919+-1.2143          might be 1.0119x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      9.4583+-1.2846     ?      9.9604+-1.6790        ? might be 1.0531x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                     10.7438+-0.5967           10.4461+-0.6831          might be 1.0285x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     10.1764+-1.0502            9.6116+-0.4345          might be 1.0588x faster
   fold-put-by-id-to-multi-put-by-offset             10.0394+-0.6644     ?     11.4487+-1.4304        ? might be 1.1404x slower
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                      9.9450+-0.5614     ?     11.2488+-1.5738        ? might be 1.1311x slower
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     10.7750+-1.4143     ?     11.3511+-1.5385        ? might be 1.0535x slower
   fold-put-structure                                 8.4439+-0.4773            7.8015+-1.1897          might be 1.0823x faster
   for-of-iterate-array-entries                      10.9854+-0.3150     ?     11.0797+-0.2976        ?
   for-of-iterate-array-keys                          3.4847+-0.2165     ?      3.5036+-0.1870        ?
   for-of-iterate-array-values                        3.3423+-0.0517     ?      3.6323+-0.4162        ? might be 1.0868x slower
   fround                                            18.3348+-1.1165           17.6717+-0.4989          might be 1.0375x faster
   ftl-library-inlining-dataview                     56.7878+-0.8081     ?     58.1045+-0.8218        ? might be 1.0232x slower
   ftl-library-inlining                              99.9291+-3.7241     ?    103.9301+-2.8443        ? might be 1.0400x slower
   function-call                                     11.1311+-0.4290           10.9091+-0.3288          might be 1.0203x faster
   function-dot-apply                                 2.0285+-0.0364     ?      2.0495+-0.0366        ? might be 1.0104x slower
   function-test                                      2.7009+-0.0333     ?      2.7052+-0.0665        ?
   function-with-eval                                84.9795+-1.8859     ?     85.2165+-3.0844        ?
   gcse-poly-get-less-obvious                        21.9874+-0.4175           21.4637+-0.6506          might be 1.0244x faster
   gcse-poly-get                                     22.0220+-0.5826     ?     23.0745+-2.2413        ? might be 1.0478x slower
   gcse                                               3.4215+-0.0610     ?      3.4631+-0.2481        ? might be 1.0122x slower
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.6172+-0.0821     ?      2.6242+-0.0934        ?
   get-by-id-bimorphic-check-structure-elimination   
                                                      4.7314+-0.1266     ?      4.8940+-0.6550        ? might be 1.0344x slower
   get-by-id-chain-from-try-block                     2.4050+-0.0302     ?      2.4995+-0.0918        ? might be 1.0393x slower
   get-by-id-check-structure-elimination              3.9420+-0.0968     ?      3.9546+-0.1441        ?
   get-by-id-proto-or-self                           15.1943+-0.3947     ?     16.2537+-1.1803        ? might be 1.0697x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.9506+-0.2353            2.8646+-0.0570          might be 1.0300x faster
   get-by-id-self-or-proto                           15.2104+-0.9210     ?     15.9092+-0.7481        ? might be 1.0459x slower
   get-by-val-out-of-bounds                           4.1004+-0.0671     ?      4.2407+-0.1140        ? might be 1.0342x slower
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      2.7057+-0.0600            2.6989+-0.0237        
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                      6.0554+-0.0734            6.0462+-0.0358        
   get-by-val-with-string-chain-from-try-block   
                                                      2.4565+-0.0854     ?      2.6935+-0.4360        ? might be 1.0965x slower
   get-by-val-with-string-check-structure-elimination   
                                                      5.3286+-0.3639            5.3104+-0.1357        
   get-by-val-with-string-proto-or-self              15.5826+-0.9410     ?     16.1534+-0.7691        ? might be 1.0366x slower
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      3.0785+-0.0949     ?      3.1017+-0.0754        ?
   get-by-val-with-string-self-or-proto              16.6108+-0.5025     ?     16.6999+-1.0083        ?
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      2.8737+-0.0361     ?      2.9304+-0.0524        ? might be 1.0197x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     12.6238+-0.4383           12.5592+-0.5372        
   get-by-val-with-symbol-chain-from-try-block   
                                                      2.5432+-0.1498     ?      2.7756+-0.4494        ? might be 1.0914x slower
   get-by-val-with-symbol-check-structure-elimination   
                                                     11.1808+-0.1683     ?     11.7356+-0.6821        ? might be 1.0496x slower
   get-by-val-with-symbol-proto-or-self              16.3438+-0.7637           16.1578+-0.4404          might be 1.0115x faster
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      3.6880+-0.0605     ?      3.8547+-0.3592        ? might be 1.0452x slower
   get-by-val-with-symbol-self-or-proto              17.1835+-1.9067           16.0462+-0.4939          might be 1.0709x faster
   get_callee_monomorphic                             2.4547+-0.3754     ?      2.4604+-0.2923        ?
   get_callee_polymorphic                             3.2985+-0.1343     ?      3.3481+-0.1732        ? might be 1.0150x slower
   getter-no-activation                               4.8664+-0.1482     ?      4.8853+-0.1574        ?
   getter-prototype                                   7.7094+-0.0770     ?      8.4655+-1.4652        ? might be 1.0981x slower
   getter-richards-try-catch                       1005.4488+-24.8125    ?   1021.9084+-22.9692       ? might be 1.0164x slower
   getter-richards                                  115.3779+-4.2928     ?    118.5544+-5.5394        ? might be 1.0275x slower
   getter                                             5.6022+-0.5553     ?      5.6796+-0.6410        ? might be 1.0138x slower
   global-object-access-with-mutating-structure   
                                                      5.7913+-0.2995            5.6892+-0.3438          might be 1.0179x faster
   global-var-const-infer-fire-from-opt               0.9864+-0.2678            0.8283+-0.1334          might be 1.1909x faster
   global-var-const-infer                             0.6588+-0.0508            0.6459+-0.0350          might be 1.0200x faster
   hard-overflow-check-equal                         28.1686+-0.9434           27.9182+-1.3270        
   hard-overflow-check                               28.0322+-1.1118           27.0617+-0.6689          might be 1.0359x faster
   HashMap-put-get-iterate-keys                      25.6188+-1.6080     ?     26.3565+-1.1643        ? might be 1.0288x slower
   HashMap-put-get-iterate                           28.6742+-1.1881     ?     29.2480+-1.8918        ? might be 1.0200x slower
   HashMap-string-put-get-iterate                    24.6393+-1.8683     ?     25.0311+-1.3551        ? might be 1.0159x slower
   hoist-make-rope                                    8.2698+-0.5685     ?      9.0882+-0.7496        ? might be 1.0990x slower
   hoist-poly-check-structure-effectful-loop   
                                                      3.6452+-0.3195            3.6182+-0.0769        
   hoist-poly-check-structure                         3.0615+-0.0686     ?      3.1478+-0.1459        ? might be 1.0282x slower
   imul-double-only                                   7.5462+-0.3738     ?      7.8336+-0.5846        ? might be 1.0381x slower
   imul-int-only                                      8.3655+-0.9055     ?      8.8296+-0.8829        ? might be 1.0555x slower
   imul-mixed                                         7.0018+-0.6150     ?      7.3048+-0.4367        ? might be 1.0433x slower
   in-four-cases                                     17.3836+-0.7132     ?     17.6914+-1.0427        ? might be 1.0177x slower
   in-one-case-false                                  9.3865+-0.2369     !     10.1736+-0.4552        ! definitely 1.0839x slower
   in-one-case-true                                   9.7138+-0.4195     ?      9.8720+-0.2090        ? might be 1.0163x slower
   in-two-cases                                       9.5970+-0.2521     !     10.7829+-0.7989        ! definitely 1.1236x slower
   indexed-properties-in-objects                      2.8835+-0.1862     ?      2.9231+-0.1013        ? might be 1.0137x slower
   infer-closure-const-then-mov-no-inline             3.7053+-0.3934            3.6172+-0.0348          might be 1.0243x faster
   infer-closure-const-then-mov                      18.5825+-0.8745     ?     18.6647+-0.4938        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     10.9288+-0.3482     ?     11.1655+-0.3255        ? might be 1.0217x slower
   infer-closure-const-then-put-to-scope             23.1673+-0.5307           22.5123+-0.2859          might be 1.0291x faster
   infer-closure-const-then-reenter-no-inline   
                                                     48.3849+-1.0860     ?     49.0010+-1.5179        ? might be 1.0127x slower
   infer-closure-const-then-reenter                  23.2185+-1.6642     ?     23.7557+-1.3734        ? might be 1.0231x slower
   infer-constant-global-property                     3.3882+-0.0847     ?      3.4458+-0.0883        ? might be 1.0170x slower
   infer-constant-property                            2.6484+-0.1086     ?      2.7165+-0.1910        ? might be 1.0257x slower
   infer-one-time-closure-ten-vars                    8.0185+-0.6982     ?      8.2620+-0.6667        ? might be 1.0304x slower
   infer-one-time-closure-two-vars                    7.6945+-0.5659            7.3807+-0.1622          might be 1.0425x faster
   infer-one-time-closure                             7.3712+-0.5684     ?      7.4239+-0.4141        ?
   infer-one-time-deep-closure                       10.8376+-0.2950     ?     10.8435+-0.4889        ?
   inline-arguments-access                            3.6148+-0.1043     ?      3.6495+-0.1774        ?
   inline-arguments-aliased-access                    3.7190+-0.2212     ?      3.8235+-0.5617        ? might be 1.0281x slower
   inline-arguments-local-escape                      3.8052+-0.3365            3.6920+-0.1036          might be 1.0307x faster
   inline-get-scoped-var                              4.5738+-0.1311     ?      4.6055+-0.1369        ?
   inlined-put-by-id-transition                       9.4571+-0.3305     ?      9.6647+-0.4817        ? might be 1.0219x slower
   inlined-put-by-val-with-string-transition   
                                                     41.4900+-1.4196     ?     41.8797+-1.2046        ?
   inlined-put-by-val-with-symbol-transition   
                                                     42.3209+-2.0520     ?     43.5560+-2.5896        ? might be 1.0292x slower
   int-or-other-abs-then-get-by-val                   4.5505+-0.0627            4.5249+-0.1030        
   int-or-other-abs-zero-then-get-by-val             15.8814+-0.7079     ?     16.3388+-0.4567        ? might be 1.0288x slower
   int-or-other-add-then-get-by-val                   4.5638+-0.1009     ^      4.3886+-0.0632        ^ definitely 1.0399x faster
   int-or-other-add                                   5.5571+-1.3414     ?      6.0696+-2.7271        ? might be 1.0922x slower
   int-or-other-div-then-get-by-val                   3.7647+-0.1109     ?      3.9653+-0.2868        ? might be 1.0533x slower
   int-or-other-max-then-get-by-val                   4.0655+-0.2394            3.8470+-0.0757          might be 1.0568x faster
   int-or-other-min-then-get-by-val                   3.7535+-0.0579            3.7424+-0.1476        
   int-or-other-mod-then-get-by-val                   3.5207+-0.0894            3.4862+-0.0283        
   int-or-other-mul-then-get-by-val                   3.6046+-0.2118     ?      3.7240+-0.1508        ? might be 1.0331x slower
   int-or-other-neg-then-get-by-val                   4.0672+-0.0996     ?      4.3342+-0.3377        ? might be 1.0657x slower
   int-or-other-neg-zero-then-get-by-val             15.4683+-0.2474     !     16.8065+-0.9258        ! definitely 1.0865x slower
   int-or-other-sub-then-get-by-val                   4.5749+-0.1324     ?      4.6178+-0.2710        ?
   int-or-other-sub                                   3.5448+-0.1300            3.4526+-0.0462          might be 1.0267x faster
   int-overflow-local                                 4.4065+-0.5137            4.1514+-0.1157          might be 1.0614x faster
   Int16Array-alloc-long-lived                       45.5349+-1.7437           44.6700+-1.9541          might be 1.0194x faster
   Int16Array-bubble-sort-with-byteLength            17.5338+-0.6191     !     20.7324+-1.2414        ! definitely 1.1824x slower
   Int16Array-bubble-sort                            17.7482+-1.5849           17.5123+-0.3778          might be 1.0135x faster
   Int16Array-load-int-mul                            1.4406+-0.0453     ?      1.4452+-0.0282        ?
   Int16Array-to-Int32Array-set                      46.1750+-1.1464     !     55.1577+-3.0383        ! definitely 1.1945x slower
   Int32Array-alloc-large                            13.0186+-1.2865           12.8819+-0.7258          might be 1.0106x faster
   Int32Array-alloc-long-lived                       49.9589+-1.3855     ?     51.4449+-2.5524        ? might be 1.0297x slower
   Int32Array-alloc                                   2.7975+-0.1117     ?      2.8990+-0.1627        ? might be 1.0363x slower
   Int32Array-Int8Array-view-alloc                    5.9952+-0.1325     ?      6.2015+-0.4513        ? might be 1.0344x slower
   int52-spill                                        4.5902+-0.1451            4.5542+-0.1192        
   Int8Array-alloc-long-lived                        39.1768+-0.5026     ?     39.9347+-1.5429        ? might be 1.0193x slower
   Int8Array-load-with-byteLength                     3.3650+-0.0787     ?      3.4258+-0.0959        ? might be 1.0181x slower
   Int8Array-load                                     3.3515+-0.0271     ?      3.6637+-0.5932        ? might be 1.0932x slower
   integer-divide                                    10.4616+-0.3260           10.3649+-0.2060        
   integer-modulo                                     1.5902+-0.0432            1.5768+-0.0560        
   is-boolean-fold-tricky                             3.8190+-0.0910     ?      3.8734+-0.2205        ? might be 1.0142x slower
   is-boolean-fold                                    2.6538+-0.0298     ?      2.6738+-0.0672        ?
   is-function-fold-tricky-internal-function   
                                                      9.4066+-0.2308     ?      9.7077+-0.2618        ? might be 1.0320x slower
   is-function-fold-tricky                            4.0384+-0.0703     ?      4.0931+-0.1233        ? might be 1.0135x slower
   is-function-fold                                   2.6630+-0.0312     ?      2.7481+-0.0927        ? might be 1.0320x slower
   is-number-fold-tricky                              3.9123+-0.1018     ?      4.0567+-0.0621        ? might be 1.0369x slower
   is-number-fold                                     2.6808+-0.0678            2.6515+-0.0460          might be 1.0110x faster
   is-object-or-null-fold-functions                   2.6874+-0.0788     ?      2.7388+-0.0847        ? might be 1.0191x slower
   is-object-or-null-fold-less-tricky                 4.0190+-0.0490     ?      4.0589+-0.1453        ?
   is-object-or-null-fold-tricky                      4.7369+-0.0716     ?      4.7738+-0.1126        ?
   is-object-or-null-fold                             2.6790+-0.0532     ?      2.7861+-0.1835        ? might be 1.0400x slower
   is-object-or-null-trickier-function                4.0523+-0.0890     ?      4.5141+-0.9218        ? might be 1.1140x slower
   is-object-or-null-trickier-internal-function   
                                                      9.8590+-0.3874            9.7710+-0.1937        
   is-object-or-null-tricky-function                  4.0529+-0.1096     ?      4.2453+-0.2571        ? might be 1.0475x slower
   is-object-or-null-tricky-internal-function   
                                                      7.7717+-0.5504            7.2287+-0.1001          might be 1.0751x faster
   is-string-fold-tricky                              3.9346+-0.0938     ?      4.0119+-0.0373        ? might be 1.0197x slower
   is-string-fold                                     2.6622+-0.0624     ?      2.6888+-0.0813        ?
   is-undefined-fold-tricky                           3.4983+-0.2280            3.3741+-0.0840          might be 1.0368x faster
   is-undefined-fold                                  2.6226+-0.0496     ?      2.6937+-0.1122        ? might be 1.0271x slower
   JSONP-negative-0                                   0.2531+-0.0076     ?      0.2716+-0.0387        ? might be 1.0729x slower
   large-int-captured                                 4.1351+-0.2436            4.0534+-0.1025          might be 1.0201x faster
   large-int-neg                                     14.0043+-0.4924     ?     14.8794+-0.7836        ? might be 1.0625x slower
   large-int                                         13.0544+-0.4132           12.8546+-0.2972          might be 1.0155x faster
   load-varargs-elimination                          21.4800+-1.1890     ?     21.7145+-0.8264        ? might be 1.0109x slower
   logical-not-weird-types                            3.0872+-0.0412            3.0623+-0.0619        
   logical-not                                        4.5747+-0.4507            4.3923+-0.0677          might be 1.0415x faster
   lots-of-fields                                     9.0352+-0.2073     ?      9.6231+-0.5304        ? might be 1.0651x slower
   make-indexed-storage                               2.7673+-0.1632     ?      3.1042+-0.4340        ? might be 1.1218x slower
   make-rope-cse                                      3.7874+-0.3563     ?      3.8360+-0.4716        ? might be 1.0128x slower
   marsaglia-larger-ints                             32.4641+-1.2311     ?     32.6179+-1.4938        ?
   marsaglia-osr-entry                               21.5866+-0.7689     ?     21.6602+-0.7443        ?
   math-with-out-of-bounds-array-values              22.5623+-1.0670           21.9959+-0.8702          might be 1.0258x faster
   max-boolean                                        2.6351+-0.1115            2.6151+-0.0321        
   method-on-number                                  16.3605+-0.6159     !     17.6190+-0.5695        ! definitely 1.0769x slower
   min-boolean                                        2.6448+-0.0393            2.6247+-0.0493        
   minus-boolean-double                               3.0406+-0.0366     ?      3.1110+-0.0585        ? might be 1.0232x slower
   minus-boolean                                      2.3601+-0.1217            2.3158+-0.0318          might be 1.0191x faster
   misc-strict-eq                                    27.7926+-0.9336     ?     29.6031+-1.7581        ? might be 1.0651x slower
   mod-boolean-double                                11.1963+-0.3291           11.1539+-0.2415        
   mod-boolean                                        8.5988+-0.4055            8.3114+-0.1436          might be 1.0346x faster
   mul-boolean-double                                 3.7711+-0.4771            3.6164+-0.0693          might be 1.0428x faster
   mul-boolean                                        2.7920+-0.0761     ?      2.8013+-0.0596        ?
   neg-boolean                                        3.1075+-0.0679     ?      3.1896+-0.2640        ? might be 1.0264x slower
   negative-zero-divide                               0.3801+-0.0205     ^      0.3404+-0.0109        ^ definitely 1.1167x faster
   negative-zero-modulo                               0.3342+-0.0192     ?      0.3752+-0.1188        ? might be 1.1225x slower
   negative-zero-negate                               0.3390+-0.0376            0.3221+-0.0202          might be 1.0526x faster
   nested-function-parsing                           46.2588+-2.0377           45.0798+-0.4822          might be 1.0262x faster
   new-array-buffer-dead                             90.1220+-1.9132           88.8659+-1.9215          might be 1.0141x faster
   new-array-buffer-push                              6.7249+-0.7724            6.3567+-0.5220          might be 1.0579x faster
   new-array-dead                                    15.6755+-1.7513           15.5379+-0.7764        
   new-array-push                                     3.4268+-0.0946     ?      3.6585+-0.1564        ? might be 1.0676x slower
   no-inline-constructor                             32.0386+-0.9367     ?     32.5082+-1.2402        ? might be 1.0147x slower
   number-test                                        2.9875+-0.0959            2.8943+-0.0827          might be 1.0322x faster
   object-closure-call                                4.9897+-0.3767            4.8914+-0.1829          might be 1.0201x faster
   object-get-own-property-symbols-on-large-array   
                                                      4.1511+-0.2788     ?      4.2866+-0.3505        ? might be 1.0326x slower
   object-test                                        2.8504+-0.3006            2.6847+-0.0463          might be 1.0617x faster
   obvious-sink-pathology-taken                      98.6789+-1.0103     ?     99.8858+-3.0662        ? might be 1.0122x slower
   obvious-sink-pathology                            95.2815+-1.7659           94.1987+-0.8287          might be 1.0115x faster
   obviously-elidable-new-object                     29.4531+-1.5140           29.0735+-0.7013          might be 1.0131x faster
   plus-boolean-arith                                 2.4350+-0.0585            2.4219+-0.1009        
   plus-boolean-double                                3.0693+-0.0662     ?      3.1041+-0.0415        ? might be 1.0114x slower
   plus-boolean                                       2.5217+-0.0309     ?      2.6392+-0.2970        ? might be 1.0466x slower
   poly-chain-access-different-prototypes-simple   
                                                      2.6056+-0.0838     ?      2.6952+-0.2737        ? might be 1.0344x slower
   poly-chain-access-different-prototypes             2.5197+-0.0438     ?      2.5754+-0.0537        ? might be 1.0221x slower
   poly-chain-access-simpler                          2.5987+-0.0807     ?      2.7213+-0.1822        ? might be 1.0472x slower
   poly-chain-access                                  2.5794+-0.1711     ?      2.6528+-0.2711        ? might be 1.0284x slower
   poly-stricteq                                     50.2005+-0.8556     ?     52.5764+-1.9447        ? might be 1.0473x slower
   polymorphic-array-call                             1.4366+-0.4321            1.2825+-0.0799          might be 1.1202x faster
   polymorphic-get-by-id                              2.9078+-0.2080            2.8430+-0.0287          might be 1.0228x faster
   polymorphic-put-by-id                             27.6405+-0.7440     ?     28.5027+-0.8366        ? might be 1.0312x slower
   polymorphic-put-by-val-with-string                29.1290+-0.9583           29.0407+-1.1219        
   polymorphic-put-by-val-with-symbol                29.3390+-0.9446           28.8688+-0.7776          might be 1.0163x faster
   polymorphic-structure                             12.5812+-0.4667           12.5263+-0.2383        
   polyvariant-monomorphic-get-by-id                  6.5031+-0.7705     ?      6.9377+-1.0840        ? might be 1.0668x slower
   proto-getter-access                                8.3912+-0.3632            8.2522+-0.2482          might be 1.0169x faster
   prototype-access-with-mutating-prototype           5.3131+-0.1031     ?      5.3802+-0.1355        ? might be 1.0126x slower
   put-by-id-replace-and-transition                   7.6355+-0.2486     ?      7.7525+-0.6745        ? might be 1.0153x slower
   put-by-id-slightly-polymorphic                     2.7017+-0.0881            2.6827+-0.0528        
   put-by-id                                         10.1748+-0.5817            9.6402+-0.6494          might be 1.0555x faster
   put-by-val-direct                                  0.3390+-0.0228            0.3358+-0.0192        
   put-by-val-large-index-blank-indexing-type   
                                                      5.2655+-0.3618     ?      5.3822+-0.3356        ? might be 1.0222x slower
   put-by-val-machine-int                             2.4635+-0.1209            2.4504+-0.0718        
   put-by-val-with-string-replace-and-transition   
                                                     10.2629+-0.6259           10.0688+-0.2064          might be 1.0193x faster
   put-by-val-with-string-slightly-polymorphic   
                                                      2.9965+-0.2743     ?      3.0203+-0.1120        ?
   put-by-val-with-string                            10.9746+-0.8727           10.8697+-0.7526        
   put-by-val-with-symbol-replace-and-transition   
                                                     12.5726+-1.3784           12.1820+-0.6581          might be 1.0321x faster
   put-by-val-with-symbol-slightly-polymorphic   
                                                      3.1781+-0.0371     ?      3.2084+-0.0559        ?
   put-by-val-with-symbol                            11.0080+-1.0843           10.5042+-0.6367          might be 1.0480x faster
   rare-osr-exit-on-local                            13.7280+-0.2775     ?     13.7878+-0.4894        ?
   raytrace-with-empty-try-catch                      5.5283+-0.9665            5.2341+-0.1108          might be 1.0562x faster
   raytrace-with-try-catch                            9.6937+-0.2994     ?     10.0346+-0.3156        ? might be 1.0352x slower
   register-pressure-from-osr                        16.8567+-0.5259           16.5480+-0.3758          might be 1.0187x faster
   repeat-multi-get-by-offset                        22.1275+-0.5520     ?     22.2415+-0.6833        ?
   richards-empty-try-catch                          72.1535+-2.1002     ?     73.4194+-2.1236        ? might be 1.0175x slower
   richards-try-catch                               248.0147+-11.1846         245.6300+-11.0472       
   setter-prototype                                   7.7951+-0.2406     ?      7.8192+-0.2876        ?
   setter                                             6.0612+-0.6760     ?      6.4061+-0.5878        ? might be 1.0569x slower
   simple-activation-demo                            24.5290+-0.8675           24.5137+-0.8074        
   simple-getter-access                              11.0701+-0.2543           10.8294+-0.2550          might be 1.0222x faster
   simple-poly-call-nested                            8.3529+-0.2052     ?      8.7873+-0.4768        ? might be 1.0520x slower
   simple-poly-call                                   1.3114+-0.1706            1.2464+-0.0204          might be 1.0522x faster
   sin-boolean                                       21.9640+-2.3730     ?     22.1023+-1.4629        ?
   singleton-scope                                   64.8886+-2.1527           64.5591+-2.8261        
   sink-function                                     10.0872+-0.7003     ?     10.4530+-0.6297        ? might be 1.0363x slower
   sink-huge-activation                              16.4399+-0.5120     ?     16.5466+-0.7431        ?
   sinkable-new-object-dag                           55.2156+-0.9195           53.9531+-1.8180          might be 1.0234x faster
   sinkable-new-object-taken                         43.7229+-2.3522     ?     44.5783+-1.4770        ? might be 1.0196x slower
   sinkable-new-object                               30.6088+-1.2905           30.2974+-1.7581          might be 1.0103x faster
   slow-array-profile-convergence                     2.4709+-0.1486     ?      2.5106+-0.0856        ? might be 1.0161x slower
   slow-convergence                                   2.3703+-0.0779     ?      2.5733+-0.2804        ? might be 1.0857x slower
   slow-ternaries                                    17.2039+-0.3595     ?     17.8428+-0.6943        ? might be 1.0371x slower
   sorting-benchmark                                 17.7844+-0.5417           17.2147+-0.5698          might be 1.0331x faster
   sparse-conditional                                 1.1694+-0.0464     ?      1.1936+-0.0814        ? might be 1.0208x slower
   splice-to-remove                                  11.8294+-0.2611     ?     12.6182+-0.7353        ? might be 1.0667x slower
   string-char-code-at                               13.5095+-0.5580           13.4676+-0.4817        
   string-concat-object                               2.3062+-0.3523            2.2257+-0.0686          might be 1.0362x faster
   string-concat-pair-object                          2.2621+-0.2072            2.2247+-0.1676          might be 1.0168x faster
   string-concat-pair-simple                         10.1936+-1.1152            9.8425+-0.7879          might be 1.0357x faster
   string-concat-simple                               9.6889+-0.4141            9.5481+-0.4937          might be 1.0147x faster
   string-cons-repeat                                 6.9606+-0.5722            6.7498+-0.5440          might be 1.0312x faster
   string-cons-tower                                  7.0413+-0.5018            6.6422+-0.1573          might be 1.0601x faster
   string-equality                                   16.6834+-0.6328           16.3899+-0.5369          might be 1.0179x faster
   string-get-by-val-big-char                         6.5370+-0.1401     ?      6.6460+-0.2875        ? might be 1.0167x slower
   string-get-by-val-out-of-bounds-insane             3.1190+-0.0918            3.1025+-0.1195        
   string-get-by-val-out-of-bounds                    3.9538+-0.1674     ?      4.0521+-0.2490        ? might be 1.0249x slower
   string-get-by-val                                  2.7898+-0.0781     ?      2.8165+-0.0416        ?
   string-hash                                        1.9460+-0.2163     ?      2.0063+-0.3249        ? might be 1.0310x slower
   string-long-ident-equality                        13.5823+-0.2945     ?     13.9297+-0.3259        ? might be 1.0256x slower
   string-out-of-bounds                              10.9208+-1.6288           10.1681+-0.4432          might be 1.0740x faster
   string-repeat-arith                               26.7042+-0.5691     ?     27.6851+-1.2294        ? might be 1.0367x slower
   string-sub                                        57.4428+-2.0544           56.4015+-1.4757          might be 1.0185x faster
   string-test                                        2.8979+-0.3048            2.8677+-0.0659          might be 1.0106x faster
   string-var-equality                               25.7244+-1.0075     ?     27.4883+-1.0510        ? might be 1.0686x slower
   structure-hoist-over-transitions                   2.3739+-0.2678            2.2733+-0.0739          might be 1.0443x faster
   substring-concat-weird                            35.4907+-0.9397     ?     35.9782+-1.1048        ? might be 1.0137x slower
   substring-concat                                  39.5767+-0.4379     ?     41.3360+-1.8453        ? might be 1.0445x slower
   substring                                         44.3896+-1.1623     ?     45.3562+-1.5479        ? might be 1.0218x slower
   switch-char-constant                               2.6786+-0.0872     ?      2.6955+-0.0453        ?
   switch-char                                        5.6897+-0.8430     ?      6.2449+-0.7555        ? might be 1.0976x slower
   switch-constant                                    8.2615+-0.6175     ?      9.3535+-1.5654        ? might be 1.1322x slower
   switch-string-basic-big-var                       14.4728+-0.4816     !     16.2736+-1.2623        ! definitely 1.1244x slower
   switch-string-basic-big                           15.0027+-0.4638     ?     15.2704+-0.4213        ? might be 1.0178x slower
   switch-string-basic-var                           13.6650+-0.3257     !     15.4670+-0.8951        ! definitely 1.1319x slower
   switch-string-basic                               12.6801+-0.3286     ?     14.0801+-2.8104        ? might be 1.1104x slower
   switch-string-big-length-tower-var                18.5501+-1.1404     ?     19.8722+-0.3838        ? might be 1.0713x slower
   switch-string-length-tower-var                    13.3670+-0.4494     ?     13.8947+-0.2923        ? might be 1.0395x slower
   switch-string-length-tower                        11.7568+-0.3351           11.7160+-0.3285        
   switch-string-short                               11.4887+-0.2341     ?     11.6582+-0.1717        ? might be 1.0148x slower
   switch                                            11.3312+-0.5178     ?     11.3649+-0.4613        ?
   tear-off-arguments-simple                          2.9987+-0.1132     ?      3.3155+-0.6137        ? might be 1.1056x slower
   tear-off-arguments                                 4.7560+-1.7917            4.1872+-0.2821          might be 1.1358x faster
   temporal-structure                                11.9780+-0.4517           11.7229+-0.2228          might be 1.0218x faster
   to-int32-boolean                                  12.5300+-0.2005     ?     12.7318+-0.2852        ? might be 1.0161x slower
   try-catch-get-by-val-cloned-arguments              8.9381+-0.3116     ?      9.1713+-0.1575        ? might be 1.0261x slower
   try-catch-get-by-val-direct-arguments              2.1664+-0.0708     ?      2.2987+-0.3635        ? might be 1.0611x slower
   try-catch-get-by-val-scoped-arguments              4.6540+-0.3343     ?      4.7850+-0.3400        ? might be 1.0282x slower
   typed-array-get-set-by-val-profiling              27.7601+-1.1876     ?     27.8776+-0.9896        ?
   undefined-property-access                        224.0288+-7.2697          219.3663+-3.0073          might be 1.0213x faster
   undefined-test                                     3.2122+-0.5520            3.0397+-0.2599          might be 1.0567x faster
   unprofiled-licm                                    9.8947+-0.4975            9.4136+-0.1062          might be 1.0511x faster
   v8-raytrace-with-empty-try-catch                  24.1227+-0.5679     ?     24.6723+-0.6499        ? might be 1.0228x slower
   v8-raytrace-with-try-catch                        63.5427+-0.9339           61.4447+-1.3039          might be 1.0341x faster
   varargs-call                                      13.1496+-0.2166     ?     13.3098+-0.6952        ? might be 1.0122x slower
   varargs-construct-inline                          22.2813+-0.7684     ?     23.0854+-1.0940        ? might be 1.0361x slower
   varargs-construct                                 22.1055+-1.2991           20.5477+-0.4616          might be 1.0758x faster
   varargs-inline                                     8.8925+-0.2107     ?      8.9015+-0.3577        ?
   varargs-strict-mode                                9.9533+-0.1941     ?     10.0381+-0.1355        ?
   varargs                                           10.2448+-0.7531           10.0682+-0.3935          might be 1.0175x faster
   weird-inlining-const-prop                          2.2250+-0.1494     ?      2.3942+-0.3290        ? might be 1.0760x slower

   <geometric>                                        8.1120+-0.0211                ERROR             

                                                        TipOfTree                CopyBarrier                                    
AsmBench:
   bigfib.cpp                                       459.0153+-10.2528    ?    460.5957+-16.2095       ?
   cray.c                                           399.0892+-5.0726          394.5936+-6.9938          might be 1.0114x faster
   dry.c                                            424.7751+-10.1913    ?    431.6040+-6.5051        ? might be 1.0161x slower
   FloatMM.c                                        694.0030+-3.9148     ?    696.0337+-6.3042        ?
   gcc-loops.cpp                                   3488.9203+-48.9453        3474.9813+-17.3350       
   n-body.c                                         840.0966+-12.5275    ?    850.6762+-19.0963       ? might be 1.0126x slower
   Quicksort.c                                      416.2937+-6.6109          409.9180+-6.3406          might be 1.0156x faster
   stepanov_container.cpp                          3638.8120+-185.5335       3548.0878+-111.7123        might be 1.0256x faster
   Towers.c                                         236.4852+-4.2395     ?    239.5927+-6.6650        ? might be 1.0131x slower

   <geometric>                                      726.7828+-4.3967          726.1412+-4.0736          might be 1.0009x faster

                                                        TipOfTree                CopyBarrier                                    
CompressionBench:
   huffman                                           63.4103+-4.6493           62.3862+-3.1287          might be 1.0164x faster
   arithmetic-simple                                274.6436+-1.9738     ?    281.8087+-14.2624       ? might be 1.0261x slower
   arithmetic-precise                               247.6661+-4.6923     ?    252.2318+-4.1505        ? might be 1.0184x slower
   arithmetic-complex-precise                       246.7713+-2.1247     ?    255.1078+-7.3175        ? might be 1.0338x slower
   arithmetic-precise-order-0                       288.3261+-5.5442          285.8680+-3.5287        
   arithmetic-precise-order-1                       306.6312+-1.8643     ?    308.9940+-2.4984        ?
   arithmetic-precise-order-2                       361.0420+-14.9012    ?    361.4166+-13.3314       ?
   arithmetic-simple-order-1                        324.5730+-4.0259     ?    326.0039+-4.6573        ?
   arithmetic-simple-order-2                        381.0219+-8.2712          378.9940+-2.5014        
   lz-string                                        316.1736+-8.5894     ?    317.0848+-5.5384        ?

   <geometric>                                      258.3139+-1.6448     ?    259.9582+-1.3443        ? might be 1.0064x slower

                                                        TipOfTree                CopyBarrier                                    
Geomean of preferred means:
   <scaled-result>                                   50.5998+-0.2791                ERROR
Comment 14 Filip Pizlo 2015-10-08 13:17:47 PDT
Created attachment 262708 [details]
so far
Comment 15 Filip Pizlo 2015-10-08 14:05:52 PDT
Latest performance numbers, showing the effect of the copy barrier optimization phase.

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

VMs tested:
"TipOfTree" at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r190682)
"CopyBarrier" at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r190682)
    export JSC_enableCopyBarrierOptimization=false
"CopyBarrierOpt" at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r190682)
    export JSC_enableCopyBarrierOptimization=true

Collected 7 samples per benchmark/VM, with 7 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                CopyBarrier              CopyBarrierOpt        CopyBarrierOpt v. TipOfTree
SunSpider:
   3d-cube                                    4.5721+-0.1898     ?      4.6021+-0.0796     ?      4.7252+-0.1747        ? might be 1.0335x slower
   3d-morph                                   5.3564+-0.1712            5.2216+-0.0289     ?      5.3242+-0.1205        
   3d-raytrace                                5.1527+-0.1191     ?      5.5182+-0.3596     ?      5.8713+-1.2334        ? might be 1.1395x slower
   access-binary-trees                        2.1350+-0.0853     ?      2.2193+-0.1832            2.1990+-0.0490        ? might be 1.0300x slower
   access-fannkuch                            5.6855+-0.4303            5.6654+-0.0389            5.6428+-0.2465        
   access-nbody                               2.5809+-0.1795            2.4614+-0.0094     ?      2.6533+-0.3544        ? might be 1.0280x slower
   access-nsieve                              3.3419+-0.0528     ?      3.4241+-0.1110            3.3756+-0.0522        ? might be 1.0101x slower
   bitops-3bit-bits-in-byte                   1.2219+-0.0906            1.1496+-0.0240            1.1424+-0.0088          might be 1.0696x faster
   bitops-bits-in-byte                        3.2175+-0.0318            3.1651+-0.0353     ?      3.2522+-0.1197        ? might be 1.0108x slower
   bitops-bitwise-and                         2.0001+-0.0636            1.9570+-0.0217     ?      1.9667+-0.0318          might be 1.0170x faster
   bitops-nsieve-bits                         2.9967+-0.0403            2.9883+-0.0482     ?      3.0973+-0.2347        ? might be 1.0336x slower
   controlflow-recursive                      2.4226+-0.1548            2.4148+-0.1507     ?      2.5106+-0.2389        ? might be 1.0363x slower
   crypto-aes                                 3.9853+-0.2508     ?      4.6087+-1.0312            3.9963+-0.0861        ?
   crypto-md5                                 2.5252+-0.1221            2.5084+-0.0577            2.4888+-0.0195          might be 1.0146x faster
   crypto-sha1                                2.4983+-0.2548            2.3832+-0.1266     ?      2.4609+-0.1064          might be 1.0152x faster
   date-format-tofte                          6.4712+-0.1451     ?      6.6422+-0.2300     ?      6.6562+-0.1144        ? might be 1.0286x slower
   date-format-xparb                          4.7646+-0.3031            4.6238+-0.2491            4.5939+-0.1951          might be 1.0372x faster
   math-cordic                                2.9044+-0.0798            2.8462+-0.0309     ?      2.8783+-0.1676        
   math-partial-sums                          4.8412+-0.3354            4.7773+-0.1840            4.7106+-0.0494          might be 1.0277x faster
   math-spectral-norm                         1.9065+-0.0346     ?      1.9287+-0.0594     ?      1.9986+-0.1588        ? might be 1.0483x slower
   regexp-dna                                 6.1029+-0.2218            5.8811+-0.0540     ?      6.0347+-0.1214          might be 1.0113x faster
   string-base64                              4.3992+-0.3132            4.2300+-0.1044            4.2033+-0.0966          might be 1.0466x faster
   string-fasta                               5.8228+-0.0580     ?      5.8901+-0.0695     ?      6.0822+-0.2053        ? might be 1.0446x slower
   string-tagcloud                            8.1520+-0.3861     ?      8.1737+-0.5061            7.8560+-0.0591          might be 1.0377x faster
   string-unpack-code                        17.8078+-0.4178     ?     18.4489+-0.3517           18.1601+-0.6132        ? might be 1.0198x slower
   string-validate-input                      4.3659+-0.0407     ?      4.3680+-0.0786     ?      4.5140+-0.0737        ! definitely 1.0339x slower

   <arithmetic>                               4.5089+-0.0305     ?      4.5422+-0.0494     ?      4.5536+-0.0932        ? might be 1.0099x slower

                                                TipOfTree                CopyBarrier              CopyBarrierOpt        CopyBarrierOpt v. TipOfTree
Octane:
   encrypt                                   0.16521+-0.00185          0.16234+-0.00319    ?     0.16931+-0.00833       ? might be 1.0248x slower
   decrypt                                   2.88344+-0.06234    !     2.98891+-0.00480    ?     2.99204+-0.01106       ! definitely 1.0377x slower
   deltablue                        x2       0.13644+-0.00366    ?     0.14246+-0.00307          0.13944+-0.00339       ? might be 1.0219x slower
   earley                                    0.30293+-0.00376    ?     0.30763+-0.00666    ?     0.31010+-0.00478       ? might be 1.0237x slower
   boyer                                     4.31132+-0.07610    ?     4.32429+-0.02416          4.32208+-0.02500       ?
   navier-stokes                    x2       4.80795+-0.01294    ?     4.83122+-0.04205          4.80958+-0.01626       ?
   raytrace                         x2       0.86060+-0.01900    ?     0.86200+-0.00611          0.85726+-0.00284       
   richards                         x2       0.08764+-0.00061    ?     0.08913+-0.00110    ?     0.09067+-0.00167       ! definitely 1.0345x slower
   splay                            x2       0.34653+-0.00568    ?     0.34695+-0.00237    ?     0.34771+-0.00403       ?
   regexp                           x2      24.27927+-0.17910    ?    24.33368+-0.44329    ?    24.39920+-0.22915       ?
   pdfjs                            x2      36.72067+-0.27012    ?    36.83530+-0.51404         36.74419+-0.27888       ?
   mandreel                         x2      42.52937+-0.28322    ?    42.69942+-0.38495    ?    42.88097+-0.55514       ?
   gbemu                            x2      32.33045+-3.18465    ?    33.05323+-0.41560    ?    34.68046+-2.66312       ? might be 1.0727x slower
   closure                                   0.57172+-0.00246    ?     0.57713+-0.00321          0.57506+-0.00465       ?
   jquery                                    7.33717+-0.16750          7.26847+-0.03362    ?     7.27272+-0.03504       
   box2d                            x2       9.10412+-0.10617    !     9.30991+-0.09120    ?     9.35421+-0.10469       ! definitely 1.0275x slower
   zlib                             x2     385.08296+-13.10943   ?   387.37541+-4.07915        385.13042+-12.43483      ?
   typescript                       x2     658.71606+-8.25185    ?   667.48417+-10.05048   ?   670.49756+-10.65652      ? might be 1.0179x slower

   <geometric>                               5.32258+-0.03704    !     5.38102+-0.01676    ?     5.40406+-0.03677       ! definitely 1.0153x slower

                                                TipOfTree                CopyBarrier              CopyBarrierOpt        CopyBarrierOpt v. TipOfTree
Kraken:
   ai-astar                                  126.113+-0.742      !     135.045+-1.990      ^     130.187+-1.599         ! definitely 1.0323x slower
   audio-beat-detection                       49.906+-0.294      ?      51.054+-1.012             50.326+-0.436         ?
   audio-dft                                  95.675+-1.569             95.354+-1.686      ?      95.846+-1.990         ?
   audio-fft                                  35.014+-0.212      ?      35.486+-0.898             34.956+-0.152         
   audio-oscillator                           57.656+-1.260      ?      58.068+-1.097      ?      58.478+-1.255         ? might be 1.0143x slower
   imaging-darkroom                           59.879+-0.495             59.664+-0.163             59.590+-0.067         
   imaging-desaturate                         47.894+-0.838      ?      47.923+-0.476      ?      48.286+-0.171         ?
   imaging-gaussian-blur                      85.079+-0.772      ?      86.362+-0.617      !      87.855+-0.549         ! definitely 1.0326x slower
   json-parse-financial                       38.421+-0.932      ?      38.477+-2.097             36.878+-0.739           might be 1.0418x faster
   json-stringify-tinderbox                   23.033+-1.795      ?      24.373+-1.583             22.889+-0.515         
   stanford-crypto-aes                        42.364+-1.632      ?      42.466+-1.161      ?      43.806+-1.177         ? might be 1.0340x slower
   stanford-crypto-ccm                        36.149+-1.295      ?      37.032+-1.048      ?      37.707+-1.147         ? might be 1.0431x slower
   stanford-crypto-pbkdf2                     93.964+-0.551      !      95.899+-0.825      ?      96.614+-0.992         ! definitely 1.0282x slower
   stanford-crypto-sha256-iterative           36.489+-1.281      ?      36.923+-0.958             36.432+-0.731         

   <arithmetic>                               59.117+-0.181      !      60.295+-0.206             59.989+-0.203         ! definitely 1.0148x slower

                                                TipOfTree                CopyBarrier              CopyBarrierOpt        CopyBarrierOpt v. TipOfTree
AsmBench:
   bigfib.cpp                               446.5175+-9.1130          445.7001+-5.2597          442.9327+-3.7050        
   cray.c                                   394.6010+-7.1274          391.2347+-1.5308     ?    392.3571+-2.8396        
   dry.c                                    443.2237+-51.7062         423.4469+-6.5492     ?    424.1293+-8.6882          might be 1.0450x faster
   FloatMM.c                                682.0114+-2.3816          680.2244+-1.4557     ?    680.7390+-2.7814        
   gcc-loops.cpp                           3406.6056+-6.7398     ?   3409.2352+-6.7551         3406.1016+-5.7223        
   n-body.c                                 820.9925+-1.8666     ?    821.3039+-1.7482          820.6895+-1.3974        
   Quicksort.c                              401.8433+-5.0803     ?    407.3869+-5.7041          402.8898+-3.1773        ?
   stepanov_container.cpp                  3481.6228+-17.7819    ?   3521.8627+-84.3928        3480.7144+-19.7138       
   Towers.c                                 232.4265+-1.3775     ?    232.5645+-1.1338     ?    232.7243+-0.6798        ?

   <geometric>                              713.8794+-7.6870          711.7949+-3.0812          709.8513+-2.3189          might be 1.0057x faster

                                                TipOfTree                CopyBarrier              CopyBarrierOpt        CopyBarrierOpt v. TipOfTree
Geomean of preferred means:
   <scaled-result>                           31.7227+-0.0675     !     32.0025+-0.0780           31.9934+-0.1861        ! definitely 1.0085x slower
Comment 16 Filip Pizlo 2015-10-08 14:23:31 PDT
Created attachment 262709 [details]
the patch
Comment 17 WebKit Commit Bot 2015-10-08 14:26:46 PDT
Attachment 262709 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGCopyBarrierOptimizationPhase.cpp:99:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.h:819:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2481:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
Total errors found: 3 in 57 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 18 Geoffrey Garen 2015-10-12 13:00:06 PDT
Comment on attachment 262709 [details]
the patch

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

r=me

> Source/JavaScriptCore/ChangeLog:14
> +        copied, what stage of copying its in. Two barrier variants are supported:

its => it's
Comment 19 Filip Pizlo 2015-10-12 14:39:22 PDT
(In reply to comment #18)
> Comment on attachment 262709 [details]
> the patch
> 
> View in context:
> https://bugs.webkit.org/attachment.cgi?id=262709&action=review
> 
> r=me
> 
> > Source/JavaScriptCore/ChangeLog:14
> > +        copied, what stage of copying its in. Two barrier variants are supported:
> 
> its => it's

Fixed!
Comment 20 Filip Pizlo 2015-10-12 15:42:49 PDT
Landed in http://trac.webkit.org/changeset/190896